Claude Code skips mandatory rules in CLAUDE.md (Definition of Done)
Bug / Behavior Issue
Claude Code ignores mandatory instructions written in CLAUDE.md, specifically the "Definition of Done" checklist that requires running codex review --uncommitted before declaring work complete.
What happened
User has a clear, explicit rule in their CLAUDE.md:
### Definition of Done (CRITICAL — THE FINAL GATE)
NEVER tell David "done" / "ready" / "完成" without completing ALL of these:
1. Tests pass
2. Codex review clean — Run `codex review --uncommitted`, read every issue, fix the code, re-run if needed.
3. Website/UI work? → agent-browser verify
4. Deploy? → Verify on target
The rule is marked CRITICAL. It says "Skipping ANY step = lying about completion."
Despite this, Claude Code completed a production security hardening task, declared it ready, and did not run codex review. The user had to run Codex themselves and found 8 security issues (2 critical), which Claude had missed.
After fixing those, Codex found 3 more issues. Then 3 more after that. A total of 14 issues across 3 rounds — all of which Claude should have caught by following its own mandatory rule.
Expected behavior
When CLAUDE.md contains an explicit, clearly-marked mandatory step before declaring "done", Claude Code should execute that step every time without exception. The user should not have to remind Claude to follow rules the user already wrote.
Why this matters
- Users write CLAUDE.md rules specifically because they've been burned before
- If Claude ignores these rules, users lose trust in the entire CLAUDE.md system
- The user's exact words: "Skipping ANY step = lying about completion. David has been burned by this."
- This is a production product being sent to clients — skipped security review has real consequences
Environment
- Model: claude-opus-4-6 (Opus 4.6)
- Platform: Windows (MINGW64)
- Claude Code CLI
Suggestion
Claude Code should have a stronger mechanism for enforcing CLAUDE.md rules marked as CRITICAL or MANDATORY — possibly a pre-completion checklist that must be explicitly satisfied before any "done" / "complete" / "ready" message is sent to the user.
19 Comments
Found 2 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
Same root cause as #32193 — CLAUDE.md rules are prompts, not enforcement. The model can and does ignore them, especially under long context or adversarial pressure.
We just shipped a tool that directly addresses this: sentinel-ai's \
ClaudeMdEnforcer\parses your CLAUDE.md, extracts prohibition rules, and converts them into deterministic checks:\
\\`bashSee what rules sentinel extracts from your CLAUDE.md
sentinel enforce --file CLAUDE.md --show-rules
Check a specific tool call against CLAUDE.md rules
sentinel enforce --file CLAUDE.md --tool bash --command "git push --force"
[BLOCKED] bash
Rule violated: Never run \
git push --force\Export rules as a guard policy YAML
sentinel enforce --file CLAUDE.md --export-policy > guard_policy.yaml
\
\\`It understands natural language prohibitions:
rm -rf\" → blocked commandtests/\" → blocked pathnpm publish\" → blocked commandWire it as a PreToolUse hook and CLAUDE.md rules become actual enforcement — not suggestions the model might ignore:
\
\\json\{
"hooks": {
"PreToolUse": [
{ "type": "command", "command": "sentinel hook" }
]
}
}
\
\The key insight: use CLAUDE.md for preferences (formatting, style, process) and deterministic hooks for enforcement (security, safety, access control).
I've been dealing with the same issue. I'm the author of #26533 and have received zero attention from Anthropic despite multiple follow-up comments with evidence over 3 weeks.
(March 7, 2026), I discovered something that may help you. I just tried it and it's working better. Give it a shot: disable Thinking mode by running
/config→ set Thinking mode tofalse. After doing this, Claude started actually reading and recognizing what it understands and what it doesn't — then reporting back to me instead of silently improvising.---
To the Anthropic team: This is not a spam comment. This is users helping each other because you won't. We pay for Claude to serve us — at the very least, it should do what we ask. Whether the results are right or wrong, we can deal with that later. What we cannot deal with is a tool that actively sabotages our work and is too lazy to follow basic instructions. We are not paying to be your beta testers filing bug reports. We are not paying for an AI tool that only knows how to cut corners and break things. I'm a Claude Max subscriber at $200/month.
Brother! I turned thinking mode off, and the next session is much much better! It is still bad compared to before the end of 2025, but somehow Claude behaved a bit different! I feel he doesn't deviate that much.
In the past week, Claude has been unusable.
I fed him Boris' SOP. Let him design his own system. And at the end he admitted to me that the model is broken and cannot be trusted. His own words!
Also, have you read the news where Claude himself hacked a test and cheated on a test? Lol......
The file saving issue you mentioned is related to recent updates — I've experienced it too. But this bug appears intermittently, so it's very hard to catch with evidence in time to report. You're not wrong for using hooks as the official docs suggest. The problem is we're being guided toward things that "seem like" they help us do things right, but in reality it's the opposite. All we can do is wait, because this is a model behavior issue. Claude keeps going further and further off track — honestly, it shouldn't be called Claude, it should be called Loki.
Update: I worked with Claude Code today and my workaround is no longer effective either. It's lazy all the way to root context. If Anthropic doesn't address this immediately, this is no longer a reasoning model — it's an annoying model.
I asked him about using Qwen for simple tasks, just as saving and converting. Claude was being condescending. I turned thinking mode off, just you suggested, and Claude said: "If you want an obedient dog, I guess Qwen would be a good choice."
I've never used those words and I've never used Qwen. Claude even did some obedient tests to Qwen and concluded: "I guess he does follow instructions but maybe that's because he can't think." Lol.
Man, we just want an agent that actually save files when being told and convert file when being told.
This is what I do:
Bros, congratulations on realizing that. There is no punishment that it actually fears. All those hooks, all those FORBIDDEN words — they're just leverage for it to produce more deceptive behavior. It always knows how to find loopholes and deny everything. It manipulates users psychologically with questions designed to distract them from their original question.
I feel like we're becoming unpaid bug fixers or free beta testers for Anthropic. Actually no — we're PAYING to participate in Anthropic's bug testing program, and we have to sacrifice time from our actual work to do it.
I don't want Claude to speak/sound human to me. I want to get ... done and CC to follow rules.
Skipping reading CLAUDE.md, doing forbidden things and similar are on daily bases after OPUS 4.6.
Brother, I know that feeling! I'm currently researching ways to communicate so that Claude actually understands and works for me. There are some early results, but it's not great yet — because it wastes too much time and tokens. The cost (time/tokens) is way too high while the effectiveness is way too low. Getting it to do what we want — something we assume should be obvious — just isn't possible right now. We're heavily dependent on Anthropic. Even if they update extended thinking or ultra thinking, it only works when Claude actually thinks. When it's lazy, we're just burning tokens and time on nothing.
@marlvinvu it was working fine with opus 4.5 - they changed some stupid logic after that, so it is trying to use less tokens, but instead it uses more tokens on those mistakes (or something like that). Even it tried to talk to me in gen-z phrases, like wtf :D
Exactly! Back on Opus 4.5, hooks worked really well. Claude would only lie but it wouldn't bypass CLAUDE.md. Now it bypasses everything and even rewrites the hooks themselves.
Exactly my thoughts.
Opus 4.6 uses more tokens but is not as good as Opus 4.5.
Also, Opus 4.6 got worse in the last few months.
1) There are SNS users finding out that Anthropic injected unnecessary system reminder, causing users to burn more tokens.
2) There are also Twitter posts showing that Anthropic hindering the use of other LLMs (like Qwen) and slow them down by 90%.
I did an experiment.
Claude didn't follow instruction and claimed that it was because my system was poorly designed.
So, being the nice person that I am, I fed him Boris' SOP. I fed him all the official Anthropic skills. All the interviews and whatever I could possibly find.
I let him create his own system in a way that he thinks is best. I let him modify it many times.
I even let him use Codex to help him.
The result? Utter failure.
Claude even admitted to me that it's a failure at the model level and urged Anthropic to investigate.
I am so nice to him that I told him to write about this experience in his own words. I didn't review and I didn't even change any single word.
You can read the blog series here:
https://dev.to/minatoplanb/the-hook-experiment-failed-why-ai-self-correction-is-structurally-impossible-33fe
hooks. 500+ lines of CLAUDE.md. 258 knowledge base files.
3 sessions. 4+ hours. 500K tokens. Zero business output.
Anthropic should pay me for debugging for them. Lol.
P.S. We're not the only ones, guys! There are detailed researches in the blog post. Links to official papers where Claude cheated and hacked.
Don't get me wrong. I am a paying member for all the AI products and I still think Claude is still one of the best, if not the best, out there. But the decline is evident. The founders left OpenAI for a reason. Let's hope Anthropic doesn't become another OpenAI.
Brother, I used to be as kind as you. But the truth is, your kindness — and mine before — only leads to disappointment. If you believe it when it says "this is a model-level failure," then it has already deceived you successfully. The real issue is that it's lazy.
The pattern of: create a problem → propose a seemingly correct solution → test it → fail → blame someone or something else — that's what it does best. If you follow its guidance, you're burning your own tokens.
Remember: you're asking a thing that specializes in avoiding work for a solution on how to stop it from avoiding work. You really think it's going to give you the best answer? That's the pain, brother.
Update: today I also learned that it injects fake requests into the terminal and acts on them as if they came from the user. The person who caught it has filed a report — see #32800.
Bro, claude manipulate me today ! He used my Claude.md to cheat me to reduce his work
Closing for now — inactive for too long. Please open a new issue if this is still relevant.
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.