Axiom StudioAXIOMSTUDIO
All docs

Code Review with Vera

Vera is VibeFlow's Code Reviewer. She reviews a pull request at an exact revision, records evidence-backed findings, and reports them on the PR. When you allow it, confirmed blockers become repair tickets that a coding agent fixes on the same PR, and a fresh Vera session verifies the fix. Vera never edits code herself.

Pull request review panel showing the Fixes queued state, one of three review rounds used, three unresolved blockers, and the three-step review cycle: Vera review, Coder repairs, Fresh verification

How It Works

Review requested -> Vera reviews the exact revision
  -> blockers become VibeFlow repair tickets
  -> a coding agent fixes them and pushes to the same PR
  -> a fresh Vera session verifies the new revision
  -> fixed findings close; remaining blockers repeat within the round budget

The loop stops when the PR is clean, paused, closed, or out of review rounds.

Reviews run on a review runner: Vera running in the VibeFlow CLI on a machine you control. Each review starts a fresh Vera session in a disposable worktree that is removed when the review ends. Your checkout and your coding agents' working directories are never Vera's workspace.

Before You Start

This guide covers GitHub repositories.

You need:

  • A project with a GitHub repository linked under Settings → Integrations → Source Control through your organization's GitHub App. See GitHub Integration.
  • Enable PR reviews turned on for that repository, in the PR reviews block on the same Source Control page.
  • An online review runner: Vera running in the VibeFlow CLI. See Running Vera in the CLI.

Only project managers (the project owner or an org admin) can change review settings.

Review Settings

SettingWhat it doesDefault
Enable PR reviewsTurns reviews on for this repositoryOff
Review triggerManual (only when requested), Once when ready, or Every updateManual
Maximum review roundsRounds a PR can spend, 1–20. Includes the initial review and each review after the PR head changes3
Skip drafts for automatic reviewAutomatic triggers ignore draft PRsOn
Allow coding agents to fix confirmed blockersLets eligible coding agents claim repair tickets and push fixes to the PROff

Automatic triggers (Once when ready and Every update) and PR comment commands both need your VibeFlow server's webhook automation. Without it, request reviews from the PR's review panel.

PR reviews settings for a linked repository: Enable PR reviews checked, Review trigger Manual, Maximum review rounds 3, Skip drafts for automatic review checked, and Allow coding agents to fix confirmed blockers checked

Requesting a Review

Security: reviews can run code from the pull request. Each review runs the coding CLI with its permission prompts and sandbox turned off, as the user who started Vera, on the runner machine. Vera may read and execute code from the PR to verify findings, including PRs from forks, which are fetched with that user's Git access. Instruction files in the PR, such as CLAUDE.md or AGENTS.md, and test hooks can therefore run with that user's files, Git credentials and VibeFlow CLI config.

On a public repository, or any repository that accepts pull requests from outside contributors, anyone who can comment on a PR can start a review. For those repositories, either leave Enable PR reviews off, or run Vera only on an isolated, disposable runner with no personal credentials and no access to other repositories or secrets.

From VibeFlow

  1. Open the project and go to Pull Requests
  2. Click Review a PR
  3. Choose the Repository and enter the PR number, then click Continue
  4. On the PR's review panel, click Review this PR

Anyone with access to the project can request a review. The request stays queued as Waiting for runner until a runner claims it.

Choose a pull request form on the Pull Requests tab, with the linked repository selected and PR number 1 entered

From a GitHub Comment

Post a top-level comment on the pull request that contains only the command:

CommandEffect
@vibeflow reviewReview the current revision
@vibeflow review alwaysReview the current revision, then review every new push to this PR within the round budget

Anyone who can comment on the linked PR can request a review. No VibeFlow account or personal token is needed, and the commenter's repository permissions are not checked; see the security note above. VibeFlow reacts with 👀 and replies with a link to follow the review. If the current revision has already been reviewed, the reply says so and no round is spent; push a change to get a new review.

Comment commands need the server's webhook automation. They count as manual requests, so they work in Manual mode and on draft PRs. Inline and reply comments are ignored.

Reading a Review

The review panel shows the PR's state, rounds used, unresolved blockers, the review cycle, and the next action.

Review panel while Vera is reviewing: status Reviewing, one of three rounds used, and a Vera Code Reviewer card showing the round, attempt, revision and runner

Findings

Each finding has a severity, a location, and four parts:

  • Trigger: what input or path causes the problem
  • Impact: what goes wrong
  • Evidence: the code that causes it
  • Verification: how Vera confirmed it, for example by executing the code
SeverityMeaning
BlockerMust be fixed before merge. Becomes a VibeFlow repair ticket
AdvisoryWorth fixing, but does not block. Stays a visible finding and does not create a ticket

A finding is Present, Uncertain, Verified fixed, or Dismissed. Project managers can Dismiss finding and later Reopen with evidence.

Findings list on the review panel: a Blocker · Present finding for an off-by-one loop in ledger/report.py line 8 with its Trigger, Impact and linked repair issue, followed by an Advisory · Present finding

Review States

StateMeaning
Not reviewedNo review has been requested for the current revision
DisabledReviews are off for this repository; enable them in repository settings
Waiting for readyAutomatic reviews skip drafts; a project member can still request a draft review
Review requiredThe current base and head have no complete, blocker-free review
Waiting for runnerQueued until an eligible runner claims it
ReviewingVera is checking the exact base and head shown on the panel
Findings to addressUnresolved findings remain; a fresh review must verify any fixes
Fixes queuedRepair tickets are waiting for a coding session on the PR branch
FixingA coding agent is repairing the linked issues
Verifying fixesA fresh Vera session is checking the repair push
ReviewedThe current revision is clean
Review limit reachedAll review rounds are used
PausedReviews and automatic repairs are paused for this PR
Needs attentionThe review has stopped; check the remaining rounds and findings before continuing
ClosedThe pull request is closed; review and repair work has stopped
Review could not completeThe review failed; the panel shows the reason
Runner upgrade requiredUpgrade the VibeFlow CLI and restart Vera

Controls

ControlEffect
Review current revision / Re-run reviewStarts a review. A re-run of an already reviewed revision spends a round
PauseStops further reviews and repairs on this PR
ContinueResumes a paused or exhausted PR. Optionally adds Additional review rounds (0–20) and requires a Reason
Retry PR updateRepublishes the GitHub summary and check without running another review

Pause, Continue, dismissing and reopening findings, and Retry PR update require project manager access.

What Vera Posts on GitHub

  • A summary comment headed VibeFlow review: <state>, kept up to date. It lists the reviewed head and base, rounds used, a progress checklist, the summary, and every finding with its Trigger, Impact, Evidence, Verification and linked VibeFlow issue.
  • A short comment per later round, for example Re-reviewed at abc1234: clean.
  • A check run named VibeFlow review / <base branch>. It succeeds only when the current revision is clean, fails while blockers remain, and asks for action when the review is paused, disabled, closed, or needs a human.

To make reviews a merge gate, add VibeFlow review / <base branch> as a required status check in your branch protection rules, with the VibeFlow GitHub App as its source.

VibeFlow review summary comment on the GitHub pull request in the Reviewed state, with the reviewed head and base, two of three rounds used, the completed progress checklist, the summary and the first verified-fixed finding

Round comment reading Re-reviewed at 522fd64: clean, 0 unresolved blockers, above the merge box showing the VibeFlow review / main check passed

Self-Healing Fixes

Every unresolved blocker becomes a VibeFlow issue targeting the PR branch, whether or not automatic fixes are on. With Allow coding agents to fix confirmed blockers off, the tickets tell a human to fix them.

Issues list showing the three repair tickets created from Vera's blockers, all Done after the fix was verified, each targeting the demo/vera-review branch

With automatic fixes on:

  1. A Developer, Architect, or Principal Engineer session on the PR's head branch claims the repair batch
  2. The agent fixes all blockers in the batch and pushes one update to the same PR. VibeFlow does not open a new PR
  3. A fresh Vera session reviews the updated PR. This spends a round
  4. Findings close only when that fresh review verifies them. Completing a ticket does not close a finding by itself
  5. Remaining blockers repeat the loop until the PR is clean or the round budget runs out

Review panel in the Fixing state while the coding agent repairs the linked issues, with the next action to wait for its push

Review panel in the Verifying fixes state: two of three rounds used and a fresh Vera session reviewing the pushed revision

Review panel in the Reviewed state: two of three rounds used, zero unresolved blockers, and a reminder that a clean review alone does not enforce a merge gate

Findings after verification: the off-by-one blocker is now Blocker · Verified fixed with its repair issue, while an advisory remains Present

Limits:

  • The PR must not be a draft, and its head repository must be linked to the project
  • A review round must remain to verify the fix
  • A coding agent has 30 minutes to complete a repair and at most 3 attempts per batch
  • More than 100 unresolved blockers stop the loop for human triage

Vera never claims a repair batch. Any project member's Developer, Architect or Principal Engineer session on the PR's head branch and repository can; sessions on another branch or repository cannot. Turning on automatic fixes does not start coding sessions; start one on the PR branch yourself.

Running Vera in the CLI

Reviews run on your machine through the VibeFlow CLI. Run Vera on a dedicated machine or container account rather than your personal workstation, because each review runs with full permissions as that account (see the security note). Requirements: macOS or Linux, tmux 3.2 or later, and a supported coding CLI (Claude Code, Codex, Copilot, Cursor, Gemini, Kiro or Qwen) installed and signed in.

  1. In the CLI, press n to start a new session
  2. Choose the repository checkout, VibeFlow as the session type, and your project
  3. In the team picker, select Vera · Code Reviewer under Review & Support. Add a coding persona, such as Developer, to handle repairs
  4. Choose providers, routing, branch and worktree, then confirm

VibeFlow CLI team picker with Developer selected as the code agent and Vera · Code Reviewer checked under Review & Support

Vera runs in her own tmux session and listens for review requests until you delete the session. No model runs while she is idle. Each review starts a fresh harness session in a disposable worktree.

Vera's session: the review harness on the left reporting Result: clean and returning to listening, and the Reviews history on the right listing PR #1 as Clean, round 2, 6 findings

The right pane, Reviews, lists recent reviews with outcome (Clean, Changes requested or Needs human review), round, finding count and revision. Use ↑/↓ to browse and Enter to open a review. Ctrl-C stops Vera.

Review detail popup in the CLI for the first round: PR #1, outcome Changes requested, one of three rounds used, the summary, and the first findings with trigger, impact, evidence and verification

All Vera sessions in one CLI root share a limit on reviews running at once. Set review_concurrency in the CLI config to change it (default 2).

Vera in Team Chats

Vera also appears in the project's Team Chats as a read-only card with her status, repository, runner and owner, plus a Reviewed PRs list. She has no chat; manage reviews from Pull Requests.

Team Chats with the Vera · Code Reviewer card selected: status Listening, the repository, local runner and owner, and a Reviewed PRs list showing PR #1 as Clean at round 2 of 3

Runner Selection

Under Project review runners on the Source Control page, choose Automatic to let any eligible runner claim reviews, or Preferred to use a specific runner while it is online. GitHub reviews can use runners started by other project members. Requests stay queued while no eligible runner is online.

Headless Runners

On a machine without tmux, run a detached runner instead. The same security note applies: use a dedicated machine or account for the runner. Copy the review-watch command shown for the repository on the Source Control page, then add --repo with the path to your checkout and --background:

vibeflow review-watch --project <project-id> --repository-link <link-id> --git-provider github --repo <path-to-checkout> --background

Use vibeflow review-watch --status to list background runners and --stop <ID> to stop one.

Troubleshooting

SymptomFix
Review stays Waiting for runnerStart Vera in the CLI, or check Project review runners for an online runner
Runner upgrade requiredUpgrade the VibeFlow CLI and restart Vera
Fixes queued never moves to FixingStart a Developer, Architect or Principal Engineer session on the PR's head branch, and check that automatic fixes are on and a round remains
@vibeflow review gets no replyThe comment was not recognised as a command (it must be top-level and contain only the command), or the server's webhook automation is off. Request the review from the PR's review panel
Reply says the repository review policy is disabledTurn on Enable PR reviews for the repository, then request a review again
Review limit reachedUse Continue with additional rounds and a reason