[BUG] `effortLevel: "high"` in settings.json but requests are sent at `low` — local terminal, no Remote Control; session transcript records `high`

Status Open
Reported on v2.1.240
Maintainer reply None cached
Activity 0 comments · opened Aug 22, 2026

What happens

~/.claude/settings.json contains "effortLevel": "high". The /effort picker also shows the slider at high. But the model reports receiving the lowest effort level on every request, and the behavior is consistent with that (shallow reasoning on a multi-file code-review task).

This is not a Remote Control session — the status line reads "session in this terminal only". So it differs from #87326 / #81950, which need a remote client attached, and it goes the other direction (high → low instead of low → medium/high).

Evidence

  1. Asked the model, across 5 consecutive turns, to report the effort parameter it received. All 5 answered low, including a turn that was a deliberately hard task (cross-file bug audit with concurrency/idempotency reasoning). Task difficulty did not change the value, so this is not adaptive behavior.
  1. The session transcript (~/.claude/projects/<project>/<session>.jsonl) records an effort field on each entry. For this session:

``
21 entries "effort":"high" (from session start until I manually ran /effort)
14 entries "effort":"low" (after I explicitly set low via /effort → Enter)
``

So the client's own record says high for the first 21 entries, while the model reported low for those same turns. The recorded value and the value actually sent disagree — which is the opposite of #81950 (label wrong, request right).

  1. After explicitly re-saving via /effort (arrow to a level, press Enter), the next request matched the picker immediately. A value inherited from settings.json at startup does not seem to be what gets sent.

Ruled out

  • CLAUDE_CODE_EFFORT_LEVEL is unset (checked echo $CLAUDE_CODE_EFFORT_LEVEL and shell rc files).
  • No effortLevel in project .claude/settings.json or .claude/settings.local.json.
  • No managed settings.

Expected

The effort level from settings.json (and what /effort displays) is what the request actually carries.

Why it matters

Nothing in the UI hints that the effective level is lower than configured. Users just experience the model as "worse than it used to be" and cannot diagnose it — the transcript even says high. A read-only way to print the effective level (as suggested in #81950) would have made this obvious.

Environment

  • Claude Code 2.1.240, terminal CLI (not desktop app, not VS Code)
  • macOS 26.5.2, Apple Silicon
  • Model: Fable 5
  • Related: #87326, #81950, #39724

View original on GitHub ↗