「No conversation found with session ID」の対処法
claude --resume <session-id>で出る「No conversation found with session ID」の主な原因と、Ctrl+Aでの横断検索など対処をまとめます。
claude --resume <session-id>でセッションIDを直接指定したのに、次のメッセージが出て再開できないことがあります。
No conversation found with session ID: <session-id>このメッセージはIDに一致するトランスクリプトが見つからなかったことを意味し、原因はID誤記・保持期間切れ・別マシン・重複コピー・表示名の取り違えの5パターンにほぼ絞られます。この記事では原因ごとの見分け方と、対話型のセッションピッカーで同じ状況を避ける方法をまとめます。
「No conversation found」の意味
このメッセージは、指定したセッションIDに一致する保存済み会話が、検索対象のどこにも見つからなかったときに表示されます。プロセスは終了コード1で終わります。「Failed to resume the conversation」がファイルは見つかったが読み込めなかったケースなのに対し、今回はそもそもファイルの在り処が特定できていない点が違います。
Claude Codeは、まずカレントプロジェクトのディレクトリとそのgit worktreeを探し、見つからなければマシン上の他の全プロジェクトを検索します。v2.1.223より前のバージョンでは、この横断検索がなく、カレントプロジェクトとそのworktreeしか探しませんでした。そのため古いバージョンでは、セッションが最後に作業していたディレクトリに戻らないと再開できませんでした。バージョンによって挙動が異なる点は、今回のエラーの切り分けでも見落としやすい部分です。
原因ごとの見分け方
IDを打ち間違えているケースが最も多い原因です。セッションIDはハイフン区切りの長い英数字で、目視での書き写しはミスが起きやすい文字列です。非対話実行(claude -p)のスクリプトからIDを取得する場合は、--output-format jsonの出力に含まれるsession_idフィールドを参照します。ターミナルの表示を目でコピーした場合は、末尾が途切れていないか、似た文字(0とO、1とlなど)を取り違えていないかを再確認します。
保存済みトランスクリプトが削除されているケースもあります。Claude Codeは既定で30日の保持期間(cleanupPeriodDays)を過ぎたトランスクリプトを自動的に掃除します。しばらく前に作業したセッションのIDを指定した場合、単純に期限切れで消えている可能性があります。
別のマシンで作成したセッションは、そもそも今のマシンに転写ファイルが存在しません。Claude Codeはトランスクリプトをローカルにしか保存しないため、セッションを開始したマシン上でしか再開できません。リモートの開発環境とローカル端末を行き来しながら作業している場合、「昨日はどちらの環境で作業したか」を思い出せないと、正しいIDを持っていても見つからない側で実行してしまいがちです。
~/.claude/projects配下のディレクトリを手動でコピーした場合、コピー元とコピー先の両方に同じセッションIDのトランスクリプトが存在することになります。Claude Codeは、クロスプロジェクト検索で複数の一致が見つかった場合、どちらを再開すべきか一意に決められないため、任意の片方を選ぶのではなく「見つからない」として報告します。意図しないコピーが残っていないか、保存先ディレクトリを確認するのがこのケースの対処です。
自動生成された表示名を指定していないか
見落としやすい5つ目の原因が、名前を付けていないセッションの「表示名」をそのまま--resumeに渡してしまうケースです。名前を付けなかった対話型セッションには、作業ディレクトリ名と2文字のサフィックスを組み合わせた既定の表示名(my-app-3fのような形式)が自動で付きます。名前を付けなかった場合はさらに、直近のやり取りを要約したセッションタイトルも生成され、ピッカー上に表示されます。
この既定の表示名も生成タイトルも、正式な名前(resume handle)ではありません。ピッカーの一覧でそれらしい文字列を見て「これが名前だろう」とコピーしclaude --resume <その文字列>を実行しても一致しません。--nameや/renameで明示的に設定した名前とは異なるため、今回のエラーと同じ扱いになります。確実に名前で再開したいなら、事前に/renameで名前を設定しておく必要があります。
対話型ピッカーなら横断検索で回避できる
IDを直接指定するのではなくclaude --resumeを引数なしで実行し、対話型のピッカーから探す方法もあります。ピッカーは既定でカレントworktreeのセッションだけを表示しますが、キー操作で検索範囲を広げられます。
| キー | 効果 |
|---|---|
Ctrl+W | 効果リポジトリの全worktreeのセッションを表示 |
Ctrl+A | 効果マシン上の全プロジェクトのセッションを表示 |
Ctrl+B | 効果現在のgitブランチのセッションだけに絞り込む |
/または文字入力 | 効果検索モードに入り、PR/MRのURLを貼り付けてそのセッションを探すことも可能 |
名前を付けたセッションであればclaude --resume <名前>や/resume <名前>でも同じ挙動になります。完全一致すればそのまま再開し、複数の候補が曖昧に一致する場合は名前を検索語としてピッカーが開きます。ただし/resume <名前>であいまい一致したときはピッカーを開かずエラーを返すため、確実に探したいなら引数なしで/resumeを実行するのが安全です。
セッションを名付けておくと探しやすくなる
セッションIDは長い英数字の羅列で、手作業での照合ミスが起きやすい情報です。並行して複数のタスクを進めるなら、claude -n <名前>での起動時指定や、セッション内での/rename <名前>が役立ちます。IDではなく分かりやすい名前で--resumeできるようにしておくと、今回のような取り違えそのものを減らせます。ピッカー上でハイライトしてCtrl+Rを押しても名前を付けられます。
同じ名前を複数の実行中セッションで使おうとした場合、Claude Codeは先に使っていたセッションの名前をそのまま残します。後から名付けたほうは2語のサフィックス付きの変種名(auth-refactor-graceful-unicornのような形式)に自動でリネームされます。この自動リネームはv2.1.232以降の挙動で、それより前のバージョンでは両方のセッションが同じ名前のまま残っていました。
自動化スクリプトでIDを取り違えないための実装
CIやラップスクリプトからclaude -pを繰り返し呼び出し、あとで同じセッションに追加の質問を投げたい場合、セッションIDを人間の記憶や画面のコピペに頼ると、今回のエラーを高確率で踏みます。初回実行時にIDをファイルへ保存し、以降の呼び出しでそのファイルから読み込む形にすると、取り違えの余地がなくなります。
claude -p --output-format json "調査を開始して" | jq -r '.session_id' > .claude-session-id
claude -p --resume "$(cat .claude-session-id)" --output-format json "続きをお願いします"このファイルを.gitignoreに含め、ジョブが完走したら削除する運用にしておくと、古いIDが誤って再利用されて保持期間切れの「No conversation found」を踏むことも防げます。
よくある質問
IDは合っているはずなのに見つかりません
まずCtrl+Aでマシン上の全プロジェクトを検索範囲に含めてください。カレントディレクトリと違う場所で作業したセッションは、既定の検索範囲には含まれません。それでも見つからない場合は、保持期間切れで削除されているか、別のマシンで作成したセッションである可能性が高いです。IDそのものをコピーし直し、余分な空白や改行が混ざっていないかも合わせて確認します。
claude -pやAgent SDKで作ったセッションもこのエラーになりますか
なります。これらのセッションは対話型のピッカーには一覧表示されませんが、セッションIDさえ分かっていればclaude --resume <session-id>で同じように再開できます。IDを取得し忘れた場合、ピッカーからは辿れないため、実行時の--output-format json出力を必ず保存しておく運用が安全です。
保持期間を延ばせば防げますか
長期的な再開を想定するセッションが多いなら有効です。settings.jsonのcleanupPeriodDaysで既定の30日を延ばせます。ただしトランスクリプトはローカルディスクに蓄積され続けるため、延ばすほどディスク使用量とのトレードオフになります。トランスクリプトの保存先自体を変更したい場合は、CLAUDE_CONFIG_DIR環境変数で~/.claude以外の場所に移せます。
PRやMRに紐づくセッションのIDが分かりません
セッションIDを直接扱わなくても、claude --from-pr <番号>を使うと、その番号のプルリクエストやマージリクエストに紐づくセッションだけに絞り込んだピッカーが開きます。IDを控えていなかった場合や、そもそも自分が作業したセッションかどうか確認したい場合に、番号から逆引きできます。対話型ピッカーの検索モードでも、GitHub・GitHub Enterprise・GitLab・BitbucketのプルリクエストURLをそのまま貼り付けると同様に絞り込めます。
/cdで移動したセッションが見つからなくなりました
v2.1.169以降、/cdで移動したセッションは移動先のディレクトリのプロジェクトストレージに実体ごと移されるため、移動先のピッカーから探す必要があります。移動元のディレクトリの一覧にはもう出てきません。
まとめ
「No conversation found with session ID」は、指定したIDに一致するトランスクリプトがどこにも見つからないときに出ます。ID誤記・保持期間切れ・別マシン・ディレクトリの手動コピーによる重複・自動生成された表示名の取り違えのいずれかが原因のほぼすべてです。ID指定でうまくいかないときは、claude --resumeを引数なしで開き、Ctrl+AやCtrl+Wで検索範囲を広げるほうが早く見つかることがあります。よく使うセッションは/renameで名前を付けておくと、次回以降はIDの取り違え自体を避けられます。自動化スクリプトなら、実行のたびにsession_idを毎回ファイルへ書き出しておくだけでも、この種の切り分けにかかる時間を大きく減らせます。セッションを分岐・巻き戻ししながら安全に作業を区切る方法はClaude Code rewindコマンドで/clear前まで戻るにまとめています。一般的なエラーの切り分け方はClaude Codeでよくあるエラー10選も参考になります。