Feature request: Display SessionStart hook stdout to user in terminal

Resolved 💬 3 comments Opened Apr 12, 2026 by bradfeld Closed Apr 16, 2026

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:

  1. New output channel: A hook property like "output": "terminal" that routes stdout to the terminal instead of (or in addition to) system-reminder context
  2. Startup greeting: A config option to display text after hooks complete (e.g., "startupMessage": "bash ~/.claude/hooks/startup-summary.sh")
  3. 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

View original on GitHub ↗

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