A viral post made the rounds recently: "How to Make Claude Code Stop Making Stuff Up When It Doesn't Know." It described a 4-layer setup — honesty rules in CLAUDE.md, verification protocols, linter hooks, and a fact-checker subagent — to catch Claude fabricating functions, faking test results, and confidently delivering nonsense.
The post was good. The problem it named is real. But the solution is a duct-tape stack, and every layer has a gap the next one is supposed to cover. Four moving parts, all configured by the user, all depending on the agent's willingness to follow the rules that are supposed to catch it breaking the rules.
I built a single hook that replaces all four. Here's why the layers don't hold, and what does.
What the 4 layers actually are
Layer 1: Honesty rules in CLAUDE.md. Tell Claude to admit uncertainty, cite file:line when referencing code, and ask before adding dependencies.






