Claude Codeのサブエージェントを呼び出して、過去の経緯が伝わっていないと感じた経験はないでしょうか。
Anthropicは最近のアップデートでforked subagents(フォークサブエージェント)を追加しました。この記事では、通常サブエージェントとの根本的な違い、/forkコマンドの有効化手順、使うべき場面と避けるべき場面を整理します。
この記事でわかること:
- 通常サブエージェントでコンテキストが失われる理由
- forked subagentsがどう問題を解決するか
- 有効化の方法と基本的な使い方
- フォークが向いているタスクと向いていないタスクの判断基準
通常サブエージェントの「圧縮ロス」問題
Claude Codeで通常のサブエージェントを呼び出すとき、サブエージェントが受け取るのは親セッションの圧縮された要約です。会話全文ではありません。
長いセッション(数十万トークン)をそのままサブエージェントのコンテキストウィンドウに渡すと、サブエージェント自身の作業スペースがなくなります。そのため、Claude Codeは会話を圧縮して要点を抽出し、それをサブエージェントに渡す仕組みになっています。
圧縮は常にロスを伴います。たとえば「プロジェクトは標準的なLaravelミドルウェアを使用」という一行に、カスタムミドルウェアの具体的な処理が消えることがあります。コードレビューや設計継続作業では、この細部の欠落が誤った判断を生むことがあります。
forked subagents とは何か
/forkコマンドで起動するforked subagentsは、親セッションのコンテキストを圧縮せずそのまま引き継ぐサブエージェントです。
フォークは親セッションのメッセージ、ツール呼び出し、ファイル読み込み結果のすべてをコンテキストウィンドウに持った状態で起動します。要約ではなく、実際の内容です。
フォークは同時に複数起動できます。「設計案A」と「設計案B」を並列フォークに投げれば、同じ文脈をベースにした比較が可能になります。通常サブエージェントでは双方が同じ圧縮要約しか持てないため、細部のニュアンスがそろわないことがあります。
プロンプトキャッシュの共有でコストを抑える
フォークが全コンテキストを引き継ぐと聞くと、コストが大幅に増えると思うかもしれません。実際にはそうではありません。
フォークは親セッションとプロンプトキャッシュを共有します。すでにキャッシュ済みのトークンはキャッシュ読み取り価格で処理されます(Sonnetクラスで通常入力の約10%)。セッションが18万トークンに達していても、フォーク初回リクエストの実質コストは1.8万トークン相当に近くなります。
フォーク内部ではディスクへの書き込みをポインタ形式で最適化しています。複数フォークを起動してもディスクが圧迫されません。
有効化と使い方
forked subagentsを有効化するには、シェルプロファイルに以下の環境変数を追加します。
export CLAUDE_CODE_FORK_SUBAGENT=1
または~/.claude/settings.json(ユーザースコープ)か.claude/settings.json(プロジェクトスコープ)に対応するフラグを追加します。バージョンによってキー名が変わる場合があるため、最新のClaude Codeリリースノートで確認することを推奨します。
有効化後、セッション内で/forkコマンドが使えるようになります。コマンドに続けてタスクを入力すると、全コンテキスト付きでフォークが起動します。フォークへのフォローアップ入力も直接行えます。用が済んだフォークは/rewindで破棄できます。
使うべき場面と避けるべき場面
フォークは「コンテキストが資産になる」タスクに向いています。
設計上の一貫性が必要な作業がその典型です。デザインシステムに沿ったUIコンポーネントの変形案を生成する場合、セッション中に積み上げた色トークンやスペーシングルールがそのまま引き継がれます。圧縮要約しか持たないサブエージェントでは細部が欠落し、設計系から外れたアウトプットになりがちです。
複数案の比較にも有効です。AとBの2案を並列フォークに投げれば、同じ文脈に基づく両論が出揃います。判断の前提が統一されるため、選択の根拠が明確になります。
一方、コードレビューやセキュリティ監査にはフォークを使わないほうが適切です。フォークは親セッションのすべての決定を「知って」います。レビューに求められる新鮮な視点が失われ、確証バイアスが生じます。セッション中に書いたコードをフォークにレビューさせた場合、定数時間比較の欠落のようなセキュリティ上の問題を見逃す事例が報告されています。同じコードを通常サブエージェント(新規コンテキスト)に投げると、同じ問題を検出しました。
現時点での制限
フォークにはいくつかの制限があります。
フォークはインタラクティブセッションのみで動作し、非インタラクティブモード(Agent SDKを含む)では無効化されます。フォークからさらにフォークを起動することもできません(ネスト非対応)。
また、フォークはセッション全体のコンテキストを受け取るため、セッション自体が肥大化している場合は精度も低下します。40万トークンを超えるセッションからフォークすると、その精度低下が引き継がれます。フォークの効果を最大化するには、セッションの定期的な整理が前提になります。
通常サブエージェントとforked subagentsは優劣の問題ではなく、タスクの性質に応じた使い分けの問題です。コンテキスト継続性が必要な作業に/forkを使い、独立した判断が必要な作業には通常サブエージェントを使うことで、Claude Codeを使ったワークフロー全体の質が上がります。