/model selection not persisted as default across restarts; falls back to a different Sonnet model
Description
Running /model and selecting a model prints a confirmation that it was saved as the default for new sessions:
Set model to Sonnet 5 (default) and saved as your default for new sessions
However, after fully quitting and restarting Claude Code, the session starts on a different model instead of the one selected.
Investigation
I inspected the local config files that should back this setting:
~/.claude/settings.json— nomodelkey present at all.- The per-project entry in
~/.claude.jsonfor the working directory — nomodelfield either.
So despite the CLI's confirmation message, there is no local file that appears to persist the selected default model.
Looking at session history logged in ~/.claude.json, the model recorded at session start alternates between different models across launches (e.g. between two Sonnet variants) for the same account/project, without any corresponding local preference change. In one instance, two entries six seconds apart show the model switching from one variant to another — consistent with a session starting on a stale/reassigned default, then immediately being corrected by rerunning /model.
There's also an orgModelDefaultCache field and cached GrowthBook-style feature flags in ~/.claude.json, along with a stored notice about a model being "currently unavailable, use X instead" — suggesting there may be a server-side/rollout mechanism that can reassign the session's starting model independent of the user's local /model selection.
Expected behavior
Selecting a model via /model and confirming it's "saved as your default for new sessions" should cause new sessions to actually start on that model, until the user changes it again.
Actual behavior
New sessions can start on a different model than the one explicitly selected, with no visible local setting to explain why.
Environment
installMethod: native- Relevant
lastVersionBasein local config: 2.1.218
Suggested investigation areas
- Confirm whether
/model's "saved as default" write actually lands in~/.claude/settings.json(or wherever it's intended to persist) versus being session-scoped only. - If model selection can legitimately be overridden by a server-side rollout/feature-flag mechanism, consider surfacing that to the user (e.g. "reassigned by rollout" vs a stale confirmation message that overpromises persistence).
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗