Back to inline

A review you can argue with

Most tools summarize a diff. inline reads the code around it, forms a position, then throws out anything it cannot support from what it read. What is left goes on the pull request, one comment per defect, on the line that causes it.

Two tiers, so
cost tracks risk

Haiku triages every pull request into substantive, trivial, or skipped. Only substantive work reaches Opus and its agentic read, grep and trace loop. A dependency bump costs a fraction of a cent; a rewrite of the payment path gets the full pass.

Reviewsworker live

Every pull request the agent has processed, newest first.

Search title, author, or PR number…
AllSubstantiveTrivialSkipped
Pull requestVerdictFindingsCostWhen
acme/payments-api#4127
Add idempotency keys to the charge endpoint
by priya · nextjs · Opus 5
substantiveHigh risk
4$0.3122m ago
acme/payments-api#4126
Bump stripe SDK to the current major
by dependabot · nextjs · Haiku 4.5
trivial
0$0.0029m ago
acme/ledger#881
Session state machine + per-tenant rate limiter
by tomas · dotnet · Opus 5
substantiveMed risk
2$0.13424m ago
acme/mobile#2310
Retry image uploads on transient 5xx
by jules · expo · Opus 5
substantive
1$0.0981h ago
acme/ledger#879
Document-access audit log
by priya · dotnet · Opus 5
substantive
6$0.6613h ago
acme/web#5502
Fix dimmed rows that never reset after filtering
by karri · nextjs · Opus 5
substantive
2$0.1474h ago
acme/web#5501
Update the onboarding copy
by sam · nextjs · Haiku 4.5
skipped
0$0.0015h ago
acme/etl#640
Backfill tenant ids on historical charge rows
by tomas · python · Opus 5
substantiveHigh risk
3$0.2216h ago
acme/mobile#2309
Cache the session token across cold starts
by jules · expo · Opus 5
substantive
1$0.0768h ago

Every finding
carries its evidence

Severity, category, file and line, and a confidence score. Cost is broken down per model and per role, so you can see exactly what the review spent and where. Suppressed findings keep their reason instead of disappearing.

acme/payments-api#4127 WalkthroughView PR
substantiveby priya · nextjs · opus 5 · 2m ago
Cost

$0.312

Input tokens

88,402

Cached reads

61,180

Output tokens

9,744

Duration

1m 47s

Summary

This PR adds idempotency keys to the charge endpoint and a replay cache in front of it. The data model is right, but the key is persisted after the charge rather than before it, so concurrent retries can double charge; the replay cache is also keyed without the tenant id, which lets one tenant read another tenant's cached response.

highconcurrencysrc/charges.ts:118fixedconf 94%

Idempotency key is written after the charge, not before

highsecuritysrc/replay-cache.ts:41fixedconf 91%

Replay cache key omits the tenant id (IDOR)

mediumcorrectnesssrc/charges.ts:64conf 78%

Retry budget is never reset between attempts

And it checks
its own work

Where a claim is testable, the sandbox tests it before the comment is posted. A finding that the run contradicts never reaches your team.

Evidence collectedacme/payments-api#4127 · 8f4c1ab
214 passed 1 failed 96s compute 74.2s
  1. Install dependencies
    npm ci
  2. Type check
    npx tsc --noEmit
  3. Existing suite
    npx vitest run
  4. Authored tests
    npx vitest run charges.spec.ts
  5. Browser flow
    npx playwright test checkout
$ npx vitest run charges.spec.ts
 
✓ charges > refuses a replayed key 12ms
✓ charges > records the key before charging 9ms
✗ charges > two concurrent retries charge once
 
AssertionError: expected 2 to be 1
→ stripe.charge called twice for key idem_9f
at charges.spec.ts:41:5
 
Tests 1 failed | 214 passed (215)

Included

Confidence floorbelow it, a finding is stored, not posted
Severity thresholdyou decide what is worth interrupting a review for
Dedup fingerprintsthe same defect appears once
Comment capa large PR does not turn into a wall of comments
Incremental passesnew commits are reviewed against the whole PR on a cadence
Linters folded insemgrep, gitleaks and eslint, triaged to the same bar

Put it on one repository

Connect GitHub, enable a repo, and the next pull request opened gets a review.