SessionStart hook stdout not displayed in terminal (regression from v2.1.15 to v2.1.37)
Resolved 💬 3 comments Opened Feb 9, 2026 by sangmandu Closed Feb 13, 2026
Bug Description
SessionStart hook output was visible in the user's terminal in v2.1.15 but is no longer displayed in v2.1.37. The hook still executes successfully and its output is injected into Claude's model context (visible as <system-reminder> tags), but the user sees nothing in the terminal.
Environment
- Claude Code version: v2.1.37 (worked in v2.1.15)
- OS: macOS (Darwin 23.1.0)
- Terminal: Ghostty
Hook Configuration
In .claude/settings.local.json:
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "/path/to/my_hook.sh",
"timeout": 5
}
]
}
]
}
}
Hook Script (minimal reproduction)
#!/bin/bash
echo "=== Session Info ==="
echo "Database: ✅ Connected"
echo "API: 🔴 Down - CHECK NEEDED"
echo ""
echo "Action: Check API status"
Expected Behavior
The hook output should be displayed in the user's terminal at session start (as it was in v2.1.15).
Actual Behavior
- Terminal shows nothing from the hook
- Hook output IS injected into Claude's model context as
SessionStart:... hook success: === Session Info ===... - Claude can see and act on the hook output, but the user cannot
Steps to Reproduce
- Configure a SessionStart hook that outputs text to stdout
- Start a new Claude Code session or run
/clear - Observe that no hook output is displayed in the terminal
- Claude's first response will reference the hook output, confirming it executed
Related Issues
- #10373 (SessionStart hooks not working for new conversations)
- #9591 (SessionStart hook context not displayed)
- #12653 (SessionStart hook stderr not displaying)
Additional Context
This is a regression — the exact same hook configuration and script worked correctly in v2.1.15 where the output was visible in the terminal before the input prompt.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗