サブエージェントの仕組み
エージェントがサブエージェントを起動すると、利用可能なサブエージェントプロファイルのいずれかを選択し、そのサブエージェントをフォアグラウンドとバックグラウンドのどちらで実行するかを決めます。サブエージェントは次の2つのモードで実行できます。フォアグラウンド
セッション内でインライン実行されます。親エージェントは一時停止し、サブエージェントの完了を待ってから処理を続けます。ツール呼び出しが発生した場合は、その都度承認または拒否できます。
バックグラウンド
親エージェントが作業を続ける間、並行して実行されます。サブエージェントが完了すると、親エージェントに自動的に通知されます。承認されていないツールは自動的に拒否されます。
サブエージェントの生の出力は直接表示されません。サブエージェントが完了すると、親エージェントが結果を読み取り、重要な検出結果とアクションを要約して知らせます。
サブエージェントのコスト
サブエージェントはそれぞれ独立したエージェントセッションとして実行され、各自の前提情報ウィンドウと推論呼び出しを持つため、親とは別にコストが発生します。親の費用に含まれるのは親自身の作業分のみで、親が生成したサブエージェントごとに追加の使用量が加算されます。プロンプトベースのプランでは、各サブエージェントでもユーザーメッセージと同様に追加のクレジットが消費されます。消費されるクレジット数はサブエージェントが利用するモデルによって異なるため、複数のサブエージェントを生成するタスク (またはそれらをnestするタスク) では、より多くのクレジットが消費されます。
サブエージェントはどのモデルを使いますか?
サブエージェントは、モデルピッカーで選択したモデルですべて実行されるわけではありません。どのモデルを使うかは、各プロファイルごとに決まっています。
デフォルトのサブエージェントモデル は固定のモデル名ではありません。起動時にサーバー側のルーター経由で解決され、管理者が上書きすることもできます (以下を参照) 。既定の Subagent router 設定では、ルーターが順序付きリストから最初に条件を満たすモデルを選択します。そのため、実際に使われるモデルは、プランのティア、モデルの利用可否、組織のモデルポリシーによって変わります。ルーティングのリストは今後変更される可能性があるため、サブエージェントが常に特定のモデルで実行されることを前提にしないでください。
CLI では現在、実行中のサブエージェントがどのモデルを使っているかはサブエージェントパネルに表示されません。
モデルの選択に影響する要素
プロンプト内でサブエージェント用のモデル名を指定する方法はありません —run_subagent ツールが受け取るのはモデルではなく プロファイル です。使える手段は 3 つあります。
-
自然言語で プロファイル を指定する。 explore サブエージェントを依頼すると (「explore サブエージェントで auth の仕組みを調査して」など) 、処理は選択したモデルではなくデフォルトのサブエージェントモデルで実行されます。コード変更を依頼すると
subagent_generalが使われ、選択したモデルで実行されます。 -
カスタムサブエージェント の プロファイル でモデルを固定する。 定義ファイルの
model:は、書き込み可能なサブエージェントを親とは異なるモデルで実行する唯一の方法です。サブエージェント内で実行される スキル でも、フロントマター にmodel:を設定して プロファイル のモデルを上書きできます。 -
独自のデフォルトサブエージェントモデルを設定する。 設定ファイル で
agent.subagent_modelを指定すると、自分のセッションで使われるデフォルトのサブエージェントモデルを置き換えられます。この設定は、サブエージェントルーターや管理者が Team のデフォルトとして固定したモデルよりも優先されます。ただし、管理者の設定が None の場合、この設定によってサブエージェントが再び有効になることはありません。この設定は、subagent_exploreと、model:を固定していないカスタムサブエージェントに適用されます。subagent_generalは引き続き親エージェントのモデルに従います。指定するモデルは組織で許可されているものである必要があり、許可されていない場合は設定が無視され、Team のデフォルトが使用されます。この設定は新しく開始するセッションから適用されます。
Enterprise Controls
管理者は、org/enterprise 設定の デフォルトのサブエージェントモデル 設定で、サブエージェントが利用するモデルと、サブエージェント自体を実行可能にするかどうかを管理できます。この設定は、subagent_explore と、model: を固定していないカスタムサブエージェントに使用されるモデルを制御します。subagent_general は常に親エージェントのモデルに従うため、変更されません。

サブエージェントの有効化と無効化
サブエージェントはデフォルトで有効になっています。設定ファイルでsubagents_enabled を false に設定すると、run_subagent ツールと read_subagent ツールが削除され、エージェントがすべての作業を自身で行うようになります。
組織ポリシーが優先されます。管理者が デフォルトのサブエージェントモデル を None に設定している場合、この設定の内容にかかわらず、サブエージェントは無効のままです。
サブエージェントプロファイル
各サブエージェントは、その機能を決定する特定のプロファイルで実行されます。組み込みプロファイルは 2 種類あります。エージェントは、タスクに応じて適切なプロファイルを自動的に選択します。explore サブエージェントは調査や理解に最適で、general サブエージェントは変更を加えられます。各プロファイルがどのようにモデルを選択するかについては、サブエージェントはどのモデルを利用しますか? を参照してください。2 つのプロファイルは同じモデルで実行されるわけではありません。
ツールの権限
ツールの権限の動作は、サブエージェントがフォアグラウンドで実行されているか、バックグラウンドで実行されているかによって異なります。- フォアグラウンドのサブエージェント はメインのエージェントと同様に動作し、通常どおりツール呼び出しを承認または拒否するよう求められます。プロンプトにはアクションをリクエストしたサブエージェントの名前が表示されるため、誰が要求しているかを確認できます。
- バックグラウンドのサブエージェント は、現在のセッション中にすでに付与したツールの権限を引き継ぎます。事前に承認されていないツールは自動的に拒否されます。バックグラウンドのサブエージェントが新しい権限の承認を求めることはできません。
サブエージェントの監視
サブエージェントのインジケーター
バックグラウンドでサブエージェントが実行されている場合は、入力欄の下にステータスを示すインジケーターが表示されます。入力欄で ↓ を押すとインジケーターに移動でき、Enter を押すとサブエージェントパネルを開けます。 フォアグラウンドでサブエージェントが実行されている場合、スピナーには 「サブエージェント実行中 · Ctrl+B でバックグラウンド実行」 と表示されます。サブエージェントパネル
サブエージェントパネルでは、アクティブなサブエージェントと完了済みのサブエージェントをすべて閲覧・管理できます。各サブエージェントのプロファイル、タイトル、ステータス、経過時間、ツール呼び出し回数が表示されます。サブエージェントのアクティビティはセッションを再読み込みしても保持されるため、再開後もパネルにはサブエージェントが反映されます。フォアグラウンド / バックグラウンドの切り替え
サブエージェントの実行中に、フォアグラウンドとバックグラウンドを切り替えられます。- フォアグラウンドのサブエージェントをバックグラウンドに切り替える: フォアグラウンドのサブエージェントの実行中に Ctrl+B を押します。サブエージェントはバックグラウンドで処理を続け、親エージェントが再開します。
- バックグラウンドのサブエージェントをフォアグラウンドに切り替える: サブエージェントパネルを開き、実行中のバックグラウンド サブエージェントで f を押します。サブエージェントの出力がインラインで表示されます。
サブエージェントをバックグラウンドに移した時点で、親エージェントのツール呼び出しはすでに完了しているため、親エージェントは独立して処理を続行します。サブエージェントの結果は親エージェントの現在のパイプラインには反映されませんが、完了すると通知されます。
ターンを中断する
エージェントを中断しても、サブエージェントは停止しません。実行中のサブエージェントは状態を維持したまま待機し、次のメッセージで再開します。そのため、親エージェントの指示を切り替えるために中断しても、進行中の作業が失われることはありません。サブエージェントのキャンセル
実行中のサブエージェントは、次の 2 つの方法でキャンセルできます。- サブエージェントパネルから: パネルを開き、実行中のサブエージェントで x を押します。
- フォアグラウンドのサブエージェント: 現在実行中のフォアグラウンドのサブエージェントをキャンセルするには、入力欄が空の状態で Ctrl+C を押すか、Esc を 2 回押します。入力中のドラフトがある場合は、Ctrl+C を押すと、まずドラフトがクリアされます。
サブエージェントの再開
キャンセルされたサブエージェント、失敗したサブエージェント、または完了したサブエージェントは、新しいプロンプトで再開できます。エージェントにサブエージェントの再開を依頼すると、中断したところから続行します。再開したサブエージェントは常にフォアグラウンドで実行されるため、以前に拒否されたツール呼び出しも承認できます。 これは特に次のような場合に便利です。- バックグラウンドで実行していたサブエージェントが、必要なツールの利用を拒否されたために失敗した場合 — フォアグラウンドで再開して、必要な権限を付与できます。
- サブエージェントは完了したものの、その結果に基づいて追加のフォローアップ作業を行わせたい場合。
- サブエージェントが途中でキャンセルされてしまい、続きを実行させたい場合。
ネストの深さ
デフォルトでは、サブエージェントは自身のサブエージェントを起動できません。起動できるのはルートエージェントのみです。無制限にネストされるのを防ぐため、サブエージェント内ではサブエージェント ツール (run_subagent と read_subagent) は無効になっています。
ただし、カスタム サブエージェントプロファイルでは、フロントマターで max-nesting フィールドを設定することで、ネストした起動を有効にできます。この値はデフォルトの最大深度を上書きし、ツリーがその上限内に収まっている限り、サブエージェントが子サブエージェントを起動できるようにします。
たとえば、max-nesting: 3 を設定すると、次のチェーンが可能です。
カスタムサブエージェント
組み込みのsubagent_exploreおよびsubagent_generalプロファイルに加えて、独自のカスタムサブエージェントプロファイルを定義できます。カスタムサブエージェントを使用すると、それぞれに固有のシステムプロンプト、ツールの制限、モデルのオーバーライドを持つ、ワークフロー内の特定のタスク向けに最適化された専用ワーカーを作成できます。これは、 (高価になる可能性がある) プライマリモデルでは実行されない書き込み可能なサブエージェントを使う方法でもあります。model:と必要なツールを指定してください。
カスタムサブエージェントの作成
カスタムサブエージェントは、agents/ 配下の Markdown ファイルとして、次のいずれかのレイアウトで定義します。
- フラットファイル —
agents/<name>.md(Claude Code、Cursor、その他のツールで使われているのと同じ規則です) 。ファイル名 (.mdを除く) がプロファイルの識別子になります。 - ディレクトリ —
agents/<name>/AGENT.md。ディレクトリ名がプロファイルの識別子になります。ファイル名にはAGENTS.md、agent.md、agents.mdも使用できます (複数存在する場合の優先順位は、AGENT.md、AGENTS.md、agent.md、agents.mdの順です) 。
name: を指定すると、パスに由来する識別子よりそちらが優先されます。
- プロジェクト固有
- グローバル
定義ファイルの形式
サブエージェントの定義ファイルは、skills と同じ YAML フロントマター を使用し、その後にサブエージェントのシステムプロンプトが続きます:フロントマター のフィールド
カスタムサブエージェント の利用方法
定義すると、カスタム サブエージェントプロファイルは組み込みプロファイルと並んで表示されます。エージェントは利用可能な各プロファイルの説明を確認し、サブエージェント を起動する際に最も適切なものを選択します。また、プロファイル名を指定して、特定のプロファイルを利用するようエージェントに依頼することもできます (例: 「reviewer サブエージェント を使ってこのコードをレビューして」) 。 組み込みプロファイル名 (例:subagent_explore, subagent_general) と競合するカスタム サブエージェントプロファイルは、警告が表示されたうえでスキップされます。

