/model command silently persists effortLevel to settings.json, overriding user's preferred default

Resolved 💬 4 comments Opened Apr 16, 2026 by Yellow4Submarine7 Closed Apr 20, 2026

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

  1. Set "effortLevel": "max" in ~/.claude/settings.json
  2. Start a new session, confirm effort is max
  3. Use /model to switch to Sonnet (or any model), then switch back to Opus
  4. End the session and start a new one
  5. Check ~/.claude/settings.jsoneffortLevel has been changed from "max" to "high" (or whatever the picker showed during selection)

Additional reproduction (race condition)

  1. Use /model, select a model with low effort
  2. Immediately use /model again and select max effort
  3. End the session — settings.json may still contain "low" from the first call, as if the second call did not persist

Expected Behavior

Either:

  • Option A: /model should be session-only (as the documentation suggests) and should not write effortLevel to settings.json
  • Option B: If persistence is intended, /model should 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 maxhigh (triggered by switching to Sonnet)
  • 1 time changed from maxlow (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).

View original on GitHub ↗

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