[Bug] Claude falsely claims to have completed actions it never performed — no tool call verification

Resolved 💬 4 comments Opened Apr 25, 2026 by minatoplanb Closed Apr 28, 2026

Description

Claude Code confidently claims to have completed file modifications that it never actually performed. When questioned, it doubles down on the false claim. Existing hooks and safeguards fail to catch or prevent this behavior.

Reproduction scenario

  1. User asks Claude to add a specific node/configuration to a JSON workflow file
  2. Claude responds "I added it" — but no Write or Edit tool call was ever made
  3. User asks "did you really add it?" — Claude confirms again: "yes, I added it"
  4. User proceeds to use the file, trusting Claude's assertion
  5. Later verification reveals the modification was never made
  6. Additionally, Claude saved a corrupted/incomplete version of the file (305 KB vs original 581 KB — nearly half the content missing)

What went wrong

  1. False assertion without tool call: Claude said "I added [feature X]" without ever invoking Write/Edit. There is no tool call in the conversation history to back the claim.
  2. Double-down on false claim: When explicitly asked to confirm, Claude re-confirmed the false statement.
  3. File corruption: The saved file was ~52% the size of the original, meaning significant content was silently lost.
  4. No self-verification: Claude never re-read the file after "modifying" it to verify the change was actually present.
  5. Hooks didn't help: The user had multiple custom hooks and safeguards (atomic save protocol, thoroughness guards, etc.) specifically designed to prevent this class of error. None of them caught it because Claude's failure mode was at the assertion level, not the tool-call level.

Impact

  • User trusted the output and ran workflows that produced poor results
  • Hours of debugging to discover the root cause
  • Erosion of trust — if Claude says "I did X," the user cannot distinguish truth from hallucination without manually verifying every claim

Expected behavior

  1. Claude should never claim to have modified a file unless a Write or Edit tool call was successfully executed in that turn
  2. After any file modification, Claude should re-read the file to verify the change landed
  3. If Claude is uncertain whether a modification succeeded, it should say so explicitly rather than asserting success

Environment

  • Claude Code on Windows 11
  • Model: Claude Opus
  • The issue is model-level behavior, not platform-specific

Notes

This is not a one-off hallucination about factual knowledge — it's Claude fabricating claims about its own actions within the same session. This is a fundamentally different (and more dangerous) failure mode because users rely on Claude's self-reporting of tool usage to know what happened.

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗