[BUG] VS Code extension renders no SessionStart hook output — systemMessage, statusMessage, and additionalContext never reach the user (refile of stale-closed #47692)

Open 💬 0 comments Opened Jul 11, 2026 by msuter-cbre

Summary

A SessionStart hook has no deterministic, user-visible output channel in the VS Code extension. None of the documented hook output fields put text in front of the user:

  • systemMessage — not rendered anywhere.
  • statusMessage — ignored; the default spinner shows instead.
  • hookSpecificOutput.additionalContext — reaches the model's context, but is only shown to the user if the model chooses to echo it. There is no direct rendering.

So a hook that needs to show the user a deterministic notice at session start — a bootstrap/status banner, an environment warning, an onboarding message — either can't, or has to rely on the model voluntarily repeating the hook's output, which is not guaranteed.

Refile context

This is a refile per the staleness bot's own invitation. The canonical issue #47692 was auto-closed as stale on 2026-06-28 with no maintainer engagement at any point, and its duplicate #62557 (VS Code not rendering permissionDecisionReason — same root cause: the extension not rendering hook text fields) was auto-closed into #47692 shortly before. Re-confirming the behavior at the current version.

Environment

  • Claude Code v2.1.197, VS Code extension, macOS. (statusMessage was also reported broken in the CLI on Windows in #47692.)

Reproduction

  1. Add a SessionStart hook that returns each of the following (separately):
  • {"systemMessage": "TEST: is this visible?"}
  • {"statusMessage": "TEST status"}
  • {"hookSpecificOutput": {"hookEventName": "SessionStart", "additionalContext": "TEST context"}}
  1. Start / resume a session.
  2. Observe what the user sees.

Actual behavior

  • systemMessage → nothing rendered.
  • statusMessage → default spinner; the message is not shown.
  • additionalContext → enters model context only; the user sees it only if the model happens to reproduce it in its reply.

Expected behavior

At least one deterministic, user-visible channel for SessionStart hook output — e.g. a rendered systemMessage/notice block — so per-session banners, reports, and warnings display reliably without depending on the model choosing to echo them. Ideally this applies to hook output generally (the permissionDecisionReason non-rendering in #62557 is the same underlying gap).

Impact

Any hook-driven session-start UX (status/bootstrap banners, environment or safety warnings, onboarding notices) is either invisible or model-dependent. The only workaround is a brittle instruction telling the model to echo the hook's additionalContext verbatim — which the model can silently omit, so the "display" is unreliable by construction.

Related

  • #47692 (canonical, auto-closed stale)
  • #62557 (auto-closed as duplicate of #47692 — permissionDecisionReason not rendered; same root cause)

View original on GitHub ↗