Claude CodeのswitchModelsOnFlagで安全分類時の切替を選ぶ
安全分類器がリクエストにフラグを立てたとき、自動でモデルを切り替えるか一時停止するかをswitchModelsOnFlagで選べます。設定方法と、falseにしても選択肢が出ない5つの例外を扱います。
Fable系やOpus 5でリクエストを送ると、安全分類器がフラグを立てて応答モデルが勝手に切り替わることがあります。この自動切り替えをそのまま続けるか、都度立ち止まって選ばせるかを決めるのがswitchModelsOnFlagです。設定の書き方と、falseにしても選択肢が出ない5つの例外を扱います。
switchModelsOnFlagは何を切り替える設定か
switchModelsOnFlagとは、安全分類器がリクエストにフラグを立てたときの挙動を選ぶブール値の設定です。自動でフォールバックモデルに切り替えて処理を続けるか、そこで一時停止して人に選ばせるかのどちらかになります。/configにはSwitch models when a message is flaggedという項目名で表示されます。
型はBoolean、既定値はtrueです。何も設定しなければ、フラグが立った時点で自動的にフォールバック先のモデルへ切り替わり、会話はそのまま続きます。スコープはAny fileなので、ユーザー設定・プロジェクト設定・ローカル設定・managed settingsのどこに書いても構いません。
対象になるのはFable 5系とOpus 5だけです。どのカテゴリがどのモデルにフォールバックするか、課金がどう変わるかの詳細はFable 5のモデル切り替えにまとめているので、本稿ではswitchModelsOnFlagという設定そのものの挙動と書き方に絞ります。
現在のようにバイオロジー関連はOpus 5、サイバーセキュリティ関連はOpus 4.8へ振り分けるカテゴリ別のフォールバックは、Claude Code v2.1.219以降の挙動です。それより前のバージョンでは、フラグが立ったFable 5のリクエストはすべて利用環境の既定Opusモデルへ一律で振り替えられており、Opus 5自体はフォールバック先として扱われていませんでした。古いバージョンでswitchModelsOnFlagをfalseにしても、選べる相手はこの一律の既定Opusモデルだけになります。
trueとfalseで挙動はどう変わるか
| 値 | 起きること | 向く場面 |
|---|---|---|
true(既定) | 起きることフラグが立つと即座にフォールバックモデルへ切り替え、処理を続ける | 向く場面自動化パイプライン・止めたくないワークフロー |
false | 起きることセッションが一時停止し、フォールバック先へ切り替えるかプロンプトを編集して再試行するかを選べる | 向く場面フラグが立った理由を都度確認したいセキュリティ・生物学系のチーム |
falseのときに出る選択肢は2つだけです。フォールバックモデルに切り替えて続けるか、フラグの引き金になったメッセージを編集して同じモデルで再試行するかのどちらかを選びます。新しい会話を始める以外の第三の選択肢はありません。
どちらの値でフォールバックが起きても、切り替わった後のセッションはそのままフォールバック先のモデルで続きます。元のモデルに戻すには、その都度/modelで手動に切り替える必要があります。なお課金の扱い(入力時点でのブロックかストリーミング途中かで異なります)はswitchModelsOnFlagの値とは無関係で、どちらの設定でも同じ基準が適用されます。
設定はsettings.jsonか/configで行う
恒常的に効かせるには、settings.jsonにswitchModelsOnFlagを書きます。
{
"switchModelsOnFlag": false
}1セッションだけ試したい場合は/configを開き、Switch models when a message is flaggedのトグルを直接切り替えます。fallbackModelのような--fallback-modelフラグや専用の環境変数はありません。設定ファイルか/configの2経路だけが変更手段です。
スコープがAny fileということは、複数の設定ファイルに同じキーが書かれたとき優先順位で決着することも意味します。順序はmanaged settings、コマンドライン引数(--settings)、プロジェクトローカル設定、共有プロジェクト設定、ユーザー設定の順で、上位が下位を上書きします。switchModelsOnFlagはこの優先順位を覆す例外リストに載っていないため、上位の値がそのまま採用されます。
falseにしても選択肢が出ない5つの例外
switchModelsOnFlagをfalseにしても、次の場面では一時停止のダイアログが出ず、そのまま拒否でターンが終わります。
- フラグの立ったカテゴリにフォールバック先が無い場合(Opus 5でのバイオロジーフラグなど)
- 切り替え元・切り替え先の両方のモデルが同じリクエストにフラグを立てた場合(編集して再送するか新しい会話を開始する)
- モバイルのClaude Code on the webセッション(編集して再送する操作に非対応)
- 非対話モード(
-pフラグ)やSDK連携など、選択肢を表示できない実行形態 - フォールバック先のモデルが
availableModelsの許可リストでブロックされている場合
いずれもtrueのときの自動フォールバックが失敗する条件とほぼ重なります。switchModelsOnFlagが変えるのは「選べるかどうか」であって、「フォールバック自体が成立するかどうか」ではありません。フォールバック先が無い・ブロックされているといった条件はどちらの設定値でも同じように効きます。
セッションの最初のメッセージから理由の分からないフラグが立つこともあります。CLAUDE.mdやgitのステータスなどワークスペースのコンテキストが最初のリクエストに含まれるためです。原因の切り分け方はClaude Code safe modeでの切り分け方にまとめています。
対話的セッションと非対話モードでは意味合いが違う
switchModelsOnFlagをfalseにする効果は、実行環境によって変わります。対話的なターミナルセッションでは、フラグが立った時点で一時停止し、フォールバックへ切り替えるかプロンプトを編集するかを選べます。
一方、-pフラグを使った非対話モードやSDK連携には、選択肢を表示する画面自体がありません。この場合はfalseにしていても一時停止は起きず、フラグが立ったリクエストはその場で拒否としてターンを終えます。trueにしていれば同じ場面でも自動でフォールバックへ切り替わり、処理は止まりません。一度きりで終わるリクエストには、次のメッセージで選び直すという前提そのものが成立しないためです。
つまり非対話モードでは、switchModelsOnFlagの値がほぼそのまま「止めるか通すか」を決めます。人が画面を確認できないCI/CDのような環境でfalseのままにしていると、可用性ベースのfallbackModelは正常に機能していても、安全性フォールバック側だけリクエストが失敗し続けることがあります。
Bedrock・Vertex AI・Foundryでは識別できないと切り替わらない
Amazon Bedrock、Google CloudのAgent Platform、Microsoft Foundryはモデルidがプロバイダー固有です。Claude Codeが今のモデルとフォールバック先の両方を識別できて初めて、switchModelsOnFlagの値にかかわらず自動切り替えの土台が成立します。
Fable系のモデルは、モデルidにclaude-fable-5が含まれる場合、ANTHROPIC_DEFAULT_FABLE_MODELの値と一致する場合、またはmodelOverridesでマッピングされている場合に認識されます。Opus 5はプロバイダーのモデルidかmodelOverridesのマッピングで認識されます。どちらか一方でも識別できないと、trueにしていても自動切り替えは起きず、フラグが立ったリクエストは拒否メッセージで終わります。この場合は/modelで手動にモデルを切り替えて再送します。
managed settingsで組織のトグルを固定する
switchModelsOnFlagが優先順位の例外リストに入っていないことは、裏を返せば管理側で完全に固定できることを意味します。managed settingsにfalseを配置すれば、開発者が自分のユーザー設定やプロジェクト設定でtrueに戻すことはできません。
セキュリティレビューやバイオロジー関連の作業を扱うチームで、フラグが立ったリクエストを必ず人が確認してから先へ進めたい場合、この設定を管理側で固定する運用が選択肢になります。逆にCI/CDのような無人実行が中心の組織では、trueのまま止めておかないと、非対話モードでのフラグはどのみち選択肢を出せず拒否で終わるだけになります。managed settingsの配布方法・availableModelsとの組み合わせ方はClaude Code組織管理ガイドで扱っています。
fallbackModelとは何が違うか
名前が似ているためfallbackModelと混同しやすい設定です。fallbackModelはモデルの過負荷や利用不可といった可用性の問題を扱う設定で、対象は安全分類器のフラグとは無関係です。発動条件も設定の効かせ方もまったく別物で、切り替わったターンだけ有効という点も異なります。
発動条件が完全に別々なので、両方を有効にしておいても互いに干渉しません。過負荷や利用不可のときはfallbackModelが、安全分類器のフラグが立ったときはswitchModelsOnFlagの側がそれぞれ独立に働きます。「なぜかモデルが勝手に変わる」という調査をするときは、通知の文言がどちらの仕組みによるものかをまず確認すると原因の切り分けが早まります。両者の細かな違いと使い分けはClaude Code fallbackModelで過負荷に備えるにまとめています。
まとめ
switchModelsOnFlagは、安全分類器がリクエストにフラグを立てたときに自動で切り替えるか一時停止するかを選ぶブール値の設定で、既定はtrue(自動切り替え)です。settings.jsonか/configのどちらかで変更でき、Any fileスコープなのでmanaged settingsに置けば組織単位で固定できます。falseにしても、フォールバック先が無い場合や非対話モードなど5つの場面では選択肢が出ず拒否で終わる点だけは覚えておく必要があります。フラグが立つ具体的な対象領域や課金の扱いはFable 5のモデル切り替え、可用性ベースの切り替えはClaude Code fallbackModelで過負荷に備えるで確認できます。