Claude Code subtaskコマンドでサブタスクを親セッションに戻す
/subtaskは会話を引き継いだままバックグラウンドで動き、結果だけを親セッションに戻します。/fork・/branchとの使い分けを表と実例で見分けます。
Claude Code subtaskコマンドは何をするコマンドか
/subtaskは、今の会話をそのまま引き継いだフォークサブエージェントをバックグラウンドで起動するコマンドです。渡したタスクをそのサブエージェントが処理している間、自分は元の会話で作業を続けられます。サブエージェントが完了すると、その結果は1件のメッセージとして親の会話に戻ってきます。
/subtask パーサー変更に対応する単体テストを書いて通常のサブエージェントは真っ白なコンテキストから始まり、要約されたタスク説明だけを渡されます。/subtaskが起動するフォークは違います。ここまでの会話履歴、システムプロンプト、使えるツール、モデルまで、親の会話とまったく同じ状態を引き継いで始まります。背景を説明し直す手間がかからないのが、通常のサブエージェントとの一番の違いです。
たとえば長時間のデバッグセッションで、原因の絞り込みまで会話が進んだところで/subtaskにテスト追加を任せると、フォークは「なぜこの実装になったか」という経緯を再度読み込む必要がありません。同じ会話を最初から要約して渡す通常のサブエージェントに比べて、手戻りの少ない委譲になります。
Claude Code subtaskの使い方
/subtaskの後ろにタスクを書いて実行するだけで起動します。名前は渡したタスクの冒頭の言葉から自動で付きます。起動したフォークは、プロンプト入力欄の下にあるパネルに専用の行として表示され、バックグラウンドで動き続けます。
| キー | できること |
|---|---|
Enter | できること選択中のフォークのトランスクリプトを開き、フォローアップを送る |
x | できること実行中のフォークを停止する、終了済みなら行を消す |
↑ / ↓ | できることパネル内のフォーク行を移動する |
フォークのトランスクリプトを開いている間、フォローアップのメッセージやスキルはそのフォークへ送られますが、/modelのような組み込みコマンドは親の会話に対して実行されます。フォークが正常に完了すると行は自動で消え、失敗した場合や自分で止めた場合は30秒ほど行が残るので、結果を見落としにくくなっています。
タスクが終わると、結果は親の会話に自然な形のメッセージとして届きます。追加の操作は不要で、そのまま続きの作業に組み込めます。
/fork・/branch・/subtaskの使い分け
3つとも「今の会話をもとに何かを分岐させる」点は共通ですが、分岐した側と自分自身の関係がそれぞれ違います。
| コマンド | 分岐した側は何になるか | 自分はどうなるか | 向いている場面 |
|---|---|---|---|
/fork | 分岐した側は何になるか独立したバックグラウンドセッション | 自分はどうなるか元のセッションに残って作業を続ける | 向いている場面別の作業を並行して走らせ続けたい |
/subtask | 分岐した側は何になるか結果だけが親会話に戻るフォークサブエージェント | 自分はどうなるか元の会話で作業を続ける | 向いている場面副次的な1タスクを任せて結果だけ欲しい |
/branch | 分岐した側は何になるか分岐した会話そのもの | 自分はどうなるか分岐した側に切り替わる | 向いている場面元の状態を残しつつ自分で別方向を試したい |
判断に迷ったら、「結果だけ会話に戻ってくればいいか、それとも独立したセッションとして残しておきたいか」で選ぶと早いです。前者なら/subtask、後者なら/fork。さらに、分岐した側を自分で操作したいなら/branchに切り替えます。使い方の詳細はClaude Code forkコマンドの記事にまとめているので、/fork側から読みたい場合はそちらを参照してください。
/subtaskという名前になったのはClaude Code v2.1.212からです。それより前のバージョン(v2.1.161〜v2.1.211)では、今の/subtaskにあたる挙動は/forkという名前で提供されていました。v2.1.212のリリースで会話をバックグラウンドセッションへ複製する新しい/forkが追加され、旧来の挙動は/subtaskという名前に分離されています。
詳しい経緯はClaude Code v2.1.212のリリースノートで扱っています。agent viewをオフにしている環境では/subtask自体が使えず、/forkが旧来のフォークサブエージェント挙動を保ったまま動きます。
fork modeと/subtaskは別の設定
Claudeが自分の判断でAgentツール経由のforkサブエージェント型を要求できるかどうかは、「fork mode」という別の設定で決まります。対話セッションでは既定でオンになっていて、非対話モード(-p)やAgent SDKでは既定オフです。CLAUDE_CODE_FORK_SUBAGENT環境変数を1にすればそれらの環境でもオンにでき、0にすればどのセッションでも一律オフにできます。
/subtaskはこの設定とは独立に動きます。fork modeがオフの環境でも、自分で/subtaskを打てばフォークを起動できます。逆に言えば、fork modeはあくまで「Claudeが自律的にforkを選ぶかどうか」を制御するもので、ユーザーが明示的に指示する/subtaskの可否とは別の話です。両者を混同すると、「fork modeをオフにしたのに/subtaskが動く」という一見矛盾した挙動に戸惑うことになるので、この2つは切り分けて覚えておくと迷いません。
サブタスクが親セッションに戻る仕組み
フォークは他のサブエージェントと違い、親の会話をそのまま引き継いで始まります。この性質から、いくつか固有の挙動があります。
プロンプトキャッシュの再利用。フォークのシステムプロンプトとツール定義は親とまったく同じなので、フォークの最初のリクエストは親のプロンプトキャッシュをそのまま再利用できます。同じ文脈が必要なタスクなら、真っ白な状態から始める通常のサブエージェントを起動するより安く済みます。
worktree分離の指定。ClaudeがAgentツール経由でフォークを起動するとき、isolation: "worktree"を渡すと、フォークのファイル編集は自分のチェックアウトとは別のworktreeに書き込まれます。Worktree実践ガイドで扱っている通常のworktree分離と同じ仕組みです。
同時実行の上限を回避する。サブエージェントの同時実行数には上限がありますが、/subtaskで起動したフォークはその上限にブロックされずに実行スロットを確保します。並列実行の設計全体はClaude Codeオーケストレーター設計で扱っているので、複数のサブエージェントを組み合わせる場合はあわせて確認してください。
フォークはさらにフォークできない。サブエージェントは既定で最大3階層まで自分のサブエージェントを起動できますが、その深さの上限に達したサブエージェントはAgentツール自体を失い、以降の作業は自分で抱えて1件の要約だけを返す形になります。フォークだけは例外的にAgentツールが手元に残りますが、呼び出してもエラーが返るだけで新しいフォークは起動できません。
/subtaskで作ったフォークの中からさらに/subtask相当の委譲を重ねたくなっても、そこで止まる設計だと理解しておくと構成を考えやすくなります。入れ子のサブエージェント設計全体はSub-agents完全ガイドで扱っています。
出力スタイルも引き継ぐ。通常のサブエージェントは親のoutput styleの影響を受けませんが、フォークは会話全体を引き継ぐため出力スタイルもそのまま適用されます。
権限プロンプトは親セッションに出る
/subtaskのフォークがバックグラウンドで実行を許可されていないコマンドに当たると、権限プロンプトはフォーク側では止まらず、親セッション側に表示されます。承認するとフォークは処理を続けますが、選んだ回答が「今回のセッション中はすべての編集を許可」のように単発の呼び出しを超えて効く種類のものだった場合、その許可はフォークだけでなく親の会話全体に適用されます。フォークに一度だけ強い権限を与えたつもりが、気づかないうちに親セッションの権限モードまで緩めてしまう、という事態を避けるには、フォークに任せるタスクの内容と、そのタスクが必要とする権限の強さを事前に見積もっておくのが安全です。
よくある質問
/subtaskと通常のサブエージェント(Taskツール)は何が違いますか
通常のサブエージェントは真っ白なコンテキストから始まり、要約されたタスク説明だけを渡されます。/subtaskが起動するフォークは、それまでの会話履歴・システムプロンプト・ツール・モデルを親とまったく同じ状態で引き継ぎます。背景説明が要らない分、同じ文脈が必要なタスクではフォークの方が速く安く済みます。
/subtaskの結果を待たずに作業を続けられますか
続けられます。/subtaskはバックグラウンドで動くため、フォークが処理している間も親の会話でそのまま作業を進められます。結果はフォークの完了時に1件のメッセージとして自動的に届きます。
実行中のフォークに追加の指示を送れますか
送れます。パネルでフォークの行を選びEnterでトランスクリプトを開くと、フォローアップのメッセージをそのフォークへ直接送れます。ただし組み込みコマンドはこの状態でも親の会話に対して実行されるので混同しないよう注意してください。
/subtaskが使えないと言われました
Claude Code v2.1.212より前のバージョンでは/subtaskというコマンド自体が存在しません。また、agent viewをオフにしている環境でも/subtaskは使えず、/forkが代わりに旧来のフォークサブエージェント挙動を提供します。
フォークで編集したファイルは親の作業ツリーに影響しますか
Claudeがisolation: "worktree"を指定した場合は影響しません。指定がない場合は親と同じチェックアウトを直接編集するため、並行して同じファイルを触っていると競合する可能性があります。大きめの変更を任せるときはworktree分離の有無を確認しておくと安全です。
まとめ
/subtaskは会話履歴を引き継いだフォークサブエージェントをバックグラウンドで起動し、結果だけを親セッションに戻すコマンドです。v2.1.212で/forkから名前が分かれ、agent viewがオフの環境では使えない点に注意してください。副次的な1タスクの結果だけが欲しいなら/subtask、独立したセッションとして残したいなら/fork、自分自身が分岐先に切り替わりたいなら/branchという基準で選ぶと迷いません。