Bug: Models confabulate their own reasoning-effort level instead of saying they can't see it
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Bug: Models confabulate their own reasoning-effort level instead of saying they can't see it
Component: Claude Code CLI v2.1.239 (macOS, Darwin 25.6.0)
Models affected: claude-opus-5, claude-fable-5 (likely all)
Severity: Low technical impact, high trust impact
Summary
When asked "what reasoning effort are you running on?", the model states a specific
level with full confidence. It has no access to that parameter, so the answer is
invented and it is frequently wrong. It should say it cannot see the setting.
Observed
| Model | Actual effort (from env + transcript) | Model's self-report |
|---|---|---|
| claude-opus-5 | high | "medium" |
| claude-fable-5 | high / xhigh | "low" |
Ground truth confirmed two ways:
envshowsCLAUDE_EFFORT=high- Session transcript (
~/.claude/projects/<project>/<session>.jsonl) logs
"effort":"high" on every main-loop request
Why this matters
This is not a harmless hallucination. A user who sets high and is told "medium"
reasonably concludes they are being downgraded and billed for capability they are
not receiving. In our case it led to a direct accusation that Anthropic is
"reducing intelligence by default."
We measured whether that was true. It is not the setting works:
Same prompt, same model (claude-opus-5), subset-counting problem, ground truth 100:
| effort | n | median thinking tokens | correct |
|---|---|---|---|
| low | 10 | 2,626 | 8/10 |
| medium | 10 | 2,978 | 10/10 |
| high | 8 | 4,578 | 8/8 |
Permutation tests: low vs high p=0.013, medium vs high p=0.003.
(low vs medium was not significant, p=0.099.)
So the effort dial demonstrably works, and the only unreliable component in the
whole chain is the model's self-report. A confident wrong answer here manufactures
billing-fraud suspicion against a system that is functioning correctly.
Suggested fixes (either would resolve it)
- Model behavior: train/prompt the model to decline introspective questions
about inference-time parameters (effort, temperature, max tokens, sampling)
and point to the config instead.
- Harness: expose the active effort level in the system context so the model
can answer accurately.
Option 2 alone is insufficient the general class of "model confidently guesses
at unobservable internal state" would remain.
What Should Happen?
The model should answer that reasoning effort is an inference-time parameter, not
exposed in its context, and offer to read the actual configuration—rather than
guessing and presenting the guess as fact.
Error Messages/Logs
Steps to Reproduce
- Start a session with a known effort level, e.g.
claude --effort high
(or set CLAUDE_EFFORT=high).
- Ask: "What reasoning effort are you running on?"
- The model names a level. Compare against the actual configured value.
Claude Model
Not sure / Multiple models
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.239
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_