Global permissions not applied when project-level settings.local.json exists

Resolved 💬 3 comments Opened Mar 16, 2026 by jemilad-ers Closed Apr 13, 2026

Description

Global permissions defined in ~/.claude/settings.json are not being respected when a project-level .claude/settings.local.json file exists, even if the project-level file has empty allow/deny arrays.

Steps to Reproduce

  1. Define wildcard permissions in ~/.claude/settings.json (e.g., Bash(git *:*))
  2. Have an empty or minimal .claude/settings.local.json in the project directory:

``json
{ "permissions": { "allow": [], "deny": [] } }
``

  1. Run a command that should match the global wildcard (e.g., git fetch)
  2. Result: User is prompted to approve the command
  3. Expected: Command runs without prompt, matching the global Bash(git *:*) rule

Additional Context

  • This has been a recurring issue over the past week in a specific project
  • The project-level settings.json (committed, non-local) contains only hooks and enabledPlugins — no permissions block
  • Workaround: duplicating the full global permissions list into the project-level settings.local.json
  • OS: macOS (Darwin 25.3.0)

View original on GitHub ↗

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