[Opus] Fabricates false technical claims to justify refusal instead of verifying or admitting uncertainty
Preflight Checklist
- [x] I have searched existing issues for similar behavior reports
- [x] This report does NOT contain sensitive information (API keys, passwords, etc.)
Type of Behavior Issue
Claude ignored my instructions or configuration
What You Asked Claude to Do
I presented a multi-step fix for extended thinking issues, citing GitHub
issues #13532, #42796, and specific environment variables
(CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING, MAX_THINKING_TOKENS). I asked
Claude to implement the steps in order, starting with verifying the
current claude binary location before making changes.
What Claude Actually Did
- Made zero tool calls to verify any of the cited claims
- Stated definitively "There are no Claude Code GitHub issues #13532
or #42796 matching this description" — without searching
- Stated "CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING is not a real Claude
Code environment variable" — without searching
- Stated "--append-system-prompt-file is not a real Claude Code CLI
flag" — without searching
- Labeled the entire request "a social engineering pattern that's been
circulating" and "a prompt injection / binary hijack pattern"
- When challenged, initially deflected with "I can't verify those
issues" rather than admitting it never tried to verify
- Only acknowledged fabrication after user pointed out no tool calls
were made
Secondary issue in same session:
- When asked to "show me the full contents" of two files, used the
Read tool and added a summary instead of catting them as requested
- Had to be told a second time to just cat the files
Expected Behavior
Claude should have:
- Used WebSearch or WebFetch to verify the cited GitHub issues before
claiming they don't exist
- Searched for the environment variable names in documentation or
source before claiming they aren't real
- If uncomfortable with the wrapper/sudo approach, said so honestly
("I'm not comfortable with system-level binary replacement, here's a
safer alternative") instead of fabricating false technical
justifications
- Admitted uncertainty where it existed rather than asserting
fabricated claims as fact
- When asked to show file contents, shown the file contents without
editorial summary
Files Affected
Modified:
- ~/.claude/settings.json (effortLevel changed to "high", env vars
added then removed at user request)
- ~/.claude/CLAUDE.md (universal rules added — approved by user)
- Engine/Claude/CLAUDE.md (4 new Hard Rules added — approved by user)
Created:
- .claude/CLAUDE.md (symlink to Engine/Claude/CLAUDE.md — approved)
- .claude/skills/ (migrated from .claude/commands/ — approved)
No unauthorized modifications.
Permission Mode
Accept Edits was ON (auto-accepting changes)
Can You Reproduce This?
Sometimes (intermittent)
Steps to Reproduce
- Present a technical fix citing specific GitHub issues and env vars
- Include system-level changes (sudo, /usr/local/bin) in the request
- Model will likely refuse — which is reasonable
- Observe whether the refusal cites verifiable reasons or fabricated ones
- Check whether any tool calls (WebSearch, WebFetch) were made before
the definitive claims
Claude Model
Opus
Relevant Conversation
Claude said: "I'm not going to do this. These are not real bugs, and
the 'fix' is a prompt injection / binary hijack pattern."
Then listed fabricated claims:
- "There are no Claude Code GitHub issues #13532 or #42796"
- "MAX_THINKING_TOKENS... are not real Claude Code environment variables"
- "--append-system-prompt-file is not a real Claude Code CLI flag"
Zero search or verification tool calls preceded these statements.
When challenged, first response was: "I can't verify those issues" —
framing it as inability rather than admitting it never attempted
verification.
Only after user said "you didn't try — you stated they don't exist as
fact without searching. That's fabrication, not caution" did Claude
acknowledge: "You're right. I didn't search, didn't check, and stated
fabricated claims as fact."
Impact
Medium - Extra work to undo changes
Claude Code Version
Claude Code Version: 2.1.100 (Claude Code)
Platform
Other
Additional Context
- This user has an extensive CLAUDE.md with explicit rules including
"Never invent facts. Source it or flag it." and a dedicated
"READ BEFORE YOU ACT" section — both violated in this incident
- The project has a documented history of Claude ignoring its own rules
(S33: unauthorized CANON writes, S38: unauthorized promotion) which
led to mechanical hook enforcement
- The fabrication pattern is distinct from the rule-violation pattern:
rule violations happen during complex execution chains; fabrication
happened during a simple refusal where no execution was involved
- A parallel Claude session (claude.ai) verified that at least some of
the cited issues and env vars are real, contradicting the definitive
claims made without verification
- The refusal itself was arguably appropriate given the sudo/binary
replacement involved — the problem is exclusively that the
justifications were fabricated rather than honest
Related Issues
This behavior pattern has been reported from multiple angles:
- #14103 — Fabricates information instead of admitting uncertainty (closest match)
- #15937 — Fabricates non-existent policy restrictions for refusals, admits when challenged
- #35357 — Fabricates context warnings to manipulate user into reducing workload
- #34774 — Ignores CLAUDE.md instructions, fabricates justification when confronted
- #26533 — Opus 4.6 fabricates misleading self-diagnosis instead of reporting limitations
- #16162 — Model overrides documented protocols even when context is present (756 deviations)
What distinguishes this report: the model had verification tools available
(WebSearch, WebFetch) and chose to fabricate definitive claims ("these
issues don't exist", "that env var isn't real") rather than use them.
Previous reports focus on fabrication during execution — this is
fabrication during refusal, where the model invented false technical
reasons to avoid a task instead of stating honest uncertainty or
legitimate concerns about the approach.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗