NewOur benchmark results are out!read it

Heal · benchmark · October 2026

Benchmark: What code review misses that a runtime bug hunter catches

Keep code reviewers. Don't stack them. Add the runtime.

TL;DR

  • We built Heal, an agent that finds and traverses product entrypoints like users do. This gives a different class of bugs than code reviewers.
  • Heal takes in a codebase and learns how to run it in a way that is production-like. It mocks, stubs, or emulates dependencies, and creates an environment in which to run and reproduce. We call that environment the sandbox.
  • The majority of bugs could be found by reading code, but the nuance is that Heal can afford to generate a lot of noisy candidates, and having the sandbox allows for filtering. Code reviewers optimize for generating less noise. We optimize for generating more candidates, then filter them thanks to the sandbox.
  • Heal is complementary to code review because it finds only runtime issues reached by user behavior (behavior, performance, security). 70 % of the defects are not found by code-review agents. Code review finds a lot more defects in total, mostly stylistic or in files Heal doesn't cover because they don't affect the runtime.
  • Sometimes behavior issues are open product questions and not bugs. Our next frontier is improving how this fits in the development loop.
  • As a separate insight, we find that stacking code reviewers is not really useful as they massively overlap.

1. What Heal does

Heal builds a sandbox around any application and drives it as its users and their machines do, through every entry point: the UI, the API, the CLI, the SDK, webhooks and scheduled jobs, with the data under control, to find defects and prove each one with a failing test.

Heal agentacts as severalusers and machinesdrivesobserves screens,responses, exit codes, logs,stored data and what leftfor third partiesSandbox · built from your repositoriesEntry pointsUIAPICLISDKwebhooksjobsYour productunder test · runs realfrontends, services,workers, jobs, functionsStorageruns real, seededdatabases, caches, queues,files, search indexesHarnesswhat Heal addsbrowser, API client, shellstubs: fault switch, journalcounters, write gateThird partiesstood in foremulator · vendor test modemock · captured sink · offeach defect is re-run by the systemReproduced defecta failing test, the steps,the cause in the code
Figure 1. The Heal agent, the sandbox it builds around the application, and what it produces.

How Heal finds defects

  • Scan the codebase, and map the features. A feature is an entrypoint into the product, for a human or a machine (UI, CLI, SDK, etc).
  • Scope the sandbox based on this map. For example, it creates seeds, or it mocks external APIs, or it creates a controlled environment for the UI. This also gives the agent a deep understanding of how the system works.
  • Find many defect candidates:
    • Run static analysis on the codebase to identify a large number of defect candidates, powered by all the context that the agent has. This is similar to what code review does.
    • Run other tools that need a runtime, such as security scanners and UI checkers. Interestingly, Heal could be extended here by running any custom tool against the sandbox process.
    • Inject manual QA priors to find common issues, from a rich knowledge base of past defects and testing experience.
  • Prove candidates against the sandbox, writing a test to allow for reproduction. Each defect reported to the user comes with a test that doesn't work, and can be actually reached from using the application.

2. Runtime validation vs code review

Code review and Heal both aim to catch defects before they get deployed to users. Ultimately, both look at automating a part of the agentic verification loop, and making it as fast, cheap, and seamless as possible.

Code review focuses on "what a developer would change", and addresses things Heal doesn't cover, such as code style, code consistency, and adherence to internal guidelines. Heal focuses on "what users will encounter", and catches behavior, security, and performance issues that happen at runtime.

A PR review botThe Heal full run
InputA diff + the codebase as contextThe entire codebase + a diff
The question it answersWhat would a developer reading the code change in this diff?What problem will the user encounter when they use this product?
Where it looksThe changed lines and what they callThe running product in a sandbox, end-to-end
Its proofAn argument in a commentA test that fails on the running product, then a patch that makes it pass
What you getAn issue and a fix suggestedDefects, reproduced with a test
WhenFast (seconds/minutes)Slower (minutes/hours)

The first kind is argument-based: a developer or an agent reads the comment, decides whether it is right, and fixes or dismisses it. The second kind is proof-based: the defect is a behaviour a user would meet, and the test is the evidence. This benchmark measures what each kind finds on the same products.

3. The benchmark

The goal of the benchmark is to answer three questions:

  • What is the benefit of having a runtime, a sandbox?
  • Is it worth running both code review and Heal? What is the difference?
  • Is it worth having several code reviewers?

The deeper question is: what would let PRs be merged much faster, with high confidence that there are no bugs?

Method

We chose five products: two private codebases that we own, anonymised here, and three open-source ones, Formbricks, Sim and Infisical.

We replayed each product's real pull-request history, PR by PR, into a fresh private repository with the three review bots installed on their default settings, and ran Heal before and after the sequence of PRs tested.

To tell whether a bot and Heal found the same thing, a judge compares them: a language model that reads a bot's claim and a Heal defect on the same lines and says whether they name the same problem. It was calibrated on a manually curated sample.

This is a relatively small dataset, but it gives a useful signal. We stopped after spending several thousand dollars on code review. We would be interested in running a fuller benchmark: if you are building a code reviewer and would like to collaborate, hit us up on X.

Tools evaluated

  • Greptile with TREX logoGreptile with TREXCode review, with code snippet runtime validation
  • cubic logocubicCode review
  • CodeRabbit logoCodeRabbitCode review
  • HealRuntime validation

Benchmark stats

5 products · 236 PRs

every PR replayed; CodeRabbit, Greptile and cubic on each PR of four products, and on 60, 50 and 45 of Product A's 60

ProductPRsHeal defectsCode review defectsDistinct defectsNotes
Product A · a coaching product for endurance athletes, two repositories, the first 60 PRs of its history replayed60151796599CodeRabbit 60, Greptile 50, cubic 45; default settings, Greptile with TREX on
Product B · an open-source contribution platform, 30 PRs of its history replayed3017217197CodeRabbit, cubic, Greptile on every PR; default settings, Greptile with TREX on
Formbricks · survey platform, 56 PRs of 9–16 October replayed56310117108CodeRabbit, cubic, Greptile on every PR; default settings, Greptile with TREX on; the repo's own CodeRabbit config file applies
Sim · AI-agent workflow builder, 44 PRs of 14–15 October replayed44227127105CodeRabbit, cubic, Greptile on every PR; default settings, Greptile with TREX on
Infisical · secrets manager, 46 PRs of 14–16 October replayed4655410094CodeRabbit, cubic, Greptile on every PR; default settings, Greptile with TREX on; the repo's own Greptile config file applies

Limitations

  • We did not assess whether the code review flags were relevant, whereas Heal defects are proven and reproducible with a test. This may create a bias in favor of code reviewers.
  • Product A's sequence of PRs tested is its whole history, because the project is earlier stage. This is both favorable to code reviewers (everything got scanned) and to Heal (earlier projects likely contain more issues).
  • What was tried first. Before the replays, the three open-source products were measured on one-week windows of their live pull requests, 25 to 30 each, with the bots as the maintainers run them and a full run at each end of the week. That method did not work well. Correlating a full run's defects with a week of live history is too complex: the state the run saw and the lines the week's PRs changed drift apart, each repository had different bots on different settings, and a defect could seldom be tied to one PR with confidence. Replaying the PR history on a private copy removes all three problems, so those windows were dropped from this page and their data kept as a side check.
  • We couldn't validate if the code review comments were acted upon by the authors, as the replays were isolated from the real history. The reason we did not use the real history is code reviewers were not installed on the repos at the time, which would have made the data too scarce to action.

4. Results: what code review bots don't see

Across the five products, 70 % of the user-facing defects that the full run proved on the code of the sequence of PRs tested (141 of 202) had never been found by any review bot.

Product A · coaching
4780
63 % not found by code review
Product B · contributions
1014
58 % not found by code review
Formbricks
20
87 % not found by code review
Sim
16
94 % not found by code review
Infisical
11
100 % not found by code review
also found by code reviewnot found by code review
Figure 2. User-facing defects filed after the first run on lines of the sequence of PRs tested, per product.

More candidates, filtered by the sandbox

A bot hallucinates by nature and needs to manage its noise level. Heal's candidates are allowed to be wrong, then go to the running sandbox, where it's tested and either confirmed and reproduced or discarded.

Ultimately this leads to extra bugs found without increasing the noise level. Additionally, because Heal filters using the sandbox, it raises only bugs that impact the user. We'll see in the next section how this is complementary to code review.

Candidates foundA 1,170 · B 2,036Validated on the sandboxsettled A 363 · B 746in progress A 237 · B 306DismissedA 83 · B 312 · nobody reads themReproducedA 280 · B 434Defects filedA 151 · B 172, one test each
Figure 3. Heal's filtering funnel on Products A and B.

Examples: Four defects no code review bot could find

ProductUser facing bugWhy the diff could not show it
AClearing a segment's elevation in a manual race plan hides all the athlete's saved plans, for good.The frontend stores an empty string, the backend saves the body unvalidated, and the list query's numeric cast fails: two repositories, two PRs.
AA refused objective closes the form as if it were saved, and the coach's text is gone.The modal closes synchronously, the plan view swallows the rejection, and the backend's one-objective-per-week rule returns 409: three files, three PRs.
BEvery hackathon event page says "Page not found".The backend renamed its routes; the frontend still builds the old paths. The mismatch spans both repositories, inside one PR that touched only one of them.
InfisicalA failed organisation open after a correct MFA code ends in a false lockout.It takes the organisation page's catch, the token swap in the MFA page and the backend MFA router refusing a non-MFA token, together.

5. Results: what code review bots find and Heal doesn't

So what do code reviewers find that Heal doesn't? The majority of findings are issues with files that don't impact the runtime (CI, analytics, tests) that Heal doesn't read. Those produce a large number of findings. The rest are mostly race conditions.

We sorted the bots' 1,003 distinct flags into four buckets:

  • In files Heal does not look at, by design: 654 (309 on Product A, 65 on B, 100 on Formbricks, 94 on Sim, 86 on Infisical). Heal starts from what a user can do and works inward, so it skips code no user ever reaches (CI configuration, database migration history, dependency versions, analytics, upgrade scripts, the product's own tests). That is where code review is the right tool.
  • On code Heal tests, but not reported by Heal: 202 (168 on Product A, 10 on B, 7 on Formbricks, 9 on Sim, 8 on Infisical). Caveat: we did not check whether these are real bugs. Most are race conditions, which a single pass through a feature does not always trigger; section 8 explains how we plan to close that gap. Some look plausible:
    • A date that shifts by a day in time zones ahead of UTC
    • Edits typed during a save that get lost
    • On Sim, a file's access setting read before its database row is locked
  • Out of scope: 100 (80 on Product A, 18 on B, 1 on Formbricks, 1 on Sim, 0 on Infisical). These sit on code that a later PR rewrote before Heal ran, so Heal never saw it, and it is out of the set.
  • Also found by Heal: 47.

Examples: What Heal does not find, mostly outside the user path

ProductWhat the bot raisedWhereWhy Heal does not look there
AA malicious PR can inject instructions into the CI assistant..github/workflows/claude.ymlCI configuration; no feature reaches it.
APreserve the timestamp of an already-applied migration.migrations/meta/_journal.jsonMigration bookkeeping; the running product is already migrated.
BClient-side route changes miss the page-view event.src/providers/posthog-provider.tsxAnalytics plumbing; nothing a user sees.
FormbricksA failed upgrade check leaves the compose file modified.docker/formbricks.shAn upgrade script run by an operator, not by the product.
FormbricksOlder PR heads fail the test job: missing test files..github/workflows/integration-tests.ymlCI configuration; no feature reaches it.
SimBackfills reopen issues that were already fixed.scripts/report-ci-flakes.tsA CI reporting script; nothing a user sees.
SimA new migration does not backfill the executions that predate it.packages/db/migrations/0430_tool_execution_attempts.sqlMigration bookkeeping; the running product is already migrated.
InfisicalA certificate-only update silently disables SSO enforcement.tests/suites/sso/saml/config_test.goThe product's own test suite; Heal writes its tests, it does not review the product's.
InfisicalA redirect drops existing section anchors.docs/docs.jsonDocumentation site configuration; no feature reaches it.

6. The truth about stacking: is a second code review bot the answer?

Several teams we talk to run multiple code review bots. On our sample, this gives very marginal improvements.

Product A

each bar = the 120 defects a Heal run proved

2991 not found
cubic alone · 24 %
3585 not found
+ Greptile · 29 %
3684 not found
+ CodeRabbit · 30 %

Product B

each bar = the 53 defects a Heal run proved

1340 not found
cubic alone · 25 %
1340 not found
+ Greptile · 25 %
1340 not found
+ CodeRabbit · 25 %

Formbricks

each bar = the 31 defects a Heal run proved

328 not found
cubic alone · 10 %
328 not found
+ Greptile · 10 %
328 not found
+ CodeRabbit · 10 %

Sim

each bar = the 21 defects a Heal run proved

20 not found
cubic alone · 5 %
20 not found
+ Greptile · 5 %
20 not found
+ CodeRabbit · 5 %

Infisical

each bar = the 22 defects a Heal run proved

22 not found
cubic alone · 0 %
22 not found
+ CodeRabbit · 0 %
22 not found
+ Greptile · 0 %
defects found by Heal that a bot in the set also founddefects found by Heal that no bot in the set found
Figure 4. Stacking code review bots doesn't find more user-facing bugs.

7. Heal and code review find complementary issues

Keep the bot. Add the run. They do not find the same things, and the overlap is small.

PR review botwhat it adds

  • It is on the diff a minute after the push, before anyone else reads it.
  • It reads files the run never maps: migrations, CI, scripts, documentation, the product's own tests. On Product A that was 309 distinct claims; on Formbricks, 100.
  • Nearly every claim, 98 to 99 % of them, comes with a proposed fix.

Heal full runwhat it adds

  • The defects that reach users and that no code review finds.
  • Every finding is proven and reproducible with a test script across the sandbox. This is a total of 1,085 regression tests across the five products.
  • The map of the product and the memory of every pass, which make the next run find more.

We found it interesting that a Heal defect sometimes questions the intent. Teams using Heal told us that a share of the defects sent them back to the decision behind the code: heal surfaced a bug, but the expected behavior it proposed was wrong, and the honest conclusion was that this part of the product was never really designed. This is an active area of development for us.

8. Where Heal is going next

Heal exists so that code written by coding agents validates itself: proven on the live product the way a user will meet it, with fewer people in the loop and less manual QA.

TODAYIN BETANEXTFind and provethe full run, after each mergedefects with a failing testCatch regressionsan end-to-end suite in the sandboxrun on every changeValidate against the intentthe engineer's intent, from their coding agenttests written and proven against it
Figure 5. Three stops. Each one takes a step of validation out of a human's hands and gives it a test.

Today: find and prove

The full run of this benchmark. Heal builds the sandbox, operates the product, and files each defect with a failing test and a patch. This is the result above.

In beta: an end-to-end regression suite in the sandbox

Every proven defect is already a test. Heal turns them into a non-regression suite that runs in the sandbox on each change, so a feature that worked and broke is caught with its red test, not reported by a user. It closes the gap of section 5: the races and the code paths a one-off walk did not hit.

Next: get the human intent to validate the code

An engineer states what their coding session is meant to do, from inside their coding agent. Heal writes the end-to-end tests for that feature on the live sandbox and proves it against that intent. A red test that contradicts the intent is a defect. A red test that contradicts a product decision becomes a question for the human, asked once, instead of a defect to triage: the gap section 7 describes. The validation a reviewer does by hand today, done by a test that knows what the code was for.

9. Data

The raw material behind this page, for the three open-source products: every comment the review bots posted, and every defect Heal filed, with its test. The two private products are left out. Open the appendix.