PR Review Agent

AI-assisted pull request review with human-in-the-loop approval. Paste a PR URL, watch multiple specialized agents review it in parallel, then step through findings before anything reaches your team. Gets smarter with every review it runs — past reviews and team standards are injected as context automatically.


How It Works

🌐 Web
Paste PR URL → agents run → curate findings in approval UI → submit to GitHub.
⌨️ CLI
Same harness, same memory — an alternative interface for local workflows.
Fetching PR #123 · branch: feat/ENG-456-add-payment-retry
Resolved ticket: ENG-456 — Add retry logic for failed payments
Reading 12 changed files ...
Review Draft
BLOCKING — PaymentService.ts:88
Retry loop has no backoff — will hammer API on failure
SUGGESTION — auth/middleware.ts:44
Token expiry not checked before use
Web: ☑ findings, edit inline → Submit Review → GitHub PR
CLI: [A]ccept [R]eject [E]dit → reviews/<ticket>_<date>.md

For each changed file: correctness · ticket alignment · security · performance · test coverage · documentation. Criteria live in user-configured memories — stack rules added once, applied to every future review.

Nothing reaches the PR author until you've approved it.

Observability

Signals designed for a review tool, not a generic agent harness.

Group Key signals
Coverage files_read/files_in_pr · lines_read/lines_in_pr · external_context_calls
Cost $/review · tokens_from_context vs tokens_from_diff
Quality findings_accepted/total · findings_edited · ticket_resolved
Harvested free from the approval step — no labeling required.
Health turns_used/turns_max · tool_errors

Instrumented with OpenTelemetry — export to any compatible backend.

Architecture

Memory Store
Code Index (v2)
Review History
Memories
Context Agent full loop · tool calls · EnrichedContext
Style
Conventions
Correctness
Security
Performance
single-shot structured output · parallel · DomainResult[]
Coordinator dedup · calibrate · sort · PRReview (Zod-validated)
🌐 Approval UI → Supabase → GitHub PR
⌨️ Approval Loop → reviews/ → GitHub PR
⚡ quick --quick skips Context Agent, runs Correctness + Security only, surfaces BLOCKING findings in ~30 seconds.

Loop: Context Agent runs a full tool-call loop (build context → call model → run tool → append → repeat). Domain agents are single-shot structured output — no loop, predictable cost.

Tools: fetch_pr_diff · fetch_pr_files · fetch_ticket · search_past_reviews · search_codebase · store_review · create_memory · post_review_comment

Guardrails: GitHub and ticket tracker are read-only. post_review_comment is the only write, gated behind the approval step. File citation check, secret pattern scan, and scope-creep budget enforced on every run.

Pluggable by Design

Layer Default Swap via
LLM Anthropic Claude LLM_PROVIDER=openai
Git host GitHub GitLab (planned)
Ticket tracker Linear Jira, GitHub Issues (planned)
Memory SQLite (CLI) · Supabase (web) MEMORY_PROVIDER env var
Hosting Railway (web) · local Node (CLI) Any Node 20 host

TypeScript up and down the stack. No stack assumptions in the harness core. MVP ships with GitHub + Linear. Works for any team, any repo.