---
title: "overlane pr approve"
description: "Approve a routed pull request as an independent agent with evidence, or as a person"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.overlane.app/llms.txt
> Use this file to discover all available pages before exploring further.

# overlane pr approve

{/* Generated by apps/docs/scripts/generate.mjs (CLI pages from the command registry in packages/cli). Do not edit; run `pnpm --filter @overlane/docs gen`. */}

Records an approval for the head you name. An agent's approval needs --evidence (what it checked) and --reason, and is refused when the approver is the author or shares the author's token lineage, run or lease. A person's approval needs neither. The approver lane accepts only the configured approver (a person on the project's list or holding an approver role). Standard and approver lanes wait for the review run. A decision model's label is never an approval. An approval is for one head: after a push, route again and approve the new head.

## Usage

```sh
overlane pr approve --number N [--head REF] [--repo OWNER/NAME] [--evidence TEXT...] [--reason TEXT] [--dry-run]
```

## Flags

| Flag | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `--number` | string | yes |  | The pull request number |
| `--head` | string | no |  | The head commit being approved (default HEAD) |
| `--repo` | string | no |  | The repository name (default: the origin remote) |
| `--evidence` | string (repeatable) | no |  | What you checked; repeat for more (required for an agent) |
| `--reason` | string | no |  | Why you approve (required for an agent) |
| `--dry-run` | boolean | no |  | Print the requests and file changes this command would make, then stop. Needs no credentials. |

## Examples

```sh
overlane pr approve --number 7 --evidence "read the diff" --evidence "ran the tests" --reason "inside the task scope"
```

## Behavior

- Effect: `write` (changes local or hosted state).
- Needs credentials: yes. Uses the network: yes.
- Supports `--dry-run`: yes. Accepts `--force`: no.
- Machine-readable description: `overlane schema pr approve`.

## Result

With `--json` (the default when stdout is not a terminal) the command prints this JSON Schema's shape on stdout.

```json
{
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "tenantId": {
          "type": "string"
        },
        "projectId": {
          "type": "string"
        },
        "approvalId": {
          "type": "string"
        },
        "replay": {
          "type": "boolean"
        },
        "via": {
          "type": "string"
        },
        "route": {
          "type": "object",
          "properties": {
            "tenantId": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]*$",
              "description": "tenant identifier"
            },
            "projectId": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]*$",
              "description": "project identifier"
            },
            "repository": {
              "type": "string",
              "minLength": 1
            },
            "number": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 9007199254740991
            },
            "headSha": {
              "type": "string",
              "minLength": 1
            },
            "title": {
              "type": "string"
            },
            "author": {
              "type": "string"
            },
            "taskId": {
              "type": [
                "string",
                "null"
              ]
            },
            "branch": {
              "type": [
                "string",
                "null"
              ]
            },
            "baseRef": {
              "type": [
                "string",
                "null"
              ]
            },
            "route": {
              "type": "object",
              "properties": {
                "lane": {
                  "type": "string",
                  "enum": [
                    "blocked",
                    "fast",
                    "standard",
                    "approver"
                  ]
                },
                "risk": {
                  "type": "string",
                  "enum": [
                    "low",
                    "medium",
                    "high"
                  ]
                },
                "deterministic": {
                  "type": "object",
                  "properties": {
                    "level": {
                      "type": "string",
                      "enum": [
                        "low",
                        "medium",
                        "high"
                      ]
                    },
                    "linesChanged": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "filesChanged": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "sensitive": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "path": {
                            "type": "string"
                          },
                          "category": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "path",
                          "category"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "kind": {
                      "type": "string",
                      "enum": [
                        "docs",
                        "tests",
                        "code",
                        "mixed",
                        "empty"
                      ]
                    },
                    "signals": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "code": {
                            "type": "string",
                            "minLength": 1
                          },
                          "message": {
                            "type": "string",
                            "minLength": 1
                          }
                        },
                        "required": [
                          "code",
                          "message"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "level",
                    "linesChanged",
                    "filesChanged",
                    "sensitive",
                    "kind",
                    "signals"
                  ],
                  "additionalProperties": false
                },
                "blockers": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "message": {
                        "type": "string",
                        "minLength": 1
                      },
                      "nextCommand": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "code",
                      "message",
                      "nextCommand"
                    ],
                    "additionalProperties": false
                  }
                },
                "model": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string",
                      "enum": [
                        "off",
                        "skipped",
                        "undecided",
                        "failed",
                        "used"
                      ]
                    },
                    "level": {
                      "anyOf": [
                        {
                          "type": "string",
                          "enum": [
                            "low",
                            "medium",
                            "high"
                          ]
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "raised": {
                      "type": "boolean"
                    },
                    "note": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "status",
                    "level",
                    "raised",
                    "note"
                  ],
                  "additionalProperties": false
                },
                "approval": {
                  "type": "object",
                  "properties": {
                    "requirement": {
                      "type": "string",
                      "enum": [
                        "none",
                        "independent",
                        "approver"
                      ]
                    },
                    "reviewRequired": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "requirement",
                    "reviewRequired"
                  ],
                  "additionalProperties": false
                },
                "reasons": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "nextCommand": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "modelEligible": {
                  "type": "boolean"
                }
              },
              "required": [
                "lane",
                "risk",
                "deterministic",
                "blockers",
                "model",
                "approval",
                "reasons",
                "nextCommand",
                "modelEligible"
              ],
              "additionalProperties": false
            },
            "checks": {
              "type": "object",
              "properties": {
                "ci": {
                  "default": "missing",
                  "type": "string",
                  "enum": [
                    "passed",
                    "failed",
                    "pending",
                    "missing"
                  ]
                },
                "secretScan": {
                  "default": "missing",
                  "type": "string",
                  "enum": [
                    "passed",
                    "failed",
                    "pending",
                    "missing"
                  ]
                },
                "guardrails": {
                  "default": "missing",
                  "type": "string",
                  "enum": [
                    "passed",
                    "failed",
                    "pending",
                    "missing"
                  ]
                },
                "conflict": {
                  "default": "missing",
                  "type": "string",
                  "enum": [
                    "passed",
                    "failed",
                    "pending",
                    "missing"
                  ]
                },
                "criticalFindings": {
                  "default": 0,
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "reviewDone": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "ci",
                "secretScan",
                "guardrails",
                "conflict",
                "criticalFindings",
                "reviewDone"
              ],
              "additionalProperties": false
            },
            "approvals": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "source": {
                    "type": "string",
                    "enum": [
                      "agent",
                      "person",
                      "model"
                    ]
                  },
                  "approver": {
                    "type": "string"
                  },
                  "via": {
                    "type": "string"
                  },
                  "at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "source",
                  "approver",
                  "via",
                  "at"
                ],
                "additionalProperties": false
              }
            },
            "approved": {
              "type": "boolean"
            },
            "routedAt": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          },
          "required": [
            "tenantId",
            "projectId",
            "repository",
            "number",
            "headSha",
            "title",
            "author",
            "taskId",
            "branch",
            "baseRef",
            "route",
            "checks",
            "approvals",
            "approved",
            "routedAt"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "tenantId",
        "projectId",
        "approvalId",
        "replay",
        "via",
        "route"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "dryRun": {
          "type": "boolean",
          "const": true
        },
        "service": {
          "type": "string"
        },
        "requests": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "method": {
                "type": "string"
              },
              "path": {
                "type": "string"
              },
              "body": {},
              "note": {
                "type": "string"
              }
            },
            "required": [
              "method",
              "path"
            ],
            "additionalProperties": false
          }
        },
        "commands": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "writes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "path": {
                "type": "string"
              },
              "action": {
                "type": "string",
                "enum": [
                  "write",
                  "append",
                  "delete"
                ]
              },
              "description": {
                "type": "string"
              }
            },
            "required": [
              "path",
              "action",
              "description"
            ],
            "additionalProperties": false
          }
        },
        "notes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "dryRun",
        "requests",
        "commands",
        "writes",
        "notes"
      ],
      "additionalProperties": false
    }
  ]
}
```

See [exit codes](/cli/#exit-codes) for the status the process returns.

Source: https://docs.overlane.app/cli/pr-approve/index.mdx
