[BUG] Only Notification hooks load from settings.json - all other hook types ignored (v2.0.37)

Resolved 💬 3 comments Opened Nov 11, 2025 by egrapa Closed Nov 11, 2025

Bug Report: Only Notification Hooks Load from settings.json in v2.0.37

Environment

  • Claude Code Version: 2.0.37
  • OS: macOS (Darwin 24.6.0)
  • Installation Method: npm-global

Description

Only Notification hooks are being loaded from ~/.claude/settings.json. All other hook types (Stop, PostToolUse, PreToolUse, UserPromptSubmit) show "Found 0 hook matchers in settings" in debug logs, even though they are correctly configured in the settings file.

Configuration Used

{
  "hooks": {
    "Notification": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "say 'Input needed'"
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "say 'Stop hook triggered'"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "say 'Bash completed'"
          }
        ]
      }
    ],
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "echo 'User submitted' >> /tmp/test.log"
          }
        ]
      }
    ]
  }
}

Actual Behavior

Debug logs show:

Notification hook (WORKS):

[DEBUG] Getting matching hook commands for Notification with query: permission_prompt
[DEBUG] Notification:permission_prompt [say 'Input needed'] completed with status 0

Stop hook (BROKEN):

[DEBUG] Getting matching hook commands for Stop with query: undefined
[DEBUG] Found 0 hook matchers in settings
[DEBUG] Matched 0 unique hooks for query "no match query" (0 before deduplication)

PostToolUse hook (BROKEN):

[DEBUG] Getting matching hook commands for PostToolUse with query: Bash
[DEBUG] Found 0 hook matchers in settings
[DEBUG] Matched 0 unique hooks for query "Bash" (0 before deduplication)

UserPromptSubmit hook (BROKEN):

[DEBUG] Getting matching hook commands for UserPromptSubmit with query: undefined
[DEBUG] Found 0 hook matchers in settings
[DEBUG] Matched 0 unique hooks for query "no match query" (0 before deduplication)

Expected Behavior

All hook types should be loaded from ~/.claude/settings.json and should show "Found 1 hook matchers in settings" (or more) when matched.

Steps to Reproduce

  1. Create ~/.claude/settings.json with multiple hook types (Notification + any other type)
  2. Start Claude Code interactive session
  3. Trigger the hooks (e.g., submit a prompt for UserPromptSubmit, use a tool for PostToolUse)
  4. Check debug logs in ~/.claude/debug/latest
  5. Observe that only Notification hooks show as "Found" and execute

Additional Context

  • The settings file is valid JSON (verified with jq)
  • File permissions are correct (644)
  • Notification hooks execute successfully, proving the hook system is functional
  • Settings file location is correct per documentation (~/.claude/settings.json)
  • Per v1.0.90 changelog: "Settings file changes take effect immediately - no restart required"
  • Tested with multiple hook types - all fail except Notification

Impact

This bug prevents users from using Stop, PostToolUse, PreToolUse, and UserPromptSubmit hooks for automation workflows like:

  • Text-to-speech after responses
  • Logging tool usage
  • Running validation scripts
  • Custom workflow automation

Related Issues

Possibly related to:

  • #6974 - Stop hooks not executing after responses
  • #6305 - Post/PreToolUse Hooks Not Executing
  • #5093 - Hooks configured but not executing

View original on GitHub ↗

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