Add quiet/silent option for async hooks

Status Fixed / completed
Maintainer reply None cached
Activity 5 comments · opened Mar 6, 2026 · closed Aug 17, 2026

Feature Request

When using async hooks (e.g., Stop, UserPromptSubmit), Claude Code displays completion messages like:

  • Async hook Stop completed
  • Async hook UserPromptSubmit completed

These messages clutter the UI, especially for hooks that run frequently (like TTS or cleanup hooks that fire on every response/prompt).

Proposed Solution

Add a quiet or silent option to hook configuration to suppress the completion message:

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/hook.sh",
            "async": true,
            "quiet": true
          }
        ]
      }
    ]
  }
}

Use Case

I'm using a Stop hook to speak responses via Kokoro TTS, and a UserPromptSubmit hook to stop audio playback. Both work great, but the completion messages after every interaction are noisy and distracting.

View original on GitHub ↗

4 Comments

jacobcxdev · 5 months ago

+1 on this.

adrienrobertsenvo · 5 months ago

+1

yurukusa · 5 months ago

Workaround: make your hooks output nothing to stderr when they succeed:

INPUT=$(cat)
RESULT=$(some_check 2>&1)
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
    echo "⚠️ Hook detected issue: $RESULT" >&2
fi
exit 0

For hooks that must produce output but you want to suppress the "hook completed" notification:

exec 2>/tmp/cc-hook.log
echo "Hook ran at $(date)" >&2
exit 0

For hooks that use hookSpecificOutput (PreToolUse allow/block decisions), the JSON output goes to stdout and is consumed by the system — it doesn't produce a visible "completed" message. So the pattern is:

  • Need to block/allow? → Use stdout JSON output (already silent)
  • Need to warn the user? → Use stderr (shows in TUI)
  • Need to log but stay silent? → Write to a file, not stderr
echo '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}' 
exit 0
echo "⚠️ Warning text" >&2
exit 0
hkf57 · 4 months ago

+1 — Same need here with mempalace plugin hooks (Stop and PreCompact). Memory save hooks fire on every session end and the banner/error output is pure noise for a well-tested hook. A quiet: true or silent: true field on the hook definition would be ideal.

Showing cached comments. Read the full discussion on GitHub ↗