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

  1. Add "Bash(cd *)" to the permissions.allow list in ~/.claude/settings.json
  2. Start a fresh Claude Code session
  3. 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
  1. The first command auto-approves, but the second and/or third prompt for permission
  2. 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)

View original on GitHub ↗

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