SessionStart hook systemMessage not displayed when remote control is enabled via /config
Title
SessionStart hook systemMessage not displayed when remote control is enabled via /config
Body
Bug description
systemMessage output from SessionStart hooks is not rendered in the terminal UI when remote control for all sessions is enabled (via /config toggle, which sets remoteControlAtStartup: true in ~/.claude.json).
The hooks execute successfully — additionalContext reaches the model's system prompt, and debug logs confirm execution — but the systemMessage text is never shown to the user.
Steps to reproduce
- Create a
SessionStarthook that emits JSON withsystemMessage:
``json``
{
"systemMessage": "My Hook 🟢 OK Everything is fine",
"hookSpecificOutput": {
"hookEventName": "SessionStart",
"additionalContext": "My Hook: OK — Everything is fine."
}
}
- With remote control OFF: Start
claude→systemMessageappears in the startup output ✅
- With remote control ON (via
/config→ enable remote control for all sessions): Startclaude→systemMessagedoes NOT appear ❌
Expected behavior
systemMessage from SessionStart hooks should be displayed in the terminal UI regardless of whether remote control is enabled.
Actual behavior
The remote control initialization appears to re-render/reset the UI after SessionStart hooks have already emitted their output, causing the systemMessage to be swallowed. The hook output still reaches the model via additionalContext, confirming the hooks ran successfully.
Workaround
Add instructions to CLAUDE.md to have Claude print the hook results from additionalContext as part of its first response.
Environment
- Claude Code version: v2.1.107
- OS: Windows 11 Pro (Git Bash / MSYS2)
- Node: v22.x
- Remote control: enabled via
/configtoggle (remoteControlAtStartup: truein~/.claude.json) - Number of hooks tested: 6 custom
SessionStarthooks, all affected - Also tested:
stderroutput (>&2),/dev/ttyoutput — neither displayed, confirming the TUI captures all output channels from hook subprocesses
Additional context
- The
--remote-controlCLI flag was NOT used (it skips hooks entirely). The issue is specifically with the/configtoggle (remoteControlAtStartup). - Multiple hooks running in parallel are all affected.
- The
statusMessagefield insettings.jsonhook config (spinner text during execution) may or may not display — the issue is specifically about the hook's stdout JSONsystemMessage.
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗