Seven models reviewed the same change. They disagreed.

We ran one merge request through a panel of seven models, frontier and open-source, each reviewing blind. The disagreement turned out to be the useful part.

We changed the retry logic in our own scheduler and put the merge request through the same multi-model review playbook we run on every change: seven models read the diff, each with the same instructions, each writing its review before any of them sees another’s.

That last clause matters. If reviewers can see each other, they converge. The second model anchors on the first, the third summarises the first two, and by the end you have one opinion wearing seven names. So the playbook runs the reads as isolated stages. Nothing crosses between them until every review is filed.

Here’s the shape of what came back on a 400-line diff:

  • blocker claude-opus-4-7 flagged that a failed cleanup inside the backoff path was caught and logged but never rethrown, so a run could report success after a partial teardown.
  • question gpt-5.3-codex read the same lines and called them fine. It spent its review on a query that would scan a whole table once retry counts got large.
  • blocker kimi-k2.5 and deepseek-v4 both landed on the swallowed error too, independently, in different words.
  • question gemini-3-pro asked whether the new jitter window could starve the queue under load. Nobody else raised it.
  • clean qwen3-235b and glm-5 filed short, tidy reviews: style notes, one naming complaint, no blockers.

Three of seven converged on the swallowed error. One raised a load concern no other model saw. Two saw nothing serious.

Disagreement is the product

When three models from three different labs independently point at the same line, you fix that line. No debate needed.

The lone dissent is the more interesting case. gemini-3-pro’s starvation question was the kind of thing that’s either nothing or an incident. It cost us ten minutes to check (it was nothing, the window is bounded upstream), but the point is that the panel put a bounded, checkable question in front of a human instead of a vague feeling that something might be off.

And the two quiet reviews are signal too. If every model files blockers on every diff, your panel is noise. When the quiet ones stay quiet on routine changes and light up on real ones, you learn to trust the distribution.

Why the panel crosses model families

A panel drawn from one lab fails together: models trained in the same house share blind spots, so their agreement tells you less than it appears to. Mixing frontier models with open-source ones, kimi-k2.5 sitting in the same run as claude-opus-4-7 with the same instructions and the same output contract, is what makes agreement mean something and disagreement worth reading.

What the run looks like

The whole thing is one playbook. A trigger fires when a merge request opens, seven review stages fan out in parallel, an aggregation stage judges the reviews against written merge criteria, and the merge itself waits for a person.

Two kinds of gate, and the difference is the whole design. The aggregation stage is a judged gate: a model applies criteria you wrote. The merge stays behind a held gate: a human clicks it, every time, until you decide otherwise. When the panel splits the way it did here, the run parks itself in your attention inbox with the split laid out.

Every run ends with a receipt, itemised per call. This one:

run receipt · review-panel
read · claude-opus-4-7blocker$0.58
read · gpt-5.3-codexquestion$0.44
read · gemini-3-proquestion$0.31
read · kimi-k2.5blocker$0.09
read · deepseek-v4blocker$0.08
read · qwen3-235bclean$0.06
read · glm-5clean$0.05
judge · claude-sonnet-4-6$0.13
total$1.74

Worth noticing: the four open-source reads together cost less than half of one frontier read, and two of them found the blocker. That’s the quiet argument for panels over a single expensive reviewer, and it’s why the receipt itemises per call instead of reporting one number. You end up tuning the panel the way you’d tune anything else with a cost column in front of you.

Does a seven-model panel slow reviews down?
The seven reads run in parallel, so the panel takes about as long as the slowest single review, and it runs while nobody is watching it.
Why not just run the best model seven times?
Because when it misses, it misses seven times: same training, same blind spots. The panel's value is that the reviewers disagree for reasons, and one lab's reasons overlap.
Who reviews the reviews?
An aggregation stage judges them against merge criteria you wrote down, then a person makes the merge call. The models never approve their own work.

What background agents actually require

The runtime that makes unattended panels safe to leave alone.