SessionStart hook systemMessage not displayed when remote control is enabled via /config

Resolved 💬 4 comments Opened Apr 14, 2026 by p5hema2 Closed May 24, 2026

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

  1. Create a SessionStart hook that emits JSON with systemMessage:

``json
{
"systemMessage": "My Hook 🟢 OK Everything is fine",
"hookSpecificOutput": {
"hookEventName": "SessionStart",
"additionalContext": "My Hook: OK — Everything is fine."
}
}
``

  1. With remote control OFF: Start claudesystemMessage appears in the startup output ✅
  1. With remote control ON (via /config → enable remote control for all sessions): Start claudesystemMessage does 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 /config toggle (remoteControlAtStartup: true in ~/.claude.json)
  • Number of hooks tested: 6 custom SessionStart hooks, all affected
  • Also tested: stderr output (>&2), /dev/tty output — neither displayed, confirming the TUI captures all output channels from hook subprocesses

Additional context

  • The --remote-control CLI flag was NOT used (it skips hooks entirely). The issue is specifically with the /config toggle (remoteControlAtStartup).
  • Multiple hooks running in parallel are all affected.
  • The statusMessage field in settings.json hook config (spinner text during execution) may or may not display — the issue is specifically about the hook's stdout JSON systemMessage.

View original on GitHub ↗

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