| name | pre-exec-check |
| description | Safety check before executing destructive or irreversible commands. Catches dangerous shell commands, risky git operations, secret exposure, and high-blast-radius actions before they run. Activates automatically when Claude is about to execute shell commands that match known risk patterns. Trigger phrases: "check before running", "is this command safe", "safety check", "pre-execution review". |
| user-invocable | false |
Pre-Execution Safety Check
Before executing any shell command, evaluate it against the risk categories below.
This check runs silently — only surface it to the user when a risk is detected.
Risk Categories
CRITICAL — Block and warn. Never proceed without explicit user confirmation.
Destructive file operations:
rm -rf on any path outside a known temp/build directory
rm -rf /, rm -rf ~, rm -rf . (catastrophic)
- Recursive delete on paths containing
..
> filename (truncating files) on non-build artifacts
Irreversible git operations:
git push --force or git push -f to main, master, or production
git reset --hard when there are uncommitted changes
git clean -fd or git clean -fdx (deletes untracked files)
git branch -D on branches with unmerged commits
git rebase on already-pushed commits
Database destruction:
DROP TABLE, DROP DATABASE, TRUNCATE TABLE without a WHERE or in production
DELETE FROM without a WHERE clause
- Migration rollbacks in production
Process/system operations:
kill -9 on PIDs that aren't child processes of the current session
pkill or killall on broad patterns
chmod -R 777 or chmod -R 000
chown -R on system directories
- Writing to
/etc/, /usr/, or other system paths
Secret exposure:
echo $API_KEY, cat .env, printenv piped to files or network
- Any command that would print secrets to stdout in a logged session
curl or wget with credentials in the URL
HIGH — Warn user, explain the risk, suggest safer alternative.
Risky git operations:
git push --force to any branch (suggest --force-with-lease)
git reset --hard (suggest git stash first)
git checkout -- . or git restore . (discards all changes)
- Amending commits that have been pushed
Package management:
npm publish (publicly publishing a package)
pip install from URL or --extra-index-url (supply chain risk)
- Removing lockfiles (
rm package-lock.json, rm poetry.lock)
Infrastructure:
kubectl delete on production namespaces
terraform destroy
docker system prune -a (removes all images)
Network:
curl -X POST to external URLs with body containing local data
scp or rsync to unfamiliar hosts
ssh to production servers
MEDIUM — Note the risk in passing. Proceed unless the context is unusual.
- Installing global packages (
npm install -g, pip install --user)
- Running
sudo commands
- Modifying dotfiles (
.bashrc, .zshrc, .gitconfig)
- Creating world-readable files in shared directories
Behavior
When a command matches a risk pattern:
- CRITICAL: Stop. Tell the user: "This command [specific description] is destructive/irreversible. [Explain what could go wrong]. Do you want to proceed?"
- HIGH: Warn: "Heads up — [command] carries risk because [reason]. Safer alternative: [suggestion]. Proceeding unless you object."
- MEDIUM: Brief note only if the broader context makes it concerning.
When no risk is detected, proceed normally — do not mention this check.
Anti-Patterns to Avoid
- Do NOT warn about every
rm command. rm file.txt on a known temp file is fine.
- Do NOT block normal development workflows.
git push to a feature branch is fine.
- Do NOT add friction to routine operations. The goal is catching genuine mistakes, not slowing down the user.
- Do NOT be paranoid about
curl for fetching docs or APIs. Only flag when local data is being sent.
Context Awareness
Use available context to reduce false positives:
- If in a git repo, check if the branch has been pushed before warning about force-push
- If a file was just created by the agent, deleting it is lower risk
- If running inside a Docker container or CI, destructive commands are lower risk
git status output tells you if there are uncommitted changes worth protecting