Pull request reviewer

Every team that switches on an automated reviewer learns the same lesson in week one: the problem is not finding things to say, it is saying nothing when there is nothing worth saying. A reviewer that comments on every PR gets muted like every linter before it.

The job on one screen

Runs whenA pull request is opened or updated.
ReadsThe diff, the files it touches, the test results, and the project conventions.
DecidesWhich findings are real defects, and which are opinions it should keep to itself.
ProducesInline comments with a reason and a suggested fix, or approval with no comment.
Stops whenFindings posted, or nothing found worth a human's attention.
Tools it needsRepository API, test runner, linter output.
Autonomy to start atApprove. It does the work and stops before the irreversible step.

Optional: load a real model

Run it

The routing rules

These are the exact buckets the demo above scores against. Change the wording of a ticket and you can watch the confidence move.

BucketSignals it looks forWhat happens next
Security defectsql, concatenation, injection, eval, exec, secret, token, passwordBlocking comment with the specific line, the attack, and the parameterized fix.
Correctness riskretry, no maximum, backoff, race, null, off by one, unbounded, timeoutBlocking comment. Retries without limits, unbounded loops, and missing error paths belong here.
Missing testno test, without a test, untested, feature flag, off path, coverageNon-blocking comment naming the untested path. Suggest, never demand.
Stylerename, format, imports, whitespace, naming, reorder, comment typoSay nothing. The formatter owns this, and a reviewer that argues about imports gets ignored on the day it finds a real bug.
Below the barno clear signalAnything it cannot categorise gets no comment at all. Silence is the correct default for a reviewer that is not sure.

Where this one goes wrong

Confident nonsense

A reviewer that describes a bug that is not there costs more trust than it can earn back. Require it to quote the line and state the failing input.

Reviewing the whole file

Comments on unchanged code annoy everyone. Scope strictly to the diff.

Blocking on taste

If it can block merges, it will eventually block one on an opinion. Make only two categories blocking.

How you would know it is working

MeasureWhy that one
Comments resolved as validThe only quality measure. Under 50% and developers stop reading it.
Defects found before reviewCompare against what humans caught afterwards.
Comments per PRShould be under two on average. More is noise, not thoroughness.

Earning more rope

AssistPost findings as a summary comment, non-blocking.
ApproveInline comments, still non-blocking, humans resolve. Right place for most teams.
AutoBlocking only on the security category, with an override that requires a written reason.
The best code review agent is quiet. Build the stay-silent branch first and make it the default, or your team will turn the whole thing off within a month.

Related: Flaky test hunter · Testing agents · Dependency upgrades · all agent jobs · Agent Lab home

Free from AI School - no signup, everything runs in your browser.