Feature request: Display SessionStart hook stdout to user in terminal
Problem
SessionStart hook stdout goes into system-reminder context (visible to Claude) but is not visible to the user in the terminal. Neither stdout nor stderr from SessionStart hooks produces terminal-visible output.
This means hooks that produce health summaries, version checks, or status reports can only be seen when the user sends their first message and Claude relays the output. There's no way for a hook to display information to the user at startup without requiring user interaction first.
Use Case
I run multiple SessionStart hooks that check worktree sync state, config health, CLI versions, and system load. I built a unified startup summary hook that produces a compact health block:
─────────────────────────────────────────────────
Startup Summary
─────────────────────────────────────────────────
Worktree: magic5, branch: feature/PLA-1159-...
Config: healthy
Claude Code: v2.1.104
System: load 3.2
Vercel CLI: v50.44.0
─────────────────────────────────────────────────
Currently this only appears when Claude responds to the first message. I'd like to see it in the terminal immediately after hooks finish, before I type anything.
Proposed Solution
Add a mechanism for SessionStart hooks to produce terminal-visible output. Options:
- New output channel: A hook property like
"output": "terminal"that routes stdout to the terminal instead of (or in addition to) system-reminder context - Startup greeting: A config option to display text after hooks complete (e.g.,
"startupMessage": "bash ~/.claude/hooks/startup-summary.sh") - Both channels: SessionStart hook stdout goes to both the terminal AND system-reminder context, so the user sees it and Claude has it in context
Option 3 (both channels) would be the most useful — the user sees the summary immediately, and Claude can reference it if asked.
Current Workaround
The hook includes an instruction prefix ("Display this block to the user at the start of your first response") that tells Claude to relay the summary. This works but requires sending a first message, and burns tokens on the relay.
Environment
- Claude Code v2.1.104
- macOS (iTerm2)
- 12 git worktrees with SessionStart hooks for health monitoring
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗