From permission-manager
Use when a tool call is denied by the user, when the user asks about permissions, or when you notice repeated permission prompts during a session. Classifies commands into allow/deny/ask categories and collects them for a batch update at the end of the session.
How this skill is triggered — by the user, by Claude, or both
Slash command
/permission-manager:manage-permissionsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
When you encounter a permission prompt or denial during a session, classify the command and **collect it silently**. Do NOT update settings immediately. Instead, keep a mental note of all new permission patterns encountered during the session and propose them as a batch update when the user is finishing up (e.g., before a commit, at the end of a task, or when explicitly asked).
When you encounter a permission prompt or denial during a session, classify the command and collect it silently. Do NOT update settings immediately. Instead, keep a mental note of all new permission patterns encountered during the session and propose them as a batch update when the user is finishing up (e.g., before a commit, at the end of a task, or when explicitly asked).
During the session: When a command is prompted or denied, briefly note the classification (one line, e.g., "Noted: pnpm audit → safe to auto-allow"). Continue with the task.
At session end: Present a single summary table of all collected permissions and ask for confirmation before updating the settings file.
When you encounter an unknown command, classify it by asking these questions in order:
node -e, python -c, bash -c, eval)When uncertain: default to ASK FIRST. It's always safer to prompt once and then allow than to auto-allow something risky.
These are common commands pre-classified for quick reference. For anything not listed, use the decision framework above.
Git (read-only + local writes):
git status, git diff, git log, git show, git branch, git stashgit add, git commit, git fetch, git remote, git rev-parse, git merge-basegit tag (listing only), git blame, git shortlog, git reflogPackage managers (build/test/lint) — any package manager follows the same pattern:
pnpm install, npm install, yarn install, bun install, cargo fetch, pip install, mix deps.getpnpm build, npm test, yarn lint, bun run, cargo build, cargo test, mix test, go build, go test, makepnpm --filter, pnpm ls, pnpm -r, pnpm -w, pnpm whyKnown safe npx/tool runners:
npx husky, npx lint-staged, npx turbo, npx tscnpx jest, npx playwright, npx vitest, npx eslint, npx prettiernpx prisma generate, npx prisma db push, npx prisma migrate dev, npx prisma studio, npx prisma format, npx prisma validatenpx nest (NestJS CLI)Docker (dev lifecycle):
docker compose up, docker compose down, docker compose ps, docker compose logsdocker ps, docker logs, docker imagesShell (read-only + safe utilities):
ls, tree, du, wc, which, diff, mkdir, cp, touchps aux, lsof -i, head, tail, find, grep, echo, catnode --version, node -v, python --version, ruby --versionGitHub CLI (read-only):
gh pr view, gh pr list, gh pr status, gh pr diff, gh pr checksgh issue list, gh issue view, gh issue statusgh repo view, gh api, gh auth status, gh run list, gh run viewBuilt-in tools (local file operations, all reversible via git):
Edit, Write — file modifications, tracked by git, easily reversibleRead, Glob, Grep — read-only, zero riskTask — launches subagents, local onlySkill, ToolSearch — tool discovery, zero riskNotebookEdit — notebook modifications, tracked by gitMCP tools — apply the same decision framework:
Read/Grep built-in tools)Edit/Write built-in tools)File destruction:
rm -rf, rm -r, shredGit destruction:
git push --force, git push -fgit reset --hardgit clean -f, git clean -fdgit checkout ., git checkout -- ., git restore .git branch -DEscape hatches (bypass other rules):
node -e, node --evalpython -c, python3 -cbash -c, sh -cevalDatabase destruction:
reset for database tools (e.g., prisma db reset, prisma migrate reset, db:reset)DROP DATABASE, DROP TABLESystem-level:
chmod 777, chown, sudoDo NOT auto-add these — they should remain as "ask first":
git push (any non-force push — affects remote)git checkout <branch>, git switch (changes working context)git merge, git rebase (can create conflicts)gh pr create, gh issue create, gh issue close (visible to others)mv (can break references)rm <file> (single file deletion — reversible via git but worth confirming)kill, pkill (process management)curl, wget, WebFetch)npx:*, node:*, bash:*)When you detect a denied or prompted permission:
<command> → allow/deny/ask-first"Also note when the user explicitly approves a prompted command ("allow once") — this is a signal the command is safe for them and a candidate for the allow list.
If the command uses &&, ||, or ; to chain multiple commands, classify each part separately. For example:
git add . && git commit -m "msg" → both parts are safe → ALLOW both Bash(git add:*) and Bash(git commit:*)pnpm build && git push → build is safe, push affects remote → ALLOW Bash(pnpm build:*), leave git push as ask-firstWhen the user is wrapping up, or when /update-permissions is invoked:
.claude/settings.local.json (project-level) AND ~/.claude/settings.json (global). You need both to know what's already allowed.Edit, Write, Read, Task, plus all Bash(command:*) patterns, plus any MCP tools)
b. Check each one against the combined allow lists from both settings files
c. Any tool that was used but is NOT in either allow list is a candidate — it was either prompted or will be prompted next time
d. Classify each candidate using the decision framework| Command | Pattern | Classification | Reason |
|---|---|---|---|
pnpm audit | Bash(pnpm audit:*) | Allow | Read-only, local |
node -e "..." | Bash(node -e:*) | Deny | Escape hatch |
git push | — | Ask first | Affects remote |
.claude/settings.local.json) or global (~/.claude/settings.json)?" Default to project-level if one exists.Use the Claude Code permission pattern format:
Bash(<command prefix>:*)mcp__<server>__<tool>Read, Edit, Write, Glob, Grep, Task, etc.Examples:
Bash(git status:*) — matches git status, git status --short, etc.Bash(pnpm test:*) — matches pnpm test, pnpm test:unit, etc.Bash(npx prisma generate:*) — matches only prisma generate, not other npx commandsBash(npx:*), Bash(node:*), or Bash(bash:*) — these are escape hatches that bypass all other rulesBash(npx prisma generate:*) over Bash(npx prisma:*) — narrower patterns are safer--force and -f)npx claudepluginhub fadi-labib/claude-skills --plugin permission-managerExtracts safe Bash commands from Claude Code session history and auto-updates settings.json allowlist to minimize permission prompts.
Reviews, summarizes, and edits opencode permission configs including always-allow lists, skill permissions, and wildcard patterns. Recommends safe read-only commands for auto-approval and audits for security.
Generates PermissionRequest hooks that auto-approve safe operations, auto-deny dangerous ones, and tailor rules to detected project stack. Safer alternative to --dangerouslySkipPermissions for manual permission mode.