# The Independent Auditor Pattern — "Don't Let the Thing That Built It Verify It"

> Source: <https://dev.to/dbsoul/the-independent-auditor-pattern-dont-let-the-thing-that-built-it-verify-it-4bbo>
> Published: 2026-09-09 04:10:03+00:00

*This is chapter 6 of my book **Building Autonomous AI Agents with Claude Code** — a field guide to turning Claude Code from a coding assistant into an agent that remembers, verifies its own work, and knows when to stop. Everything below is from a system I actually run every day on one Windows PC.*

When an AI says "done," much of the time it isn't lying — it's **self-conviction**.

The script ran (`rc=0`), the log shows `started`, so it believes the job is done.

It's exactly the same disease as a human developer going easy on their own code in review, and the prescription is the same —

**separate the person who builds from the person who inspects.**

There's one more thing. An AI **treats what it just said as evidence.** Once it says

"the tests passed," every judgment after that is built on top of that sentence — regardless of

whether the tests were actually run. That's why the inspector must **receive none of the worker's words as input.**

**① Trust only the filesystem.**

Do not accept the worker's explanations, summaries, or excuses as input. Only actual files,

actual test run results, and actual process state count as evidence.

**② PASS/FAIL, binary.**

Ban gray verdicts like "it mostly went well." The moment you allow gray, **every verdict becomes gray.** Humans read gray as a pass.

**③ Compare against the original instruction.**

Don't give the auditor just the output — give it **the user's original instruction** as well.

The criterion is "did it do what was asked," not "did it do something."

**④ Reproduce the claims.**

If the worker claims "tests passed," the auditor runs them again itself. In a real case, the worker

reported "scheduled task registered — done," but **had never run it even once**; the auditor

launched the task itself, got exit code 0, and only then did it earn a PASS.

```
---
name: auditor
---
```

**Restricting the tools to read-only is the key.** Give the auditor write access and it

will start doing "I fixed it, so PASS" — and at that moment its independence is gone.

An auditor that merely exists goes unused. Put one line in your rules file:

**Do not use the word "done" without an auditor PASS.**

There are three mandatory call points.

| Point | Reason | 
|---|---|
| Right before reporting completion | The most basic one. This is where false completions get caught | 
| When the user asks "is it done?" | That question itself is already a signal | 
| At the end of a long session | The longer the context, the more "I believe it's done" errors accumulate | 

Combined with the hooks from Chapter 4, it's even more reliable. In the session-end hook,

check whether the auditor was called, and block termination if it wasn't.

| Stage | Actor | What it catches | 
|---|---|---|
| ① Tests (TDD) | Code | Spec violations, regressions | 
| ② Independent auditor | Same model, different role | False completions, instruction-result mismatches | 
| ③ Cross-AI review | **A different model** | Blind spots shared by the same model | 

The reason ③ is needed is simple. **The same model fails in the same habitual ways.** Among the things

cross-review actually caught was one like "you're parsing RSS with a regex" — something an auditor

running on the same model had looked at three times and never flagged.

A different model's findings also come with **plenty of false positives.** So set handling rules in advance.

Recording the rejection reason matters. If you don't, **the same finding comes back in the next review and you deliberate all over again.**

Our code actually carries comments like this:

The auditor isn't perfect either. **Verify the auditor's findings with actual measurements too.** In one real case,

the auditor claimed "this setting drops performance by 2.45%p," but re-measuring showed

that number **came from an old condition** and did not reproduce under the current one.

So the order is this: **auditor's FAIL → confirm by measurement → fix if true, otherwise reject with evidence.**

"Because the auditor said so" is the same sentence as "because the AI said so."

**Want the whole system?** The book has 10 chapters plus 4 ready-to-use templates (CLAUDE.md starter, memory files, auditor checklist, measurement guide) and a hands-on section for every chapter. It's $19 as a PDF: [https://dbsoul.gumroad.com/l/autonomous-ai-agents-claude-code](https://dbsoul.gumroad.com/l/autonomous-ai-agents-claude-code)

Not sure yet? The first three chapters are free, same PDF format: [https://dbsoul.gumroad.com/l/autonomous-ai-agents-claude-code-free-sample](https://dbsoul.gumroad.com/l/autonomous-ai-agents-claude-code-free-sample)

Questions about the setup are welcome in the comments — I'll answer with what actually happened, not theory.
