Parallel Bash commands prompt for permission despite matching allow pattern
Resolved 💬 3 comments Opened Feb 23, 2026 by ianm199 Closed Feb 27, 2026
Description
When multiple Bash tool calls are fired in parallel, some of them trigger a permission prompt even though the command matches an allow pattern in settings. The first command auto-approves correctly, but subsequent parallel commands prompt the user. Single (non-parallel) calls always auto-approve correctly.
Reproduction steps
- Add
"Bash(cd *)"to thepermissions.allowlist in~/.claude/settings.json - Start a fresh Claude Code session
- Send the following prompt to trigger parallel Bash calls:
Show me the Company, Engagement, and RevenueSchedule interfaces from sdk/types.ts in the revenue-reconciliation directory
This will cause Claude to fire 3 parallel cd && grep commands like:
cd /path/to/project/revenue-reconciliation && grep -A 15 'export interface Company {' sdk/types.ts | head -15
cd /path/to/project/revenue-reconciliation && grep -A 15 'export interface Engagement {' sdk/types.ts | head -15
cd /path/to/project/revenue-reconciliation && grep -A 15 'export interface RevenueSchedule {' sdk/types.ts | head -15
- The first command auto-approves, but the second and/or third prompt for permission
- Run any one of those commands individually afterward — it auto-approves every time
Expected behavior
All parallel Bash commands matching an allow pattern should auto-approve without prompting, just as they do when executed individually.
Actual behavior
- Single execution: Auto-approves correctly every time
- Parallel execution: Only the first command auto-approves. Subsequent parallel commands matching the same allow pattern trigger a permission prompt.
This suggests a race condition in the permission check when multiple Bash tool calls are evaluated concurrently.
Environment
- macOS (Darwin 24.3.0)
- Claude Code (latest)
- Permission config includes both
"Bash(cd *)"and"Bash(cd:*)"in allow lists (user-level and project-level settings)
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗