Why can't my agent catch its own mistakes?

Asking the model that produced an answer to grade it is asking it to be objective about its own taste. It recognizes its own style, scores it higher, and signs off on the error it just made.

B

Balagei G Nagarajan

5 MIN READ


Even a frontier model favors its own work: GPT-4 can identify its own outputs about 73.5% of the time and scores them higher than humans do. So an agent asked to check itself is biased toward approving the very error it just made (LLM Evaluators Recognize and Favor Their Own Generations, arXiv:2404.13076, 2024).

An AI figure admiring its own reflection in a mirror that flatters it, while a separate plain inspector with a checklist stands to the side seeing the flaw the reflection hides
Bring in a check the generator cannot bias.
— from “Why can't my agent catch its own mistakes?”

Key facts.

Why can't the generator grade itself?

Because the act of grading runs on the same machinery that produced the answer. A model recognizes its own stylistic and distributional patterns, frontier models can identify their own outputs at well above chance, GPT-4 around 73.5%, and the stronger that self-recognition, the stronger the self-preference: it scores its own work higher than humans rate it (self-recognition). The same pull shows up as favoring familiar, low-perplexity text, exactly what the model itself generates (self-preference). So when an agent reviews its own output, it is predisposed to approve it, not because the output is correct but because it is recognizably its own. The reviewer and the author share a taste, which is the one thing an objective check cannot have.

Why doesn't the agent at least flag low confidence?

Because its confidence is not a reliable error signal. Models are poorly calibrated: they attach high confidence to wrong conclusions just as readily as to right ones, so a self-reported certainty does not separate the cases (Just Ask for Calibration). The internal confidence is not grounded in any external outcome, so a fluent, plausible mistake, the dangerous kind, comes out with the same assurance as a correct answer. The model cannot point to where it went wrong because, from inside its own generation, the error looks like part of a coherent whole. Asking it whether it is unsure is asking the wrong instrument: the one signal that would catch the mistake, a comparison against reality, is exactly the signal the generator does not have.

# The grader must be independent of the generator
draft = generator.run(task)
ok = generator.judge(draft) # self-grading: favors its own style, misses the error
ok = different_model.judge(draft) # better: no shared self-preference
ok = check_against_world(draft) # best: deterministic, grounded in the real outcome

How do you give the agent a real error signal?

Bring in a check the generator cannot bias. Decouple generation from verification: use a different model or family as the judge so there is no shared self-preference, and prefer deterministic checks, schema and rule validation, and assertions against the real environment state, which are grounded in the outcome rather than in the model's taste. Use cross-model disagreement or debate as a trigger to escalate, and add uncertainty estimates that come from outside the generator's own logits. Gate high-stakes or genuinely low-confidence steps to a human. The principle is constant: the error signal has to originate somewhere the generator's preferences cannot reach, because anything inside the model inherits the blind spot that produced the error in the first place.

Two evaluation setups: self-grading where the same model scores its own output and approves it despite a flaw, and independent verification where a different model plus a deterministic real-world check catches the flaw the self-grader missed

Self-grading versus independent verification

PropertyThe generator grades itselfIndependent verification
Self-preferenceFavors its own styleNo shared taste
CalibrationConfident when wrongGrounded in outcome
Error signalNone it can't biasExternal, objective
Best tooln/aDifferent model + deterministic checks
Low confidenceNot reliably surfacedEscalate to human

A model rates its own output higher; a more capable one signs off on the same error, and the rework follows. (arXiv:2404.13076)

The pattern is that a model cannot objectively grade its own work, it recognizes and favors its own outputs and its confidence does not track truth, so self-verification approves the very errors it just made. Verify with a different model and, where possible, deterministic checks against the real outcome, and escalate genuine uncertainty to a human, and the agent gains an error signal it could never produce about itself. Sourcing verification from outside the generator is reliability at the pattern level, which is what VibeModel builds as the Pattern Intelligence Layer.

Frequently asked questions

Can't I just prompt the agent to double-check its work?
It will, and it will tend to approve its own output, because it recognizes and favors its own style and its confidence does not track correctness. A self-review inherits the blind spot. Use an independent verifier instead.

Is a different model enough, or do I need deterministic checks?
A different model removes shared self-preference, which helps. Deterministic checks against the real outcome are stronger still because they are grounded in reality rather than any model's taste. Use both where you can.

Why isn't the model's confidence a useful filter?
Because it is poorly calibrated, so it is confident on wrong answers as often as right ones. The certainty is not grounded in the outcome, so it cannot separate the mistakes from the successes.


Share this post

Join the discussion

Have a take, a war story, or a question? Sign in with GitHub to comment and react. Comments are powered by GitHub Discussions, ad-free and yours to moderate.

Continue Reading

Find where your agent breaks, before you build it

Faultmap maps where your agent will fail from the goal and your data, then hands you the first test suite it has to pass.