Menu Reviewing pull requests from the console

Guides

Reviewing pull requests from the console

Start a PR review, triage its findings, compare it with the last review, remember, publish and post.

The console runs the whole loop of a pull request review: start it, read and triage what it found, compare it with the last review, remember what was dismissed, and post it.

1. Start the review

Runs > Run a workflow, then pr-review (a built-in workflow; security-review and the workflows you configure are in the same list). Give the PR (a URL, or a number for the checkout's own repository), the checkout to run in (a clone of the PR's repository, one of the harness's targets), and a profile: any runner and model, a local one through Ollama included (see Local models with Ollama). Optionally pick the depth (tier 0 to 3, or let the review choose from the diff), Deep for every changed file, and the severity that fails the PR. From a terminal: indra run pr-review --input pr=<PR> --input target=<checkout>.

This runs /sh-pr-review <PR> [--tier=N] [--deep] [--fail-on=...] --dry-run as the workflow's one task; open its agent from the workflow run to watch it, approve its tool requests and steer it. Dry run is on by default: the review is written to the run's folder, and nothing is posted until you choose to, below.

2. Triage the findings

The run's page lists its findings (verified.jsonl), most severe first. Change a finding's status to verified, needs-runtime or false positive, with a reason (required for a false positive). indra rewrites that line only, and keeps what it was:

{"id": "F2", "status": "false-positive", "triage": {"from": "verified", "to": "false-positive",
 "reason": "Comments are escaped by the template engine", "at": "...", "by": "console"}}

If the file changed under you (the agent is still writing it), the change is refused rather than applied to the wrong finding.

3. Compare with an earlier review

Compare with another run of the harness. Findings are matched by fingerprint (the one sh-pr-review uses to dedupe across re-pushes) and sorted into New, Fixed, Still open and Changed status. False positives count as closed, so a finding you dismissed in the last review does not show up as new.

4. Remember, publish, post

Next steps on the same page:

API

CallWhat it does
POST /api/pr-review {pr, target, profile, tier, deep, fail_on, dry_run, node}start /sh-pr-review (the same checks as Launch)
GET /api/run/findings?key=a run's findings with their fingerprints
POST /api/run/triage {key, index, fingerprint, status, reason}change one finding's status
GET /api/run/compare?key=&with=new, fixed, still open and changed findings between two runs