Cap Adversarial Review at Three Cycles
Stop letting your AI review itself forever.
Adversarial self-review, where an agent critiques its own output and then revises, is a genuinely good technique. It catches blind spots a single pass misses. But an open-ended loop has no natural stopping point, so it keeps running long after the returns have gone flat, re-surfacing the same findings and burning tokens while you mistake motion for progress.
Why an uncapped loop stalls
Each review cycle has diminishing returns. The first pass finds the structural problems. The second finds the edge cases the fix introduced. By the third, you are mostly down to stylistic nits and re-litigated opinions. Without a cap, the agent has no criterion to say "done," so it either loops until you interrupt it or declares victory arbitrarily. Endless review feels rigorous but is really just deferring the decision to ship.
The mechanism: three cycles, with early exits
Set a hard ceiling and two early-stop conditions.
Adversarial review loop:
cycle = 1
while cycle <= 3:
findings = review(artifact) # find what's wrong
if only_trivial(findings): break # early exit 1
if human_says("ship it"): break # early exit 2
artifact = revise(artifact, findings)
cycle += 1
- Hard cap at three cycles. Three rounds is enough to shake out real defects; beyond that you are polishing, not fixing.
- Stop early on trivial findings. If a cycle returns only cosmetic nits, revising again is not worth the round trip.
- Stop the moment you say "ship it." Human judgment overrides the loop. The cap is a ceiling, not a quota you must fill.
What surviving findings mean
If real issues are still standing after three rounds, that is not a signal to loop a fourth time. It is information about the artifact itself: the problem is harder or more ambiguous than a review loop can resolve. Do one of two things.
| Situation | Response |
|---|---|
| Trivial nits remain | Stop and ship |
| A hard issue survives three rounds | Escalate to a human or a stronger model |
| The artifact keeps failing broadly | Decompose it into smaller pieces and review each |
Looping again just re-runs the same limited process against the same hard problem.
Power moves
- Log the findings per cycle. If cycle three surfaces problems cycle one already named, your revise step is not actually fixing them, escalate.
- Make "trivial" explicit. Define what counts as a blocking finding versus a nit up front, so the early exit is not a judgment call the agent gets wrong.
- Separate reviewer and author contexts. A fresh reviewing agent each cycle avoids the model defending its own prior fixes.
- Treat the cap as a decomposition trigger. Hitting three rounds without convergence usually means the unit of work is too big.
Resources
- Anthropic — Building effective agents
- OpenAI — Reasoning and self-critique best practices
- Yao et al. — ReAct: reasoning and acting in language models
- Madaan et al. — Self-Refine: iterative refinement with self-feedback
Shipping AI or cloud systems? Yeda AI audits and hardens production LLM and container pipelines. Talk to us · Read the blog