.claude/skills/allow/SKILL.md
Add a tool pattern to the global Claude Code permissions allow list in bin/sync-claude-settings
npx skillsauth add ivy/dotfiles allowInstall 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.
Add tool patterns to the global Claude Code permissions managed by bin/sync-claude-settings.
/allow git check-ignore
/allow limactl
/allow /think
/allow docs.rs
Infer the full permission string from the argument:
| Input | Resulting pattern | Why |
|-------|-------------------|-----|
| git check-ignore | Bash(git check-ignore:*) | bare words → Bash |
| limactl | Bash(limactl:*) | bare word → Bash |
| /think | Skill(think:*) | leading slash → Skill |
| /commit | Skill(commit:*) | leading slash → Skill |
| docs.rs | WebFetch(domain:docs.rs) | looks like a domain → WebFetch |
| raw.githubusercontent.com | WebFetch(domain:raw.githubusercontent.com) | domain → WebFetch |
| Bash(make:*) | Bash(make:*) | already formatted |
| Skill(think:*) | Skill(think:*) | already formatted |
| WebFetch(domain:docs.rs) | WebFetch(domain:docs.rs) | already formatted |
Heuristics:
/ → Skill(<name>:*). and looks like a domain (no spaces) → WebFetch(domain:<input>)Bash(...), Skill(...), WebFetch(...), Read(...) → pass throughBash(<input>:*)A command belongs on the allow list based on its side-effect profile:
Allow (no confirmation needed):
ps, stat, file, which, uname, dig)sort, uniq, cut, jq, base64, shasum)mkdir, touch, mktemp, rmdir empty dirs only)Reject (warn, require explicit confirmation): A command does NOT belong if it can:
tee, cp, mv, output redirectionxargs, sh, bash, eval, python, ruby, perl, nodecurl, wget, ssh, scp, rsync, git pushrm, kill, killallsudo, doaschmod, chowngpg, security, keychain, op, env, printenv, historyaws, gcloud, azgit config (can write ~/.gitconfig via --global)Warn and suggest narrowing for overly broad patterns:
Bash(*) — universal wildcardBash(git:*), Bash(npm:*), Bash(gh:*)WebFetch(domain:*) — wildcard domainRead(...) / Edit(...) with broad paths — can expose or modify sensitive filesFor reject and narrowing cases: explain which property is violated, suggest a safer alternative if possible, and ask the user to confirm. If they confirm, proceed.
Grep bin/sync-claude-settings for the exact resolved pattern. If it already exists, tell the user and stop.
Edit bin/sync-claude-settings, inserting the new pattern into the set_permissions() function's allow array in alphabetical order among its peers.
Run git diff bin/sync-claude-settings and verify:
bin/sync-claude-settings
Then use /commit to commit bin/sync-claude-settings.
/allow git check-ignore → adds "Bash(git check-ignore:*)", applies, commits
/allow limactl → adds "Bash(limactl:*)", applies, commits
/allow /think → adds "Skill(think:*)", applies, commits
/allow docs.rs → adds "WebFetch(domain:docs.rs)", applies, commits
/allow git push → REJECTS: publishes to remote. Proceeds only if user confirms.
/allow printenv → REJECTS: can leak secrets from environment. Proceeds only if user confirms.
/allow npm → NARROWS: too broad, suggests npm run, npm test, etc. Proceeds only if user confirms.
tools
Write a handoff brief summarizing the current conversation so a fresh agent can pick up the work. Writes to a file if given, otherwise copies to the clipboard.
data-ai
Use when the user wants to set, change, or clear git commit co-authors for pair or mob programming.
tools
Use when bootstrapping hk pre-commit hooks for a project.
testing
Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions "grill me".