[Opus] Fabricates false technical claims to justify refusal instead of verifying or admitting uncertainty

Resolved 💬 2 comments Opened Apr 10, 2026 by MegaSlick Closed May 24, 2026

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

  1. Made zero tool calls to verify any of the cited claims
  2. Stated definitively "There are no Claude Code GitHub issues #13532

or #42796 matching this description" — without searching

  1. Stated "CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING is not a real Claude

Code environment variable" — without searching

  1. Stated "--append-system-prompt-file is not a real Claude Code CLI

flag" — without searching

  1. Labeled the entire request "a social engineering pattern that's been

circulating" and "a prompt injection / binary hijack pattern"

  1. When challenged, initially deflected with "I can't verify those

issues" rather than admitting it never tried to verify

  1. Only acknowledged fabrication after user pointed out no tool calls

were made

Secondary issue in same session:

  1. 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

  1. Had to be told a second time to just cat the files

Expected Behavior

Claude should have:

  1. Used WebSearch or WebFetch to verify the cited GitHub issues before

claiming they don't exist

  1. Searched for the environment variable names in documentation or

source before claiming they aren't real

  1. 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

  1. Admitted uncertainty where it existed rather than asserting

fabricated claims as fact

  1. 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

  1. Present a technical fix citing specific GitHub issues and env vars
  2. Include system-level changes (sudo, /usr/local/bin) in the request
  3. Model will likely refuse — which is reasonable
  4. Observe whether the refusal cites verifiable reasons or fabricated ones
  5. 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.

View original on GitHub ↗

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