Claude hooks don't work

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Evne when “Include third-party Plugins, Skills, and other configs” is ON in Settings > Rules, Skills, Subagents, hooks defined in .claude/settings.json (both project-level and ~/.claude/settings.json) are never loaded. The Hooks output channel lists the paths at startup but produces no load/error messages for them:

Claude user config path: ~/.claude/settings.json
Claude project config path: .claude/settings.json
...
No user hooks configuration found    ← only checks ~/.cursor/hooks.json
No project hooks configuration found ← only checks .cursor/hooks.json

The identical hook in .cursor/hooks.json loads immediately. Third-party plugin hooks (e.g. superpowers sessionStart) load fine via claude-plugin config, so the account-level feature is active.

Steps to Reproduce

  1. Enable third-party skills toggle

  2. Add to .claude/settings.json:

    {
      "hooks": {
        "Stop": [{ "hooks": [{ "type": "command", "command": "echo test >> /tmp/hook.log" }] }]
      }
    }
    
  3. Restart Cursor, trigger a file edit — no log written, hook never fires

  4. Move the same hook to .cursor/hooks.json (Cursor format) — fires immediately

Expected Behavior

Per docs, .claude/settings.json hooks should be loaded and mapped automatically.

Operating System

MacOS

Version Information

Cursor 2.6.11

Does this stop you from using Cursor

No - Cursor works, but with this issue

This seems to be fixed when there is a PreToolUsehook present in Claude, so it might be specific to only having a Stop hook?

Hey, thanks for the report. The repro steps are great.

Looks like this is a bug in how Claude hook configs are parsed. The output log shows the paths, but then says “No hooks configuration found”, which suggests the file is found but not loaded correctly.

Your follow-up is especially helpful. The fact that everything works when PreToolUse is present, but breaks when you only have Stop, suggests the loader might skip the file unless all hook types are included.

I’ve passed this to the team. For now, .cursor/hooks.json is a solid workaround.

Let me know if you run into anything else.

1 Like

This topic was automatically closed 22 days after the last reply. New replies are no longer allowed.

Hey @MrLoh!

The hooks loading issue has been fixed in a recent Cursor update. Updating to the latest version should resolve this. If you’re still experiencing this on the latest version of Cursor, please raise a new thread and we’ll take a look.