[BUG] Top-level effortLevel is silently ignored for Opus 5.5
Summary
A top-level "effortLevel": "high" in user settings.json has no effect when the active model is Opus 5.5. With no saved per-model level, the session starts at medium. The UI labels it "(default)", and no warning, /status note, or claude doctor message says the setting was skipped. The settings reference describes effortLevel as the default "for models without a saved level", which is exactly the case here.
Steps to reproduce
- Make sure
CLAUDE_CODE_EFFORT_LEVELis not set and--effortis not passed. - Put only this in
~/.claude/settings.json(nomodelSettingskey):{ "model": "claude-opus-5-5", "effortLevel": "high" } - Start
claudeinteractively. - Look at the startup banner, then open
/model.
Expected behavior
The session starts at high effort, because effortLevel is documented as the default for models without a saved level and nothing else sets one. If a model deliberately doesn't honor the key, Claude Code should say so at startup, in /status, or in claude doctor instead of silently falling back.
Actual behavior
The banner shows Opus 5.5 · Claude Max with no effort suffix, and /model shows ◐ Medium effort (default). The effortLevel value is dropped with no message.
Adding "modelSettings": { "claude-opus-5-5": { "effortLevel": "high" } } (which is also what pressing Enter in the /effort slider writes) makes the banner read Opus 5.5 with high effort and /model show ● High effort.
Affected area
Effort resolution from settings files for Opus 5.5 (and, per the docs, Sonnet 5.5).
Runtime or environment
- Claude Code 2.1.285 (latest on npm at time of writing)
- macOS, Claude Max subscription (first-party API)
Evidence
- The settings reference's
effortLevelentry says: "Set a default effort level for models without a saved level." Opus 5.5 had no saved level, yet the key was ignored. - The model-config page says instead that "Opus 5.5 and Sonnet 5.5 do not respect this top-level setting." The two pages contradict each other, and the only place this exception appears is prose on a different page from the key's own reference.
- Repro was done in a fresh interactive session with a clean environment. The only change between the red and green runs was adding the
modelSettingsentry.
Impact
Users who set effortLevel (often high or xhigh) and then switch to Opus 5.5 silently get medium. Nothing in the session reveals the setting was dropped, and "(default)" in /model suggests the configured default is in effect. Scripts and dotfile setups that manage effortLevel stop working without any signal.
Additional context
Any of these would close the gap: honor top-level effortLevel as the fallback for every model without a modelSettings entry, as the settings reference describes; or keep the per-model exception but surface it (a startup or /status notice, a claude doctor warning) and document it on the effortLevel entry itself.
Closure signal: with the settings in step 2, either the session starts at high, or Claude Code visibly reports that effortLevel was not applied to Opus 5.5 and the settings reference matches that behavior.