AI coding

Building a Tie-Breaker Agent: Rules and Risks

Antonio Evans9 min read

A clean whiteboard-style diagram: on the left, two boxes labeled 'Agent A' and 'Agent B' each emit a short text snippet, with a red conflict arrow between them.
Key points

Key points

  1. 1A tie-breaker agent is a third model call that takes the original request, two conflicting candidate outputs, and an explicit decision rule, then returns a structured verdict with reasons and a confidence score.
  2. 2It earns its cost only when a wrong pick is expensive and the decision rule can be written down before you run it.
  3. 3It fails structurally when the two candidates share a blind spot, when the prompt lets length or self-reported confidence win, or when it is tuned to side with whoever wrote the rubric.
  4. 4Build it as a classifier with a labeled test set and a human fallback, never as an oracle.

When a third agent is worth the cost

Two agents disagreeing is the normal case, not the exotic one. Multi-agent conflict write-ups report that two agents run over the same task disagree somewhere between 20% and 40% of the time depending on task type, and that unstructured multi-agent networks without a conflict resolution layer can amplify errors by more than seventeen times relative to a single-agent baseline (Tianpan on conflict patterns). Some of that disagreement is stylistic noise. Some is substantive: the candidates differ in meaning and one of them is wrong (taxonomy of agent disagreement). A tie-breaker only addresses the substantive kind.

The cost side is real. Every tie-breaker call is an extra model call, extra latency, extra token spend, and one more place to debug. Microsoft's guidance for agent architectures pushes teams to start with a single agent unless a specific criterion forces separation, and names extra coordination overhead and latency at each handoff as the trade you are making (Microsoft on single vs multi-agent systems). A third agent is a coordination handoff, so it needs to pay for itself.

Here is the decision rule I would use. Add the tie-breaker only when all three conditions hold:

ConditionWhy it mattersTest before you build
A wrong pick is expensiveCode merged, money moved, clinical or legal text sentEstimate the cost of a wrong merge or a wrong action. If it is cheap to detect downstream, a monitor beats a judge
The decision rule can be written downThe judge needs criteria, not vibesWrite the rubric in five bullets. If you cannot, you are buying false confidence
Disagreement is frequent and visibleA judge on 0.1% of traffic adds cost, not valueLog every disagreement. If the rate is under a few percent, route to humans instead
Both candidates come from different model familiesShared families share blind spotsCheck the provider behind each agent

If your disagreement rate is high and the stakes are high but the rubric is fuzzy, a tie-breaker is the wrong tool. Escalate to a human or add a deterministic check (a schema validator, a unit test, a policy lookup) first. The judge pattern sits on top of verifiable criteria; it cannot manufacture criteria you have not defined.

The most useful signal for this decision is something most teams skip: measuring agreement. Run your two agents over a sample of 100 to 500 real requests, label which output was correct (or "both wrong"), and compute the disagreement rate and the correctness rate of each agent on contested cases. If agent A is right 80% of the time on contested cases, a tie-breaker that picks correctly 85% of the time adds almost nothing. If both agents are around 50% on contested cases and the consequences are severe, the tie-breaker has room to earn its keep. You cannot know this from reading prompts; you have to label data. Do that before you write a line of judge code.

The anatomy of a conflict

Before prompting anything, classify the conflict. This is the step that saves the most time, because each class maps to a different response, and only two of them belong in a model judge.

Stylistic disagreement. Both outputs say the same thing with different phrasing, length, or format. No judge needed. Pick with a deterministic tiebreak (shorter output, schema-conforming output, lower token count) or merge. Sending this to a model judge wastes money and invites the length bias described below.

Reasoning disagreement. The candidates reach different conclusions. This is where a tie-breaker helps, provided your rubric is explicit.

High-confidence disagreement. Both candidates are confident and mutually exclusive. A judge can still pick, but this is the signature of a genuinely ambiguous case, and a confident verdict here may be a coin flip dressed up. Route a portion to humans and use the judge's confidence score as the routing signal.

Adversarial disagreement. One candidate was steered by injected content. A model judge can be steered too, so the defense is external ground truth (a verifier checking against a source of record), not another opinion (consensus and arbitration patterns). Keep adversarial-looking cases out of the judge path and send them to a rule check plus a human.

The practical reason to classify is that the classifier is cheap. A regex for output shape, a diff on structured fields, or a small embedding similarity between the two outputs will separate stylistic from substantive conflicts for a fraction of a model call. Only the substantive bucket should hit the judge, which is often the majority of your savings.

Prompt structure that actually works

The working pattern, drawn from production arbitration designs and the LLM judge literature, has four blocks in a fixed order: rule, evidence, context, output schema.

A useful arbitration example comes from medical imaging, where a small LLM receives a table of expert predictions with confidence scores, a compact decision rubric, and a constrained output format (MELLMA multi-expert arbitration framework). The design principles transfer directly: compact evidence, explicit rule, fixed output shape.

A minimal prompt skeleton:

You are a tie-breaker. You must pick exactly one candidate or escalate.

RULE (apply in order, stop at the first that decides):
1. If one candidate violates a hard constraint in the request, pick the other.
2. If the request names a specific format, pick the candidate that conforms.
3. If one candidate cites a source given in CONTEXT and the other does not, pick the citing one.
4. If neither rule decides, return "escalate".

EVIDENCE: You may use only the REQUEST and the two candidates below. Do not use outside knowledge.

REQUEST:
{verbatim user request, no prior turns}

CANDIDATE A:
{full text}

CANDIDATE B:
{full text}

OUTPUT: JSON only, matching this schema:
{"verdict":"A"|"B"|"escalate","rule_fired":1-4|0,"reason":"one sentence","confidence":0.0-1.0}

Three details matter more than they look:

Cap the context to the request and both candidates. Including earlier conversation turns, prior drafts, or the agents' internal reasoning drags in noise and lets one candidate's framing leak into the verdict. The same error shows up in human-facing evidence arbitration: models over-rely on recent or salient sources even when they conflict with direct evidence, and they follow recency more consistently than explicit reliability cues (Evidence Arbitration in LLMs). Keeping the judge's evidence minimal and symmetric is the defense.

Require a rule identifier. Asking the judge to say which rule fired forces it to walk the decision procedure and produces a verdict you can audit. A verdict with rule_fired 0 should be treated as "no rule matched", and routed to a human.

Do not ask the judge for the answer. Ask it to choose between the candidates and say why. A judge that is allowed to write its own answer becomes a third opinion, and now you have three candidates.

The output schema also gives you free measurement: verdict, rule fired, reason, and confidence are all fields you can score against labels, and reason is the field a human reviewer reads first in the fallback queue.

The failure modes and how to catch them

The judge pattern inherits documented biases. A comprehensive benchmark catalogued twelve distinct bias types in LLM judges, with position bias, self-preference bias, and length bias among the most impactful in production (consensus and arbitration patterns). Position bias means swapping candidate order shifts verdict rates by more than ten percent in some evaluations, so you should either run each conflict twice with swapped order and treat disagreement as a tie, or randomize order per request and log the order used. Self-preference bias means the judge favors outputs from its own model family, which is a reason to run the tie-breaker on a different family than at least one of the two agents. Length bias means verbose candidates win, which is why the prompt above caps output and asks for a rule, not a discussion.

The deepest failure is correlated error. Majority voting and judge selection both amplify shared blind spots when agents come from the same training distribution; the single highest-leverage architectural fix is model heterogeneity (consensus and arbitration patterns). If both agents and the judge are the same model, you are asking one model to catch its own mistake. Assume it cannot, and design the fallback accordingly.

A practical checklist before you trust the judge:

CheckHow to run itPass condition
Labeled accuracy200+ labeled conflicts, judge verdict vs human labelJudge beats picking the first candidate by a useful margin
Order robustnessSame 200 conflicts, candidate order swappedVerdict flip rate is low and known
Length robustnessPad one candidate with harmless filler, rerunVerdict does not move
Rule fidelitySample 50 verdicts, read the reason and rule idRule in the reason matches the rule the verdict cites
CalibrationBucket verdicts by reported confidenceHigh-confidence verdicts are right more often than low
Split-family checkCompare judge accuracy to a judge from another familyYou know which your data favors

Any check that fails is a fix, not a footnote. The labeling work is the same work that decides whether you need the judge at all.

Wire it into a pipeline, not an oracle

A tie-breaker is a component in a distributed system, and it should inherit the boring properties of one: retries, timeouts, logging, and a fallback.

First, run the tie-breaker out of band. Do not block a user request on a model that may be slow. Queue the conflict, return the more conservative candidate (or hold the output) while the judge runs, and revise when the verdict lands. Job queue patterns in distributed databases exist exactly to move slow work out of the critical path while keeping status and retries visible (YugabyteDB job queue data model). If the user must wait, set a hard timeout on the judge and fall back deterministically.

Second, persist the conflict. Store request, both candidates, verdict, reason, rule fired, confidence, candidate order, judge family, and latency. This is the identical discipline as multi-agent observability: log the disagreement and its resolution so you can tell not just which agent was wrong but that they disagreed at all (Tianpan on conflict patterns). Without the log, the disagreement silently disappears and debugging takes several times longer than a single-agent failure.

Third, route low-confidence verdicts to humans. Define a threshold on the confidence field, send those to a review queue with both candidates and the judge's reason, and feed the human's choice back as a label. If your judge does not emit calibrated confidence, measure and fix its calibration before you rely on the score, because an LLM's self-reported confidence is not a probability and confidently wrong agents will report high confidence (Tianpan on conflict patterns).

Fourth, add a bucket-level safeguard: circuit breakers on token and time budgets. Splunk's multi-agent guidance warns that coordination failures include budget-draining debate loops and recommends token and time caps as circuit breakers (Splunk coordination strategies). A tie-breaker that calls another tie-breaker is exactly the loop to prevent.

Finally, keep the judge out of the critical write path when the action is destructive. If the verdict triggers a merge, a payment, or a deployment, the verdict should be a recommendation, and a rule or a human should be the gate. The judge proposes, the pipeline enforces: a code review step, a schema check, or a release gate is the real boundary, and the model is just another input to it.

A worked example with numbers

Suppose a code review pipeline has two review agents, A and B, over the same pull request. You sample 400 conflicts (PRs where A and B disagree) and label each as A better, B better, or both wrong.

Results: A is better on 150, B is better on 150, both wrong on 100. Picking A at random gives you 150 out of 300 decidable cases, a 50% pick rate. You build a tie-breaker and, on a held-out 200-conflict set with a rubric based on hard constraints, you get 130 correct, 30 wrong, and 40 escalations, with 25 of the escalations decided correctly by humans. Of the 30 wrong, 20 came from judge position bias (same high-flip subset) and 10 from correlated error (both candidates wrong but the judge picked one anyway).

The useful conclusion is not the accuracy number. It is where the errors come from. Position-bias errors are fixable by swapped-order runs; correlated errors are not fixable inside the judge and must go to a human or a deterministic check. This is the difference between treating the judge as a classifier you improve and treating it as an oracle you trust.

To get the 200-conflict labeled set, budget human review time rather than more model calls. Two labels per conflict on a random 10% overlap lets you estimate inter-reviewer agreement, and anything below reasonable agreement is a rubric problem, not a judge problem. Build the rubric from the cases where humans disagree first.

If you need to run the judge across several model families to test heterogeneity, one API with several providers behind it cuts the integration work, which is what Quanta Inference (https://quantaintelligence.ai/inference) gives you. For teams that want the expert pattern packaged rather than assembled, Quanta Experts (https://quantaintelligence.ai/agents) is the product shaped like this article's advice.

FAQ

FAQ

Is a tie-breaker agent the same as LLM-as-a-judge?

Closely related, yes. LLM-as-a-judge is an evaluation technique where one model scores another's output, often pairwise; it agrees with human reviewers about 85% of the time by one widely cited comparison (Confident AI guide). A tie-breaker is the production version: it runs in the request path, must return a structured verdict quickly, and needs a fallback. Treat it as a constrained classifier, not an evaluation lab.

Should the tie-breaker see the two agents' reasoning traces?

Default to no. Clear framing lets one candidate's rationale leak into the verdict, and models over-weight recent and salient evidence when sources conflict (Evidence Arbitration in LLMs). Cap the context to the original request and the two final candidates. If you need reasons, ask the judge to justify its verdict against the rule, not to summarize the agents.

How do I stop the judge from preferring longer outputs?

Put a format rule in the rubric, cap the length of each candidate shown to the judge, and test it. Length bias is a documented failure of LLM judges, which favor longer, more formal responses (consensus and arbitration patterns). A quick test is to pad the weaker candidate with filler and confirm the verdict does not change. If it does, make the format rule a hard constraint and re-test.

What confidence threshold should trigger a human review?

There is no universal number. Calibrate on labeled conflicts: bucket verdicts by reported confidence and check that high-confidence buckets are right more often than low. If your data shows 0.8 confidence is right 60% of the time, either raise the threshold or stop trusting the score. Calibration work before deployment is the difference between confidence weighting helping and amplifying overconfidence (conflict resolution patterns).

What if both candidates are wrong?

The judge should return escalate, not pick the less bad option. Allow an explicit "both wrong" verdict in the schema and route it to a human or to a deterministic repair step. Without that option, the judge will almost always choose one candidate, and your logs will show a clean decision where the truth was that neither was usable. Allowing "neither" is a design choice that makes correlated failure visible.

Sources

Sources

  1. When Your Agents Disagree: Conflict Resolution Patterns for Parallel AI ...
  2. When Your Agents Disagree: Consensus and Arbitration in ...
  3. Choosing Between Building a Single-Agent System or Multi-Agent ...
  4. A multi-expert deep learning framework with LLM-guided ...
  5. Evidence Arbitration in Large Language Models
  6. Distributed job queue data model | YugabyteDB Docs
  7. Multi-Agent Coordination: 10 Strategies to Prevent System Failures
  8. LLM-as-a-Judge Simply Explained: The Complete Guide to ...
About the author

About the author

Antonio Evans
Antonio Evans

Antonio Evans is the founder of Quanta Intelligence and a fractional CTO who builds HIPAA-ready AI systems for health and life-science companies. Before that he was technical co-founder of FriendsEAT for twenty years, CEO of Socialdraft, and a data engineer at IBM. Antonio lives with his dog Santino in Lisbon, Portugal.

All articles