[Bug] Hook status messages displayed on every API response

Resolved 💬 3 comments Opened Oct 16, 2025 by grigb Closed Jan 10, 2026

Bug Description
Claude Code Hook Status Messages Displayed on Every Response

Status: Confirmed Bug

Versions Tested: 2.0.19, 2.0.20

Severity: High (Blocks Hook Functionality)

Platform: macOS

---

Summary

Claude Code displays hook status messages as system-reminders at the end of every response, even though hooks are configured to run only once at session start. This repetitive message spam makes hooks effectively unusable for any practical purpose, blocking legitimate project automation and tracking workflows.

Expected Behavior

When a SessionStart hook is configured and runs at the beginning of a session:

  • ✅ Hook executes once
  • ✅ Status message appears once (or not at all)
  • ✅ Subsequent responses contain no hook messages

Actual Behavior

When a SessionStart hook is configured:

  • ✅ Hook executes once (confirmed via logging)
  • ❌ Status message appears on every response in system-reminders
  • ❌ Same message text repeats throughout entire session

Example of repeated output:

SessionStart:startup hook succeeded: ✅ Tracked: [project-name] - Session started
Details: Automatic session tracking via hook

This message appears in system-reminders after every single message, creating significant UI noise.

Reproduction Steps

  1. Configure a SessionStart hook in ~/.claude/settings.json:

``json
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "~/path/to/any/script.sh"
}
]
}
]
}
``

  1. Start a new Claude Code session
  2. Observe: Hook status message appears in system-reminders
  3. Send a follow-up message to Claude
  4. Observe: Same hook status message appears again in system-reminders
  5. Repeat step 4-5 multiple times
  6. Confirm: Hook message appears on every response, not just first response

Diagnostic Data

Session Log Analysis:

  • Hook script execution: Once per session start ✓
  • Hook status display: Every response ❌
  • Timestamp analysis: Same timestamp on all messages (confirms single execution)
  • Pattern: Consistent repetition regardless of session duration

Timeline of Observations:

  • Version 2.0.19: Hook messages repeat every response
  • Version 2.0.20: Hook messages repeat every response (no fix)
  • Conclusion: Bug persists across versions

Root Cause Analysis

Possible causes:

  1. Claude Code is caching and re-displaying hook output as a system-reminder
  2. System-reminder rendering system is pulling hook status independently of actual hook output
  3. Hook status messages are being generated by Claude Code itself rather than passed through from hook scripts

Evidence:

  • Hook only runs once (verified via log file with timestamps)
  • Message content never changes across responses
  • Message always appears in system-reminders section (not in normal output)

Impact

  • Blocking Issue: Makes hooks unusable for their intended purpose (project tracking, automation)
  • User Experience: Creates overwhelming visual noise that worsens with every interaction
  • Feature Rejection: Users cannot rely on hooks for anything, rendering the hook system non-functional

Workaround

Disable hooks entirely:

"hooks": {
  "SessionStart": [],
  "Stop": []
}

This prevents hook status messages but also disables any project tracking or automation.

Requested Fix

Claude Code should:

  1. Display hook status messages only once per hook execution
  2. Not repeat hook status messages in subsequent responses
  3. Consider not showing hook status in system-reminders at all (run silently in background)

---

Additional Context

  • Tested On: macOS with global Claude Code configuration
  • Hook Type Affected: SessionStart, Stop hooks
  • Impact Scope: Any user implementing hooks for project tracking or automation
  • Workaround Acceptability: Low (requires disabling useful features)

---

Files Involved

  • Claude Code settings file: ~/.claude/settings.json (contains hook configuration)
  • Hook output visible in: Claude Code system-reminders section
  • Hook execution logs: Available in user's configured hook logging directory

---

Questions for Claude Team

  1. Is hook status display intended to show on every message?
  2. Can hooks run silently without status messages?
  3. Is there a flag to suppress hook status messages?
  4. Is this a known issue in development?

---

Report Date: 2025-10-16
Versions Tested: 2.0.19, 2.0.20
Reproducibility: 100% (consistent across all test sessions)

View original on GitHub ↗

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