[BUG] Parallel tool calls intermittently ignore permissions.allow — race condition in auto-approval

Resolved 💬 3 comments Opened Mar 16, 2026 by milnet01 Closed Mar 19, 2026

Environment

  • Claude Code CLI (terminal)
  • Operating System: openSUSE Tumbleweed (Linux 6.19.7)
  • Terminal: Konsole
  • Platform: Linux x86_64

Bug Description

When multiple identical tool calls are made in parallel (e.g., 4 Glob calls), auto-approval from settings.json is applied inconsistently — some calls auto-approve while others prompt for permission, despite all matching the same allow rule.

Steps to Reproduce

  1. Add "Glob" (globally allowed, no path restriction) to ~/.claude/settings.jsonpermissions.allow
  2. Restart Claude Code
  3. Ask Claude to perform a task that triggers multiple parallel Glob calls to different subdirectories under the same parent path

Example: 4 parallel Glob calls to:

  • /mnt/Storage/Scripts/Linux/SystemManager/**/*.desktop
  • /mnt/Storage/Scripts/Linux/Create_3D_Boxart/**/*.desktop
  • /mnt/Storage/Scripts/Linux/Rolodex/**/*.desktop
  • /mnt/Storage/Scripts/Linux/YT-DLP_FrontEnd/**/*.desktop

Expected Behavior

All 4 Glob calls should auto-approve without prompting, since "Glob" is in the allow list with no path restriction.

Actual Behavior

3 out of 4 calls auto-approved. 1 call (SystemManager) prompted for manual permission. The prompted call was identical in structure to the others — same tool, same pattern, same parent path, same allow rule.

Additional Context

  • This appears to be a race condition in the permission-checking logic when multiple tool calls are dispatched in parallel.
  • The behavior is non-deterministic — the specific call that gets prompted may vary.
  • Possibly related to #6850 (settings.json allow rules not being respected), but distinct in that it's intermittent rather than consistent, and only manifests with parallel tool calls.

Settings

{
  "permissions": {
    "allow": [
      "Read",
      "Write",
      "Edit",
      "Glob",
      "Grep",
      ...
    ]
  }
}

View original on GitHub ↗

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