SessionStart hook systemMessage renders as dismissable dialog (not inline) when remote-control is active

Resolved 💬 1 comment Opened Apr 24, 2026 by Ilyuha888 Closed May 28, 2026

Bug Description

When remoteControlAtStartup is enabled (or /remote-control is active), the systemMessage output from a SessionStart hook does not render inline at startup like it does in normal mode. Instead, it appears late — as a dismissable dialog/overlay — after the user has already been presented with the prompt and begun interacting.

Steps to Reproduce

  1. Enable remote control at startup in ~/.claude/settings.json:

``json
{ "remoteControlAtStartup": true }
``

  1. Add a SessionStart hook that outputs a systemMessage:

``json
{
"SessionStart": [{
"hooks": [{
"type": "command",
"command": "echo '{\"systemMessage\": \"Session context loaded\"}'"
}]
}]
}
``

  1. Start claude in the terminal.

Expected Behavior

The systemMessage from the SessionStart hook appears inline in the terminal immediately after startup — the same way it does when remote-control is not active.

Actual Behavior

  • At startup, the remote-control banner is shown (/remote-control is active · Code in CLI or at https://...) and the prompt is presented immediately.
  • The systemMessage from the hook either:
  • Does not appear at all until the user types something and dismisses a dialog, or
  • Appears mid-session as an overlay, interleaved with terminal rendering (causing visual corruption if the user has already started typing).

Environment

  • Claude Code v2.1.119
  • macOS (Darwin 25.2.0)
  • Hook type: SessionStart
  • Hook output format: {"systemMessage": "..."}
  • Setting: remoteControlAtStartup: true

Impact

SessionStart hooks are commonly used to display session context (loaded config, memory files, active skills, etc.) so the user can verify their environment at a glance. This renders the hook effectively non-functional in remote-control mode — the primary mode many users run in.

Workaround

None available at the hook level. The only option is to disable remoteControlAtStartup and enable remote control manually after startup, which defeats the purpose of the setting.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗