Skip to content

原文(日本語に翻訳)

バックグラウンドセッションのターン終了後にリキャップ行が重複表示される問題を修正:スキーマで拒否されたStructuredOutputの試行が、リトライと並んで表示されることがなくなりました

原文(英語)

Fixed duplicate recap lines after a background session's turn: a schema-rejected StructuredOutput attempt no longer renders alongside its retry

概要

Claude Codeでバックグラウンドセッション(離席中に裏側で処理が進むセッション)のターンが完了した際、要約として表示される「リキャップ」行が二重に表示されてしまう不具合が修正されました。原因は、ターン終了時の要約生成に使われるStructuredOutput(JSON Schemaで検証される構造化出力)の最初の試行がスキーマ検証に失敗(reject)した場合、その失敗した試行の出力と、自動的に行われるリトライの出力の両方が画面に描画されてしまっていたことです。修正後は失敗した試行は破棄され、検証に成功したリトライの結果だけが表示されるようになりました。

基本的な使い方

この修正は内部的な表示ロジックの修正であり、ユーザー側での設定変更は不要です。バックグラウンドセッションから復帰した際に自動的に正しい表示(リキャップ1行のみ)になります。

bash
# Claude Codeを起動してセッションを開始
claude

# 離席中(3分以上ターミナルが非フォーカス、かつ3ターン以上経過)に
# 裏側でリキャップが生成される

# 戻ってきたときに /recap でも手動確認できる
> /recap

実践例

バックグラウンドタスクを使った長時間処理からの復帰

ビルドやテストなど時間のかかるコマンドをバックグラウンドに退避させて作業を進め、離席後に戻ってきたときの挙動です。

bash
# 実行中のBashツール呼び出しを Ctrl+B でバックグラウンドへ移動
# (tmux使用時は Ctrl+B を2回)

# 例: 長時間かかるテストスイートをバックグラウンド実行
claude "npm run test:e2e をバックグラウンドで実行して"
修正前の表示(離席復帰時):
- リキャップ: テストが3件失敗し、ビルドは成功しました(スキーマ検証に失敗した試行)
- リキャップ: E2Eテストが3件失敗、ビルドは成功(リトライで生成された正しい要約)
❌ 同じ内容の要約が2行表示され、どちらが最新か分かりにくい

修正後の表示(離席復帰時):
- リキャップ: E2Eテストが3件失敗、ビルドは成功
✅ 検証に成功したリトライの結果のみが1行表示される

離席中に複数のサブエージェントが並行作業する場合

バックグラウンドで複数のサブエージェントが動いているセッションでは、ターン終了時にまとめてリキャップが生成されます。スキーマ検証の失敗とリトライが絡む場面ほど、この修正の効果が分かりやすくなります。

bash
# 複数のサブタスクを伴うセッションを離席中も継続させる
claude "リファクタリングを進めて、完了したら結果をまとめて教えて"

# 3分以上ターミナルが非アクティブだと、戻ってきたときに
# 1行のリキャップとして要約が表示される(重複なし)

/recap コマンドで手動確認する場合

自動生成だけでなく、手動でリキャップを呼び出した場合も同様に重複が解消されています。

bash
> /recap
# スキーマ検証に失敗した中間出力ではなく、
# 検証済みの最終的な要約のみが表示される

注意点

  • この修正はリキャップ機能(離席復帰時の自動要約、/recap)を使っている場合に影響します。非対話モード(claude -p、hooks、ヘッドレス実行)ではリキャップ自体がスキップされるため、この修正の対象外です。
  • リキャップはデフォルトでテレメトリが無効な環境(Bedrock、Vertex、Foundryなど)で有効になっています。挙動を制御する環境変数として CLAUDE_CODE_ENABLE_AWAY_SUMMARY が存在します。
  • StructuredOutputのスキーマ検証に複数回失敗し続けるとリトライ上限に達し、要約自体が生成されないことがあります(この場合は今回の修正の対象である「重複表示」とは別の挙動です)。
  • バックグラウンドタスク自体を無効化したい場合は CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1 を設定してください。

関連情報