Skip to content

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

Description

@Yellow4Submarine7

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.json — effortLevel 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 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).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    duplicateThis issue or pull request already exists

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions