[BUG] Session recap (post_turn_summary) never renders in VSCode extension, only in CLI

Resolved 💬 4 comments Opened May 3, 2026 by romankanevsky Closed Jun 16, 2026

Summary

Session recap (※ recap: / away-summary) does not render in the official VSCode extension anthropic.claude-code, even when the extension and the CLI binary share the same version (2.1.126) on the same host. The recap renderer exists only in the CLI bundle; the VSCode extension receives system / post_turn_summary messages from the SDK and silently enqueues them without any UI surface. Result: recap is invisible to users who work primarily through the VSCode extension, regardless of CLAUDE_CODE_ENABLE_AWAY_SUMMARY, awaySummaryEnabled, or GrowthBook flag state.

This is the third harness in the family with broken or missing recap rendering, after #55023 (Claude for Windows desktop GUI). The CLI in a real terminal is the only place the feature works end to end.

Environment

  • Host: Ubuntu 24.04 LTS Linux dev VM, accessed via VSCode Remote-SSH from a Windows 11 workstation
  • VSCode extension: anthropic.claude-code v2.1.126, installed at ~/.vscode-server/extensions/anthropic.claude-code-2.1.126/
  • CLI binary on the same VM: ~/.local/share/claude/versions/2.1.126, version string 2.1.126 (Claude Code)
  • Telemetry: API Usage Billing (telemetry on)
  • CLAUDE_CODE_ENABLE_AWAY_SUMMARY: not set
  • /config recap toggle: not toggled off
  • Recap fires reliably in claude from a real terminal on the same VM (sibling sessions logged with entrypoint: "cli")
  • Recap never fires in any session opened through the VSCode extension on the same VM (entrypoint: "vscode" or similar), across many sessions and many days

Evidence: recap renderer is missing from the extension bundle

Two-minute diff of the same version 2.1.126 on the same host:

CLI binary 2.1.126 (248 MB ELF, not stripped)

$ grep -a -o "CLAUDE_CODE_ENABLE_AWAY_SUMMARY" ./2.1.126 | sort -u
CLAUDE_CODE_ENABLE_AWAY_SUMMARY

$ grep -a -o -E "[\"']recap[\"']" ./2.1.126 | sort -u
"recap"

$ for t in recap away_summary post_turn_summary tengu_ccr; do
    printf "%-25s %d\n" "$t" "$(grep -a -c -i "$t" ./2.1.126)"
  done
recap                     44
away_summary              18
post_turn_summary         20
tengu_ccr                 22

VSCode extension anthropic.claude-code-2.1.126 (extension.js + webview/index.js, 6.4 MB)

$ for t in recap away_summary awaySummary AWAY_SUMMARY post_turn_summary postTurnSummary tengu_ccr session.summary; do
    c1=$(grep -c -i "$t" extension.js); c2=$(grep -c -i "$t" webview/index.js)
    printf "%-25s extension.js=%s  webview/index.js=%s\n" "$t" "$c1" "$c2"
  done
recap                     extension.js=0   webview/index.js=0
away_summary              extension.js=0   webview/index.js=0
awaySummary               extension.js=0   webview/index.js=0
AWAY_SUMMARY              extension.js=0   webview/index.js=0
post_turn_summary         extension.js=1   webview/index.js=0
postTurnSummary           extension.js=0   webview/index.js=0
tengu_ccr                 extension.js=0   webview/index.js=0
session.summary           extension.js=0   webview/index.js=0

The single hit in extension.js is the SDK message intake branch, not a renderer:

if (V.type === "system" && (V.subtype === "post_turn_summary" || V.subtype === "task_summary")) {
  this.inputStream.enqueue(V);
  continue;
}

That is, the extension recognises the message type, drops it onto inputStream, and never emits any UI. The webview bundle has zero references to recap, away-summary, or the glyph used by the CLI to render the line.

Repro

  1. Install anthropic.claude-code v2.1.126 in VSCode (Remote-SSH or local).
  2. Open the Claude Code panel, run a normal multi-turn session, leave focus for 5+ minutes, return.
  3. Observe: no ※ recap: text in the panel, no system / post_turn_summary event rendered.
  4. In a parallel terminal on the same host, run claude v2.1.126 in the same workspace and repeat the flow. Recap fires and is visible.
  5. grep -a "post_turn_summary" against the session JSONL written by the extension shows the SDK message arrives at the harness; only the rendering step is missing.

Expected

The VSCode extension should render system / post_turn_summary messages with parity to the CLI: a visible recap block in the chat surface, optionally configurable through the extension settings panel and respecting the same env / GrowthBook gates as the CLI.

Actual

post_turn_summary is consumed silently. No UI element is shown. There is no extension setting, command, or status-bar surface for recap. /recap typed manually in the input box is also not handled by the extension (the slash-command appears to fall through to the model).

Why this matters

  • Users who work primarily in VSCode never see the feature exists. The CLI changelog announces recap as a default-on feature for telemetry-disabled installs (v2.1.121), but the extension is silently below the floor.
  • The harness mismatch makes triage hard: env vars, /config toggles, and GrowthBook flags all suggest the feature should be on, yet it never appears, because the gating logic is correct and the renderer is the missing piece.
  • Same root cause class as #55023 (Windows desktop GUI). The CLI is the source of truth for recap rendering; every other harness is currently a regression.

Suggested fix

Add a post_turn_summary (and task_summary) renderer in the extension webview, ideally reusing the same template the CLI emits. At minimum, surface the summary text in the conversation panel; the glyph and (disable recaps in /config) hint can be IDE-styled rather than ASCII-faithful. Honour the same opt-out controls (CLAUDE_CODE_ENABLE_AWAY_SUMMARY=0, /config awaySummaryEnabled=false) so users who already disabled recap in the CLI do not get a duplicate surface in the IDE.

Related

  • #55023 [BUG] Session recap never auto-fires in Claude for Windows desktop GUI
  • #48642 Auto-injected ※ recap: session-state messages appear without opt-in
  • #48084 [DOCS] Session resumption docs missing /recap command and away-summary controls
  • #50137 [DOCS] Session recap docs missing auto-trigger and draft-input behavior
  • #55509 [feature request] Configurable idle threshold for session recap auto-fire

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗