Claude Codeの/resumeコマンドで過去の会話を再開する
/resumeが復元する状態と復元しない設定フラグ、起動経路で変わる権限モードの扱い、実行中のバックグラウンドセッションを開いたときの挙動、名前解決の違いを扱います。
Claude Codeの/resumeは何を再開するコマンドか
/resumeは、セッション内から別の過去の会話に切り替えるコマンドです。会話履歴に加えて、モデル・エージェント・アクティブなgoal・スケジュール済みタスクなど、保存されている状態をまとめて呼び戻します。ただし権限モードの扱いは、どの入り口から再開するかで変わります。
再開の入り口は/resumeだけではありません。ターミナルから使うclaude --resume・claude --continue・claude --from-prがあり、探す範囲と挙動が違います。
| コマンド | 何をするか |
|---|---|
claude --continue | 何をするか現在のディレクトリで直近のセッションを再開 |
claude --resume | 何をするかセッションピッカーを開く |
claude --resume <name> | 何をするか指定した名前のセッションを直接再開 |
claude --resume <transcript-path> | 何をするか絶対パスで指定した.jsonlのトランスクリプトを再開 |
claude --from-pr <number> | 何をするか指定したプルリクエストに紐づくセッションに絞ってピッカーを開く |
/resume | 何をするかセッション内から別の会話に切り替える |
手元のClaude Code v2.1.286でclaude --helpを見ると、再開まわりのオプションは次のように表示されます(該当部分の抜粋)。
claude --help-c, --continue Continue the most recent conversation in the current directory
--fork-session When resuming, create a new session ID instead of reusing the original
--from-pr [value] Resume a session linked to a PR by PR number/URL, or open interactive picker with optional search term
-n, --name <name> Set a display name for this session (shown in the prompt box, /resume picker, and terminal title)
-r, --resume [value] Resume a conversation by session ID, or open interactive picker with optional search term--resumeのヘルプには「セッションID、または検索語つきのピッカー」としか書かれていません。名前やトランスクリプトのパスでも再開できる点は、ヘルプではなくセッションのドキュメントで確認できる情報です。
claude -pやAgent SDKで作ったセッションは、ピッカーにもclaude --continueにも出てきません。セッションIDをclaude --resume <session-id>に渡せば再開できます。claude --continueは、最初のプロンプトが/loopだったセッションも飛ばします。
権限モードは起動経路によって戻り方が違う
再開で見落としやすいのは権限モードです。「終了時のモードに戻る」と覚えていると、ピッカーや/resumeから再開したときに想定とずれます。
権限モードの復元は入り口で決まる
ターミナルで直接指定
claude --continue、claude --resume <session-id>、名前が1件に決まるclaude --resume <name>では、終了時の権限モードを復元します。いずれも-pなしの場合です。--permission-modeや--dangerously-skip-permissionsを渡せば上書きできます。
ピッカー・/resume
ピッカーで選んだ場合は、同じコマンドラインで新規セッションを始めたときの権限モードで始まります。セッション内の/resumeは、引数の有無にかかわらず、いま使っているセッションの権限モードのまま切り替わります。
ターミナルから直接再開する場合にも例外があります。bypassPermissionsで終わったセッションは、新規セッションの既定モードに戻ります。もう一度バイパスしたいときは、有効にし直します。起動フラグか、permissions.defaultMode: "bypassPermissions"をユーザー設定・--settings・管理設定のいずれかに書く方法があります。planで終わったセッションも新規セッションの既定モードで始まります。autoで終わったものは、アカウントがauto modeの要件を今も満たしているときだけautoに戻ります。
claude -p --resumeは別扱いです。-pの再開は新規のclaude -pと同じ権限モードで始まりますが、planで終わったセッションだけは、v2.1.246以降で所定の条件がそろったときにplanモードで再開します。VS Code拡張も、planモードの会話に限って同様に復元します。
/resumeが復元するもの・復元しないもの
権限モード以外の状態も、全部が無条件に戻るわけではありません。再開直後に「設定が消えた」と戸惑わないよう、線引きを確認しておきます。同じ会話から始める--fork-sessionや/branchとの違いはClaude Codeのresumeとforkの違いで整理しています。
復元されるもの:
- 会話履歴(ツール呼び出しと結果を含む全履歴)
- モデル(使用していたモデルのまま継続。ただしそのモデルが提供終了済み・
availableModelsで許可されていない場合、起動時に--modelやモデル系環境変数を指定した場合、Bedrock/Google CloudのAgent Platform(旧Vertex AI)/Foundryのようにプロバイダ固有のデプロイIDを使う環境では復元されない) - エージェント(
--agentで起動したセッションは同じツール制限・モデルで継続。再開時に--agentを渡せば別のものに切り替え可能) - アクティブなgoal(ターン数・タイマー・トークン消費の基準値はリセットされて引き継がれる)
- 期限切れになっていないスケジュール済みタスク(バックグラウンドのBashとmonitorタスクは復元されない)
戻らないものは、起動時に渡した設定フラグの一部です。--mcp-config・--settings・--plugin-dir・--fallback-model、それに起動時の--add-dirは再開時に渡し直します。セッション途中で/add-dirを使って追加したディレクトリも復元されませんが、ピッカーがセッションを見つける際の検索対象には引き続き使われます。settings.jsonやsettings.local.jsonのような標準の設定ファイルは起動のたびに読み直されるので、渡し直す必要はありません。
バックグラウンドで動いていた作業の扱いも押さえておきます。前のプロセスが終わった時点で走っていたバックグラウンドのサブエージェント・Bashコマンド・ワークフローは、再開後のトランスクリプトに「完了しなかった」という注記として現れます。Claude Codeはその注記からターンを始めず、次にあなたがプロンプトを送ったときにClaudeが読みます。
クラッシュ時に実行中だったツール呼び出しは、再開しても完了も再実行もされません。Claudeには「結果が記録される前に中断された」呼び出しとして見え、再実行する前に効果が出ていないか確かめるよう伝えられます。環境変数CLAUDE_CODE_RESUME_INTERRUPTED_TURNを設定している場合は別です。v2.1.281より前は、中断された呼び出しが会話から消えるか、あなたが中断したものとして見えていました。
セッションピッカーの探索範囲とショートカット
/resumeをセッション内で実行するか、claude --resumeを引数なしで実行すると、対話式のセッションピッカーが開きます。既定では次の範囲だけが表示されます。
- 現在のワークツリーのセッション(バックグラウンドセッションは一覧で
bgと表示される) /add-dirで現在のディレクトリを追加した、他所で始まったセッション
Ctrl+Wで同じリポジトリの全ワークツリーに、Ctrl+Aでこのマシン上の全プロジェクトに表示範囲を広げられます。並列作業をしている場合、この2つを知っているかどうかで目的のセッションを探す速さが変わります。
| ショートカット | 動作 |
|---|---|
↑ / ↓ | 動作セッション間を移動 |
→ / ← | 動作グループ化されたセッションを展開・折りたたみ |
Enter | 動作ハイライトしたセッションを再開 |
Space(またはCtrl+V) | 動作セッション内容をプレビュー |
Ctrl+R | 動作ハイライトしたセッションをリネーム |
/またはスペース以外の印字可能な文字 | 動作検索モードに入って絞り込み。GitHub・GitHub Enterprise・GitLab・BitbucketのPR・MR URLを貼るとそれを作ったセッションを検索できる |
Ctrl+A | 動作このマシン上の全プロジェクトを表示(再度押すと戻る) |
Ctrl+W | 動作現在のリポジトリの全ワークツリーを表示(再度押すと戻る。複数ワークツリーのリポジトリでのみ表示) |
Ctrl+B | 動作現在のgitブランチのセッションだけに絞る |
Esc | 動作ピッカーまたは検索モードを終了 |
/branchや--fork-sessionで作ったセッションは別々のセッションIDを持つため、独立した行として表示されます。同一セッションの複数エントリを見つけたときは1行にグループ化され、→で展開できます。
選んだ先で何が起きるかは、セッションの場所で決まります。同じリポジトリの別ワークツリーのセッションは、その場で再開されます。そのワークツリー自体がもう存在しない場合は、現在のディレクトリで再開されます。無関係なプロジェクトのセッションを選ぶと、cdと再開コマンドがクリップボードにコピーされます。そのプロジェクトのディレクトリが消えている場合は、失敗するcdをコピーせず、現在のディレクトリで再開します。
/cdでセッションを移動すると、そのセッションの保存先も移動先のプロジェクトに切り替わり、移動先のピッカーに現れます。v2.1.196以降は、クラッシュや強制終了のあとでも、移動したセッションが元のディレクトリのピッカーに戻ってきません。
実行中のバックグラウンドセッションを/resumeするとどうなるか
ピッカーでbgマークが付いているのはバックグラウンドセッションです。実行中のものを/resumeやclaude --resumeで選んだときの挙動は、v2.1.285で変わりました。v2.1.285より前は、Claude Codeが再開を断り、claude attach <id>で開くかclaude stop <id>で止めるよう案内していました。古い解説にある「実行中のものはピッカーから再開できない」は、現在は当てはまりません。
v2.1.285以降は、断る代わりに実行中のセッションそのものを開きます。入り口によって動きが少し違います。
実行中のバックグラウンドセッションを再開したときの流れ
- 1
シェルから claude --resume を実行する
claude attachと同じく、トランスクリプトを読み込まず、同じターミナルで実行中のセッションに接続します。claude --resume <session> "プロンプト"のようにプロンプトを付けると、先にそのセッションの次のターンとして送られます。 - 2
セッション内から /resume を実行する
いまの会話をバックグラウンドへ移したうえで、このターミナルを実行中のセッションにつなぎます。
Opening "<title>", running in the background (<id>)と表示され、空のプロンプトで←を押すとエージェントビューに戻れます。 - 3
--bg を付けて実行する、または開けない条件に当たる
--bg付きの再開はバックグラウンドへのディスパッチになります。エージェントビューを無効にしている環境では何も送らず、終了コード1で止まり、claude attach <id>のコマンドが表示されます。パイプやリダイレクト、
--permission-mode・--model・--settingsなどセッションを設定するフラグ、--output-format json、--max-turnsなども、実行中のセッションを開かない条件です。
実行中のセッションをそのまま開かず、自分の設定フラグを効かせた別セッションで続けたい場合は2通りあります。--fork-sessionを付ければ、会話のコピーを再開できます。元の会話そのものを自分のセッションで続けたいなら、claude stop <id>で止めてからもう一度同じコマンドを実行します。
claude --continueの扱いは別です。終了済みのバックグラウンドセッションは開けます(v2.1.257以降)が、直近の会話がまだバックグラウンドで実行中の場合は開かずに終了します。Your most recent conversation is running in the backgroundというメッセージとセッションIDが出ます。claude agentsから接続するか、claude --resumeで別のセッションを選びます。
手元のv2.1.286でclaude attach --helpとclaude stop --helpを見ると、2つのコマンドは次のように説明されています。
Usage: claude attach <id>
Open the background session in this terminal. ← returns to agent view, Ctrl+Z drops back to your shell. The session keeps running either way.
Usage: claude stop <id>
Stop a background session. Its conversation is kept; resume it later with `claude attach <id>`.stopのヘルプは、止めたセッションをclaude attach <id>で再開すると案内しています。一方、claude --helpのコマンド一覧には、止めたあとはclaude --resumeでも使えるとあります。
クロスプロジェクト検索とワークツリーをまたぐ再開
claude --resume <session-id>はどのディレクトリからでも実行できます。Claude Codeはまず現在のプロジェクトディレクトリとそのgitワークツリーの中でIDを探し、見つからなければマシン上の他の全プロジェクトを検索します。別の場所で始まったセッションや/cdで移動したセッションも見つかります。
他のプロジェクトでIDが解決されるのは、該当するメッセージ入りのトランスクリプトを持つものがちょうど1件だけ見つかった場合に限られます。手動でコピーした重複ファイルがあると、任意のコピーを再開せず「見つからない」と報告されます。該当するセッションが1件も無ければ、次のように表示されます。
claude -p --resume 00000000-0000-4000-8000-000000000000No conversation found with session ID: 00000000-0000-4000-8000-000000000000存在しないUUIDを-p付きで渡して、v2.1.286で実際に出したメッセージです。モデルは呼ばれません。UUIDではない文字列を渡すと、別のエラーになります。-pでは「セッションIDかセッション名を渡すこと。UUIDではなく、一致するタイトルも無い」という趣旨のメッセージが出ます。原因別の対処は「No conversation found with session ID」の対処にまとめています。
v2.1.223より前は、検索が現在のプロジェクトディレクトリとそのワークツリーの範囲で止まっていました。セッションが最後に作業していたディレクトリから再開する必要があったので、拡張は/cdで移動を繰り返す運用や複数プロジェクトを横断する運用に効きます。ピッカーの既定表示には逆方向の変遷もあり、v2.1.101で一時的に全プロジェクト表示になった経緯はこの記事にまとめています。
名前で再開するときの挙動の違い
セッションに名前を付けている場合、claude --resume <name>と/resume <name>のどちらでも呼び出せますが、名前があいまいに複数該当したときの挙動が異なります。
| コマンド | 完全一致 | あいまいな名前 |
|---|---|---|
claude --resume <name> | 完全一致直接再開 | あいまいな名前名前を検索語として入れた状態でピッカーを開く |
/resume <name> | 完全一致直接再開 | あいまいな名前エラーを報告(引数なしで/resumeを実行してピッカーを開く必要がある) |
名前解決は現在のリポジトリとそのワークツリー全体にまたがって行われるため、目的のセッションが別のワークツリーで動いていても、完全一致する名前を渡せばそのまま再開できます。CLIで名前を付ける経路は-nでの起動時指定・/rename・ピッカーのCtrl+Rです。ほかに、planモードでプランを承認したときの生成タイトルや、claude.aiからRemote Controlセッションを改名した名前(v2.1.221以降)でも再開できます。
同じ名前を別のセッションが使っているときの扱いも変わっています。対話セッションで、この名前を別の生きているセッションが既に使っている状態で、名前を付けて起動・再開するか、改名でその名前にしたとします。すると、名前は先に持っていたセッションに残り、あなたの側はauth-refactor-graceful-unicornのように2語の接尾辞が付いた別名になります。Claude Codeはそのことを知らせます。v2.1.232より前は、両方のセッションが同じ名前を保っていました。AI生成のタイトルや既定の表示名、バックグラウンドや-pセッションの起動時の--name、旧バージョンのセッションは、この確認の対象外です。
長い会話を再開するときのトークンコスト
Pro・Maxプランで、約1時間以上操作がなく、トークン数が10万を超えるセッションを再開すると、Claude Codeは会話を復元したうえで、最初のメッセージを送る前に確認ダイアログを開きます。この時点でプロンプトキャッシュは失効しているため、どの選択肢を選んでも次のリクエストは全履歴を一度は処理し直します。
再開ダイアログの3つの選択肢
Resume from summary
その場で
/compact相当の要約を実行します。以降は要約・直近のやり取り・最近読んだファイル最大5件だけを持ち込みます。Resume full session as-is
会話を変更せず読み込みます。最初のメッセージ送信後に全履歴を再処理・再キャッシュし、以降はキャッシュが温かい間そこから読みます。
Don't ask me again
フルセッションを再開し、以降のすべての再開でこのダイアログを表示しなくなります。
全履歴を持ち込めば会話の細部は保てますが、リクエストごとのコストは会話量に比例して増えます。要約を選べば以降のリクエストは軽くなる反面、要約からこぼれた内容はClaudeの文脈から消えます。長時間セッションでのトークン消費の仕組みはClaude Codeのコンテキスト管理で扱っています。
再開できるのはいつまでか:トランスクリプトの保存先と保持期間
再開の元になるのはローカルに保存されたトランスクリプトです。既定の保存先は~/.claude/projects/<project>/<session-id>.jsonlで、<project>は作業ディレクトリのパスの英数字以外を-に置き換えたものです。置き換えた名前が200文字を超える場合は、200文字に切り詰めてパス全体のハッシュを付けます。
保持期間は既定で30日で、settings.jsonのcleanupPeriodDaysで変えられます。ピッカーに目的のセッションが出ないときは、この期間を過ぎたものは対象外になっているかもしれません。保存先はCLAUDE_CONFIG_DIRで~/.claudeの外に移せ、CLAUDE_CODE_PROJECT_DIR_NAMEで<project>ディレクトリの名前を自分で決められます。
claude -pでは--no-session-persistenceが使えます。付けた実行はディスクに保存されず、後から再開できません。--helpの説明は「--printのときだけ有効」となっています。
JSONLの各行の形式はClaude Codeの内部仕様で、バージョン間で変わります。スクリプトで直接パースするのは避けます。代わりに、/exportやclaude -p --resume <session-id> --output-format jsonのような公開されたインターフェースを使います。
エラーになったときの対処
claude --resumeのピッカーから選んだ直後に読み込みが失敗すると、Failed to resume the conversationと表示されてプロセスが終了コード1で終わります。対処は「Failed to resume the conversation」の対処法にまとめています。セッション内から/resumeのピッカーで同じ失敗が起きた場合は、プロセスごと終了せず、現在の会話は動いたまま失敗だけが報告されます。
agent viewからの/resumeはバックグラウンドセッションとして戻る
claude agents(agent view)のディスパッチ入力で/resumeと打つと、v2.1.212以降ではエージェントビューを開いたリポジトリの過去のセッションのピッカーが開きます。一覧から削除したセッションも新しい順に並び、Enterで選ぶとバックグラウンドセッションとして再開されます。すでに行がある(一覧に出ている)セッションはこのピッカーに出ません。
このピッカーが開くのは、引数なしの/resumeだけです。IDや検索語を指定した/resume、--cwdで絞ったビュー、--safe-modeや--permission-modeなどのフラグ付きで開いたビューでは、ピッカーの代わりに「セッションにattachして実行してください」というヒントが表示されます。
別のターミナルでclaude --resumeや/resumeにより開いた会話は、agent viewにOpen in a terminalと表示されます。その行を開こうとするとCan't open — this session is running in another terminalと出ます。元のターミナルで続けるか、そちらを終了してから開き直します。
/resumeまわりの拡張の流れ
/resumeに関わる仕様は複数バージョンにまたがって整備されてきました。
| バージョン | 変更内容 |
|---|---|
| v2.1.144 | 変更内容claude --bgやagent viewで始めたバックグラウンドセッションが、ピッカーにbgマーク付きで表示されるようになった |
| v2.1.169 | 変更内容/cdコマンドが追加され、セッションを別の作業ディレクトリへ移せるようになった |
| v2.1.191 | 変更内容/rewindから/clear前の会話に戻る導線が追加され、/resume <session-id> (previous session)という項目が使えるようになった |
| v2.1.196 | 変更内容名前を付けていない対話セッションにも、作業ディレクトリ名+2文字のデフォルト表示名が自動で付くようになった |
| v2.1.211 | 変更内容会話の早い段階で/loopを一度使っただけで、セッションがピッカーから恒久的に隠れる不具合を修正(最初のプロンプトが/loopのセッションは今も非表示) |
| v2.1.212 | 変更内容agent viewのディスパッチ入力で/resumeと打つと過去のセッションのピッカーが開き、選ぶとバックグラウンドセッションとして再開されるようになった |
| v2.1.223 | 変更内容claude --resume <session-id>のクロスプロジェクト検索が、マシン上の他プロジェクトまで及ぶようになった |
| v2.1.232 | 変更内容他の生きているセッションと同じ名前になるとき、後から付けた側に2語の接尾辞が付くようになった |
| v2.1.257 | 変更内容claude --continueが、終了済みのバックグラウンドセッションを開けるようになった |
| v2.1.281 | 変更内容クラッシュ時に実行中だったツール呼び出しが、「中断された呼び出し」としてClaudeに伝わるようになった |
| v2.1.285 | 変更内容実行中のバックグラウンドセッションに/resume・claude --resumeをかけると、断らずにそのセッションを開くようになった |
まとめ
再開後の状態は、入り口しだいで変わります。権限モードを保ちたいならターミナルからの直接指定、実行中のバックグラウンドセッションに触りたいならv2.1.285以降の/resumeかclaude attach、というのが持ち帰る切り分けです。