Claude Media
「Failed to resume the conversation」の対処法

「Failed to resume the conversation」の対処法

claude --resumeのピッカーで出る「Failed to resume the conversation」の原因と対処、/resume内蔵ピッカーや似たエラーとの見分け方をまとめます。

claude --resumeのセッションピッカーで会話を選んだ直後に、次のメッセージが出て処理が止まることがあります。

Failed to resume the conversation.
Run claude --resume <session-id> to retry, or claude to start a new session.

原因は、保存済みの会話ファイル(トランスクリプト)を読み込めなかったことです。対処はメッセージのとおり、リトライか新規セッションの二択になります。ただしv2.1.285より前のバージョンでは、リトライが同じように失敗しても、claude updateのあとで直るケースがあります。

画面の文言でどのエラーか見分ける

再開まわりのエラーは文言が似ています。見分ける手がかりは、どこから再開を試したかと、メッセージの1行目です。

画面の文言意味プロセス
Failed to resume the conversation.意味claude --resumeのピッカーで選んだトランスクリプトを読めなかったプロセス終了コード1で終了
Failed to resume conversation意味実行中セッションの/resumeピッカーで読めなかったプロセス継続し、いまの会話も残る
Failed to resume session <session-id>意味再開の失敗を示す行。Windowsでは直後にEBADFの説明が続くことがあるプロセス終了コード1で終了
No conversation found with session ID: <session-id>意味指定したIDのトランスクリプトが見つからないプロセス終了コード1で終了

最後の「見つからない」は、読み込み失敗とは別の問題です。こちらはclaude --resume <session-id>でIDを渡したときの照合結果で、ピッカーで選んだ行の読み込み失敗とは段階が違います。原因と探し方は「No conversation found with session ID」の対処で扱っています。

ピッカーの各行には、セッション名(未設定ならAI生成のタイトル、会話の要約、最初のプロンプトのいずれか)、最終操作からの経過時間、gitブランチ、ファイルサイズが並びます。Ctrl+Aを押すと、現在のプロジェクトだけでなくこのマシンの全プロジェクトに表示を広げられます。選んだ行が読み込めないときに、先ほどのエラーが出ます。

実行中の会話を失いたくない場合、切り分けは起動し直さずにセッション内の/resumeで試すほうが安全です。読めなかったのは開こうとした別セッションだけで、手元の会話には影響しません。

試す順番は3段階

最初に、メッセージが示す同じIDでのリトライです。次に、古いバージョンなら更新です。それでも直らなければ、新規セッションに切り替えます。

手順

読み込みに失敗したときの順番

  1. 1

    同じIDでリトライする

    メッセージに出たセッションIDで、もう一度claude --resume <session-id>を実行します。

  2. 2

    v2.1.285より前なら更新する

    claude --versionで確認し、v2.1.285より前ならclaude updateで更新してから再開します。

  3. 3

    直らなければ新規セッションにする

    そのトランスクリプトの読み込みは諦めて、claudeで新しいセッションを始めます。

claude --version
claude update
claude --resume <session-id>

2段目の更新は、公式のエラー解説が書いている条件つきの対処です。v2.1.285より前のバージョンは、保存済みのトランスクリプトの中に読めない行が1つでも含まれていると、再開そのものを失敗させます。新しいバージョンに更新すると、同じファイルが読めるようになる場合があります。

読めない行の具体例は、changelogに2つ残っています。v2.1.285では、フィールドが欠けた、または形式の崩れたコンパクションマーカーや/loopのwakeupエントリが原因で、コンパクションや再開が失敗する不具合が直りました。履歴なしで開く、クラッシュするといった症状も含まれます。v2.1.275では、形式の崩れたtask-reminderや@-fileの添付エントリのせいで、--resumeとピッカーのプレビューが失敗する不具合が直っています。つまり「ファイルが壊れた」と決めつける前に、自分のバージョンを疑う価値があります。

v2.1.287で壊れたファイルを渡してみた

挙動を確かめるため、v2.1.287のclaudeで、中身が途中で切れた.jsonlを用意して再開を試しました。作業ディレクトリの外には触れないよう、CLAUDE_CONFIG_DIRを作業用のフォルダに向けています。モデルを呼ぶ操作は含みません。

mkdir -p cfg/projects/-tmp-x
echo '{"broken' > cfg/projects/-tmp-x/11111111-2222-4333-8444-555555555555.jsonl
CLAUDE_CONFIG_DIR=$PWD/cfg claude --resume 11111111-2222-4333-8444-555555555555

出力は、Failed to resumeではなく次の1行でした(終了コードは1)。

No conversation found with session ID: 11111111-2222-4333-8444-555555555555

1行しかない壊れたファイルは、メッセージを含むトランスクリプトとして認識されず、「見つからない」側に分類されたとみられます。この実験ではFailed to resume the conversationそのものは再現できていません。ピッカーでセッションとして表示できるほどメッセージが残っていて、それでも読み込みで失敗する、という条件が前提になっているようです。

この実験の範囲で言えるのは、1行だけの壊れたファイルは、リトライ以前に「そのIDの会話は存在しない」と扱われた、ということです。空のファイルや途中から壊れたファイルは試していません。

ID指定の再開は、まず現在のプロジェクトとそのgitワークツリーを探し、次にこのマシンの他のプロジェクトを探します。他プロジェクトの横断検索がIDを解決するのは、メッセージを含むトランスクリプトを持つプロジェクトがちょうど1つのときだけです。手でコピーした重複があると、どれか1つを再開せず「見つからない」と報告します。v2.1.223より前は、検索が現在のプロジェクトとワークツリーで止まっていました。ピッカーに出たセッションで読み込みに失敗する場合とは、原因の層が違います。

Windowsで出るEBADFの説明つきメッセージ

Windowsでは、トランスクリプトを開くところまでは成功し、読み取りでシステムエラーのEBADFが返ることがあります。セキュリティ・暗号化・エンドポイント管理のソフトがファイルの読み取りに割り込むと起こりうると、公式のエラー解説が説明しています。v2.1.282以降は、原因の候補と対処つきのメッセージが出ます。

Windows reported an error (EBADF) when Claude Code read this session's transcript file, although the file had opened normally. ...

メッセージの前にはFailed to resume session <session-id>という失敗の行が付きます。claude --resumeでもclaude -pでも終了コード1で終わり、セッション内の/resumeなら現在の会話は続きます。対処は次の3つです。

  • セッションのトランスクリプトを置いたフォルダを、スキャンや読み取りの傍受をするソフトの対象から外す。既定の場所は%USERPROFILE%\.claude\projectsで、CLAUDE_CONFIG_DIRを設定していればそちらを指す
  • 除外設定を足せない場合は、Claude Codeを許可アプリケーションに加える
  • そのうえでもう一度再開する

v2.1.282より前は説明がなく、claude --resume <session-id>がFailed to resume session <session-id>で終わるだけでした。-pで実行するとFailed to resume session: EBADF: bad file descriptor, readのようなシステムエラーの文字だけが出ていました。会社支給のWindows端末で再開が失敗するなら、バージョンと並んで、この種のソフトの有無が切り分けの軸になります。

失敗した会話の中身を読み返したいとき

トランスクリプトは、既定で~/.claude/projects/<プロジェクト名>/<セッションID>.jsonlに保存されます。プロジェクト名は、作業ディレクトリのパスのうち英数字以外を-に置き換えたものです。変換後の名前が200文字を超えると、200文字に切り詰めてパスのハッシュを付けます。

保存先を動かしたいときはCLAUDE_CONFIG_DIR、保持期間はsettings.jsonのcleanupPeriodDaysで決まります。公式では既定30日、最小1で、0は検証エラーになります。再開する予定が数週間先のセッションがあるなら、この値の確認が先です。古くなったファイルは自動で削除されるので、期間を過ぎれば再開は成功も失敗もせず、前述の「見つからない」になります。

例外もあります。Claude DesktopやCoworkで始めた、または続けたセッションのトランスクリプトは、年齢にかかわらず保持されます。上限を付けたいときはv2.1.248以降のdesktopSessionCleanupPeriodDaysを使います。cleanupPeriodDaysやdesktopSessionCleanupPeriodDaysを明示していて設定にエラーがあるときは、保持期間による削除が一時停止します。

ファイルを直接開けば、中の発言は目で追えます。ただし各行はメッセージ・ツール呼び出し・メタデータのJSONで、形式はClaude Code内部のものです。バージョンごとに変わるので、これを読むスクリプトは作らない前提で、あくまで内容を読み返す手段として使います。機械的に扱いたいときの公式の入口は/exportと、後述の-pによる出力です。

IDではなく.jsonlの絶対パスを渡す書き方もあります。

claude --resume /absolute/path/to/<session-id>.jsonl

ID指定が通らない理由が「コピーで同じIDのファイルが増えた」場合は、この形でファイルを指定できます。ただし、これは読み込めないファイルを読めるようにする方法ではありません。

claude -pやAgent SDKのセッションを再開する

claude -pやAgent SDKで作ったセッションは、対話型のピッカーに出ません。IDさえあればclaude --resume <session-id>で再開でき、非対話実行からも続きの質問を投げられます。結果をJSONで受け取る例です。

claude -p --resume <session-id> --output-format json "続きの要約をお願いします"

IDは、最初の実行の--output-format jsonの出力にあるsession_idフィールドです。自動処理に組み込むなら、終了コードが1だったときに新規セッションで仕切り直す分岐を用意しておくと、パイプラインが止まりません。GitHub Actionsなどでの非対話実行はClaude CodeをGitHub Actionsに組み込むにまとめています。

リトライが通ったあとに出る確認ダイアログ

読み込みに成功しても、すぐ会話が始まるとは限りません。リトライ直後に見慣れない画面が出ても、失敗が続いているわけではありません。Pro / Maxプランでは、約1時間以上操作がなく、トークン数が10万を超えるセッションを再開すると、最初のメッセージを送る前にダイアログが開きます。プロンプトキャッシュはすでに切れているため、どの選択肢でも次の1回は履歴全体を処理し直します。

選択

ダイアログの3つの選択肢

  • Resume from summary

    その場で/compact相当の要約を1回実行し、履歴を要約と直近のやり取り、最近読んだ最大5ファイルに置き換えます。以降のリクエストは軽くなりますが、要約から漏れた細部は文脈から消えます。

  • Resume full session as-is

    会話をそのまま読み込みます。最初のメッセージで履歴を再キャッシュするので、以降は読み取りで済みますが、リクエスト単位のコストは会話の大きさに比例します。

  • Don't ask me again

    フル読み込みを選び、今後の再開でこのダイアログを出さなくします。

v2.1.216より前の挙動

このメッセージはv2.1.216で入りました。それ以前は、ピッカーで読み込みに失敗しても何も報告されず、「Resuming conversation…」のスピナーが回り続けたままになります。失敗したのか時間がかかっているのかを判断する材料がなく、待つか強制終了するしかありませんでした。いまは失敗を即座に知らせ、リトライのコマンドまで示します。

よくある質問

/rewindや/branchでこのエラーを避けられますか

避けられません。/rewindはチェックポイントまでの巻き戻し、/branchは会話の分岐で、トランスクリプトの読み込みとは別の仕組みです。巻き戻しの考え方はClaude Code rewindコマンドで/clear前まで戻るに、再開と分岐の違いはClaude Codeのresumeとforkの違いにあります。

まとめ

再開が止まったら、まず文言で4種類のどれかを見分けます。ピッカー由来のFailed to resume the conversationなら、リトライ、v2.1.285より前なら更新、それでも駄目なら新規セッションの順です。Windowsで説明つきのメッセージが出たら、ファイルの破損を疑う前に、セキュリティ系ソフトによる読み取りの割り込みを疑います。Claude Codeで出るほかのエラーの切り分けはClaude Codeでよくあるエラー10選が参考になります。

この記事を共有:XはてブLinkedIn