Duplicate permissions continuously appended to settings.local.json

Resolved 💬 2 comments Opened Sep 2, 2025 by randomparity Closed Sep 2, 2025

Bug Description

Claude Code repeatedly appends duplicate Read permissions to .claude/settings.local.json even when broader permissions that already cover those paths exist.

Steps to Reproduce

  1. Have Read(/home/dave/src/**) in settings.local.json (covers all subdirectories)
  2. Claude Code reads files from subdirectories like /home/dave/src/epic-planner/
  3. User approves the read
  4. Claude Code appends Read(/home/dave/src/epic-planner/**) to the allow list
  5. This happens repeatedly, creating massive duplication

Expected Behavior

  • Claude Code should recognize that Read(/home/dave/src/**) already covers all subdirectories
  • No duplicate or redundant permissions should be added
  • The system should check if a new permission is already covered by existing broader permissions

Actual Behavior

  • Duplicate permissions are continuously appended
  • The settings.local.json file grows with redundant entries
  • Users have to repeatedly approve the same directories
  • Manual cleanup is required multiple times

Example of Duplication

{
  "permissions": {
    "allow": [
      "Read(/home/dave/src/**)",  // This should cover everything below
      "Read(/home/dave/**)",       // This definitely covers everything below
      // But these keep getting added anyway:
      "Read(/home/dave/src/epic-planner/**)",
      "Read(/home/dave/src/epic-planner/src/vidclean/**)",
      "Read(/home/dave/src/epic-planner/src/vidclean/**)",
      "Read(/home/dave/src/epic-planner/src/vidclean/**)",
      // ... same path repeated 20+ times
    ]
  }
}

Impact

  • User frustration from repeated approval dialogs
  • Degraded user experience
  • Unnecessarily large settings files
  • Manual intervention required repeatedly

Suggested Fix

Before appending a new permission, check if it's already covered by existing permissions using glob pattern matching or path hierarchy analysis.

View original on GitHub ↗

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