Claude CodeのswitchModelsOnFlagで安全分類時の切替を選ぶ
安全分類器がリクエストにフラグを立てたとき、自動でモデルを切り替えるか一時停止するかをswitchModelsOnFlagで選べます。falseにしても選択画面が出ない場面と、選択肢が減る場面を分けて扱います。
Fable系・Opus 5.5・Sonnet 5.5・Opus 5でリクエストを送ると、安全分類器がフラグを立てて応答モデルが切り替わることがあります。この自動切り替えを続けるか、都度立ち止まって選ぶかを決めるのがswitchModelsOnFlagです。falseにしても選択画面が出ない場面があり、設定の効き方はそこで分かれます。
switchModelsOnFlagは何を切り替える設定か
switchModelsOnFlagは、分類器がリクエストにフラグを立てたときの挙動を選ぶブール値です。型はBooleanで、既定値はtrueです。/configではSwitch models when a message is flaggedという項目名で表示されます。
スコープはAny fileで、ユーザー・プロジェクト・ローカル・managed settingsのどのファイルにも書けます。
switchModelsOnFlagの値で変わる挙動
true(既定)
フラグが立つとその場でフォールバックモデルに切り替え、トランスクリプトに通知を出して処理を続けます。止めたくない自動化や、フラグの理由を毎回確認する必要がない作業向きです。
false
セッションが一時停止し、フォールバックモデルへ切り替えるか、プロンプトを編集して今のモデルで再試行するかを選びます。フラグの理由を都度確認したいチーム向きです。
どちらの値でも、切り替わった後のセッションはフォールバック先のモデルで続きます。元のモデルへ戻すには/modelで手動に切り替えます。
フォールバック先はどのモデルが決めるか
switchModelsOnFlagが選ばせるのは「切り替えるかどうか」だけで、行き先はフラグを立てたモデルとカテゴリで決まります。Claude Codeのドキュメントが挙げる対応は次のとおりです。
| フラグを立てたモデル | サイバー関連 | バイオロジー関連 |
|---|---|---|
| Fable 5.1 / Fable 5 / Opus 5.5 | サイバー関連Opus 4.8 | バイオロジー関連Opus 5 |
| Sonnet 5.5 | サイバー関連Sonnet 5 | バイオロジー関連行き先なし(拒否で終了) |
| Opus 5 | サイバー関連Opus 4.8 | バイオロジー関連行き先なし(拒否で終了) |
カテゴリ別の行き先を持つのはClaude Code v2.1.219以降です。それより前は、フラグが立ったFable 5のリクエストはすべてプロバイダーの既定のOpusモデルで再実行され、Opus 5はフラグを立てる側として扱われていませんでした。 Opus 5の側から見た切り替えの理由と課金はOpus 5のモデル切り替えの解説に、Fable 5側の領域と課金はFable 5のモデル切り替えにあります。
設定はsettings.jsonか/configか--settingsで行う
恒常的に効かせるには、settings.jsonにswitchModelsOnFlagを書きます。
{
"switchModelsOnFlag": false
}/configを開いてSwitch models when a message is flaggedを切り替えても同じ設定を変えられます。1回の起動だけ試すなら、--settingsにJSON文字列を渡す方法があります。v2.1.287のclaude --helpでは、--settings <file-or-json>は「設定JSONのパスまたはJSON文字列を追加で読み込む」オプションとして載っています。
claude --settings '{"switchModelsOnFlag": false}'switchModelsOnFlagを直接指定する専用のコマンドラインフラグは、v2.1.287のclaude --helpにありません。似た名前の--fallback-modelは、過負荷や利用不可のときの代役を指定する別の仕組み(後述のfallbackModel)に対応するフラグです。
複数の設定ファイルに同じキーがあるときは、managed settings、--settings、プロジェクトローカル、共有プロジェクト、ユーザーの順で上位が勝ちます。
falseにしても選択画面が出ないのはどんなときか
falseにしたときの画面は、状況によって3通りに分かれます。
falseにしたときの3通り
画面が出ず、拒否で終わる
- フラグが立ったカテゴリにフォールバック先がない場合(Opus 5・Sonnet 5.5のバイオロジーなど)
-pの非対話モードやSDK連携など、選択肢を出せない実行形態- フォールバック先が
availableModelsの許可リストでブロックされている場合
画面は出るが、選べるものが減る
- 切り替え元と切り替え先の両方が同じリクエストにフラグを立てた場合は、編集して再送するか、新しいセッションを始めます
- モバイルアプリのクラウドセッションでは、編集して再試行する操作に対応していません。モデルを切り替えるか、デスクトップのブラウザーやアプリでセッションを続けます
通常どおり2択が出る
フォールバック先があり、対話的なセッションで、許可リストにも引っかからない場合です。切り替えるか、編集して今のモデルで再試行するかを選べます。
switchModelsOnFlagが変えるのは「選べるかどうか」で、フォールバックが成立するかどうかは変えません。行き先が無い・ブロックされているといった条件は、trueでもfalseでも拒否につながります。
-pの挙動は、公式ページでも書き分けがあります。settings referenceは「ダイアログを出せない-p実行ではフラグが立ったリクエストはエラーで終わる」と書き、model-configは「ターンを拒否で終える」と書いています。いずれも一時停止はしません。trueなら-pでもフォールバック先へ切り替えて続行します。
フラグの理由が分からないときの切り分け
フラグは、セッション最初のリクエストで立つことがあります。そこにはCLAUDE.mdの内容やgit statusといったワークスペースの文脈が乗るため、セキュリティや生物系の資料があるリポジトリでは、その文脈だけで分類器に引っかかることがあります。
フラグの原因を切り分ける手順
- 1
--safe-modeで起動する
claude --safe-modeは、CLAUDE.md・スキル・フック・MCPサーバーを外した状態で起動します。立たなくなれば、原因はそのどれかです。 - 2
それでも立つならリポジトリの内容を疑う
git statusとディレクトリ名はカスタマイズの外にあり、
--safe-modeでも送られます。ペネトレーションテスト、CTF(Capture the Flag)、バイオロジー関連のコードベースでは、初回からフォールバックが頻繁に起きます。Fable系やOpus 5.5でバイオロジー関連の作業をすると最初のフラグでOpus 5へ移り、Opus 5にはバイオロジーの行き先がないため、以後のバイオ系のフラグは拒否で終わります。ドキュメントはこれを、アカウントにフラグが付いたのではなく想定されたルーティングとしています。 - 3
切り替わった後はeffortを確認する
フォールバック先でも、フラグが立ったリクエストのeffortが引き継がれます。Opus 5.5の
mediumで動いていたなら、移った先でもmediumです。/effortでの変更、/modelでの選び直し、セッションの再開のいずれかで持ち越しは解けます。
--safe-modeを含めた切り分けの全体像はClaude Code safe modeでの切り分け方にあります。「safety measures flagged」というエラー文言が出たときの対処はsafety measuresのフラグへの対処で扱っています。
Bedrock・Vertex AI・Foundryではモデルを識別できないと切り替わらない
Amazon Bedrock、Google CloudのAgent Platform、Microsoft Foundryはモデルidがプロバイダー固有です。Claude Codeが今のモデルとフォールバック先の両方を識別できて初めて、自動切り替えが成立します。識別できないと、trueでも切り替えは起きず、フラグが立ったリクエストは拒否メッセージで終わります。
識別の条件は、フラグを立てる側と行き先で別々です。
- Fable系: モデルidに
claude-fable-5が含まれる、ANTHROPIC_DEFAULT_FABLE_MODELの値と一致する、またはmodelOverridesでマッピングされている - Opus 5.5・Sonnet 5.5・Opus 5: プロバイダーのモデルidか
modelOverridesのマッピングで認識される - Opusの行き先: どのモデルが拒否した場合でも、
ANTHROPIC_DEFAULT_OPUS_MODELを設定するか、プロバイダーのモデル一覧にOpus 4.8のエントリを残す。どちらもないと、Sonnet 5.5を含むすべてのフラグ元でフォールバックが止まり、拒否で終わる - Sonnet 5.5の行き先: Opusの設定に加えて、
ANTHROPIC_DEFAULT_SONNET_MODELを設定するか、モデル一覧にSonnet 5のエントリを残す
Opusの設定にOpus以外のモデルや、拒否したモデル自身を指定すると、拒否がそのまま残ります。Sonnetの設定にSonnet以外やSonnet 5.5自身を指定した場合も同じです。識別できなかったときは、/modelでモデルを切り替えて再送します。
export ANTHROPIC_DEFAULT_FABLE_MODEL="<プロバイダーのFableのモデルid>"
export ANTHROPIC_DEFAULT_OPUS_MODEL="<プロバイダーのOpusのモデルid>"ANTHROPIC_DEFAULT_OPUS_MODELを設定すると、フォールバックのあるすべてのカテゴリの行き先がそのモデルになります。設定しない場合は、サイバーがOpus 4.8のエントリ、Fable系とOpus 5.5のバイオロジーがOpus 5のエントリへ向かいます。
managed settingsで組織のトグルを固定する
managed settingsは設定の階層の最上位で、ユーザーや--settingsで上書きできません。上書きを許す「例外」の一覧にswitchModelsOnFlagは載っていないため、managedにfalseを置けば、開発者は自分の設定でtrueに戻せません。
セキュリティレビューやバイオロジー関連の作業を扱うチームで、フラグが立ったリクエストを必ず人が確認してから進めたいときの選択肢です。逆に-pの実行が中心の組織では、falseの固定はフラグが立ったターンを拒否で終わらせます。managed settingsの配布方法・availableModelsとの組み合わせはClaude Code組織管理ガイドで扱っています。
fallbackModelとは別の仕組み
名前が似たfallbackModelは、モデルの過負荷や利用不可といった可用性の問題を扱う設定で、安全分類器のフラグとは無関係です。v2.1.287のclaude --helpには、各ユーザーターンの冒頭でまず元のモデルを試し直すと載っています。
2つの切り替えの違い
fallbackModel
引き金は過負荷や利用不可です。行き先は自分で指定し、効くのはそのターンだけです。
switchModelsOnFlag
引き金は分類器のフラグです。行き先はモデルとカテゴリで決まります。
引き金が別なので、両方を有効にしても干渉しません。「なぜかモデルが変わった」という場面では、通知の文言がどちらの仕組みによるものかを先に見ると切り分けが早まります。fallbackModelの書き方はClaude Code fallbackModelで過負荷に備えるに、モデル切り替えのフックとの境界はPreModelSwitch・PostModelSwitchフックの解説にあります。
まとめ
値を選ぶ前に、使っているプロバイダーでモデルを識別でき、行き先が許可リストに入っているかが先に決まります。trueかfalseかが効くのは、その条件を満たした後です。