[BUG] Hooks not loaded from .claude/settings.json when file also contains "permissions" block
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
- Create
.claude/settings.jsonwith bothpermissionsandhooks:
```json
{
"permissions": {
"allow": ["Bash(*)", "Edit", "Write"]
},
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "echo 'HOOK TEST' >&2"
}
]
}
]
}
}
- Start Claude Code and run /hooks
- Result: "No matchers configured yet"
- 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_
This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗