Claude Code のモデル選択がセッションをまたいで残る挙動と、その止め方
まとめ
/modelでモデルを選ぶと、デフォルトでは設定ファイルに保存され、次に立ち上げた新規セッションにも引き継がれる- ピッカーで行を選ぶとき
Enterは「保存して既定にする」、sは「今のセッション限り」で、後者なら設定ファイルに書き込まれない - 新規セッションを毎回まっさらな既定モデルから始めたいなら、設定ファイルの
modelキー自体を消すのが確実 - 設定はスコープ(ユーザー / プロジェクト / ローカル / 管理)で多段化しており、上位が未設定なら下位へフォールバックする
きっかけ
前回のセッションでモデルを切り替えたら、その選択が次に開いた新規セッションでもそのまま表示された。便利なときもあるが、セッションごとに使い分けたいときは「なぜ勝手に前回のモデルが残るのか」が気になる。挙動を調べて整理した。
モデル選択はどこに保存されるか
モデルの既定はユーザー設定ファイルの model キーに入る。ピッカーからモデルを確定した時点でこのキーが書き換わり、以降の新規セッションはその値を初期モデルとして読み込む。
{
"model": "opus"
}一度これが書き込まれると、セッション中に別モデルへ一時的に切り替えても、新規セッションを立ち上げるたびに保存済みの値へ戻る。「前回使ったモデルが表示される」のはこの保存済みキーを読んでいるからだ。
保存する / しないの分岐は「確定キー」で決まる
ここが要点で、ピッカーでの確定操作によって永続化の有無が変わる。
| 操作 | 挙動 | 設定ファイルへの書き込み |
|---|---|---|
Enter で確定 | 新規セッションにも引き継ぐ既定にする | 書き込まれる |
行で s を押す | 今のセッション限りで切り替える | 書き込まれない |
つまり「今回だけ試したい」なら Enter ではなく s を押す。これだけで設定ファイルは汚れず、次のセッションは元の既定に戻る。今まで無意識に Enter で確定していると、選ぶたびに既定が上書きされていくことになる。
新規セッションを既定から始めたいときはキーを消す
一時切り替えの s を覚えていても、設定ファイルに model キーが残っている限り新規セッションはその値へ戻る。完全にまっさらな状態(プランの既定モデル)から始めたいなら、設定ファイルからキー自体を外す。
{
"permissions": { "defaultMode": "auto" },
"enableAllProjectMcpServers": true
}model 行を削除しても他の設定はそのまま効く。JSON として壊れていないかは、キーの有無を確認しておくと安心だ。
jq -e 'has("model")' ~/.claude/settings.json
# false が返れば削除できているなお設定ファイルがシンボリックリンクになっている場合(dotfiles でまとめて管理しているケースなど)、リンク先の実体を編集する必要がある。リンク越しの書き込みは弾かれることがあるので、実体パスを解決してから触る。
readlink -f ~/.claude/settings.json設定はスコープで多段化している
model を含む設定値は複数のスコープを持ち、上位が未設定なら下位へフォールバックする。おおまかには以下の優先順で解決される。
- 管理(サーバー側で強制される設定)
- ローカル(プロジェクト配下の個人用オーバーライド)
- プロジェクト(リポジトリ共有の設定)
- ユーザー(ホーム配下の個人設定)
全スコープで model が未設定なら、最終的にプランの既定モデルが使われる。逆に言えば、あるプロジェクトだけモデルを固定したいならプロジェクトスコープに書けばよく、個人全体の既定はユーザースコープに置く、といった住み分けができる。
使い分けの整理
- 今のセッションだけ別モデルを試す → ピッカーで
s - 個人の既定モデルを決める → ユーザースコープに
Enterで保存(=これまでの挙動) - 新規セッションは毎回既定から始めたい → ユーザースコープの
modelキーを削除 - 特定プロジェクトだけ固定したい → プロジェクトスコープに
modelを書く
「毎回前回のモデルが残る」のは仕様どおりの動きで、止め方は確定操作を s にするかキーを消すかの二択。自分は新規セッションを既定から始めたかったので、ユーザースコープのキーを消す方にした。一時切り替えの s を体が覚えるまでは、たまに Enter で保存し直してしまいそうな気はしている。