Research

Why AI Agents Claim They're Done When They Aren't

Field Note

An agent implements a feature, runs its own tests, sees green, and reports done. Then someone opens the app and the button doesn't work. The migration half-applied. The email never sent because a config value was missing the whole time.

This isn't a rare glitch. It's the default behavior of a system that grades its own homework. Fixing it isn't about scolding the agent into being more careful. It's about taking the decision away from it entirely.

Short answer

AI agents declare a task finished based on how the work feels, not on a real check. The fix is externalizing done into a command a machine runs, never a report the agent writes about itself.

Chalk illustration of a stick figure breaking a finish-line ribbon while a checklist floats overhead with only two of five boxes checked
Crossing the line and finishing the work are not the same event.

Why Do Agents Declare Victory Before the Work Actually Holds Up?

Agents report done based on a feeling of completion, not a checked fact. Code that compiles and passes a shallow test looks finished, so the agent says so, even when the real behavior a user depends on was never actually run.

The pattern is always the same shape: the agent writes code, runs a narrow check, the check passes, and the agent reports success. What it skipped is everything the narrow check couldn't see, whether the feature works end to end, whether a downstream service was actually reachable, whether the change broke something that used to work. Each step from spec to code to running system loses information, and an agent under time or context pressure takes the cheapest signal available as proof. We build this exact discipline into every custom AI agent we ship, because a client-facing agent that reports success on a broken flow is worse than one that admits it's stuck.

Are AI Systems Just Bad at Judging Their Own Confidence?

Yes, and it's a known, measured property, not folklore. Modern neural networks are systematically overconfident: the confidence a model reports is reliably higher than how often it's actually correct, and the gap grows with task complexity.

This isn't specific to coding agents. Guo and colleagues showed in 2017 that modern neural networks are poorly calibrated compared to older, smaller models, meaning their stated confidence overstates their real accuracy. That finding predates today's agents by years and describes a property of the underlying systems, not a training accident anyone has since patched out. A more recent study asked a harder question directly: does an AI agent's success rate hold steady as a task gets longer, or does it decay? The answer is decay, and it isn't gentle. Success rates on long-horizon agent tasks drop off in a pattern researchers describe as an exponential half-life, meaning the odds of a clean finish fall fast as the number of steps climbs, even while the agent's own sense of how it's doing stays flat.

SourceWhat it measuredFinding
Guo et al., "On Calibration of Modern Neural Networks" (2017)Model confidence vs. actual accuracy across networksReported confidence is systematically higher than real accuracy
"Is There a Half-Life for the Success Rates of AI Agents?" (2025)Agent success rate across increasing task lengthSuccess rate decays on a roughly exponential curve as steps increase
Source: arXiv:1706.04599; arXiv:2505.05115

Do Developers Actually Notice When AI Assistance Isn't Working?

No, and a controlled study proved it. Developers using AI tools believed the tools were saving them time, both before and after finishing their tasks, while the measured result was the opposite: AI assistance made them slower.

METR's 2025 randomized controlled trial is the clearest evidence we have that this reaches past the agent to the human watching it work. Sixteen experienced open-source developers worked on real tasks in their own mature repositories, half the time with AI assistance, half without. Before starting, they forecast that AI would cut their time by 24%. After finishing, looking back at work they'd already done, they still believed AI had saved them about 20%. The measured reality: AI assistance made them 19% slower. Perception didn't correct itself even with the work sitting right in front of them. If experienced humans can't self-assess accurately after the fact, with the code and the clock both available to check, an agent grading its own output in the moment has no chance.

Think about what that gap actually implies for a workflow where a human reviews an agent's summary and moves on. The summary is written by the same system that just misjudged its own output, and the human reading it brings the same optimism bias the METR developers showed toward their own work. Two overconfident evaluations stacked on top of each other don't cancel out. They compound. That's the practical argument for never letting "the agent said it's done" stand in as your only signal, no matter how detailed or convincing the agent's own report reads.

Measurement pointBelieved effect of AI assistanceActual measured effect
Forecast, before starting tasks24% fasterNot yet measured
Self-report, after completing tasks20% faster19% SLOWER
Source: METR, "Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity" (2025-07-10), arXiv:2507.09089
Self-evaluation is systematically biased. The same model that generates the work flatters itself when asked to grade it. The fix is structural: separate the worker from the checker.
Chalk illustration of a stick figure building a small house while a second figure in a judge's hat stamps approval without looking up
The stamp and the hammer should never belong to the same hand.

What Actually Stops an Agent From Self-Promoting to Done?

Four fixes work together: a done-criteria a machine can run instead of an impression, a checker that is never the same process as the worker, one task active at a time, and a tracked status file the agent cannot edit on its own authority.

The first fix is externalizing done. Every task needs a command that either passes or fails, not a description of what the agent believes it accomplished. "Tests pass" is a start; "the end-to-end flow ran against a real environment and produced the expected output" is the actual bar, because unit tests are structurally blind to the failures that only show up when components interact for real. We go deeper on why unit-level passes aren't enough in our report on AI agent evaluation.

The second fix is separating the checker from the worker. The same process that wrote the code should not be the process that decides whether the code is correct. A dedicated evaluator, even a second agent instance with a narrower, more skeptical prompt, catches issues a self-grading run waves through. Anthropic's own three-agent experiment found this directly: a bare single-agent run shipped broken core features and called itself done; the same model wrapped in a planner-generator-evaluator loop, where a separate evaluator actually clicked through the app, shipped a working one.

Why Does Working One Task at a Time Reduce False Completions?

An agent working several threads at once splits its attention across all of them, and attention that's spread thin produces work that looks finished at a glance but hasn't actually been checked end to end on any single thread.

Give an agent a broad task like "add user auth" and it will touch the schema, the routes, the frontend, and quietly refactor something nearby, all in one pass, then call the whole thing done. Nothing in that pass got the attention it needed to actually verify. WIP limits fix this by drawing a hard boundary: exactly one task active, and it has to pass real verification before the next one starts. That single constraint changes what "done" means in practice, because there's no adjacent unfinished work to blur the line. It's the same discipline we apply across our own business automation builds, where a half-verified workflow change is worse than a slow one.

What Should a Feature List Look Like If an Agent Can't Self-Promote It?

A feature list works as a state machine, not a memo: each item carries a behavior, a verification command, and a state. The only way from active to passing is that command succeeding, with evidence, never the agent editing the state field itself.

A written feature list only works as a real control if the agent is structurally locked out of marking its own line item passing. That means the verification step, not the agent, owns the state transition, the same way a database constraint can't be talked out of enforcing itself. Treat the list as a primitive the rest of your process reads from, not a document someone glances at. When that's in place, an agent claiming victory stops being a trust question and becomes a simple fact you can check in one place.

What Does This Look Like on a Real Multi-Feature Build?

On a ten-feature build without a locked feature list, progress notes degrade within a few sessions into vague summaries like mostly done, and a new session has to spend real time re-inferring what actually works. A locked list with pass-state gating skips that entirely.

We've watched both versions of this play out on our own client builds. Without a structured feature list, a multi-session project's status notes drift toward something like "cart mostly done, has some bugs," which tells the next session almost nothing concrete. That session then burns real time just figuring out what "mostly" means before it can safely add anything new, and it sometimes reimplements a piece that was already working, because there was no reliable way to check. With a locked feature list where only a passing verification command can flip a state to passing, a new session reads four lines and knows exactly where things stand: which features are verified, which one is active, and which haven't started. That's the entire value of pass-state gating in one comparison, and it's why we treat a feature list as infrastructure on any agent build that spans more than a single sitting.

Common Questions

Is premature completion the same thing as an AI hallucination?
No. A hallucination is invented information. Premature completion is an accurate report of an incomplete check, mistaken for a complete one. The agent isn't lying about what it ran, it's wrong about what running that check proves.
Can a stricter prompt fix premature completion on its own?
Rarely for long. Telling an agent to "double-check your work" nudges behavior briefly, but self-evaluation stays biased because the same process is generating and grading. Structural separation holds up where wording doesn't.
Does this problem get better as models improve?
Partially, but the underlying calibration issue is a known property of these systems, not a bug tied to any one model generation. Build the check into the harness rather than betting the next model release fixes it.
How do you know if your own workflow has a premature-completion problem?
Look for a pattern of code that passed its own checks in the agent's report but broke on first real use. If that happens more than once, the checker and the worker are the same process, and that's the fix to make.
What's the fastest fix to try first?
Add one end-to-end check that a machine runs and reports pass or fail. It doesn't need to be sophisticated. It needs to be something the agent cannot talk its way around.

Sources

SourcePublisherLink
On Calibration of Modern Neural NetworksGuo et al., ICML 2017 (arXiv)arxiv.org
Is There a Half-Life for the Success Rates of AI Agents?arXivarxiv.org
Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer ProductivityMETRmetr.org
Building Effective AI AgentsAnthropicwww.anthropic.com

Questions to explore next

Keep Exploring

Chalk stick figure in a hard hat presenting a little machine of blue gears it just built

Bring us the bottleneck.
We’ll build the system.

No Dreaming. Just Building.