Opus 4.7 first-run override ignores `effortLevel` in settings.json

Resolved 💬 3 comments Opened Apr 30, 2026 by renatogcarvalho Closed May 4, 2026

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

  1. Set in ~/.claude/settings.json:

``json
{ "model": "claude-opus-4-7", "effortLevel": "high" }
``

  1. Launch fresh: claude (Claude Code v2.1.123, Claude Max account).
  2. Banner reads:

``
Opus 4.7 with xhigh effort · Claude Max
Welcome to Opus 4.7 xhigh! · /effort to tune speed vs. intelligence
``

  1. Run /effort high once, quit, relaunch — banner now correctly reads high 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 effortLevel in settings.json. The override appears to be absolute on first launch and doesn't consult effortLevel.
  • Workaround: launching with --effort high works (CLI flag takes precedence over the first-run default).
  • Claude Code v2.1.123, macOS 25.2.0.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗