Claude Media
「no saved transcript」の対処 — Claude Codeバックグラウンドセッションの復旧

「no saved transcript」の対処 — Claude Codeバックグラウンドセッションの復旧

claude attachが「This session has no saved transcript」を出す条件と、claude respawnでの復旧手順、v2.1.211〜v2.1.214の挙動の違いをまとめます。

「This session has no saved transcript」は、最初の応答がまだ終わっていないうちにバックグラウンド化されたセッションへclaude attachで戻ろうとしたときに出るエラーです。会話そのものは失われていません。元のセッション側にまだ残っています。対処は元の会話にclaude --resumeで戻るか、claude respawn <id>で空の会話として再起動するかの二択です。

「no saved transcript」が出る条件

このエラーが出るのは、キーまたは/backgroundで会話をバックグラウンド化した直後、その最初の応答がまだ完了していない状態で、そのセッションにclaude attachしようとしたときです。最初の応答が終わるまで、会話は「バックグラウンド化した元のセッション」の中にしか存在しません。claude attachは、同じセッションIDで空の会話を始めるのではなく、この状態を拒否します。

This session has no saved transcript — it was stopped before its first response finished. If it was backgrounded from another conversation, that one is still intact; `claude respawn <id>` starts this one fresh.

エージェントビュー(claude agents)からこのセッションの行を開いた場合は、メッセージではなく「Press enter again to restart this session fresh」という案内がリストの下に表示されます。もう一度Enterを押すと、その行のセッションを空の会話として再起動できます。

バージョンでどう挙動が変わったか

このエラーへの対処手段そのものが、v2.1.211からv2.1.214にかけて段階的に整備されています。挙動の違いを知らずに古いバージョンのまま操作すると、想定と違う結果になります。

バージョン停止済みセッションを開いたときの挙動
v2.1.211より前停止済みセッションを開いたときの挙動無言で空の会話が始まり、そのセッションの元のプロンプトを再実行してしまうことがあった
v2.1.211停止済みセッションを開いたときの挙動エージェントビューの行を開くと拒否メッセージが出るが、そこから再起動する手段が無かった
v2.1.212以降停止済みセッションを開いたときの挙動エージェントビューの行に「Press enter again to restart this session fresh」と表示され、もう一度Enterで再起動できる
v2.1.214以降停止済みセッションを開いたときの挙動~/.claude/projects内の読み取れないフォルダがあっても、トランスクリプトのスキャンを継続する

v2.1.211より前は、このエラーの拒否そのものが存在せず、停止済みセッションを開くと無言で空の会話が始まり、元のセッションが実行していたプロンプトまで再実行されることがありました。意図しない再実行を防ぐために、v2.1.211で拒否メッセージが導入され、v2.1.212でエージェントビューからの再起動手段が加わっています。古いバージョンのまま運用しているチームほど、この無言の再実行に気づかず不要な作業を繰り返している可能性があります。

claude attachとclaude respawnの使い分け

対処は状況によって2つに分かれます。

バックグラウンド化した元の会話に戻りたい場合は、そちらはまだ生きています。claude --resumeで再開するか、すでに作業を続けているならそのまま続けます。

claude --resume

停止済みセッションを空の会話として使い始めたい場合は、エラーメッセージが示すclaude respawn <id>を実行します。IDはエラーメッセージ自体か、エージェントビューの行から確認できます。

claude respawn <id>

エージェントビューからは、同じ操作をEnterキーの連続入力でも行えます。1回目のEnterで拒否メッセージ相当の案内が表示され、同じ行でもう一度Enterを押すと空の会話で再起動します。

保存されているのに誤って表示されるケース

このエラーが「本当に最初の応答が終わっていない」以外の理由で出ることもあります。v2.1.214より前のバージョンでは、セッションが実際には応答を完了して正常に保存されていても、~/.claude/projects配下に読み取れないフォルダが1つでもあると、トランスクリプトのスキャンがその会話を見落とし、同じ拒否メッセージを返すことがありました。

セッションが応答を終えたはずなのにこのエラーが出る場合は、まずバージョンを確認します。v2.1.214以降ではスキャンが読み取れないフォルダを許容するようになり、この誤検出は起きません。

claude --version
claude update

なぜ「最初の応答」がカギになるのか

Claude Codeはトランスクリプトを~/.claude/projects/<プロジェクト名>/<セッションID>.jsonlというセッションIDごとのファイルに保存します。/backgroundでバックグラウンド化すると、その会話は新しいセッションIDを割り当てられ、対応するファイルに書き込まれていきます。最初の応答が完了する前に停止すると、この新しいファイルにはまだ何も書き込まれていません。バックグラウンド化する前の会話は、元のセッションIDのファイルにすでに保存されているため無事です。「まだ最初の応答が終わっていないセッションには何も残っていない」という状態が、まさにこのエラーが指しているものです。

似たバックグラウンドセッションのエラーとの見分け方

公式ドキュメントは、バックグラウンドセッション関連のエラーを1つのカテゴリにまとめています。文字列だけでどれに当たったかを判断すると遠回りになるため、発生条件で見分けます。

エラー発生条件会話は残るか
no saved transcript発生条件最初の応答が終わる前に停止したセッションへattachした会話は残るか残る(元のセッション側)
Session agent no longer available発生条件--agentで指定したカスタムエージェント定義が見つからない会話は残るか残る(デフォルトのツール・プロンプトで続行)
Commands refused in a background session発生条件/install-github-appなど対話ダイアログが必要なコマンドを、端末が接続されていないセッションで実行した会話は残るか残る(attachして再実行すればよい)
EUNKNOWN when starting a background session発生条件Windowsのソフトウェア制限ポリシーがバックグラウンドサービスの起動をブロックした会話は残るかセッション自体が開始できていない

「no saved transcript」だけが、会話は存在するのにattachという操作そのものが拒否される点で特徴的です。他の3つは、セッションは開始できているか会話は続行できるかのどちらかです。

復旧までの具体的な手順

エラーに遭遇したら、次の順で確認します。

  1. 元のターミナルがまだ開いているか確認する。バックグラウンド化する前の会話は、を押した端末側にまだ残っている可能性があります。閉じていなければそちらに戻るのが最短です
  2. claude --resumeでセッション一覧から探す。ピッカーに元の会話が表示されれば、そのまま選んで再開できます
  3. 見つからなければclaude agentsを開く。停止した行を選び、Enterを2回押すと空の会話として再起動します
  4. CLIから直接復旧するならclaude respawn <id>。IDはエラーメッセージまたはclaude agentsの一覧から取得します

/statusを実行すると、いま自分がどの種類のセッションにいるかをSession kindの行で確認できます。バックグラウンドセッションではbackground job · attached(端末が接続中)かbackground job · unattended(未接続)のいずれかが表示され、通常の対話セッションではinteractiveと表示されます。復旧作業の前に自分の状況を把握するのに使えます。

よくあるつまずき

  • バックグラウンド化した会話をターミナルのkillなどで自分でプロセス終了させた場合、そのセッションは再起動されずに「stopped」のまま残ります。エージェントビューやタスク実行から起動したセッションは自動で再起動されますが、/backgroundで自分がバックグラウンド化したセッションは違います
  • を押した瞬間にツールが実行中だった場合、Claude Codeはそれが終わるまで最大10秒ほど待ってからバックグラウンド化します。応答が完了する前に待ちきれずもう一度を押すと即座にバックグラウンド化され、結果としてこのエラーの発生条件に入りやすくなります
  • claude respawn <id>で再起動しても会話が空にしかならないケースは、元の会話が本当にどこにも保存されていない場合に限られます。まずはclaude --resumeで元の会話を探すほうが安全です
  • セッションIDを忘れた場合は、エラーメッセージ自体にclaude respawn <id>という形でIDが含まれています。それでも見当たらないときはclaude agentsのリストから該当の行を探します。同じIDはclaude attachclaude logsclaude stopでも共通して使えます

よくある質問

claude respawnを実行すると元の会話は消えますか

消えません。claude respawn <id>は指定したセッションIDを空の会話として再起動するだけで、バックグラウンド化した元の会話には触れません。元の会話はclaude --resumeから引き続き見つかります。

「Session agent no longer available」と何が違いますか

別の原因のエラーです。「no saved transcript」は最初の応答前に停止したセッションへのattach拒否ですが、「Session agent no longer available」は--agentで指定したカスタムエージェント定義ファイルが見つからないときに出ます。会話自体は再開でき、デフォルトのツールとシステムプロンプトで続行される点が違います。

claude attachではなくclaude --resumeなら常に安全ですか

claude --resumeはセッション選択のピッカーを開くため、最初の応答が終わっていないセッションを誤って選ぶ余地自体がありません。特定のセッションIDに直接claude attach <id>する場合だけ、このエラーに当たる可能性があります。

トランスクリプトの保存先を変えていても同じエラーは出ますか

出ます。CLAUDE_CONFIG_DIRでトランスクリプトの保存場所を~/.claude以外に変更していても、セッションIDごとにファイルを分けて保存する仕組み自体は変わりません。最初の応答が終わる前に停止すれば、保存先を変えていても同じ条件でこのエラーになります。

エージェントビューを使わずCLIだけで運用している場合の対処は変わりますか

変わりません。claude agentsを一度も開かずにclaudeセッションをでバックグラウンド化した場合も、claude attachが返す拒否メッセージとclaude respawn <id>による復旧手順は同じです。エージェントビューは操作のための画面であって、このエラーの発生条件そのものには影響しません。

バックグラウンド化を頻繁に使う場合、あらかじめ気をつけることはありますか

/backgroundを押した直後は、まだ何も保存されていない一瞬の窓があると理解しておくと安心です。バックグラウンド化してすぐに別の作業へ移り、そのセッションへ最初の応答を待たずにattachし直すと、このエラーの発生条件に入りやすくなります。応答が動き出したのを確認してから離れる、という運用で回避できます。

まとめ

「no saved transcript」は会話の消失ではなく、最初の応答が終わる前の状態をclaude attachが拒否しているサインです。元の会話にはclaude --resumeで戻り、空の会話として再起動したいときだけclaude respawn <id>を使います。v2.1.214より前のバージョンでは、正常に保存されたセッションでも誤ってこのエラーが出ることがあるため、繰り返す場合はアップデートを先に確認します。バックグラウンド化とエージェントビューの操作自体をスクリプトから組み立てたい場合は、claude agents --jsonでの操作方法もあわせて確認しておくと復旧作業を自動化しやすくなります。

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