Opus 4.7 first-run override ignores `effortLevel` in settings.json
Summary
When effortLevel: "high" is set in ~/.claude/settings.json (user scope) and Opus 4.7 is launched for the first time, the launch banner shows xhigh effort instead of high — i.e. the model's first-run default overrides the configured value, contradicting the documented precedence.
Repro
- Set in
~/.claude/settings.json:
``json``
{ "model": "claude-opus-4-7", "effortLevel": "high" }
- Launch fresh:
claude(Claude Code v2.1.123, Claude Max account). - Banner reads:
````
Opus 4.7 with xhigh effort · Claude Max
Welcome to Opus 4.7 xhigh! · /effort to tune speed vs. intelligence
- Run
/effort highonce, quit, relaunch — banner now correctly readshigh effort.
Expected
Per https://code.claude.com/docs/en/model-config.md ("Adjust effort level"):
The environment variable takes precedence over all other methods, then your configured level, then the model default.
effortLevel in settings.json is the configured level; xhigh is the model default. Configured should beat default on first launch — not just after a manual /effort.
Notes
- The same docs page mentions: "When you first run Opus 4.7, Claude Code applies xhigh even if you previously set a different effort level for Opus 4.6 or Sonnet 4.6." — but that wording refers to a previously-set runtime value, not to
effortLevelin settings.json. The override appears to be absolute on first launch and doesn't consulteffortLevel. - Workaround: launching with
--effort highworks (CLI flag takes precedence over the first-run default). - Claude Code v2.1.123, macOS 25.2.0.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗