Permission allow rules with ** glob not matching paths outside working directory

Resolved 💬 4 comments Opened Mar 28, 2026 by rbrdelta Closed May 29, 2026

Description

Permission allow rules using ** glob patterns in ~/.claude/settings.json are not being respected for paths outside the working directory. Claude Code still prompts for approval despite matching allow rules being present.

Environment

  • Claude Code version: v2.1.86 (also reproduced on v2.1.85)
  • OS: WSL2 Ubuntu on Windows 11
  • Working directory: /home/rbr01
  • Shell: zsh

Configuration

~/.claude/settings.json contains:

{
  "permissions": {
    "allow": [
      "Read(/mnt/c/MCP/**)",
      "Read(/mnt/c/MCP/Meta/**)",
      "Read(/mnt/c/Users/deero/**)",
      ...
    ],
    "defaultMode": "default"
  }
}

Steps to Reproduce

  1. Add Read(/mnt/c/MCP/**) to ~/.claude/settings.json allow list
  2. Start a new Claude Code session from /home/rbr01
  3. Ask Claude to read a file at /mnt/c/MCP/Meta/NorthStar.md

Expected Behavior

The read should be auto-approved — the path /mnt/c/MCP/Meta/NorthStar.md matches the glob Read(/mnt/c/MCP/**).

Actual Behavior

Claude Code prompts: "Read file — Read(/mnt/c/MCP/Meta/NorthStar.md) — Do you want to proceed?" with options including "Yes, allow reading from Meta/ during this session."

Evidence

  • Session started at 2026-03-28T01:16:58Z (confirmed from session JSONL)
  • settings.json last written at 2026-03-27T21:14:00 EDT (confirmed via stat --format='%W')
  • Session started 3 minutes after settings were saved — not a stale-session issue
  • No project-level settings files exist that could override
  • No deny rules match /mnt/c/MCP/**
  • No managed/enterprise policies present
  • PreToolUse hook only logs and exits 0 — does not interfere
  • /mnt/c/MCP is a real directory (not a symlink)
  • Similar pattern Read(/mnt/c/Users/deero/**) does work in the same session for paths like /mnt/c/Users/deero/Downloads/file.png

Additional Context

  • Both Read(/mnt/c/MCP/**) and Read(/mnt/c/MCP/Meta/**) are in the allow list — neither matches
  • The path /mnt/c/MCP/ is a WSL2 mount of a Windows drive (C:\MCP)
  • This has been a recurring issue across multiple sessions, not a one-off

🤖 Generated with Claude Code

View original on GitHub ↗

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