SessionStart hook systemMessage not surfaced in VSCode extension side panel (works in terminal CLI)
Bug Description
A SessionStart hook that outputs a systemMessage (standard local hooks.json, no remote-control) renders the message in the terminal CLI but not in the VSCode native extension side panel. The message never appears in the panel — not inline, not as a dialog, not late.
The hook's additionalContext output is ingested correctly on both surfaces (the model receives it); only the user-visible systemMessage is dropped in the extension panel.
This is distinct from #52775 (which is specifically about remoteControlAtStartup rendering systemMessage as a late dismissable dialog in the terminal) and #33612 (hooks in remote-settings.json not firing for non-terminal clients). Here the hook fires, additionalContext lands, remote-control is off, and it's plain local settings — only the panel rendering of systemMessage is missing.
Steps to Reproduce
- Add a
SessionStarthook to.claude/settings.json(or a plugin'shooks.json) that emits both fields:
``json``
{
"hooks": {
"SessionStart": [{
"matcher": "startup|resume|clear",
"hooks": [{
"type": "command",
"command": "echo '{\"hookSpecificOutput\":{\"hookEventName\":\"SessionStart\",\"additionalContext\":\"hello-context\"},\"systemMessage\":\"hello-visible-message\"}'"
}]
}]
}
}
- Start a session in the terminal CLI →
hello-visible-messageis shown (asSessionStart:startup says: …). - Start a session in the VSCode native extension (open the Claude Code side panel) →
hello-visible-messageis not shown anywhere in the panel.
In both surfaces the model does receive additionalContext ("hello-context"), confirming the hook itself fires correctly on both.
Expected Behavior
The systemMessage from a SessionStart hook should be surfaced to the user in the VSCode extension side panel — matching the terminal CLI, which echoes it at startup. SessionStart systemMessage is commonly used to show session posture/context (loaded config, active skills, repo state) so the user can see it at a glance; that affordance is silently unavailable in the extension.
Environment
- Claude Code VSCode extension:
anthropic.claude-code@2.1.218 - Platform: Linux (WSL2, VSCode Remote /
.vscode-server) - Hook type:
SessionStart(matcherstartup|resume|clear), localhooks.json - Hook output:
{"hookSpecificOutput": {"additionalContext": "..."}, "systemMessage": "..."} - Remote-control: not active
Impact
Plugins/skills that rely on SessionStart systemMessage for a visible posture greeting or environment summary appear to "do nothing" in the VSCode extension, even though the hook is working and the model-facing context is delivered. Authors have no user-visible SessionStart surface in the panel.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗