/model command silently persists effortLevel to settings.json, overriding user's preferred default
Bug Description
The /model interactive picker silently writes the selected effortLevel to ~/.claude/settings.json as a persistent global default. This means every time you use /model to switch models, it overwrites your preferred effort level as a side effect — even if you only intended to change the model.
This is especially problematic when switching between Opus and Sonnet: since Sonnet doesn't support max effort, the picker defaults to high, which then gets persisted. The next time you open an Opus session, your effort level has been silently downgraded.
Steps to Reproduce
- Set
"effortLevel": "max"in~/.claude/settings.json - Start a new session, confirm effort is
max - Use
/modelto switch to Sonnet (or any model), then switch back to Opus - End the session and start a new one
- Check
~/.claude/settings.json—effortLevelhas been changed from"max"to"high"(or whatever the picker showed during selection)
Additional reproduction (race condition)
- Use
/model, select a model withloweffort - Immediately use
/modelagain and selectmaxeffort - End the session —
settings.jsonmay still contain"low"from the first call, as if the second call did not persist
Expected Behavior
Either:
- Option A:
/modelshould be session-only (as the documentation suggests) and should not writeeffortLeveltosettings.json - Option B: If persistence is intended,
/modelshould only persist the model selection, not the effort level — these are independent settings
Actual Behavior
/model writes both the model and the effort level to settings.json every time it's used. Users who have a preferred effortLevel: "max" find it silently downgraded after routine model switches.
Impact
From my own conversation history, this has silently overwritten my effortLevel at least 13 times over the past month:
- 12 times changed from
max→high(triggered by switching to Sonnet) - 1 time changed from
max→low(triggered by scrolling through the picker)
Each time I had to manually discover and fix it, either by asking Claude to edit settings.json or by using /model again.
Environment
- Claude Code CLI (latest)
- macOS, Apple Silicon
- Model: claude-opus-4-6
Suggested Fix
Decouple model selection from effort level persistence. If a user has set effortLevel in their settings.json, the /model command should not overwrite it unless the user explicitly changes the effort level through a dedicated mechanism (e.g., editing settings.json or a dedicated /effort --persist command).
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗