Claude Code Permission Rules (.agents/settings.local.json)
SkillFiles & storageEsposter Claude Code permission-rule conventions for the allow-only .agents/settings.local.json — the shipped file is the standard (every rule is the trailing space-star form, colon sub-scripts get their own rule), mirroring rules across Bash and PowerShell, and sorting. Generic harness semantics live in the update-config skill. Apply when editing settings.local.json or debugging why a command still prompts.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Claude Code Permission Rules (.agents/settings.local.json) skill
What this skill tells your AI
The instructions your AI receives, as published by esposter/esposter in .agents/skills/claude-permissions/SKILL.md and read by ahel’s review.
Generic harness semantics — rule format, deny/ask/allow evaluation order, compound-command splitting, wrapper stripping — are owned by the update-config skill. This file records only what is specific to this repo.
The repo's settings.local.json is allow-only: it has no deny or ask list. Keep it that way unless the user asks otherwise.
The one non-obvious rule: use command *, and give colon sub-scripts their own rule
The shipped settings.local.json is the standard — copy its shape. Every rule in it is the trailing space + * form (Bash(pnpm lint *), Bash(az resource show *)), and that file is known to work. Match it rather than reaching for :* or a no-space *; those forms are not used anywhere in this repo and are not known to work here.
pnpm lint * covers pnpm lint and pnpm lint --fix, but not pnpm lint:fix — hence the file's separate pnpm lint:fix *, pnpm lint:fix:packages *, and pnpm outdated:dependencies * entries. Each colon sub-script you actually invoke needs its own rule. That is the first thing to check when a command still prompts.
Project conventions for settings.local.json
- Mirror every rule under both
Bash(...)andPowerShell(...). This repo runs on Windows (PowerShell primary) with the Bash tool also available; keep the two blocks symmetric. - Sort each block case-insensitively (Bash block, then PowerShell block, then
mcp__*,Skill(...),WebFetch(domain:...)). - Scope
azto read-only verbs (show,list) only. - Explicit rules for read-only commands are kept, not pruned. The file deliberately ships
Bash(cat *),Bash(ls *),Bash(grep *),Bash(git diff *),Bash(xargs *)and friends even though Bash auto-allows much of that set. They exist for PowerShell parity (the read-only auto-allow set is documented for Bash, not PowerShell) and so both blocks stay symmetric per rule 1. Don't delete them as "redundant"; do mirror any new one into both blocks.
PowerShell canonicalizes aliases before matching, so PowerShell(Get-ChildItem *) already covers gci, ls, and dir; matching is case-insensitive.
Signals
- GitHub stars
- 23
- Forks
- 3
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
claude-permissions- Source
- github.com/esposter/esposter