Verification and acceptance in a coding harness.
The agent cannot mark its own homework, and there is now published evidence rather than just a suspicion.
Verification is the part of a harness that checks the agent's output before a human spends attention on it, and it is the single strongest predictor of whether an agent is worth using. Agents are unreliable judges of their own work: Anthropic documents that when asked to evaluate what they produced, agents tend to praise it confidently even when quality is obviously mediocre. The fix is separating the evaluator from the generator and wiring deterministic checks into the loop.
The self-evaluation problem
Anthropic's harness-design article states it plainly: when asked to evaluate work they have produced, agents tend to respond by confidently praising it, even when a human observer would call the quality obviously mediocre. That single finding invalidates the most tempting harness design, which is to ask the model whether it is finished. Their answer is architectural, separating a generator from an evaluator so the judging is done by something that did not write the code.
Computational checks first, always
Böckeler's split is the right ordering rule. Computational sensors, tests, linters, type checkers and structural analysis, are deterministic, run in milliseconds to seconds, and give reliable answers. Inferential ones, AI review and LLM-as-judge, are slower, more expensive and non-deterministic. Reaching for an inferential check where a computational one would do is paying more for a less trustworthy result.
Write sensor output for the model
The refinement worth copying is that a sensor is much more useful when its output is written to be consumed by a language model. A linter message that carries its own correction instructions closes the loop without a human in it. Böckeler describes this as a positive kind of prompt injection, which is exactly the right way to think about it.
The publish-state guard
A failure mode nobody else seems to document: after an acceptance check passes, an agent can still run something destructive against the very artifacts it just validated, and the passing result is undone with no record of why. Lucid Train blocks destructive commands against touched artifacts once a check has passed, unless the model supplies an explicit override together with new failing evidence. The guarantee is that a green result stays green unless something demonstrates otherwise.
Isolation is part of verification
Where a failed attempt lands decides how many attempts you are willing to allow. Lucid Train runs dispatched sub-agents in isolated git worktrees and applies the diff back on success, so a bad attempt is discarded rather than reverted, and speculative work costs nothing to abandon.
Harnessability
Böckeler's uncomfortable observation is that not every codebase is equally amenable to this, and the harness is most needed where it is hardest to build. A greenfield service can bake in the checks; a legacy monolith with slow flaky tests and no type coverage resists exactly the verification that would make an agent safe on it. That is a real constraint on where agentic coding pays off, and it is not a tooling problem.
Checks by cost and reliability
| Check | Type | Speed | Reliability |
|---|---|---|---|
| Type checker | Computational | Milliseconds | Deterministic |
| Linter with model-readable output | Computational | Seconds | Deterministic |
| Unit tests | Computational | Seconds | Deterministic if not flaky |
| Structural or architecture fitness checks | Computational | Seconds | Deterministic |
| Dependency audit | Computational | Seconds | Deterministic |
| AI code review | Inferential | Tens of seconds | Non-deterministic |
| LLM as judge | Inferential | Tens of seconds | Non-deterministic, biased toward praise |
| Human review | Human | Minutes to hours | The scarce resource |
Questions
Related
- What Is a Coding Harness?Everything in the agent that is not the model. The part you can actually change.
- Harness Engineering vs Context EngineeringOne is a component of the other, and confusing them is why teams optimise the wrong thing.
- Coding Agent vs HarnessAgent equals model plus harness. The harness is the half you control.
- Is Claude Code a Harness?Both, and the confusion is in the question rather than the answer.