Notification hook does not fire on permission prompts (Windows 11)
Summary
The Notification hook does not fire when a tool-use permission prompt is shown to the user. Per documented behavior, permission prompts should fire the Notification hook immediately. They don't — verified across 105 seconds (well past the 60s idle threshold). Stop hooks fire correctly on the same wiring; only Notification on permission prompts is broken.
Environment
- OS: Windows 11 Pro 10.0.26200
- Shell: PowerShell
- Claude Code: current (VS Code extension and CLI both reproduce)
Reproduction
- In
~/.claude/settings.json, configure a Notification hook with"matcher": ""pointing to a script that produces an observable side effect (e.g., audio playback, HTTP POST, log write). - In a Claude Code session, set the in-chat permission mode to ask before edits.
- Have Claude attempt a Write to a path outside the allowlist /
additionalDirectories(e.g.,D:\some_file.txtwhenD:\is not inadditionalDirectories). - The permission prompt appears as expected.
- Observe: the Notification hook script does not execute. Wait 90+ seconds — still does not execute.
- After approving or rejecting the prompt, the Stop hook does fire correctly on Claude's next turn — confirming the hook wiring works for Stop but not for Notification.
Expected behavior
Per hooks documentation, the Notification hook should fire immediately when a permission prompt is displayed, AND should fire after the documented 60-second idle threshold for unanswered prompt input.
Actual behavior
Notification hook does not fire on permission prompts at all. Verified across 105+ seconds of waiting on a single permission prompt — neither the immediate-fire nor the 60s-idle-fire path triggered. No script invocation, no audible ding from an installed audio hook, no ntfy.sh push from an installed push hook (both wired into Notification with "matcher": "").
Impact
This breaks any user-installed Notification hook intended to alert the user on permission prompts — sound playback, push notifications, IDE focus changes, etc. Without it, users must keep visual focus on the Claude Code UI to notice that a tool is waiting for approval, defeating the purpose of the Notification hook for this very common scenario.
Reproducibility
Consistent — every permission prompt during a multi-hour session failed to fire Notification. Stop fired correctly throughout the same session with the same hook configuration.
Hook config snippet
"Notification": [
{
"matcher": "",
"hooks": [
{ "type": "command", "command": "python ..." }
]
}
]
Same shape works perfectly for Stop and SessionStart.
Notes
/feedback slash command is not available in the VS Code extension or local builds, hence filing here.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗