name: init-perms
Initialize project-local Claude Code permissions for a comfortable development experience.
Creates .claude/settings.local.json in the current project with pre-approved permissions for modern CLI tools from dev-shell-tools:
Core Tools:
Dev Tools:
/init-perms
│
├─→ Check if .claude/settings.local.json exists
│ ├─ If exists: Ask to overwrite or merge
│ └─ If not: Proceed
│
├─→ Create .claude directory if needed
│
└─→ Write settings.local.json with standard permissions
ls -la .claude/settings.local.json 2>/dev/null
If file exists, show contents and ask user:
mkdir -p .claude
Write this content to .claude/settings.local.json:
{
"permissions": {
"allow": [
"Bash(git:*)",
"Bash(ls:*)",
"Bash(mkdir:*)",
"Bash(cat:*)",
"Bash(wc:*)",
"Bash(tree:*)",
"Bash(curl:*)",
"Bash(rg:*)",
"Bash(fd:*)",
"Bash(fzf:*)",
"Bash(z:*)",
"Bash(zoxide:*)",
"Bash(br:*)",
"Bash(broot:*)",
"Bash(ast-grep:*)",
"Bash(sg:*)",
"Bash(bat:*)",
"Bash(eza:*)",
"Bash(delta:*)",
"Bash(difft:*)",
"Bash(jq:*)",
"Bash(yq:*)",
"Bash(sd:*)",
"Bash(lazygit:*)",
"Bash(gh:*)",
"Bash(tokei:*)",
"Bash(uv:*)",
"Bash(just:*)",
"Bash(http:*)",
"Bash(procs:*)",
"Bash(hyperfine:*)",
"Bash(npm:*)",
"Bash(node:*)",
"Bash(python:*)",
"Bash(pip:*)",
"Bash(powershell -Command:*)",
"Bash(powershell.exe:*)"
],
"deny": [],
"ask": []
},
"hooks": {}
}
Report to user:
Created .claude/settings.local.json with dev-shell-tools permissions.
Allowed tools (37 total):
Core: git, ls, mkdir, cat, wc, tree, curl
Search: rg, fd, fzf, ast-grep, sg
Navigation: z, zoxide, br, broot
View: bat, eza, delta, difft
Data: jq, yq, sd
Git: lazygit, gh
Analysis: tokei, procs, hyperfine
Dev: npm, node, python, pip, uv, just, http
Windows: powershell
To customize: edit .claude/settings.local.json
To add to git: git add .claude/settings.local.json
| Flag | Effect |
|---|---|
--force |
Overwrite existing without asking |
--minimal |
Only git, ls, cat, mkdir |
--full |
Add cloud/container tools (docker, kubectl, terraform, aws, etc.) |
{
"permissions": {
"allow": [
"Bash(git:*)",
"Bash(ls:*)",
"Bash(mkdir:*)",
"Bash(cat:*)"
],
"deny": [],
"ask": []
},
"hooks": {}
}
Includes everything from standard template plus:
{
"permissions": {
"allow": [
"Bash(git:*)",
"Bash(ls:*)",
"Bash(mkdir:*)",
"Bash(cat:*)",
"Bash(wc:*)",
"Bash(tree:*)",
"Bash(curl:*)",
"Bash(wget:*)",
"Bash(rg:*)",
"Bash(fd:*)",
"Bash(fzf:*)",
"Bash(z:*)",
"Bash(zoxide:*)",
"Bash(br:*)",
"Bash(broot:*)",
"Bash(ast-grep:*)",
"Bash(sg:*)",
"Bash(bat:*)",
"Bash(eza:*)",
"Bash(delta:*)",
"Bash(difft:*)",
"Bash(jq:*)",
"Bash(yq:*)",
"Bash(sd:*)",
"Bash(lazygit:*)",
"Bash(gh:*)",
"Bash(tokei:*)",
"Bash(uv:*)",
"Bash(just:*)",
"Bash(http:*)",
"Bash(procs:*)",
"Bash(hyperfine:*)",
"Bash(npm:*)",
"Bash(node:*)",
"Bash(python:*)",
"Bash(pip:*)",
"Bash(docker:*)",
"Bash(docker-compose:*)",
"Bash(kubectl:*)",
"Bash(helm:*)",
"Bash(terraform:*)",
"Bash(aws:*)",
"Bash(gcloud:*)",
"Bash(az:*)",
"Bash(wrangler:*)",
"Bash(powershell -Command:*)",
"Bash(powershell.exe:*)"
],
"deny": [],
"ask": []
},
"hooks": {}
}
~/.claude/settings.json still apply