.claude/skills/clean-permissions/SKILL.md
Cleans up .claude/settings.local.json or settings.json by generalizing overly-specific Bash permission rules, removing hardcoded paths, ensuring Read(./**) is present, and flagging write-capable commands. Use this skill whenever the user asks to clean up, tidy, fix, or simplify their Claude Code permissions or settings file, or when settings.local.json has accumulated specific paths or one-off commands that should be generalized.
npx skillsauth add guidodinello/claude-dotfiles clean-permissionsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Tidy up a Claude Code settings file so permission rules are general and maintainable rather than littered with hardcoded paths and one-off invocations.
Read(./**) is in the allow listBash(...) rules and generalizes themBefore auditing, use the claude-code-guide agent to fetch the latest Claude Code
permissions documentation. Ask it specifically about:
Bash(...), Read(...), and WebFetch(...) rules* vs **, :* suffix)This ensures the generalizations you suggest reflect the current permission model, not a stale snapshot.
Check in order:
.claude/settings.local.json (preferred — local overrides).claude/settings.json (shared project settings)Read and parse the JSON.
If Read(./**) is missing, add it. It covers all file reads in the project and
eliminates the need for most Bash(cat/grep/find ...) read-only pipelines.
Keep other Read(...) and WebFetch(...) rules as-is — domain allowlists and
scoped paths are intentionally specific.
A rule is overly specific if it contains any of:
/home/..., /Users/..., ~/...Bash(command:*)To generalize: extract the first word (the command) and replace with Bash(command:*).
Examples:
Bash(grep -n "sys.path" /home/guido/project/**/*.py) → Bash(grep:*)
Bash(find /home/guido/project -type f -exec wc -l {} +) → remove (Read covers it)
Bash(ls -la /home/guido/project/checkpoints/*.zip) → Bash(ls:*)
Bash(tail -50 /home/guido/project/logs/train.log) → Bash(tail:*)
Bash(awk '{print $1, $2}') → Bash(awk:*)
Bash(python3 -c "import foo; ...") → remove (prefer uv run python)
After generalization, remove duplicates — if multiple rules collapse to the same
Bash(command:*), keep only one.
Some commands can write or delete files. After generalizing, check for these and discuss with the user before writing:
| Rule | Risk | Recommendation |
|------|------|----------------|
| Bash(tee:*) | Always writes to a file | Scope to a directory: Bash(tee logs/*) |
| Bash(find:*) | -delete, -exec rm/mv/cp are possible | Remove if Read(./**) covers the use case |
| Bash(awk:*) | Can redirect output with > file | Low risk; note it and keep unless user objects |
| Bash(sed:*) | -i edits files in-place | Flag; consider removing |
| Bash(rm:*), Bash(mv:*), Bash(cp:*) | Destructive | Flag and recommend removing |
| Bash(python3:*) | Can do anything | Prefer Bash(uv run:*) in uv-managed projects |
Present the flags clearly before writing so the user can decide.
Present a clean summary:
Removing (overly specific):
- Bash(grep -n "foo" /home/user/project/file.py)
- Bash(ls -la /home/user/project/checkpoints/*.zip)
Collapsing to generic:
+ Bash(grep:*)
+ Bash(ls:*)
Adding (missing):
+ Read(./**)
Keeping unchanged:
WebFetch(domain:es.wikipedia.org)
Bash(uv run:*)
...
⚠️ Write-capable commands to review:
Bash(tee:*) — tee always writes; consider scoping to Bash(tee logs/*)
Ask the user to confirm or adjust before writing anything.
Write the cleaned JSON to the same file, pretty-printed with 2-space indentation.
development
Writes React components without unnecessary useEffect. Use when creating/reviewing React components, refactoring effects, or when code uses useEffect to transform data or handle events.
development
Show a Claude Code usage report — model token breakdown, estimated costs, top projects, and session patterns. Delegates to the stats-analyzer subagent (Haiku) to avoid polluting the main context with raw data.
development
Use this skill whenever the user wants to write, refine, or break down a subtask for a software ticket — especially backend endpoints, frontend components, or API integrations. Trigger when the user shares a user story, acceptance criteria, or ticket scope and asks for a subtask, refinement card, or implementation breakdown. Also trigger when the user says things like "help me refine this", "write a subtask for X", "break this down", or "create a card for the endpoint / component / feature". This skill produces structured, audience-appropriate subtask write-ups for developers, PMs, and QAs alike.
development
Run the full quality pipeline (type-check, linting, tests) via the quality-checker subagent. Returns a concise summary of issues without flooding the main context with raw output.