Global settings.json allow list not applied in non-git workspaces
Bug Description
Global ~/.claude/settings.json permission allow-list patterns are not auto-approving tool calls when the working directory is not a git repository but has a .claude/ directory.
Steps to Reproduce
- Configure
~/.claude/settings.jsonwith an allow pattern:
``json``
{
"permissions": {
"allow": ["mcp__claude_ai_Slack__slack_read_*"],
"defaultMode": "acceptEdits"
}
}
- Create a workspace directory (not a git repo) that has a
.claude/subdirectory (e.g., for skills symlinks):
````
~/.rtb-workspaces/my-workspace/
└── .claude/
└── skills -> /path/to/skills
- Start Claude Code from that workspace:
cd ~/.rtb-workspaces/my-workspace && claude - Invoke a tool matching the global allow pattern (e.g.,
mcp__claude_ai_Slack__slack_read_channel)
Expected Behavior
The tool call should be auto-approved because it matches mcp__claude_ai_Slack__slack_read_* in the global settings.
Actual Behavior
The user is prompted to approve the tool call. Approving creates a <workspace>/.claude/settings.local.json with the specific tool name, rather than recognizing the global allow pattern.
Environment
- macOS (Darwin 25.2.0)
- Working directory is NOT a git repository
- Working directory HAS a
.claude/subdirectory (containing askillssymlink) - No project-scoped
settings.jsonorsettings.local.jsonexists before the prompt - No
~/.claude/projects/<project>/settings.jsonexists
Hypothesis
The presence of a .claude/ directory in a non-git workspace may interfere with the settings resolution chain, causing the global ~/.claude/settings.json allow list to not be merged/applied.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗