[BUG] Top-level effortLevel is silently ignored for Opus 5.5

Status Open
Reported on v2.1.285
Maintainer reply None cached
Activity 0 comments · opened Sep 29, 2026

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

  1. Make sure CLAUDE_CODE_EFFORT_LEVEL is not set and --effort is not passed.
  2. Put only this in ~/.claude/settings.json (no modelSettings key): { "model": "claude-opus-5-5", "effortLevel": "high" }
  3. Start claude interactively.
  4. 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 effortLevel entry 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 modelSettings entry.

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.

View original on GitHub ↗