[BUG] Session recap (post_turn_summary) never renders in VSCode extension, only in CLI
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-codev2.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 string2.1.126 (Claude Code) - Telemetry: API Usage Billing (telemetry on)
CLAUDE_CODE_ENABLE_AWAY_SUMMARY: not set/configrecap toggle: not toggled off- Recap fires reliably in
claudefrom a real terminal on the same VM (sibling sessions logged withentrypoint: "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
- Install
anthropic.claude-codev2.1.126 in VSCode (Remote-SSH or local). - Open the Claude Code panel, run a normal multi-turn session, leave focus for 5+ minutes, return.
- Observe: no
※ recap:text in the panel, nosystem / post_turn_summaryevent rendered. - In a parallel terminal on the same host, run
claudev2.1.126 in the same workspace and repeat the flow. Recap fires and is visible. 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,
/configtoggles, 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
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗