サブエージェントは、特定の種類のタスクを処理する特化した AI アシスタントです。サイドタスクがメイン会話に検索結果、ログ、または再度参照しないファイルコンテンツで溢れかえる場合に使用します。サブエージェントはそのタスクを独自のコンテキストで実行し、概要のみを返します。同じ種類のワーカーを同じ指示で繰り返し生成する場合は、カスタムサブエージェントを定義します。 各サブエージェントは、カスタムシステムプロンプト、特定のツールアクセス、および独立した権限を備えた独自のコンテキストウィンドウで実行されます。Claude がサブエージェントの説明に一致するタスクに遭遇すると、そのサブエージェントに委譲し、サブエージェントは独立して動作して結果を返します。実際にコンテキスト節約を確認するには、コンテキストウィンドウの可視化で、サブエージェントが独自の別のウィンドウで研究を処理するセッションを説明しています。Documentation Index
Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
サブエージェントは単一のセッション内で動作します。多くの独立したセッションを並行して実行し、1 つの場所から監視するには、バックグラウンドエージェントを参照してください。互いに通信するセッションについては、エージェントチームを参照してください。
- コンテキストを保持する ことで、探索と実装をメインの会話から分離します
- 制約を強制する ことで、サブエージェントが使用できるツールを制限します
- 設定を再利用する ことで、ユーザーレベルのサブエージェントをプロジェクト全体で再利用します
- 動作を特化させる ことで、特定のドメイン向けの焦点を絞ったシステムプロンプトを使用します
- コストを制御する ことで、Haiku のような高速で安価なモデルにタスクをルーティングします
組み込みサブエージェント
Claude Code には、Claude が適切なときに自動的に使用する組み込みサブエージェントが含まれています。各サブエージェントは、親の会話の権限を継承し、追加のツール制限があります。- Explore
- Plan
- General-purpose
- Other
コードベースの検索と分析に最適化された高速な読み取り専用エージェント。
- モデル:Haiku(高速、低レイテンシ)
- ツール:読み取り専用ツール(Write および Edit ツールへのアクセスは拒否)
- 目的:ファイル検出、コード検索、コードベース探索
クイックスタート:最初のサブエージェントを作成する
サブエージェントは YAML フロントマターを含む Markdown ファイルで定義されます。手動で作成することも、/agents コマンドを使用することもできます。
このチュートリアルでは、/agents コマンドを使用してユーザーレベルのサブエージェントを作成する手順を説明します。サブエージェントはコードをレビューし、コードベースの改善を提案します。
場所を選択する
Library タブに切り替え、Create new agent を選択し、Personal を選択します。これにより、サブエージェントが
~/.claude/agents/ に保存され、すべてのプロジェクトで利用可能になります。Claude で生成する
Generate with Claude を選択します。プロンプトが表示されたら、サブエージェントを説明します:Claude は識別子、説明、およびシステムプロンプトを生成します。
ツールを選択する
読み取り専用レビュアーの場合は、Read-only tools 以外のすべてを選択解除します。すべてのツールを選択したままにすると、サブエージェントはメイン会話で利用可能なすべてのツールを継承します。
メモリを設定する
User scope を選択して、サブエージェントに
~/.claude/agent-memory/ の永続メモリディレクトリを提供します。サブエージェントはこれを使用して、コードベースパターンや繰り返される問題など、会話全体で洞察を蓄積します。サブエージェントが学習を永続化しないようにする場合は、None を選択します。サブエージェントを設定する
/agents コマンドを使用する
/agents コマンドは、サブエージェントを管理するためのタブ付きインターフェースを開きます。Running タブはライブサブエージェントを表示し、それらを開くまたは停止できます。Library タブでは以下を実行できます:
- すべての利用可能なサブエージェント(組み込み、ユーザー、プロジェクト、プラグイン)を表示する
- ガイド付きセットアップまたは Claude 生成を使用して新しいサブエージェントを作成する
- 既存のサブエージェント設定とツールアクセスを編集する
- カスタムサブエージェントを削除する
- 重複が存在する場合、どのサブエージェントがアクティブであるかを確認する
claude agents の出力をパイプします。たとえば、claude agents | cat はエージェントをソース別にグループ化して出力し、より高い優先度の定義によってオーバーライドされているかどうかを示します。
サブエージェントのスコープを選択する
サブエージェントは YAML フロントマターを含む Markdown ファイルです。スコープに応じて異なる場所に保存します。複数のサブエージェントが同じ名前を共有する場合、より高い優先度の場所が優先されます。
プロジェクトサブエージェント (
.claude/agents/)は、コードベース固有のサブエージェントに最適です。バージョン管理にチェックインして、チームが協力して使用および改善できるようにします。
プロジェクトサブエージェントは、現在の作業ディレクトリから上へ向かって検出されます。--add-dir で追加されたディレクトリはファイルアクセスのみを付与し、サブエージェントはスキャンされません。プロジェクト全体でサブエージェントを共有するには、~/.claude/agents/ またはプラグインを使用します。
ユーザーサブエージェント (~/.claude/agents/)は、すべてのプロジェクトで利用可能な個人用サブエージェントです。
CLI で定義されたサブエージェント は、Claude Code を起動するときに JSON として渡されます。これらはそのセッションのみに存在し、ディスクに保存されないため、クイックテストまたは自動化スクリプトに役立ちます。単一の --agents 呼び出しで複数のサブエージェントを定義できます:
- macOS, Linux, WSL
- Windows PowerShell
--agents フラグは、ファイルベースのサブエージェントと同じフロントマターフィールドを持つ JSON を受け入れます:description、prompt、tools、disallowedTools、model、permissionMode、mcpServers、hooks、maxTurns、skills、initialPrompt、memory、effort、background、isolation、および color。システムプロンプトには prompt を使用します。これはファイルベースのサブエージェントの markdown 本体と同等です。
管理サブエージェント は、組織管理者によってデプロイされます。管理設定ディレクトリ内の .claude/agents/ に markdown ファイルを配置し、プロジェクトおよびユーザーサブエージェントと同じフロントマター形式を使用します。管理定義は、同じ名前のプロジェクトおよびユーザーサブエージェントより優先されます。
プラグインサブエージェント は、インストールしたプラグインから提供されます。これらは、カスタムサブエージェントと一緒に /agents に表示されます。プラグインサブエージェントの作成の詳細については、プラグインコンポーネントリファレンスを参照してください。
セキュリティ上の理由から、プラグインサブエージェントは
hooks、mcpServers、または permissionMode フロントマターフィールドをサポートしていません。これらのフィールドはプラグインからエージェントを読み込むときに無視されます。これらが必要な場合は、エージェントファイルを .claude/agents/ または ~/.claude/agents/ にコピーしてください。また、settings.json または settings.local.json の permissions.allowにルールを追加することもできますが、これらのルールはプラグインサブエージェントだけでなく、セッション全体に適用されます。tools と model を使用し、定義の本体がチームメイトのシステムプロンプトに追加指示として追加されます。エージェントチームを参照して、どのフロントマターフィールドがこのパスに適用されるかを確認してください。
サブエージェントファイルを書く
サブエージェントファイルは、YAML フロントマターを使用して設定を行い、その後に Markdown でシステムプロンプトを続けます:サブエージェントはセッション開始時に読み込まれます。ディスク上でサブエージェントファイルを直接追加または編集する場合は、セッションを再起動してそれを読み込みます。
/agents インターフェースを通じて作成されたサブエージェントは、再起動なしで即座に有効になります。cd コマンドは Bash または PowerShell ツール呼び出し間で永続化されず、メイン会話の作業ディレクトリに影響しません。代わりにサブエージェントにリポジトリの分離されたコピーを提供するには、isolation: worktreeを設定します。
サポートされているフロントマターフィールド
以下のフィールドは YAML フロントマターで使用できます。name と description のみが必須です。
| フィールド | 必須 | 説明 |
|---|---|---|
name | はい | 小文字とハイフンを使用した一意の識別子。Hooksはこの値を agent_type として受け取ります。ファイル名は一致する必要はありません |
description | はい | Claude がこのサブエージェントに委譲する場合 |
tools | いいえ | サブエージェントが使用できるツール。省略した場合はすべてのツールを継承します。スキルをコンテキストにプリロードするには、tools にリストするのではなく skills フィールドを使用します |
disallowedTools | いいえ | 拒否するツール。継承または指定されたリストから削除 |
model | いいえ | 使用するモデル:sonnet、opus、haiku、完全なモデル ID(例:claude-opus-4-7)、または inherit。デフォルトは inherit |
permissionMode | いいえ | 権限モード:default、acceptEdits、auto、dontAsk、bypassPermissions、または plan。プラグインサブエージェントでは無視されます |
maxTurns | いいえ | サブエージェントが停止する前の最大 agentic ターン数 |
skills | いいえ | スタートアップ時にサブエージェントのコンテキストにプリロードするスキル。完全なスキルコンテンツが注入されます。説明だけでなく、スキル全体が注入されます。サブエージェントは、Skill ツールを通じて、リストされていないプロジェクト、ユーザー、およびプラグインスキルを引き続き呼び出すことができます |
mcpServers | いいえ | このサブエージェントで利用可能なMCP サーバー。各エントリは、既に設定されたサーバーを参照するサーバー名(例:"slack")または、サーバー名をキーとし、完全なMCP サーバー設定を値とするインライン定義のいずれかです。プラグインサブエージェントでは無視されます |
hooks | いいえ | このサブエージェントにスコープされたライフサイクルフック。プラグインサブエージェントでは無視されます |
memory | いいえ | 永続メモリスコープ:user、project、または local。クロスセッション学習を有効にします |
background | いいえ | true に設定して、このサブエージェントを常にバックグラウンドタスクとして実行します。デフォルト:false |
effort | いいえ | このサブエージェントがアクティブな場合の努力レベル。セッション努力レベルをオーバーライドします。デフォルト:セッションから継承。オプション:low、medium、high、xhigh、max。利用可能なレベルはモデルに依存します |
isolation | いいえ | worktree に設定して、サブエージェントを一時的なgit worktreeで実行し、リポジトリの分離されたコピーを提供します。サブエージェントが変更を加えない場合、worktree は自動的にクリーンアップされます |
color | いいえ | タスクリストとトランスクリプトでサブエージェントの表示色。red、blue、green、yellow、purple、orange、pink、または cyan を受け入れます |
initialPrompt | いいえ | このエージェントがメインセッションエージェント(--agent または agent 設定を通じて)として実行される場合、最初のユーザーターンとして自動送信されます。コマンドおよびスキルが処理されます。ユーザーが提供するプロンプトの前に付加されます |
モデルを選択する
model フィールドは、サブエージェントが使用するAI モデルを制御します:
- モデルエイリアス:利用可能なエイリアスの 1 つを使用します:
sonnet、opus、またはhaiku - 完全なモデル ID:
claude-opus-4-7またはclaude-sonnet-4-6などの完全なモデル ID を使用します。--modelフラグと同じ値を受け入れます - inherit:メイン会話と同じモデルを使用します
- 省略:指定されていない場合、デフォルトは
inherit(メイン会話と同じモデルを使用)です
model パラメーターを渡すこともできます。Claude Code はサブエージェントのモデルを次の順序で解決します:
CLAUDE_CODE_SUBAGENT_MODEL環境変数(設定されている場合)- 呼び出しごとの
modelパラメーター - サブエージェント定義の
modelフロントマター - メイン会話のモデル
サブエージェント機能を制御する
ツールアクセス、権限モード、および条件付きルールを通じて、サブエージェントが実行できることを制御できます。利用可能なツール
サブエージェントは、Claude Code の内部ツールのいずれかを使用できます。デフォルトでは、サブエージェントは MCP ツールを含む、メイン会話からすべてのツールを継承します。 ツールを制限するには、tools フィールド(許可リスト)または disallowedTools フィールド(拒否リスト)を使用します。この例は tools を使用して、Read、Grep、Glob、および Bash のみを排他的に許可します。サブエージェントはファイルを編集したり、ファイルを書き込んだり、MCP ツールを使用したりできません:
disallowedTools を使用して、Write および Edit を除く、メイン会話からすべてのツールを継承します。サブエージェントは Bash、MCP ツール、およびその他すべてを保持します:
disallowedTools が最初に適用され、その後 tools が残りのプールに対して解決されます。両方にリストされているツールは削除されます。
生成できるサブエージェントを制限する
エージェントがclaude --agent でメインスレッドとして実行される場合、Agent ツールを使用してサブエージェントを生成できます。生成できるサブエージェントの種類を制限するには、tools フィールドで Agent(agent_type) 構文を使用します。
バージョン 2.1.63 では、Task ツールが Agent に名前変更されました。設定とエージェント定義の既存の
Task(...) 参照は引き続きエイリアスとして機能します。worker と researcher サブエージェントのみを生成できます。エージェントが他の種類を生成しようとすると、リクエストは失敗し、エージェントはプロンプトで許可されたタイプのみを表示します。特定のエージェントをブロックしながら他のすべてを許可するには、代わりにpermissions.denyを使用します。
制限なしでサブエージェントを生成できるようにするには、括弧なしで Agent を使用します:
Agent が tools リストから完全に省略されている場合、エージェントはサブエージェントを生成できません。この制限は、claude --agent でメインスレッドとして実行されるエージェントにのみ適用されます。サブエージェントは他のサブエージェントを生成できないため、Agent(agent_type) はサブエージェント定義では効果がありません。
MCP サーバーをサブエージェントにスコープする
mcpServers フィールドを使用して、メイン会話で利用可能でないMCP サーバーへのアクセスをサブエージェントに付与します。ここで定義されたインラインサーバーは、サブエージェントの開始時に接続され、終了時に切断されます。文字列参照は親セッションの接続を共有します。
リスト内の各エントリは、インラインサーバー定義またはセッションで既に設定されている MCP サーバーを参照する文字列のいずれかです:
.mcp.json サーバーエントリ(stdio、http、sse、ws)と同じスキーマを使用し、サーバー名でキー付けされます。
MCP サーバーをメイン会話から完全に除外し、そのツール説明がコンテキストを消費するのを避けるには、.mcp.json ではなくここでインラインで定義します。サブエージェントはツールを取得します。親の会話は取得しません。
権限モード
permissionMode フィールドは、サブエージェントが権限プロンプトをどのように処理するかを制御します。サブエージェントはメイン会話から権限コンテキストを継承しますが、モードをオーバーライドできます。ただし、以下で説明するように、親モードが優先される場合があります。
| モード | 動作 |
|---|---|
default | プロンプト付きの標準権限チェック |
acceptEdits | ファイル編集と作業ディレクトリまたは additionalDirectories 内のパスの一般的なファイルシステムコマンドを自動受け入れ |
auto | 自動モード:バックグラウンド分類器がコマンドと保護されたディレクトリ書き込みを確認 |
dontAsk | 権限プロンプトを自動拒否(明示的に許可されたツールは引き続き機能) |
bypassPermissions | すべての権限チェックをスキップ |
plan | プランモード(読み取り専用探索) |
bypassPermissions または acceptEdits を使用する場合、これが優先され、オーバーライドできません。親が自動モードを使用する場合、サブエージェントは自動モードを継承し、フロントマター内の permissionMode は無視されます:分類器は、親セッションと同じブロックおよび許可ルールを使用してサブエージェントのツール呼び出しを評価します。
スキルをサブエージェントにプリロードする
skills フィールドを使用して、スキルコンテンツをスタートアップ時にサブエージェントのコンテキストに注入します。これにより、実行中にスキルを検出して読み込む必要なく、サブエージェントにドメイン知識を提供します。
toolsリストから Skill を省略するか、disallowedTools に追加します。
disable-model-invocation: trueを設定するスキルをプリロードすることはできません。プリロードは Claude が呼び出すことができるスキルの同じセットから引き出されるためです。リストされたスキルが見つからないか無効な場合、Claude Code はそれをスキップし、デバッグログに警告をログします。
これはサブエージェントでスキルを実行するの逆です。サブエージェントの
skills を使用すると、サブエージェントはシステムプロンプトを制御し、スキルコンテンツを読み込みます。スキルの context: fork を使用すると、スキルコンテンツが指定したエージェントに注入されます。どちらも同じ基盤システムを使用します。永続メモリを有効にする
memory フィールドは、会話全体で存続する永続ディレクトリをサブエージェントに提供します。サブエージェントはこのディレクトリを使用して、コードベースパターン、デバッグの洞察、アーキテクチャの決定など、時間をかけて知識を構築します。
| スコープ | 場所 | 使用する場合 |
|---|---|---|
user | ~/.claude/agent-memory/<name-of-agent>/ | サブエージェントがすべてのプロジェクト全体で学習を記憶する必要がある場合 |
project | .claude/agent-memory/<name-of-agent>/ | サブエージェントの知識がプロジェクト固有で、バージョン管理を通じて共有可能な場合 |
local | .claude/agent-memory-local/<name-of-agent>/ | サブエージェントの知識がプロジェクト固有だが、バージョン管理にチェックインすべきでない場合 |
- サブエージェントのシステムプロンプトには、メモリディレクトリの読み取りと書き込みの指示が含まれます。
- サブエージェントのシステムプロンプトには、メモリディレクトリの
MEMORY.mdの最初の 200 行または 25KB(どちらか小さい方)も含まれ、MEMORY.mdがその制限を超える場合はキュレーションの指示が含まれます。 - Read、Write、および Edit ツールが自動的に有効になり、サブエージェントがメモリファイルを管理できるようになります。
永続メモリのヒント
-
projectは推奨されるデフォルトスコープです。バージョン管理を通じてサブエージェント知識を共有可能にします。サブエージェントの知識がプロジェクト全体で広く適用可能な場合はuserを使用するか、知識がバージョン管理にチェックインされるべきでない場合はlocalを使用します。 - サブエージェントに作業を開始する前にメモリを確認するよう依頼します:「このプルリクエストをレビューし、以前に見たパターンについてメモリを確認してください。」
- タスク完了後、サブエージェントにメモリを更新するよう依頼します:「完了したので、学習したことをメモリに保存してください。」時間をかけて、これはサブエージェントをより効果的にする知識ベースを構築します。
-
メモリ指示をサブエージェントの markdown ファイルに直接含めて、独自の知識ベースを積極的に維持するようにします:
hooks を使用した条件付きルール
ツール使用をより動的に制御するには、PreToolUse hooks を使用して、操作が実行される前に検証します。これは、ツールの一部の操作を許可しながら他の操作をブロックする必要がある場合に役立ちます。
この例は、読み取り専用データベースクエリのみを許可するサブエージェントを作成します。PreToolUse hook は、各 Bash コマンドが実行される前に command で指定されたスクリプトを実行します:
shell: powershell を追加します。
特定のサブエージェントを無効にする
設定のdeny 配列にサブエージェントを追加することで、Claude が特定のサブエージェントを使用するのを防ぐことができます。Agent(subagent-name) 形式を使用します。ここで subagent-name はサブエージェントの name フィールドと一致します。
--disallowedTools CLI フラグを使用することもできます:
サブエージェント用の hooks を定義する
サブエージェントは、サブエージェントのライフサイクル中に実行されるhooksを定義できます。hooks を設定する方法は 2 つあります:- サブエージェントのフロントマター内:そのサブエージェントがアクティブな間のみ実行される hooks を定義します
settings.json内:サブエージェントが開始または停止するときにメインセッションで実行される hooks を定義します
サブエージェントフロントマター内の hooks
サブエージェントの markdown ファイルで直接 hooks を定義します。これらの hooks は、その特定のサブエージェントがアクティブな間のみ実行され、終了時にクリーンアップされます。フロントマター hooks は、Agent ツールまたは @-mention を通じてサブエージェントとして生成されるときに発火します。また、
--agentまたは agent 設定でメインセッションとして実行される場合にも発火します。メインセッションの場合、settings.jsonで定義されている hooks と一緒に実行されます。| イベント | マッチャー入力 | 発火する場合 |
|---|---|---|
PreToolUse | ツール名 | サブエージェントがツールを使用する前 |
PostToolUse | ツール名 | サブエージェントがツールを使用した後 |
Stop | (なし) | サブエージェントが終了する場合(実行時に SubagentStop に変換) |
PreToolUse hook で Bash コマンドを検証し、PostToolUse でファイル編集後にリンターを実行します:
Stop hooks は自動的に SubagentStop イベントに変換されます。
サブエージェントイベント用のプロジェクトレベル hooks
メインセッションでサブエージェントのライフサイクルイベントに応答する hooks をsettings.json で設定します。
| イベント | マッチャー入力 | 発火する場合 |
|---|---|---|
SubagentStart | エージェント型名 | サブエージェントが実行を開始する場合 |
SubagentStop | エージェント型名 | サブエージェントが完了する場合 |
db-agent サブエージェントが開始するときのみセットアップスクリプトを実行し、サブエージェントが停止するときにクリーンアップスクリプトを実行します:
サブエージェントを使用する
自動委譲を理解する
Claude は、リクエスト内のタスク説明、サブエージェント設定のdescription フィールド、および現在のコンテキストに基づいて、タスクを自動的に委譲します。積極的な委譲を促進するには、サブエージェントの description フィールドに「use proactively」などのフレーズを含めます。
サブエージェントを明示的に呼び出す
自動委譲では不十分な場合、サブエージェント自体をリクエストできます。3 つのパターンは、1 回限りの提案からセッション全体のデフォルトまでエスカレートします:- 自然言語:プロンプトでサブエージェントに名前を付けます。Claude は委譲するかどうかを決定します
- @-mention:サブエージェントが 1 つのタスクで実行されることを保証します
- セッション全体:セッション全体が
--agentフラグまたはagent設定を通じてそのサブエージェントのシステムプロンプト、ツール制限、およびモデルを使用します
@ を入力し、タイプアヘッドからサブエージェントを選択します。ファイルを @-mention する方法と同じです。これにより、Claude の選択ではなく、特定のサブエージェントが実行されることが保証されます:
<plugin-name>:<agent-name> として表示されます。セッションで現在実行されている名前付きバックグラウンドサブエージェントもタイプアヘッドに表示され、名前の横にステータスが表示されます。ピッカーを使用せずに手動で mention を入力することもできます:ローカルサブエージェントの場合は @agent-<name>、プラグインサブエージェントの場合は @agent-<plugin-name>:<agent-name>。
セッション全体をサブエージェントとして実行します。 --agent <name>を渡して、メインスレッド自体がそのサブエージェントのシステムプロンプト、ツール制限、およびモデルを採用するセッションを開始します:
--system-promptと同じように、デフォルト Claude Code システムプロンプトを完全に置き換えます。CLAUDE.md ファイルとプロジェクトメモリは引き続き通常のメッセージフローを通じて読み込まれます。エージェント名は起動ヘッダーに @<name> として表示されるため、アクティブであることを確認できます。
これは組み込みとカスタムの両方のサブエージェントで機能し、セッションを再開するときに選択が保持されます。
プラグイン提供のサブエージェントの場合、スコープ付き名を渡します:claude --agent <plugin-name>:<agent-name>。
プロジェクト内のすべてのセッションのデフォルトにするには、.claude/settings.json で agent を設定します:
サブエージェントをフォアグラウンドまたはバックグラウンドで実行する
サブエージェントは、フォアグラウンド(ブロッキング)またはバックグラウンド(並行)で実行できます:- フォアグラウンドサブエージェント は、完了するまでメイン会話をブロックします。権限プロンプトは発生時にあなたに渡されます。
- バックグラウンドサブエージェント は、作業を続ける間に並行して実行されます。セッションで既に付与されている権限で実行され、そうでなければプロンプトが表示されるツール呼び出しを自動拒否します。バックグラウンドサブエージェントが明確化の質問をする必要がある場合、そのツール呼び出しは失敗しますが、サブエージェントは続行します。
- Claude に「run this in the background」と依頼する
- Ctrl+B を押して実行中のタスクをバックグラウンドにする
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS 環境変数を 1 に設定します。環境変数を参照してください。
fork モードが有効な場合、すべてのサブエージェント生成は background フィールドに関係なくバックグラウンドで実行されます。フォークは引き続き権限プロンプトをターミナルに表示します。名前付きサブエージェントは上記の説明のように、プロンプトが表示されるものを自動拒否します。
一般的なパターン
大量操作を分離する
サブエージェントの最も効果的な用途の 1 つは、大量の出力を生成する操作を分離することです。テストの実行、ドキュメントの取得、またはログファイルの処理は、かなりのコンテキストを消費できます。これらをサブエージェントに委譲することで、詳細な出力はサブエージェントのコンテキストに留まり、関連する概要のみがメイン会話に返されます。並行研究を実行する
独立した調査の場合、複数のサブエージェントを生成して同時に動作させます:サブエージェントをチェーンする
マルチステップワークフローの場合、Claude にサブエージェントを順序立てて使用するよう依頼します。各サブエージェントはタスクを完了して結果を Claude に返し、Claude は関連するコンテキストを次のサブエージェントに渡します。サブエージェントとメイン会話の選択
メイン会話 を使用する場合:- タスクが頻繁なやり取りまたは反復的な改善が必要な場合
- 複数のフェーズが重要なコンテキストを共有する場合(計画 → 実装 → テスト)
- 迅速でターゲット化された変更を行う場合
- レイテンシが重要な場合。サブエージェントは新規に開始し、コンテキストを収集するのに時間がかかる場合があります
- タスクがメインコンテキストで不要な詳細な出力を生成する場合
- 特定のツール制限または権限を強制したい場合
- 作業が自己完結型で、概要を返すことができる場合
/btwを使用します。完全なコンテキストを表示しますが、ツールアクセスはなく、答えは履歴に追加されるのではなく破棄されます。
サブエージェントは他のサブエージェントを生成できません。ワークフローがネストされた委譲を必要とする場合は、スキルを使用するか、メイン会話からサブエージェントをチェーンします。
サブエージェントコンテキストを管理する
サブエージェントを再開する
各サブエージェント呼び出しは、新しいコンテキストで新しいインスタンスを作成します。最初からやり直すのではなく、既存のサブエージェントの作業を続けるには、Claude に再開するよう依頼します。 再開されたサブエージェントは、すべての前のツール呼び出し、結果、および推論を含む、完全な会話履歴を保持します。サブエージェントは、新規に開始するのではなく、停止した場所から正確に再開します。 サブエージェントが完了すると、Claude はエージェント ID を受け取ります。Claude はSendMessage ツールを使用してエージェントの ID を to フィールドとして使用してサブエージェントを再開します。SendMessage ツールは、エージェントチームが CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 を通じて有効になっている場合にのみ利用可能です。
サブエージェントを再開するには、Claude に前の作業を続けるよう依頼します:
SendMessage を受け取った場合、新しい Agent 呼び出しを必要とせずにバックグラウンドで自動再開します。
エージェント ID を明示的に参照したい場合は Claude に依頼することもできます。または、~/.claude/projects/{project}/{sessionId}/subagents/ のトランスクリプトファイルで ID を見つけることができます。各トランスクリプトは agent-{agentId}.jsonl として保存されます。
サブエージェントトランスクリプトはメイン会話から独立して永続化されます:
- メイン会話圧縮:メイン会話が圧縮されると、サブエージェントトランスクリプトは影響を受けません。別のファイルに保存されます。
- セッション永続性:サブエージェントトランスクリプトはセッション内で永続化されます。Claude Code を再起動した後、同じセッションを再開することでサブエージェントを再開できます。
- 自動クリーンアップ:トランスクリプトは
cleanupPeriodDays設定に基づいてクリーンアップされます(デフォルト:30 日)。
自動圧縮
サブエージェントは、メイン会話と同じロジックを使用した自動圧縮をサポートします。デフォルトでは、自動圧縮は約 95% の容量でトリガーされます。圧縮を早期にトリガーするには、CLAUDE_AUTOCOMPACT_PCT_OVERRIDE をより低いパーセンテージ(例:50)に設定します。詳細については、環境変数を参照してください。
圧縮イベントはサブエージェントトランスクリプトファイルにログされます:
preTokens 値は、圧縮が発生する前に使用されたトークン数を示します。
現在の会話をフォークする
フォークされたサブエージェントは実験的であり、Claude Code v2.1.117 以降が必要です。動作と設定は将来のリリースで変更される可能性があります。
CLAUDE_CODE_FORK_SUBAGENT 環境変数を 1 に設定して有効にしてください。この変数はインタラクティブモードおよび SDK または claude -p 経由で有効になります。- Claude は、general-purpose サブエージェントを使用する場合にフォークを生成します。Explore などの名前付きサブエージェントは以前と同じように生成されます。
- すべてのサブエージェント生成は、バックグラウンドで実行されます。
CLAUDE_CODE_DISABLE_BACKGROUND_TASKSを1に設定して、生成を同期的に保つことができます。 /forkコマンドは、/branchのエイリアスとして機能するのではなく、フォークを生成します。
/fork の後に指示を続けて、フォークを自分で開始できます。Claude Code はフォークに指示の最初の単語から名前を付けます。次の例は、メインセッションで実装を続ける間に、フォークが会話をドラフトテストケースに分岐させます:
実行中のフォークを観察して操作する
実行中のフォークはプロンプト入力の下のパネルに表示され、メインセッション用に 1 行、各フォーク用に 1 行があります。これらのキーを使用してパネルと対話します:| キー | アクション |
|---|---|
↑ / ↓ | 行間を移動 |
Enter | 選択したフォークのトランスクリプトを開き、フォローアップメッセージを送信 |
x | 完了したフォークを閉じるか、実行中のフォークを停止 |
Esc | フォーカスをプロンプト入力に戻す |
フォークと名前付きサブエージェントの違い
フォークはメインセッションがその時点で持っているすべてを継承します。名前付きサブエージェントは独自の定義から開始します。
フォークのシステムプロンプトとツール定義は親と同じであるため、最初のリクエストは親のプロンプトキャッシュを再利用します。これにより、同じコンテキストが必要なタスクの場合、フォークは新しいサブエージェントを生成するよりも安価です。
Claude がフォークを Agent ツール経由で生成するときに、
isolation: "worktree" を渡すことができるため、フォークのファイル編集は、チェックアウトではなく、別の git worktree に書き込まれます。
制限事項
CLAUDE_CODE_FORK_SUBAGENT=1 を設定すると、インタラクティブセッション、非インタラクティブモード、および Agent SDK でフォークモードが有効になります。フォークはさらにフォークを生成できません。
サブエージェントの例
これらの例は、サブエージェントを構築するための効果的なパターンを示しています。出発点として使用するか、Claude を使用してカスタマイズされたバージョンを生成します。コードレビュアー
コードを変更せずにレビューする読み取り専用サブエージェント。この例は、制限されたツールアクセス(Edit または Write なし)と、何を探すべきか、出力をどのようにフォーマットするかを正確に指定する詳細なプロンプトを使用して、焦点を絞ったサブエージェントを設計する方法を示しています。デバッガー
問題を分析して修正できるサブエージェント。コードレビュアーとは異なり、このサブエージェントはバグの修正にはコード変更が必要なため、Edit を含みます。プロンプトは診断から検証までの明確なワークフローを提供します。データサイエンティスト
データ分析作業向けのドメイン固有のサブエージェント。この例は、典型的なコーディングタスク以外の特化したワークフロー向けのサブエージェントを作成する方法を示しています。より有能な分析のためにmodel: sonnet を明示的に設定します。
データベースクエリバリデーター
Bash アクセスを許可しますが、読み取り専用 SQL クエリのみを許可するようにコマンドを検証するサブエージェント。この例は、tools フィールドが提供するよりも細かい制御が必要な場合に、PreToolUse hooks を使用して条件付き検証を行う方法を示しています。
command フィールドと一致する必要があります:
shell: powershell を追加します。PowerShell で hooks を実行するを参照してください。
hook は stdin を通じて JSON を受け取り、Bash コマンドは tool_input.command にあります。終了コード 2 は操作をブロックし、エラーメッセージを Claude にフィードバックします。終了コードと出力の詳細についてはHooksを参照し、完全な入力スキーマについてはHook 入力を参照してください。
次のステップ
サブエージェントを理解したので、これらの関連機能を探索してください:- プラグインでサブエージェントを配布することで、チームまたはプロジェクト全体でサブエージェントを共有します
- Claude Code をプログラムで実行することで、Agent SDK を使用して CI/CD と自動化を行います
- MCP サーバーを使用することで、サブエージェントに外部ツールとデータへのアクセスを提供します