Claude Code forkコマンドでセッションをバックグラウンドに複製する
/forkは会話をバックグラウンドセッションに複製し、元のセッションはそのまま続けられます。/subtask・/branchとの違いとworktree分離の挙動を実例で扱います。
Claude Code forkコマンドは何をするコマンドか
/forkは今の会話をまるごとコピーし、新しいバックグラウンドセッションとして走らせるコマンドです。元のセッションはそのまま手元に残り、作業を止めずに続けられます。コピーの側には、それまでの会話履歴に加えてモデル・権限モード・effortレベル、セッション中に追加した作業ディレクトリや「今回は毎回聞かない」の許可設定まで、そのまま引き継がれます。
引数にプロンプトを渡すと、コピーはそのタスクをすぐに開始します。プロンプトなしで実行すると、コピーはagent view上で待機し、最初の指示が来るまで動きません。
/fork これまでの作業内容でドラフトのプルリクエストを作成して実行すると、コピーの状態・agent view上の行の名前・claude attach用のセッションIDを示す確認メッセージが1行で表示されます。この行の名前をクリックすると、今のセッションはバックグラウンドへ退き、agent viewがコピー側のセッションを開きます。プロンプトを渡さずに待機させた場合は、claude agentsでその行を選んでSpaceを押すか、claude attach <id>で後から指示を送れます。
いつ/forkを使うべきか
/forkが向くのは、今の会話の文脈を保ったままもう一つ別の作業を並行して走らせたい場面です。実装を進めながら、同じ文脈を持つコピーにドラフトPRの作成やテストの追加を任せる、複数のアプローチを同じ出発点から同時に試す、といった使い方をします。
たとえば大きめの実装が一段落したタイミングで/fork open a draft pull request with the work so farのように実行すると、コピーはPR作成という後始末を引き受け、自分は次のタスクへすぐに移れます。あるいは設計方針で迷ったときに、同じ会話から/forkを2回実行して2通りの実装方針をそれぞれ別のバックグラウンドセッションに任せ、結果を見比べてから片方を選ぶ、という使い方もできます。どちらの場合も、コピー側が背景説明なしにここまでの経緯をすべて把握している点が効いています。
コマンド一覧のドキュメントでは、/forkは似た3つのコマンドとセットで説明されています。会話を別セッションとして複製し続けたいなら/fork、副次的なタスクの結果だけを今の会話に戻したいなら/subtask、自分自身がコピー側に切り替えて試したいなら/branch、という切り分けです。3つの違いはClaude Code subtaskコマンドの記事で詳しく比較しているので、判断に迷ったらあわせて読んでください。バックグラウンドで走る複数のセッションを一覧管理する仕組みはagent viewの記事にまとめています。
worktree分離はどう働くか
コピーがコード変更を伴う作業を始めるとき、Claude Codeはコピー自身のgit worktreeを新しく作るよう指示します。これにより、元のセッションが今まさに編集しているチェックアウトとコピーの作業が衝突しません。この分離指示はコピーが「その場で編集する」特殊なケースを除いて適用され、Claude Code v2.1.221以降が対象です。それより古いバージョンでは、コピーが元のセッションの作業ツリーやチェックアウトをそのまま編集してしまうことがありました。
確認メッセージの末尾には、コピーがメインの作業ツリーで動く場合はruns in the origin tree、開いているチェックアウトを直接編集する場合はedits this checkoutという注記が付きます(v2.1.216以降)。どちらの注記も付かない通常のケースが、独自のworktreeで隔離された状態です。コピーのタスクが今の作業の続きであるときは、元のブランチを起点にした新しいブランチもコピー側で作られます。
/forkが作ったセッションをシェルから操作する
/forkが作るバックグラウンドセッションには短いIDが振られ、~/.claude/jobs/以下のディレクトリ名としても確認できます。agent viewを開かなくても、このIDを使ってシェルから直接操作できます。
claude attach <id>でそのターミナルからコピーに接続でき、claude logs <id>は接続せずに最近の出力だけを確認します。動作がおかしいと感じたらclaude stop <id>(エイリアスclaude kill)で止められ、Claude Codeの実行ファイルを更新したあとに引き継がせたい場合はclaude respawn <id>で会話を保ったまま再起動できます。複数のコピーを一括で新しいバイナリに載せ替えたいときはclaude respawn --allが使えます。
不要になったコピーはclaude rm <id>で一覧から取り除けます。このとき/forkがそのコピーのために作ったworktreeも、削除して安全な状態であれば一緒に消えます。会話のトランスクリプト自体はローカルに残り続けるので、一覧から消したあとでも--resumeから辿れます。
スクリプトから複数のコピーの状態を一括で確認したい場合は、claude agents --jsonで稼働中のセッションをJSON配列として取得できます。stateフィールドにはworking / blocked / done / failed / stoppedのいずれかが入るので、完了を待ってから次の処理につなげる自動化にも使えます。
/forkコマンドの変遷
/forkという名前のコマンド自体は古くからありましたが、指す挙動はバージョンごとに変わってきました。
| バージョン | /forkの挙動 |
|---|---|
| v2.1.161〜v2.1.211 | /forkの挙動会話履歴を引き継ぐバックグラウンドのサブエージェントを起動する(今の/subtask相当) |
| v2.1.212 | /forkの挙動会話全体を新しいバックグラウンドセッションへ複製する、今の挙動に切り替わる。旧挙動は/subtaskへ分離 |
| v2.1.216 | /forkの挙動確認メッセージが1行になり、コピーの名前をクリックして直接切り替えられるようになる |
| v2.1.221 | /forkの挙動コピーに対して独自worktreeでの分離が指示されるようになる |
agent viewを無効にしている環境では、この切り替えは起きません。agent viewがオフのセッションでは/forkは今も旧挙動のまま、会話履歴を引き継ぐフォークサブエージェントを起動します。同じ名前のコマンドでも、環境によって指す動作が違う点には注意してください。
なお、Claude Code v2.1.232で既定オンになった「fork mode」は、ClaudeがAgentツールで自律的にforkサブエージェントを起動するかどうかの設定で、ユーザーが手で打つ/forkコマンドとは別物です。fork mode自体の詳細はClaude Code v2.1.232のリリースノートで扱っています。
/forkと/branchの違い
どちらも今の会話をもとに新しい流れを作るコマンドですが、自分がどちらに残るかが逆になります。/forkはコピーの側を新しいバックグラウンドセッションとして送り出し、自分は元のセッションに残って作業を続けます。/branchは逆に、自分自身が分岐した会話に切り替わり、元のセッションはそのまま保存されて/resumeで戻れる状態になります。
会話を分岐だけしたい、切り替えるかどうかは後で決めたいという場合は/branch、分岐した側に手を入れず今の作業を止めずに続けたい場合は/forkという選び方になります。両方とも会話をコピーする点は同じなので、「コピー先で自分が作業するか、コピー先に作業させるか」で選ぶのが早道です。
/forkを使うときの注意点
コピーは独立したセッションとして動きますが、消費するリソースは無関係ではありません。バックグラウンドセッションは通常のセッションと同じようにサブスクリプションの利用枠を消費するため、/forkで10個のコピーを同時に走らせれば、1個だけ走らせるときの約10倍の速さで枠を使います。並行数を増やすほど恩恵も大きくなりますが、その分だけ枠の減りも早まる点は見込んでおく必要があります。
コピーはローカルのマシン上で動くセッションです。スリープ中も保持され、復帰すれば供給プロセスが自動で再接続しますが、マシン自体をシャットダウンすると停止します。次に開いたときは失敗した状態で表示されるので、そのセッションを開けば直前の状態から再開できます。
worktreeで分離されたコピーをclaude rmやagent viewから削除すると、そのコピーのために作られたworktreeも一緒に削除されます。worktree内にコミットしていない変更が残っている場合は、削除前に必ずコミットしておく必要があります。「その場で編集する」特殊なケースでコピーが元のチェックアウトを直接編集していた場合は、この削除の対象になりません。
よくある質問
/forkを実行したのに何も起きません
引数なしで/forkを実行すると、コピーはagent view上で最初の指示を待つだけの状態になります。エラーではありません。claude agentsでそのセッションを選んでSpaceキーを押すか、claude attach <session-id>で指示を送ると動き始めます。
コピー側の会話はどこまで元と同じですか
実行した時点までの会話履歴に加えて、モデル・権限モード・effortレベル、/add-dirで追加したディレクトリ、セッション中に付与した「今回は聞かない」系の許可設定まで引き継ぎます。それ以降の変更はそれぞれ独立します。
agent viewをオフにしていると/forkは使えませんか
コマンド自体は使えますが、挙動が変わります。agent viewがオフの環境では/forkはv2.1.211以前と同じフォークサブエージェント(今の/subtask)として動き、独立したバックグラウンドセッションへの複製にはなりません。
コピー側が元の作業ツリーを壊しませんか
v2.1.221以降では、コピーはコード変更の前に自分専用のworktreeを作るよう指示されるため、通常は元のチェックアウトを直接編集しません。ただし確認メッセージにedits this checkoutと出た場合は例外的に同じチェックアウトを編集するので、その表示が出たときは元のセッションとの作業タイミングに注意してください。
/fork中の会話をあとで見返せますか
見返せます。コピーはagent viewに専用の行として残り、claude attach <session-id>でいつでも接続できます。完了・失敗・停止したセッションの行は一定時間表示され続けるので、claude agentsの一覧から探せます。
まとめ
/forkは今の会話をバックグラウンドセッションとして複製し、元のセッションは止めずに続けられるコマンドです。v2.1.212で今の挙動に切り替わり、v2.1.221からはコピー側に独自worktreeでの分離が指示されるようになりました。結果だけを今の会話に戻したいなら/subtask、自分がコピー側に切り替わりたいなら/branchを選び、agent viewがオフの環境では挙動が変わる点も覚えておくと迷いません。