8月28日、Claude Code 2.1.251 で CLAUDE_CODE_SUBAGENT_MODEL の挙動が変わりました。全部を上書きしていたのが、エージェント定義の model: に負けるようになった。それを記事にしました。
9月1日、2.1.257 で上書き手段が戻ってきました。 CLAUDE_CODE_SUBAGENT_MODEL_FORCE です(手元で動かしたのは 2.1.258)。
4日です。
ただし完全には戻っていません。 8条件を測ったら、守られるものと潰されるものが分かれました。
検証環境: Windows 10 / Claude Code 2.1.258 / 測定は 2026-09-02 時点
何が追加されたか
公式ドキュメントの記述です。
Set
CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1to run subagents … onCLAUDE_CODE_SUBAGENT_MODELwhatever model their definition or invocation names, the built-in Explore and Plan definitions included. A fork, and a skill that runs in a subagent withmodel: inherit, still run on the main conversation's model.
(=1にすると、定義や起動時に何を指定していようとCLAUDE_CODE_SUBAGENT_MODELで走らせる。組み込みの Explore と Plan も含む。fork と、model: inheritでサブエージェントとして走るスキルは、これまでどおりメイン会話のモデルで走る。)
「2.1.251 の変更が巻き戻った」わけではありません。 優先順位はそのままで、それを飛び越す変数が増えた形です。
測り方
エージェント本人にモデルIDを聞かせ、返ってきた値を記録しました。
CLAUDE_CODE_SUBAGENT_MODEL=haiku CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1 \
claude -p "(エージェント名)を起動して、モデルIDを聞いて報告して"
対象は code-reviewer(model: sonnet)、組み込みの Explore、model: inherit の検証用エージェント(測定後に削除)です。
8条件の結果
| # | 対象 | 定義の model:
|
環境変数 | FORCE | 動いたモデル |
|---|---|---|---|---|---|
| 1 | code-reviewer | sonnet |
なし | なし | claude-sonnet-5 |
| 2 | code-reviewer | sonnet |
haiku | なし | claude-sonnet-5 |
| 3 | code-reviewer | sonnet |
haiku | 1 | claude-haiku-4-5 |
| 4 | 組み込み Explore | — | haiku | 1 | claude-haiku-4-5 |
| 5 | fork | — | haiku | 1 | claude-opus-5[1m] |
| 6 | probe | inherit |
なし | なし | claude-opus-5[1m] |
| 7 | probe | inherit |
haiku | なし | claude-opus-5[1m] |
| 8 | probe | inherit |
haiku | 1 | claude-haiku-4-5 |
表の claude-haiku-4-5 は claude-haiku-4-5-20251001 の短縮表記です。
2・3・5・8行目は3回ずつ繰り返し、12回とも同じ値が返りました。
2行目と3行目が、この記事の全部です。 同じエージェント、同じ環境変数で、FORCE=1 を足すだけで Sonnet が Haiku になりました。
4行目も効きます。 ドキュメントの「Explore と Plan も含む」どおりでした。
fork だけが守られた
5行目が例外です。 FORCE=1 を立てても、fork はメイン会話と同じ claude-opus-5[1m] で走りました。
fork は会話の履歴を引き継ぐので、別のモデルに渡すとキャッシュが外れます。 理由は公式に書かれていませんが、そう考えると筋が通ります。
なお fork は既定で使えません。 最初に測ったとき、subagent_type=fork が利用可能な一覧になく起動できませんでした。CLAUDE_CODE_FORK_SUBAGENT=1 を立てて測り直しています。この環境変数は設定ドキュメントに載っていません(2026-09-02 時点で確認)。
model: inherit は守られなかった
公式が例外にしているのは「スキルがサブエージェントとして走るときの model: inherit」です。エージェント定義の model: inherit は書かれていません。
実測すると、そのとおりでした。
model: inherit のエージェント
環境変数なし → opus (メイン会話を継承)
環境変数 haiku → opus (inherit が勝つ)
環境変数 haiku + FORCE → haiku ← 継承が潰される
inherit と書いてあるのに、継承しなくなります。
「fork と inherit は例外」と読むと間違えます。例外は fork と、スキル側の inherit だけです。
手元では286本中21本が変わる
自分の環境を数え直しました。
~/.claude/agents/ : 286 本
model: を指定 : 21 本(すべて sonnet)
指定なし : 265 本
2026-09-02 時点の値です。8月28日に数えたときと同じでした。
この21本は code-reviewer など独立レビューを担当するもので、レビュー側のモデルを固定したくて model: を書いたものです。FORCE=1 を立てると、この21本も Haiku で走ります。 コストを絞る目的なら狙いどおりですが、固定したくて書いた指定が消えます。
いまの優先順位
| 使うもの | 効き方 |
|---|---|
CLAUDE_CODE_SUBAGENT_MODEL だけ |
model: を書いていないエージェントにのみ効く |
+ _FORCE=1 |
fork 以外の全部に効く |
エージェントの model:
|
_FORCE がなければ勝つ |
まとめ
-
8/28 に「固定できなくなった」と書き、9/1 に固定手段が戻ってきた。4日。
ただし巻き戻ったのではなく、優先順位を飛び越す変数が増えた -
_FORCE=1で、model: sonnetのエージェントも組み込みの Explore も Haiku で走った -
例外は fork だけ。 メイン会話と同じ
opusのままだった -
エージェント定義の
model: inheritは潰された。 公式の例外はスキル側のinherit -
fork は既定で使えない。
CLAUDE_CODE_FORK_SUBAGENT=1が要る(未文書) - 手元では 286本中21本が影響を受ける(2026-09-02 時点)
モデルIDは自己申告です。
参考
-
Subagents — モデル選択の優先順位と
_FORCEの例外 - Claude Code changelog — 2.1.251 と 2.1.257 の項
※ 引用は原文と日本語訳を併記しています。訳は読みやすさを優先しているので、正確な表現は原典をご確認ください。
関連記事
- 環境変数でサブエージェントのモデルを固定できなくなった — この記事の4日前。2.1.251 の変更を測った回
-
Claude Code の fork、既定ONのはずが使えなかった —
CLAUDE_CODE_FORK_SUBAGENTの話
JQITのエンジニアの95%以上は未経験からの採用です。
よければコーポレートサイトにも遊びに来てください。
エンジニア採用も行っています。もしご興味あれば覗いてみてください。
▶ 採用サイト