[BUG] Claude code only recognizes legacy `:*` suffix in `.claude/settings.json` file
Status Fixed / completed
Reported on v2.1.38
Maintainer reply None cached
Workaround ✓ Mentioned in thread ↓
Activity 4 comments · opened Feb 10, 2026 · closed Feb 26, 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?
With "Bash(pnpm lint *)" as an entry in the "allow" permissions of .claude/settings.json, Claude Code is prompting to run the lint command. If I change this entry to "Bash(pnpm lint:*)", using the legacy :* suffix, it correctly runs the lint command without prompting.
Within a SKILL.md file, allowed-tools: Bash(pnpm lint *) works without prompting, so it seems like only skills are respecting the wildcard syntax without the legacy suffix.
What Should Happen?
According to the docs, the :* suffix is legacy and * should work in its place consistently now.
Error Messages/Logs
Steps to Reproduce
- Create a
.claude/settings.jsonfile
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"permissions": {
"allow": [
"Bash(pnpm lint *)"
]
}
}
- Create a new skill like
.claude/skills/test/SKILL.md
---
allowed-tools:
---
Run pnpm lint
- Try triggering this skill and checking if the command is run without prompting
- Change it to
Bash(pnpm lint:*) - Try triggering this skill and checking if the command is run without prompting
- Change
allowin.claude/settings.jsonto be empty[]and inSKILL.md, addallowed-tools: Bash(pnpm lint *) - Try triggering this skill and checking if the command is run without prompting
Bash(pnpm lint *) works within SKILL.md, but not in settings.json.Bash(pnpm lint:*) works in settings.json.
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.38
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_
4 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
Hello @bcherny , wanted to bump this with a broader impact summary since the stale label may underrepresent how disruptive this is in practice.
The core issue: Bash(cmd *) in settings.json silently does nothing. No error, no warning — Claude keeps prompting as if the rule
doesn't exist. Users following the official docs end up with permissions that look correctly configured but don't work.
This is particularly painful to debug because there's no feedback loop — you write the rule, it appears valid, but it never fires. The
only way to discover the workaround is to stumble upon legacy examples or GitHub threads like this one.
Ask: Even a doc note acknowledging that :* is the currently working syntax would immediately unblock users. A proper fix aligning
settings.json parsing with the documented space syntax would be the right long-term resolution.
Thanks for the great tool overall — this is one of the few friction points that comes up daily.
I think this can be closed in favor of https://github.com/anthropics/claude-code/issues/26229. Using both
"Bash(pnpm lint)"and"Bash(pnpm lint *)"works. It just doesn't work as described in the docs. The space before the wildcard causes the barepnpm lintto request approval when it's insettings.json.This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.