[BUG] Hooks not loaded from .claude/settings.json when file also contains "permissions" block

Resolved 💬 5 comments Opened Dec 15, 2025 by cmungall Closed Jan 17, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Hooks defined in project-level .claude/settings.json are not loaded when the same file also contains a permissions block. Removing the permissions block causes hooks to load correctly.

Imp## act

This breaks the ability to share both permissions AND hooks via a single committed .claude/settings.json file. Teams wanting to distribute validation hooks must tell users to manually configure permissions separately.

Related Issues

Possibly related to #11544, #7916 - but those don't identify this specific cause.

What Should Happen?

hooks should be consistently loaded

Error Messages/Logs

Steps to Reproduce

  1. Create .claude/settings.json with both permissions and hooks:

```json
{
"permissions": {
"allow": ["Bash(*)", "Edit", "Write"]
},
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "echo 'HOOK TEST' >&2"
}
]
}
]
}
}

  1. Start Claude Code and run /hooks
  2. Result: "No matchers configured yet"
  3. Debug log shows: Found 0 hook matchers in settings

Workaround

Remove the permissions block from settings.json (move permissions to settings.local.json instead):

{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "echo 'HOOK TEST' >&2"
}
]
}
]
}
}

After this change, /hooks correctly shows the configured matchers.

Claude Model

None

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

v2.0.69

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Cursor

Additional Information

_No response_

View original on GitHub ↗

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