Claude Code の本体は Opus 5 で、工数(effort)も高いまま使いたい。けれど、翻訳や大量のファイル確認のような仕事まで同じモデルで回すのはもったいない——サブエージェントだけ Sonnet や Haiku で動かせないのか、という疑問です。

結論から書くと、できます。サブエージェントのモデルは本体とは別に決まり、呼び出すときの指定、定義ファイルの model、環境変数のどれでも変えられます。工数も、サブエージェントごとに別の値を指定できます。

この記事では、2026年9月15日時点の公式ドキュメントに書かれている仕様を整理したうえで、実際にサブエージェントを別のモデルで起動し、会話ログで確かめた結果を載せます。同じ翻訳を Opus 5・Sonnet 5・Haiku 4.5 に2回ずつ任せて、時間・料金・訳の出来を比べました。

サブエージェントのモデルは、上から順に最初に当てはまるもので決まる

どれも無ければ、本体(メインの会話)のモデルで動く

1
呼び出すときの指定——Claude がサブエージェントを起動するときに付ける model
2
定義ファイルの model——inherit なら本体と同じ
3
環境変数 CLAUDE_CODE_SUBAGENT_MODEL——ほかで決まらなかったときの既定
4
本体のモデル

出典: Claude Code 公式ドキュメント「Create custom subagents」(Choose a model)。v2.1.251 より前は 3 が一番上にあった

1. できること:本体と別のモデル・別の工数で動かせる

サブエージェントは、Claude Code が作業の一部を任せるために起動する、別の文脈を持った作業役です。本体とは会話の履歴を共有せず、終わると結果だけを本体に返します(エージェントチームとの違いはSubagents vs Agent Teams(Claude Code)の使い分けで扱っています)。

そのサブエージェントについて、公式ドキュメントが別々に指定できると書いているのは次の2つです。

モデル(model)

sonnet・opus・haiku・fable、完全なモデルID、inherit

完全なモデルIDは claude-opus-5 のような形。inherit は本体と同じモデル。書かなければ上の順番で決まります。

工数(effort)

low・medium・high・xhigh・max

書かなければ本体の工数を引き継ぎます。使える段階はモデルによって違い、Haiku 4.5 は工数に対応していません。環境変数 CLAUDE_CODE_EFFORT_LEVEL が設定されていると、そちらが優先されます。

つまり「本体は Opus 5 の工数 high、翻訳役は Sonnet 5 の工数 medium」という組み合わせが、公式の仕様の範囲でそのまま作れます。工数そのものの意味はClaude Codeの工数(effort)とは?速い↔賢いの使い分けを参照してください。

出典: Claude Code 公式ドキュメント「Create custom subagents」(Supported frontmatter fields)、同「Model configuration」(工数の優先順位)

2. モデルが決まる順番

冒頭の図のとおり、サブエージェントのモデルは「呼び出すときの指定」→「定義ファイルの model」→「環境変数 CLAUDE_CODE_SUBAGENT_MODEL」→「本体のモデル」の順に、最初に当てはまったもので決まります。気を付けたいのは次の3点です。

ひとつ目は、版によって順番が違うこと。v2.1.251 より前は環境変数が一番上にあり、呼び出すときの指定や定義ファイルの modelinherit を含む)まで上書きしていました。「定義に model: sonnet と書いたのに効かない」というときは、まず版と環境変数を確かめてください。

ふたつ目は、全部をひとつのモデルにそろえたいときの設定が別にあること。環境変数だけでは、定義ファイルに model を書いたサブエージェントは従いません。全部を強制したいなら、CLAUDE_CODE_SUBAGENT_MODEL に加えて CLAUDE_CODE_SUBAGENT_MODEL_FORCE1 にします(v2.1.257 以降)。

{
  "env": {
    "CLAUDE_CODE_SUBAGENT_MODEL": "haiku",
    "CLAUDE_CODE_SUBAGENT_MODEL_FORCE": "1"
  }
}

強制すると、組み込みの Explore と Plan も含めて定義ファイルの model は無視され、Claude が呼び出すときにモデルを指定することもできなくなります。例外は2つで、会話を丸ごと引き継ぐ fork と、model: inherit のスキルをサブエージェントで動かす場合は本体のモデルのままです。

みっつ目は、sonnetopus の行き先が接続先で違うこと。同じ sonnet と書いても、どのモデルになるかは次のように変わります。

接続先opussonnet
Anthropic APIOpus 5Sonnet 5
Claude Platform on AWSOpus 5Sonnet 4.6
Amazon Bedrock、Google Cloud の Agent PlatformOpus 5Sonnet 4.5
Microsoft FoundryOpus 4.6Sonnet 4.5

出典: Claude Code 公式ドキュメント「Model configuration」(2026年9月15日時点の表)。特定の版に固定したいときは、エイリアスではなく完全なモデルIDを書く

組織の管理設定で使えるモデルが絞られている場合(availableModels)、サブエージェントの model や環境変数もその対象です。

3. 設定のしかた(5通り)

① 定義ファイルに書く(いつも同じモデルで動かしたい役)

いちばん使いやすいのは、役ごとに定義ファイルを作る方法です。プロジェクトの .claude/agents/ に置けば git で共有でき、自分のすべてのプロジェクトで使うなら ~/.claude/agents/ に置きます。

---
name: translator
description: 日本語の記事を英語に翻訳する。翻訳を頼まれたときに使う
model: sonnet
effort: medium
tools: Read, Write, Grep
---
あなたは技術記事の翻訳者です。HTML のタグと属性は変えず、
見えている文章だけを自然な英語にしてください。

同じ名前の定義が複数あるときは、組織の管理設定、起動時の --agents、プロジェクト、ユーザー、プラグインの順に優先されます。v2.1.198 以降、/agents コマンドは作成画面を開かなくなったので、Claude に作成を頼むか、ファイルを直接書きます。

② 呼び出すときに指定する(その場だけ変えたい)

定義を作らなくても、Claude がサブエージェントを起動するときにモデルを付けられます。会話で「この確認は Haiku のサブエージェントに任せて」のように頼むと、Claude はその呼び出しにモデルを付けて起動します。この指定は定義ファイルより優先されます。本当に付いたかどうかは、5章の方法で確かめてください。

③ 環境変数で既定を決める(指定のないものをまとめて変えたい)

{
  "env": {
    "CLAUDE_CODE_SUBAGENT_MODEL": "sonnet"
  }
}

settings.jsonenv に書くと、モデルがほかで決まらなかったサブエージェントに効きます。公式ドキュメントによれば、エージェントチームのメンバーやワークフローのエージェントも対象です。ただし、これだけでは組み込みの Explore と Plan のモデルは変わりません4章)。

④ 起動時の --agents で渡す(そのセッションだけ)

claude --agents '{
  "translator": {
    "description": "Translates Japanese articles into English.",
    "prompt": "You are a technical translator. Keep all HTML tags.",
    "model": "sonnet",
    "effort": "medium"
  }
}'

ファイルには保存されず、そのセッションの間だけ使えます。

⑤ Claude Agent SDK で定義する

from claude_agent_sdk import ClaudeAgentOptions, AgentDefinition

options = ClaudeAgentOptions(
    agents={
        "translator": AgentDefinition(
            description="Translates Japanese articles into English.",
            prompt="You are a technical translator. Keep all HTML tags.",
            tools=["Read", "Write"],
            model="sonnet",
            effort="medium",
        ),
    }
)

SDK の AgentDefinition でも、model にはエイリアス・inherit・完全なモデルIDを書けます。書かなければ上の順番で決まります。なお公式ドキュメントは、Opus 5 は以前のモデルよりサブエージェントに仕事を配りやすいとして、同時に動かす数(既定20)や使う金額に上限を付ける設定を案内しています。

出典: Claude Code 公式ドキュメント「Create custom subagents」(置き場所と優先順位、--agents/agents の変更、環境変数)、同「Model configuration」CLAUDE_CODE_SUBAGENT_MODEL の対象)、同「Subagents in the SDK」AgentDefinition、上限の設定)

4. 組み込みのサブエージェントは何で動くか

自分で定義しなくても、Claude Code には最初からいくつかのサブエージェントが入っています。それぞれのモデルは次のとおりです。

名前モデル補足
Explore本体のモデルを引き継ぐ。Claude API では Opus が上限読み取り専用。CLAUDE.md と git の状態を読まない
Plan本体のモデルを引き継ぐプランモードで使う。読み取り専用。CLAUDE.md と git の状態を読まない
general-purpose呼び出すときの指定が無ければ、環境変数のモデル、それも無ければ本体調べる・書き換える両方をこなす
claude-code-guideHaikuClaude Code の機能について質問したとき
claude自分のモデルを持たず、2章の順番で決まるほかの役に当てはまらないときの汎用
statusline-setupSonnet/statusline を実行したとき

出典: Claude Code 公式ドキュメント「Create custom subagents」(Built-in subagents、2026年9月15日時点)

Explore は v2.1.198 から、いつも Haiku で動く方式ではなくなりました。本体のモデルを引き継ぎ、Claude API では Opus を上限とします。本体が Fable のような上位のモデルでも Explore は Opus で動き、本体が Sonnet や Haiku ならそのモデルで動きます。Haiku に戻したい場合、公式ドキュメントは Explore という名前の定義ファイルを作って model: haiku を書く方法を案内しています(同じ名前の組み込みより、自分の定義が優先されるため)。

Explore と Plan のモデルを環境変数で変えたいときは、2章CLAUDE_CODE_SUBAGENT_MODEL_FORCE まで設定する必要があります。

5. 実測①:本当にそのモデルで動いたか

仕様どおりに動くかを、筆者の環境(本体は Opus 5、工数は high)で確かめました。組み込みの general-purpose に「README を読んで3行で要約する」という同じ小さな作業を、モデルを sonnet・haiku に指定した場合と、指定しない場合の3通りで任せています。

確かめ方は2つあります。動いている最中なら、/tasks の一覧にサブエージェントのモデルが表示されます(公式ドキュメントに記載)。終わった後なら、手元の会話ログの subagents/ フォルダにある agent-*.jsonl で、各応答の message.model を見ます。ログの置き場所と読み方はClaude Codeの使用量をセッション別に見る方法で詳しく扱っています。

呼び出すときの指定ログに記録されたモデル
sonnetclaude-sonnet-5
haikuclaude-haiku-4-5-20251001
指定なしclaude-opus-5(本体と同じ)

出典: 筆者の環境で実測(2026年9月15日、Windows のデスクトップアプリ。各サブエージェントの応答すべてで同じモデルが記録されていた)

指定どおりのモデルで動き、指定しなかったものは本体のモデルを引き継ぎました。同じフォルダの agent-*.meta.json には、指定したときだけ "model": "sonnet" のように指定値が残ります。

6. 実測②:起動するだけで数万トークンを読む

同じログから、もうひとつ分かったことがあります。サブエージェントは、作業を始める前の最初の応答だけで数万トークンを読み込みます。自分用のシステムプロンプトとツールの定義、CLAUDE.md などが最初に入るからです。

モデルキャッシュが無い状態で起動
(キャッシュ書き込み)
約1分後に同じモデルを起動
(読み込み / 書き込み)
Sonnet 583,00744,846 / 38,385
Haiku 4.565,95834,008 / 32,122
Opus 577,23539,159 / 38,298

出典: 筆者の環境で実測(2026年9月15日。各サブエージェントの最初の応答のトークン数。書き込みはすべて5分のキャッシュだった)

この数字から読めることは3つです。

ひとつ目は、同じモデルのサブエージェント同士では、先頭の共通部分がキャッシュから読まれること。2回目の起動では、Sonnet 5 で約4万5千トークンが読み込み(入力単価の0.1倍)になりました。公式ドキュメントも、同じモデルで先頭が同じ要求はキャッシュを共有すると書いています。反対に、キャッシュはモデルごとに別で、サブエージェントは本体のキャッシュも読みません(先頭の中身が違うため)。

ふたつ目は、サブスクリプションでもサブエージェントのキャッシュは5分で切れること。公式ドキュメントでは、プランの範囲内で使うとき本体の会話は1時間ですが、サブエージェントは5分です。5分以上あけて次のサブエージェントを起動すると、また書き込みから始まります。1時間にしたい場合は、設定の subagentPromptCacheTtl か環境変数 CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL1h にします(v2.1.242 以降)。サブエージェントごとに決めるなら、定義ファイルの experimentalcacheTtl を書きます(v2.1.248 以降。サブスクリプションで追加の使用分(usage credits)を使っている間は、ここの 1h は無視されます)。1時間のキャッシュは、書き込みの単価が入力単価の2倍です(5分のキャッシュは1.25倍)。

みっつ目は、同じ文章でも Haiku 4.5 のトークン数が少なく出ること。公式の料金ページによれば、Claude 4.7 以降のモデルは新しいトークナイザーを使い、同じ文章で約30%多くトークンを数えます。Haiku 4.5 は 4.7 より前の世代で、新しいトークナイザーの対象に挙がっていません。表の数字をそのまま比べると、Haiku が実際より軽く見えます。

この数字の注意点

  • 筆者のプロジェクトは CLAUDE.md が大きい(約5万7千バイト)ので、一般的なプロジェクトより多めに出ています。CLAUDE.md の大きさはそのまま、サブエージェント1体ごとの読み込みに乗ります
  • 定義ファイルで omitClaudeMd: true にすると、そのサブエージェントにはユーザー・プロジェクト・ローカルの CLAUDE.md を読ませません(組織の管理ポリシーのファイルは読みます。v2.1.271 以降)。組み込みの Explore と Plan は、もともと読みません
  • 🟡 起動時に何トークン読むかの内訳は、公式に公表されていません。ここに書いたのは筆者の環境での合計です

細かい作業を何体ものサブエージェントに分けると、この「起動するだけでかかる分」が1体ごとに乗ります。安いモデルに任せると、作業の分だけでなく、この分も安くなります。

出典: Claude Code 公式ドキュメント「How Claude Code uses prompt caching」(モデルごとのキャッシュ、サブエージェントとキャッシュ、キャッシュの有効期間)、Claude Platform Docs「Pricing」(トークナイザー、キャッシュの倍率)、Claude Code 公式ドキュメント「Create custom subagents」omitClaudeMd

7. 実測③:同じ翻訳を3モデルに2回ずつ任せた

冒頭の疑問だった「翻訳だけ下げる」を、実際に試しました。当サイトの記事の日本語版から1節(HTML で6,265字、表・数値のカード・コードの断片を含む)を選び、タグの構造を変えずに英語へ訳す作業を、同じ指示で各モデルに2回ずつ、計6回任せています。工数は、Opus 5 と Sonnet 5 が本体から引き継いだ high です(Haiku 4.5 は工数に対応していません)。

モデルかかった時間
(1回目 / 2回目)
タグの数数値49個料金(入力とキャッシュの分)
Opus 546秒 / 45秒2回とも原文と一致2回とも全部あり$0.46 / $0.46
Sonnet 539秒 / 74秒2回とも原文と一致2回とも全部あり$0.23 / $0.25
Haiku 4.599秒 / 94秒1回目に <strong> が1つ欠落2回とも全部あり$0.10 / $0.10

出典: 筆者の環境で実測(2026年9月15日。料金は会話ログのトークン数に公式の単価を掛けた定価換算。出力の分は含めていない=下の注を参照)

料金の欄に出力の分を入れていないのは、ログの出力トークンが信用できなかったからです。約8,800字の訳文をファイルに書き出した応答に、出力18トークンと記録されている例がありました。出力の単価は100万トークンあたり Opus 5 が $25、Sonnet 5 が $10、Haiku 4.5 が $5 で、訳文はどれも英語で約8,500〜8,900字でした。

訳の出来は、筆者が日本語の原文と1文ずつ突き合わせて確かめました。

  • 意味の取り違えは、6回とも見つかりませんでした。数値・表・内部リンクも正しく残っています。数値と箇条書きが多く、訳しやすい部類の文章です
  • 差が出たのは、読みやすさと表記のそろい方です。Haiku 4.5 は1回目で一人称が「my」と「the author's」で混ざり、2回目には「G from 9th rises to 6th」のような硬い語順がありました。Sonnet 5 は自然な英語でしたが、「subagent」を1回目は「Sub-agent」、2回目は「Subagent」と書き、回によって表記が揺れました。Opus 5 は2回とも用語がそろっていました
  • いちばん時間がかかったのは、いちばん安い Haiku 4.5 でした。Sonnet 5 は2回で時間に倍近い差が出ています。回数が少ないので、速さの順位は目安にとどめてください

この比較で分からないこと

  • 1節を2回ずつ訳しただけです。長い記事、語順の大きく違う言語、アラビア語のように右から左へ書く言語、専門用語の多い文章では差が広がる可能性があります
  • 「原文の誤りに気づく力」は測っていません。当サイトでは、翻訳を任せた Opus のサブエージェントが、日本語原文の事実の誤り(プランごとの文字数上限の書き違いなど)を指摘してきたことがあります。この種の指摘がモデルでどれだけ変わるかは、この実験の範囲外です

8. 料金と使用量への効き方

サブエージェントのモデルを下げたときにどれだけ効くかは、APIの従量課金か、Pro・Max などのサブスクリプションかで考え方が変わります。

APIの従量課金:単価の比がそのまま効く

モデル入力出力5分キャッシュの書き込みキャッシュの読み込み
Claude Opus 5$5$25$6.25$0.50
Claude Sonnet 5$2$10$2.50$0.20
Claude Haiku 4.5$1$5$1.25$0.10

出典: Claude Platform Docs「Pricing」(100万トークンあたり、2026年9月15日時点。Sonnet 5 は導入時の価格がそのまま正式な価格になった)

Sonnet 5 は Opus 5 の5分の2、Haiku 4.5 は5分の1の単価です。7章の実測では、入力とキャッシュの分は Opus 5 の約半分が Sonnet 5、約5分の1が Haiku 4.5 でした。Haiku 4.5 は単価の比に近い一方、Sonnet 5 は単価の比(5分の2)より高めに出ています。応答の回数と、1回あたりに読み込んだ量がモデルごとに違ったためです(Sonnet 5 は4回と6回、Opus 5 は2回とも4回。Haiku 4.5 はトークナイザーの違いも混ざります)。

サブスクリプション:モデルを変えても戻らない上限がある

Pro・Max では、セッションの上限と週の上限は全モデル共通です。使い切ったあとで /model でモデルを替えても、使えるようにはなりません。これとは別に「Opus の上限」「Sonnet の上限」というモデル系列ごとの上限があり、そちらに達したときだけは、系列の外のモデルに替えれば続けられます。

🟡 サブエージェントを Sonnet や Haiku にしたとき、プランの上限がどれだけ長持ちするかは公表されていません。APIの単価の比が目安にはなりますが、上限の減り方がその比率どおりだとは書かれていません。どのサブエージェントが多く使っているかは、/usage のプランの内訳(スキル・サブエージェント・プラグイン・MCPサーバー別の割合)で確かめられます。

出典: Claude Code 公式ドキュメント「Error reference」(You've hit your session limit:全モデル共通の上限とモデル系列ごとの上限)、同「Manage costs effectively」/usage のプランの内訳)

9. どの仕事を下げるか

公式ドキュメントは目安として、多くのコーディング作業は Sonnet で十分にこなせて Opus より安いこと、Opus は複雑な設計判断や多段の推論に取っておくこと、単純なサブエージェントの作業には定義ファイルで model: haiku を指定することを挙げています。エージェントチームのメンバーにも Sonnet が勧められています。

そのうえで、7章の実測と当サイトでの運用から、判断の材料を3つ挙げます。

下げやすい

結果を機械で確かめられる仕事

決まった形への変換、ファイルの検索や読み取り、件数の多い定型の確認。7章の <strong> の欠落も、タグの数を機械で数えて見つかりました。

下げるなら検証とセットで

読みやすさや表記の統一が大事な仕事

翻訳のように、意味は合っていても表記が揺れやすいもの。用語の一覧を指示に入れる、後から表記をそろえる工程を用意する、といった手当てが要ります。

下げないほうがいい

判断や「おかしさへの気づき」を任せる仕事

原文や設計の誤りに気づいてほしい仕事、結果を機械で確かめにくい仕事。この力はモデルで差が出うるうえ、今回の実験では測れていません。

迷ったときは、いつもの仕事を1つだけ下げたモデルに任せ、今のモデルの結果と並べて比べるのが確実です。定義ファイルの model を1行変えるだけで試せて、合わなければすぐ戻せます。サブエージェントではなく本体のモデルを、計画のときだけ Opus・実装では Sonnet に分けたい場合は、Claude Codeのopusplanとは?で扱っている opusplan が使えます。

FAQ

Q1. 会話の途中で本体の /model を変えると、サブエージェントも変わりますか。
呼び出すときの指定、定義ファイルの modelinherit 以外)、環境変数のどれかで決まるサブエージェントは変わりません。どれも無いサブエージェントと、定義ファイルで inherit にしたサブエージェントは、本体のモデルに従います。なお、本体のモデルを替えると本体のキャッシュは作り直しになります。

Q2. モデルはそのままで、工数だけ下げられますか。
下げられます。定義ファイルに effort: medium のように書くと、そのサブエージェントが動いている間だけその工数になります。ただし、環境変数 CLAUDE_CODE_EFFORT_LEVEL が設定されているときは、そちらが優先されます。

Q3. Amazon Bedrock で model: sonnet と書くと、どのモデルになりますか。
2026年9月15日時点の公式ドキュメントでは Sonnet 4.5 です。Anthropic API では Sonnet 5 なので、同じ定義ファイルでも接続先で結果が変わります。版を固定したい場合は、完全なモデルIDを書いてください。

Q4. サブエージェントのキャッシュは1時間にしたほうが得ですか。
使い方によります。5分以上あけて同じ種類のサブエージェントを何度も起動するなら、毎回の書き込みを減らせます。一方で、1時間のキャッシュは書き込みの単価が入力単価の2倍(5分は1.25倍)なので、短時間にまとめて動かすだけなら5分のほうが安く済みます。1時間にする設定と、その条件は6章にまとめています。

Q5. モデルを指定したのに、効いていない気がします。
次の順に確かめてください。①CLAUDE_CODE_SUBAGENT_MODEL_FORCE が有効になっていないか(定義ファイルの指定が無視されます)、②v2.1.251 より前の版で、環境変数が設定されていないか、③組織の管理設定でそのモデルが許可されているか。実際にどのモデルで動いたかは、動作中なら /tasks、終わった後なら会話ログの message.model で確認できます。

出典