9月8日、Abhijith N Arjunanが「I sent Claude Code's grunt work to subagents and cut my usage billing by 40%」と題した記事を公開した。Claude CodeでOpusやSonnetを使い続けている開発者に向けて、READMEの更新やテキスト整形といった「単純作業」を安価なモデルに自動委譲するサブエージェント構成を紹介しており、実測でトークン消費を30〜40%削減、条件次第では50%削減を達成したという内容だ。高性能モデルのコストに悩んでいるユーザーにとって即実践できる手法である。
問題の核心:OpusにREADMEを書かせるな
Claude Codeはセッション単位でモデルを選択する仕組みになっている。コーディング品質を求めてOpusやSonnetを選ぶのは自然な判断だが、ここに盲点がある。
セッション中に発生するタスクのすべてが、高性能モデルを必要としているわけではない。
テキストの校正、README更新、情報の確認といった単純作業も、Opusが処理すれば高額なトークンを消費する。Anthropicの公式料金ページによれば、Claude Opus 4はClaude Haiku 3.5と比較してトークン単価が大幅に高く設定されており、しかもOpusは詳細な回答を生成しようとする傾向があるため、簡単な質問でも消費量が膨らみやすい。Claude Codeには月額または従量課金のUsage Limitsが設定されており、単純作業による無駄な消費が積み重なると、その上限に早々に達してしまう。
この問題を解消するのが、Claude Codeに組み込まれているサブエージェント機能だ。
サブエージェントとは何か
サブエージェントとは、Claude Codeのメインセッションから特定のタスクを切り出し、別のモデルやツール設定で処理させる仕組みだ。Claude Code固有の機能として実装されており、MCP(Model Context Protocol)による外部ツール連携とは独立した概念である。MCPがClaude Codeに外部サービスへのアクセス能力を追加するものだとすれば、サブエージェントは「どのモデルが・どのタスクを処理するか」というルーティングを制御する機能に相当する。両者は組み合わせて利用でき、後述のFact Checkerの例のように、サブエージェントにMCPツールを持たせることも可能だ。
サブエージェントの作り方:「description」が全てを決める
サブエージェントを作る操作自体はシンプルで、Claude Codeに以下のようなプロンプトを渡すだけだ。
Create a subagent called transcript-cleaner
Description: "Converts a rough voice-memo or interview transcript into cleaned-up paragraphs, removes filler words and false starts. Doesn't alter original sentence structure"
Model: Haiku
Tools: Read, Write
ここで最も重要なのが description フィールドだ。Claude Codeはユーザーがプロンプトを入力するたびに、登録済みのサブエージェント全ての説明文を参照する。プロンプトの内容がいずれかの説明文とマッチすると、そのサブエージェントが自動的に起動する仕組みになっている。
つまり、説明文が曖昧だと誤作動の原因になる。タスクが明確に限定されるよう、具体的な動作を書くことが必須だ。手動でサブエージェントを呼び出す方法もあるが、それでは作業の流れが途切れる。自動ルーティングを機能させるために、説明文の精度に投資するのが正解だ。
実際に委譲しているタスクの例
筆者が実運用しているサブエージェントの構成は以下のとおりだ。
- README Sync:設定ファイルやAPIエンドポイントを変更した際に、READMEを自動更新する
- Outline Formatter:粗いテキストを、あらかじめ設定したスタイルに整形する
- Fact Checker:Firecrawlなどのウェブブラウジングツールを使い(モデルはSonnet)、上位モデルの出力に含まれる主張をファクトチェックする
注目すべきはFact Checkerで、Sonnetを使っているにもかかわらずコスト削減に貢献している点だ。メインのOpusセッションから切り出して独立したサブタスクとして処理することで、コンテキスト肥大化を防いでいる。コンテキストウィンドウに蓄積された会話履歴はすべてトークンとして計上されるため、長時間のセッションではこの「切り出し」の効果が特に大きくなる。
実際の効果:セッションによっては50%削減も
この構成によって、トークン消費を30〜40%削減できたと筆者は報告している。HaikuをSonnet/Opusの代替として使った場合は、単純タスクに限れば50%削減に達するセッションもあり、Usage Limitsに達するまでの時間を延ばせるという。
Claude Codeには過去セッションの分析機能もあるため、「どのタスクをサブエージェントに委譲できるか」をClaude Code自身に提案させることも可能だ。まずは既存のセッションログを分析させてみるのが、サブエージェント設計の出発点として有効である。
注意点:サブエージェントの数と説明文の管理
サブエージェントの数に上限はないが、増やしすぎると説明文同士が曖昧に重なり、誤ったサブエージェントにタスクが流れるリスクがある。筆者は「継続的なプロジェクトで定期的に発生するタスク」に絞って作成することを勧めている。
また、能力の低いモデルに不適切なタスクを割り当てると出力品質が落ちるケースもあり、最適な構成を見つけるには試行錯誤が必要だ。各サブエージェントの説明文は定期的に見直し、タスクの境界が重複していないかを確認する運用が望ましい。
詳細はI sent Claude Code's grunt work to subagents and cut my usage billing by 40%を参照していただきたい。