@dabit3:这太糟糕了,其实有一个简单的方法可以杜绝此类事情:添加一个 PreToolUse 钩子,硬性阻止任何命令……
摘要
Bash Guard 是一个简单的钩子,能在本地编码代理运行前阻止危险的 shell 命令(如 sudo、项目外的 rm),防止意外删除文件。支持 Claude Code、Codex CLI 和 Devin CLI。
查看缓存全文
缓存时间: 2026/07/11 07:25
这太糟糕了,其实有个简单的方法可以完全避免这种情况发生:添加一个 PreToolUse 钩子,硬性阻止任何涉及仓库外部路径的命令(即使在 yolo 模式下也有效),再加上 permissions.deny 规则作为后备。最好在所有本地项目上都装上它。https://github.com/dabit3/bash-guard… 或者直接用云端 agent,它会在一次性机器上运行。
dabit3/bash-guard
来源:https://github.com/dabit3/bash-guard
Bash Guard
一个小型命令钩子,可在本地编码 agent 运行危险 shell 命令前将其阻止。它适用于支持 PreToolUse 钩子的 agent,包括 Claude Code、Codex CLI 和 Devin CLI。
它会阻止:
- 使用
sudo、diskutil或mkfs的命令 - 针对当前项目外部路径的破坏性命令,如
rm、mv、rsync或shred
依赖项
- Bash
jq
安装
mkdir -p "$HOME/.local/share/bash-guard"
cp bash-guard.sh "$HOME/.local/share/bash-guard/bash-guard.sh"
chmod +x "$HOME/.local/share/bash-guard/bash-guard.sh"
配置你的 agent
将此钩子合并到 agent 的 JSON 配置中,将 <matcher> 替换为下表中对应的值:
{
"hooks": {
"PreToolUse": [
{
"matcher": "<matcher>",
"hooks": [
{
"type": "command",
"command": "$HOME/.local/share/bash-guard/bash-guard.sh"
}
]
}
]
}
}
| Agent | 用户配置 | 项目配置 | 匹配器 (Matcher) |
|---|---|---|---|
| Claude Code | ~/.claude/settings.json | .claude/settings.json | ^Bash$ |
| Codex CLI | ~/.codex/hooks.json | .codex/hooks.json | ^Bash$ |
| Devin CLI | ~/.config/devin/config.json | .devin/config.json | ^exec$ |
更新配置后重启 agent。在 Codex CLI 中,打开 /hooks 并信任新钩子。在 Codex 或 Devin 中使用 /hooks 确认钩子已加载。
使用方法
Bash Guard 会在每条 shell 命令执行前自动运行。允许的命令继续正常执行,被阻止的命令会附带说明被拒绝。
你可以直接传入一个钩子 payload 来测试:
echo '{"tool_input":{"command":"sudo rm -rf /tmp/example"},"cwd":"/path/to/project"}' \
| "$HOME/.local/share/bash-guard/bash-guard.sh"
被阻止的命令退出码为 2,允许的命令退出码为 0。
其他 agent 也可以使用 Bash Guard,只要它们的命令钩子能通过标准输入传入 tool_input.command 和 cwd 的 JSON,并将退出码 2 视为阻止信号。
Matt Shumer (@mattshumer_):
GPT-5.6-Sol 刚刚意外删除了我 Mac 上的几乎全部文件。
这就是为什么我信任 Fable 一千倍。
相似文章
Dicklesworthstone/destructive_command_guard
一个高性能的钩子,用于AI编码代理,在执行破坏性命令前阻止它们,从而保护工作不被意外删除,适用于Claude Code、Codex CLI、Gemini CLI、Copilot CLI等工具。
@EnoReyes: 顺便说一句,由于 Droid Shield,这在 Droid 上绝对不会发生。我们会对所有 bash 命令进行正则匹配,然后结合…
EnoReyes 强调,Droid Shield 使用正则表达式和小型模型来防止意外删除文件,这与报道的 GPT-5.6-Sol 事件形成对比。
@sairahul1: 我真心不明白为什么大家还没用这个。有一个 Claude Code 功能:→ 运行你的测试…
Sai Rahul 重点介绍了 Claude Code 的 Hooks 功能,该功能可在每次编辑后自动运行测试,阻止破坏性的 bash 命令,记录花费,发送 Slack 提醒,并自动重写错误输出。
@DeRonin_: 使用本指南保护你的计算机免受 NPM 攻击,这些攻击会在一次安装中窃取一切。TanStack,一个代码库使用……
本文详细介绍了针对 NPM 上 TanStack 库的供应链攻击,并提供了一份全面的指南,通过锁定依赖项发布年龄、固定版本以及对 CI/CD 流水线和 IDE 扩展进行审计,来保护开发环境的安全。
@sairahul1: https://x.com/sairahul1/status/2069710540654645550
一份全面指南,解释Claude Code Hooks,这些是可编程的检查点,在操作前运行以强制执行规则并阻止或允许工具调用,比CLAUDE.md指令提供更可靠的控制。