Claude Code (and every other agentic coding tool) has the same structural problem: the model that writes the plan is often the same model that approves it. No adversary, no second opinion, just one context nodding along with itself.
I ran into this directly while building an automation-heavy Obsidian vault with a fleet of subagents. A "Leader" agent would draft a plan, then immediately bless its own plan as sound. Bugs that should have been obvious sailed through, because nothing in the loop was actually incentivized to disagree.
The pattern
Separate the agent that writes from the agent that checks:
- Writer - drafts the plan/code, has full context on the problem, is optimizing for "this works."
- Checker - sees only the spec and the diff, never the writer's reasoning, is optimizing for "find what's wrong with this."
The checker's context window never includes the writer's justification. That's the whole trick. If the checker can see "here's why I did it this way," it anchors on that explanation instead of independently verifying the change against the spec.
A minimal version
- Writer produces a spec (even a short one) before touching code.
- Writer implements against the spec.
- Checker gets ONLY the spec plus the diff, not the writer's chat history.
- Checker's job is explicitly adversarial: find reasons this is wrong, not reasons it's fine.
- Only after the checker signs off does the change land.
This works with two separate agent sessions, two different subagents, or even just you manually reviewing a diff against a spec you wrote before you started coding. The mechanism is the separation, not the tooling.
Where this came from
I wrote this up as a full reusable pattern with OpenSpec-style templates after using it across a couple of my own projects. It is free:
https://claudiovibes36.gumroad.com/l/gyedr
There's also a paid Kit that goes further into the full governance workflow this pattern is one piece of (spec structure, the zero-token-cost review discipline, a real case study), linked from that free page.
Curious whether others running Claude Code, Cursor, or Codex day to day have hit the same self-approval failure mode, and how you have dealt with it.
Top comments (1)
The independent-checker pattern is one of the simplest upgrades that actually changes behavior. A coding agent is motivated by its own plan, so its review often explains why the plan is fine. A separate checker with a smaller mandate can be much more annoying in the useful way.