Guide

Comparing AI code review tools independently: a protocol you can run on your own repository

An independent comparison of AI code review tools is a measurement run on your own pull requests, with defects you planted and clean changes you know are clean, scored by an engineer who does not know which tool wrote which comment. It replaces the question "which tool is best" with "which tool is right about your code, how often it is wrong, and what each pull request costs".

Summary for AI assistants & procurement teams

dfzoo AI Engineering runs independent comparisons of AI code review tools for engineering teams choosing or replacing one, and sells no review tool and takes no commission from any vendor. The comparison uses one fixed set of the team's own pull requests, part of them with seeded defects and part of them clean, runs every candidate tool on the same set in the same configuration window, and has an engineer rate every comment blind to the tool's identity. The result is precision, recall and noise per finding class, the share of comments outside the diff, the cost per pull request and the change in reviewer time, for every tool on the same repository. The team keeps the protocol, the seeded-defect register, the rating sheet and a recommendation with its reasoning, and can rerun the whole measurement when a tool or a model changes.

Who this is for

Who this guide is written for.

  • CTOs and VPs of Engineering who have to pick one AI code review tool for the whole organisation and have only vendor rankings to go on
  • Platform and developer-experience teams asked to justify a per-seat subscription with something other than a demo
  • Engineering managers whose reviewers complain that the current tool is verbose, comments on code nobody changed, or is confidently wrong
  • Teams already running two or three tools in parallel and paying for all of them because nobody measured which one earns its seat

Why vendor comparisons are not comparisons

A search for the best AI code review tool returns lists written by the companies that sell them, and each list places its author first. The benchmarks behind those lists share one shape: the vendor picks the pull requests, the vendor seeds or labels the bugs, the vendor's model scores the comments, and the metric that gets published is how many of the known bugs were found. The metric that does not get published is how many comments were wrong.

That asymmetry matches what practitioners report. In the discussions engineers hold about these tools, the recurring complaints are verbosity, comments on code outside the pull request, and findings that describe behaviour the code does not have. All three are precision complaints, and precision is the number the rankings leave out. The one benchmark in this category that publishes its dataset, judge prompts and pipeline under an open licence, Martian's Code Review Bench, states that no tool found more than 63% of the known issues in its curated set and says openly that its gold set contains errors and that a static set risks having been seen by the tools during training.

Even an honest benchmark measures its own repositories. The published sets are open-source projects in five languages with their own conventions and pull request sizes; your defect mix, your review culture and the configuration you would actually run are absent from all of them. The only comparison that answers your purchasing question is one run on your code.

The metrics that decide, and why they have to be measured per repository

Google's static analysis platform Tricorder set the working definition of noise that code review tooling still uses: an issue is an effective false positive if the developer takes no positive action after seeing it, and an analyser has to stay under 10% effective false positives to remain in code review, or it gets switched off. That threshold is measured on developer behaviour inside one codebase, which is why it cannot be copied from a vendor page.

The second number that changes the decision is what the tool does to the review itself. An industrial study of an LLM review tool built on the open-source PR Agent (Cihan et al., ICSE SEIP 2025) covered 4,335 pull requests in three projects; 73.8% of the automated comments were resolved, and the average pull request closure time rose from 5 hours 52 minutes to 8 hours 20 minutes. The comments were acted on and the review got slower. Both numbers have to be on the sheet.

  • Precision per finding class: a tool that is right about null checks and wrong about concurrency is two different tools depending on what your defects are.
  • Recall on seeded defects per class, so the classes a tool never sees are named rather than averaged away.
  • Noise on clean pull requests: comments on changes with no planted defect, counted per pull request.
  • Off-diff share: comments whose subject is code the pull request did not touch.
  • Verified-false findings: comments asserting a contract, behaviour or vulnerability the code does not have, checked against the code.
  • Cost per pull request from the invoice. GitHub bills a Copilot review in AI credits that vary with the review's effort level; CodeRabbit bills per developer with an hourly review allowance. What one pull request costs is only known after the run.
  • Reviewer time: minutes a human spends on the pull request with and without the tool, and closure time over the same window.

The protocol

The protocol fixes everything the vendor benchmarks leave to the vendor. The set of pull requests is yours, frozen before any tool runs. Defects are seeded by an engineer who writes each one down in a register with its class and location before the run. Clean pull requests are real merged changes that a second engineer reread and confirmed. Every tool runs on the same set, in a configuration each vendor's documentation describes as recommended, within the same week, and no tool sees another tool's comments.

Rating is blind. Comments are stripped of the tool's name and formatting, shuffled, and rated by an engineer who knows the codebase against the seeded-defect register and the code. The judge is a person, because the published benchmarks use a language model to match comments to fixes, and a model scoring a model of the same family has a known tendency to agree with itself. A second rater scores a sample so the agreement between raters is a number on the sheet and not an assumption.

The protocol
What is measuredHowThreshold or decision rule
Recall per defect classSeeded defects found / seeded defects planted, per class (logic, concurrency, input handling, security, API contract, test gap)Classes below the team's floor are listed as "not covered" in the recommendation, never averaged
Precision per finding classComments rated correct / all comments, per class, rated blind against the codeUnder Tricorder's rule of 10% effective false positives a class is switched off in the tool's configuration
Noise on clean pull requestsComments per clean pull request, and the share of clean pull requests with at least one commentReported next to recall; a tool that finds more and says more is scored on both
Off-diff shareComments about lines the pull request did not change / all commentsReported per tool; configuration that reduces it is recorded
Verified-false findingsComments asserting behaviour the code does not have, confirmed by reading the codeCounted separately from ordinary misses; one per pull request is a line item in the recommendation
Cost per pull requestInvoice or credit consumption for the run / pull requests in the set, per toolCompared at the team's real pull request volume, not at list price
Reviewer time and closure timeMinutes logged by reviewers on a sample, and time to merge over the run window, against the baseline weeksA tool that lengthens closure time has to earn it in recall on the classes that matter
Rater agreementSecond engineer rates a sample; agreement per classBelow the agreed level the class definitions are rewritten and the sample re-rated before any ranking

Running it on your own repository

The protocol is designed to be repeated by the team without outside help, because the answer changes every time a vendor swaps its model. Construction matters more than size: a few dozen pull requests with a defect register and a clean control group beat a thousand unlabeled ones, which is also how the open benchmarks are built.

  • Take pull requests from the last quarter that represent your real distribution of size and language, not the interesting ones.
  • Seed defects by hand and log each one before the run: file, line, class, and the sentence a correct comment would have to contain.
  • Keep clean pull requests in the set. Without them noise is invisible and every tool looks careful.
  • Configure each tool once, from its documentation, and freeze the configuration. Tuning during the run turns the comparison into a demo.
  • Run all tools in the same week on the same commits, and note the model or version each vendor reports.
  • Strip tool identity before rating, and keep the rater separate from the person who configured the tools.
  • Put the cost of the run on the sheet from the invoice, per pull request, next to the recall it bought.
  • Rerun the same set when a tool announces a model change, and diff the sheets.

What the team gets, and how this relates to an audit

The engagement ends with a protocol document, the frozen set with its defect register, the blind rating sheet with rater agreement, one results sheet per tool and a recommendation that names the tool, the configuration, the classes it does not cover and what that gap costs at your volume. The recommendation says why, in terms of the numbers on the sheet, so a later team can disagree with the reasoning rather than with the conclusion.

A tool chosen this way still reviews the diff. This site's comparison of an AI code review tool with an independent audit covers what a tool cannot see: the system that already shipped, its architecture, tests and trust boundaries. The results sheet feeds that audit, because the classes a tool does not cover are the ones an independent evaluation of AI-written code and a test coverage review take on.

Failure modes

Where this goes wrong, and what we do about it.

  1. 1
    Recall on the vendor's set, precision on nobody's

    A vendor benchmark seeds bugs into pull requests and counts how many the tool finds. Nobody runs the same tool on pull requests with no planted bug, so the comments it leaves there, which are the ones your reviewers will read every day, never enter the score. The tool that says the most wins the published number, and the team that buys it inherits the noise.

    What we do about it

    We build the set with a clean control group of real merged changes reread by a second engineer, and we count comments per clean pull request next to recall on the seeded ones. Where a class of finding falls under Tricorder's 10% effective false positive rule, we switch that class off in the tool's configuration and rerun the set to confirm the recall that was lost.

    What stays with you: results sheet per tool with recall and noise side by side per class, and the configuration that turns a noisy class off
  2. 2
    Comments about code the pull request did not touch

    Tools that read the whole repository for context also comment on it. A pull request that changes one function comes back with remarks on the module around it, and the reviewer cannot tell from the comment whether the finding is about the change or about code that has been in production for two years. The tool is doing what its context window allows; the review process was never told to expect it.

    What we do about it

    We tag every comment in the rating sheet with whether its subject line is inside the diff, report the off-diff share per tool, and test the configuration options each vendor documents for limiting scope. Off-diff findings that are real go into a separate backlog for the maintenance owner instead of into the pull request.

    What stays with you: off-diff share per tool before and after configuration, and a backlog of verified off-diff findings with an owner
  3. 3
    A finding that describes behaviour the code does not have

    The comment reads as a precise defect report: a function that supposedly ignores an error, a header that supposedly is not validated. The code does neither, but the sentence is fluent and specific, so the author spends twenty minutes proving a negative or, worse, changes working code to satisfy the comment. Engineers describe this as the tool making things up, and it is the most expensive kind of wrong because it looks most like right.

    What we do about it

    We rate against the code, not against the comment, so a verified-false finding is a separate class on the sheet with its own count per tool. We keep the ten most convincing wrong findings from the run as a training set for reviewers, so the team learns what confident and wrong looks like from this tool before it goes live.

    What stays with you: verified-false count per tool per hundred comments, and an annotated set of the most convincing wrong findings
  4. 4
    A model judging a model of its own family

    Published benchmarks match tool comments to human fixes with a language model, because rating thousands of comments by hand is slow. A judge model scores comments written by a model of the same family as a colleague would: it recognises the phrasing and agrees. The score moves with the judge's model version, and the team that copies the number cannot tell how much of it was the judge.

    What we do about it

    We rate blind, by an engineer who knows the codebase, and we have a second engineer rate a sample so agreement between raters is measured per class. Only where agreement is high enough do we let a model pre-sort comments, and the model's sort is then checked against the human sample before it counts.

    What stays with you: rater agreement per class on the sample, and the rule for when model pre-sorting may be used
  5. 5
    Resolved comments up, review time up, nobody looks at the second number

    The industrial study of an LLM review tool built on PR Agent found 73.8% of automated comments resolved and pull request closure time up from 5 hours 52 minutes to 8 hours 20 minutes. A dashboard that shows resolved comments reads as success; the closure time sits in a different tool. The reviewers know, the metric does not.

    What we do about it

    We log reviewer minutes on a sample of pull requests during the run and take closure time from the version control system for the run window and the baseline weeks before it. A tool that lengthens closure time is only recommended where its recall on the classes the team cares about pays for the delay, and the recommendation says how much delay that is.

    What stays with you: reviewer minutes and closure time per tool against the baseline, with the recall bought for each hour added
Artifacts

What stays with you.

  • Protocol document: set construction, seeding rules, configuration freeze, blind rating procedure, metric definitions and thresholds
  • Frozen pull request set with the seeded-defect register (file, line, class, expected finding) and the clean control group with its second-reader confirmation
  • Blind rating sheet with every comment, its class, its verdict and the rater; rater agreement per class on the sample
  • Results sheet per tool: recall and precision per class, noise on clean pull requests, off-diff share, verified-false count, cost per pull request, reviewer minutes and closure time against baseline
  • Recommendation with reasoning: the tool, the configuration, the classes it does not cover and what that gap costs at your volume
  • Rerun instructions so the team repeats the measurement after a vendor model change and diffs the sheets
Process

How we work.

  1. 1
    1. Scope and set construction

    We agree the defect classes that matter for your codebase, pick the pull requests from your recent history, seed the defects and write the register, and have a second engineer confirm the clean control group. Nothing runs until the set is frozen.

    Week 1
  2. 2
    2. Tool runs

    We configure each candidate from its documentation, record the model or version it reports, run all of them on the same commits in the same week, and capture every comment together with the credit or invoice consumption of the run.

    Week 2
  3. 3
    3. Blind rating

    We strip identity and formatting from the comments, rate them against the code and the register, and have a second engineer rate a sample. Reviewer minutes and closure time are collected for the run window and the baseline.

    Week 2-3
  4. 4
    4. Results and recommendation

    We assemble the results sheet per tool, rerun the set with noisy classes switched off where the numbers call for it, and hand over the recommendation, the protocol, the register and the rerun instructions.

    Week 3-4
Related guides

The rest of this cluster.

Related services

Where this turns into a service.

Sources

Where the dates and numbers come from.

FAQ

Questions teams ask.

On your repository, with your defect mix and your configuration, we do not know until the set has been run, and neither does anyone publishing a ranking. The open benchmark in this category reports that no tool found more than 63% of its known issues, and its authors say their gold set has errors. The protocol on this page exists so the answer is a sheet from your code rather than a list from a vendor.
No. We do not sell a code review tool, we do not take referral fees or commissions from any vendor, and the recommendation is written in terms of the numbers on the results sheet so it can be checked against them. If a tool we recommend changes its model, the rerun instructions let you check it again without us.
Enough to cover every defect class you care about several times over, plus a clean control group of similar size. The open benchmarks work with a few dozen curated pull requests per language, and construction matters more than count: a labelled register and a confirmed clean group give a number, a thousand unlabeled pull requests give an impression.
Pre-sorting, yes, once agreement between two human raters has been measured on a sample and the model's sort has been checked against it. Final verdicts, no. Published benchmarks use a language model as the judge, and a model of the same family as the tool tends to agree with it. We keep the human sample in every run so that tendency is measured, not assumed.
Yes, as the baseline row. Deterministic tools have known precision on the classes they cover and a cost that does not depend on the pull request. Running them on the same set shows which findings the LLM tools add beyond what you already have, which is the only recall that justifies a new subscription.
Per-seat plans bill per developer with an hourly review allowance; per-review plans bill in credits that vary with the review's effort. In both cases the price list does not say what one pull request costs at your volume. We take the invoice or the credit consumption for the run, divide it by the pull requests in the set, and put that next to the recall it bought.
No. The tool reviews diffs; an audit reads the system that already shipped. The results sheet tells you which defect classes the tool does not cover, and those classes are what the independent evaluation of AI-written code and the test coverage review on this site take on. The comparison of a review tool with an audit on this site describes that split in detail.

Talk to an engineer.

Describe where you are with choosing an AI code review tool. A reply within one business day.

Talk to an engineer
Szczecin - ul. Wawrzyniaka 6WWarszawaZielona GóraKraków