Explainer

LLM as judge: what model consensus — and disagreement — actually tells you

LLM as judge: what model consensus — and disagreement — actually tells you

Ask one model whether your migration plan is safe and you get an answer. What you don't get is any idea how much to trust it — a model is roughly as fluent when it's wrong as when it's right, and asking "are you sure?" mostly measures its agreeableness, not its accuracy. The LLM-as-judge pattern replaces that dead end with something measurable: several models answer the same question independently, and a separate judge — a chairman — evaluates their answers and writes one verdict.

The interesting part isn't the verdict. It's the two bits of metadata a good judge produces alongside it: did the panel agree, and is the judge confident? Those two bits are the closest thing you can get to an error bar on a language model's answer — and they're what decides whether a coding decision can proceed on autopilot or needs you. This post is about how that judging step actually works, where it breaks, and what a contract around it looks like in practice.

Disagreement is signal, not noise

The instinct is to treat a split panel as a failure — you wanted an answer and got an argument. It's the opposite. Models from different labs are trained on different data with different post-training choices, so their mistakes are partially decorrelated. That makes the spread of their answers informative in a way no single answer can be:

In other words, the council doesn't just answer the question — it triages it. Confident consensus flows through; disagreement gets escalated. That's the same shape as every good review process you've worked in, and it's the property that makes the pattern automatable: the system knows when to interrupt you.

Majority vote vs a rubric-based judge

The naive way to resolve a panel is to count heads: three models said X, one said Y, ship X. That fails for a reason specific to language models — they share biases. All of them trained on the same public internet, and the internet's most-repeated answer is not reliably the correct one for your codebase. A majority can be confidently, identically wrong, while the one dissenting answer came from the model that actually traced the call path. Head-counting throws that dissent away — and the dissent is frequently the most valuable output of the run.

A judge with a rubric works differently. Instead of "which answer is most popular," it's forced to answer structured questions about the panel:

Only after that analysis does it write the final answer. The rubric matters because it converts judging from a preference task ("which answer do you like?") into a verification task ("which claims hold up?"). For coding questions there's a further upgrade available that generic LLM-judge setups don't have: the judge can be given read-only access to the repo and told to check the disputed claims against the actual files. A disagreement about what flush() is bound to isn't a matter of opinion — it's one grep away from settled.

How judges fail

LLM judges have well-documented biases, and any system built on them has to engineer around three:

One more failure mode is operational rather than statistical: degraded panels. A member times out, a CLI isn't authenticated, a process dies. A verdict synthesized from two answers when you asked for four is a different (weaker) product, and the system should say so rather than present it with unearned confidence.

The verdict contract

Everything above is philosophy until you pin it into a format a program can act on. The version Backgrind ships is deliberately blunt — the chairman's reply must begin with exactly two machine-readable lines:

AGREEMENT: consensus|split     # did the experts materially agree?
CONFIDENCE: high|low           # is the judge sure — or must a human decide?

<one-paragraph summary, then the full verdict>

Two bits, four states, and each state maps to a different interruption level:

AGREEMENT consensus split CONFIDENCE high low quiet toast Experts agree, judge is sure. Act on it — no interruption. ping — review the split Judge picked a side, but the panel disagreed. Skim the dissent. ping — verify first Agreement, but the judge isn't convinced. Shared blind spot risk. ping — you decide Hard or underspecified question. The council mapped it; you call it.
The AGREEMENT × CONFIDENCE matrix. Only one of the four states — consensus with high confidence — passes silently. The other three are exactly the cases where a human review earns its cost.

Notice what the contract buys. First, a calibrated interruption policy: the run only demands your attention when the models actually disagreed or the judge flagged doubt — the machine handles the settled cases, you handle the contested ones. Second, honesty under failure: a degraded panel (a member crashed or timed out) always escalates, and a chairman that ignores the format entirely parses as unknown — which deliberately does not ring an alarm, because a formatting miss isn't an emergency; it just forfeits the silent pass. Fail toward human review, not toward false confidence in either direction.

If you want the ground-level view of the panel side — how to run the same question across several models by hand, and a full worked example with a split verdict — that's covered in how to ask multiple AI models one question.

Where Backgrind fits

Backgrind's Fusion Council is this pattern, shipped: your own installed CLIs answer one hard question in parallel, read-only in your repo, and a chairman judges the anonymized answers with exactly the rubric above — consensus, contradictions, unique insights, blind spots — verifying against the code where they disagree. The AGREEMENT/CONFIDENCE lines route straight into the overlay's notification pipeline: a confident consensus is a quiet toast you read whenever; a split or a low-confidence verdict chimes over whatever you're doing, the same way an agent that needs a decision does.

The members run on money you already spend — Claude Code and Codex CLI seats bill the subscriptions you have (those two carry enforceable read-only flags), and since July 2026 an OpenRouter API seat puts any catalog model on the panel with your own key, called straight from your machine. And when the verdict is in, "Send to agent" pastes it into your active session: the council deliberates, one agent executes. See the loop in the live demo.

Frequently asked questions

What is the LLM-as-judge pattern?
Instead of trusting one model answer, several models answer the same question independently and a separate judge model evaluates their answers — ideally against a rubric and with the answers anonymized — then writes a single final verdict. The judge adjudicates the disagreements rather than averaging the texts.
Why is disagreement between AI models useful?
Models from different labs make decorrelated mistakes, so the spread of their answers approximates how settled a question is. Consensus means the answer is probably conventional and safe to act on; a split means the question is genuinely hard, underspecified, or the models are missing context — exactly the cases where a human should decide.
Why not just take a majority vote of the models?
Because popular is not the same as correct. Models share training data and internet-consensus biases, so the majority can be wrong together, and the one dissenting answer is sometimes the only one that actually read the code. A rubric-based judge weighs the arguments and verifies claims instead of counting heads.
What are the main failure modes of LLM judges?
Verbosity bias (longer, better-formatted answers get rated higher), self-preference and style bias (judges favor answers that sound like themselves or carry a favored brand), and rubric gaming (answers written to look thorough rather than be right). Anonymizing the answers, forcing a rubric, and letting the judge verify against the repo mitigate all three.