Convoys: Parallel Code Review
A review convoy is how Overdeck runs a full code review. Four reviewers each check one concern in parallel, and a review parent combines their findings into one verdict that it posts on the pull request. There is no separate convoy command and no convoy state. A convoy is a set of agents that the review pipeline starts for an issue. Its result is the PR review itself.Why Convoys?
When reviewing code, a single AI agent must context-switch between:- Checking for logic errors
- Looking for security vulnerabilities
- Analyzing performance issues
- Checking the change against the issue’s acceptance criteria
- Shallow reviews: it can’t go deep on everything
- Missed issues: focus on one area, miss others
- Long sequential execution: nothing runs in parallel
- Four focused reviewers run at the same time
- Each one goes deep in its own domain
- The review parent combines their findings and decides the verdict
Quick Start
A review starts automatically when the work agent runspan done. You can
also start or manage one by hand:
How the Review Convoy Works
pan done, pan review request, the dashboard or the PR webhook. The parent
and all four lanes start together against the PR’s current head commit.
Phase 1: Specialized Reviews (Parallel)
Four reviewers run at the same time, each focused on one concern:<issue> is the lowercase issue id, for example agent-pan-123-review-security.
Each reviewer’s model comes from roles.review.sub.<lane>.model, set in the
dashboard’s Roles panel or in ~/.overdeck/config.yaml.
Each reviewer:
- Reviews the PR’s diff independently
- Writes its report to
.pan/review/<runId>/<lane>.mdin the issue’s workspace - Goes deep without worrying about the other concerns
- Runs in parallel, so total time is the slowest reviewer, not the sum
roles/review-security.md,
roles/review-correctness.md, roles/review-performance.md and
roles/review-requirements.md.
Phase 2: Synthesis
The review parent,agent-<issue>-review, waits for the four reports. Then it:
- Reads all four reports
- Removes duplicates: the same issue found by more than one reviewer
- Weighs the findings: severity, code citations, tests and requirement coverage
- Writes
.pan/review/<runId>/synthesis.md - Posts one PR review: approve, or request changes with the findings as PR comments
<!-- overdeck-verdict: APPROVED sha=<head> --> or <!-- overdeck-verdict: CHANGES_REQUESTED sha=<head> -->,
naming the commit it reviewed when that commit is still the head.
See docs/REVIEW-AGENT-ARCHITECTURE.md.
What is Synthesis?
Synthesis combines the findings from the parallel reviewers into a single, prioritized verdict. Without synthesis, after four parallel reviews you get:- Four separate reports to read
- Duplicate findings (the same issue reported differently)
- No prioritization (which to fix first?)
- The work of merging them yourself
- One PR review with one decision
- Deduplicated findings
- Blockers separated from everything else
- Clear action items for the work agent
Review modes
The review mode decides whether a review runs as a convoy. Set it in the dashboard’s Roles settings panel, or withroles.review.mode in
~/.overdeck/config.yaml. It applies to every review.
Review Commands
Review Lifecycle
<workspace>/.overdeck/pipeline.jsonl), and pan show prints the latest
ones. Merge readiness is computed live from the PR’s approvals against its
current head, so a push after an approval leaves the new head unreviewed until
the next review runs.
Monitoring Convoys
Dashboard: Reviewers appear in the issue view next to the work agent they review, with their status, model, cost and verdict. The Pipeline page groups every issue and its agents by phase (Ship, Review, Verifying), with a metric strip across the top (Active issues, Work running, Review queue, Ship, Spend) and a live activity feed on the right. CLI:Use Cases
- Pre-merge quality checks on every PR
- Security audits of sensitive changes
- Performance reviews of hot paths
- Checking a change against its acceptance criteria
Best Practices
When to usefull mode:
- Changes where security, performance and correctness all matter
- You want complete coverage, not a surface-level pass
- The cost of four extra reviewers is worth it
quick is enough:
- Small, focused changes
- Documentation or style-only changes
Troubleshooting
Review stuck with no verdict:review.requested, review.dispatched or review.redispatched, it
is at least 15 minutes old, and no agent-<issue>-review-* reviewer is alive,
the deacon re-dispatches the full review, at most once an hour per issue. If
the parent dies after the lanes finish, the completed reports are still used
to post the PR review.
Review parent fails:
- Check that each lane wrote its report in
.pan/review/<runId>/ - Read the parent’s output in the dashboard or via
GET /api/agents/agent-<issue>-review/output - Run
pan review restart <id>
- Check the lane report for permission or access errors
- Check that the PR has a diff against its base branch
Related Guides
- Terminal backend - Reaching an agent from a shell
- Skills - Subagents and skill system
- Specialists - Long-running specialist agents
- Cloister - AI lifecycle management