From mattpocock-skills
Blocks dangerous git commands (push, reset --hard, clean -f, branch -D) in Claude Code using PreToolUse hooks. Prevents destructive operations before execution.
npx claudepluginhub vinvcn/mattpocock-skills-zh-cnThis skill uses the workspace's default tool permissions.
设置一个 PreToolUse hook,在 Claude 执行危险 git commands 前拦截并阻止它们。
Sets up Claude Code PreToolUse hooks to block dangerous git commands (push, reset --hard, clean, branch -D) before execution. Prevents destructive git ops in AI coding.
Installs/uninstalls hooks in Claude Code that block raw git commands like 'git pull' and 'git checkout -b', enforcing git-town alternatives such as 'git town sync' and 'git town hack'.
Installs 695 pre-built safety hooks for Claude Code to block file deletions, credential leaks, git force-pushes, and token waste in autonomous AI coding. Run npx cc-safe-setup.
Share bugs, ideas, or general feedback.
设置一个 PreToolUse hook,在 Claude 执行危险 git commands 前拦截并阻止它们。
git push(包括 --force 在内的所有 variants)git reset --hardgit clean -f / git clean -fdgit branch -Dgit checkout . / git restore .被阻止时,Claude 会看到一条 message,说明它无权访问这些 commands。
询问用户:只为当前 project 安装(.claude/settings.json),还是为所有 projects 安装(~/.claude/settings.json)?
bundled script 位于:scripts/block-dangerous-git.sh
根据 scope 复制到目标位置:
.claude/hooks/block-dangerous-git.sh~/.claude/hooks/block-dangerous-git.sh用 chmod +x 让它可执行。
添加到对应 settings file:
Project (.claude/settings.json):
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-dangerous-git.sh"
}
]
}
]
}
}
Global (~/.claude/settings.json):
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/block-dangerous-git.sh"
}
]
}
]
}
}
如果 settings file 已存在,把 hook merge 到现有 hooks.PreToolUse array 中,不要覆盖其他 settings。
询问用户是否要在 blocked list 中添加或移除 patterns。相应编辑复制后的 script。
运行快速测试:
echo '{"tool_input":{"command":"git push origin main"}}' | <path-to-script>
应以 code 2 退出,并向 stderr 打印 BLOCKED message。