Dicklesworthstone / destructive_command_guard
dcg (Destructive Command Guard)
一个高性能的钩子程序,专为 AI 编码代理设计,可在破坏性命令执行前将其拦截,保护你的工作成果免遭意外删除。支持 Claude Code、Codex CLI、Gemini CLI、Copilot CLI、VS Code Copilot Chat、Cursor、Hermes Agent、Grok (xAI) 及相关工具。
已支持:
- Claude Code
- Codex CLI 0.125.0+
- Gemini CLI
- GitHub Copilot CLI
- VS Code Copilot Chat
- Cursor IDE
- Hermes Agent
- Grok (xAI)(原生
~/.grok/hooks/及 Claude 兼容层) - Antigravity CLI (
agy)(通过dcg install --agy使用原生~/.gemini/config/hooks.json) - OpenCode(通过社区插件)
- Pi(通过扩展配方)
- Aider(有限支持——仅 git 钩子)
- Continue(仅检测)
快速安装
curl -fsSL "https://raw.githubusercontent.com/Dicklesworthstone/destructive_command_guard/main/install.sh?$(date +%s)" | bash -s -- --easy-mode
适用于 Linux、macOS 及 Windows(通过 WSL)。自动检测你的平台,下载正确的二进制文件,并配置支持的代理钩子,包括 Claude Code、Codex CLI、Gemini CLI、GitHub Copilot CLI、VS Code Copilot Chat(通过 VS Code 的 Claude 钩子兼容性)、Cursor IDE、Hermes Agent 以及 Grok (xAI)(通过 dcg install --grok 使用原生 ~/.grok/hooks/dcg.json,或通过 Grok 自动识别的 Claude 兼容层)。
对于原生 Windows,请使用下面的 PowerShell 安装程序。
Windows(原生,PowerShell)
& ([scriptblock]::Create((irm "https://raw.githubusercontent.com/Dicklesworthstone/destructive_command_guard/main/install.ps1"))) -EasyMode -Verify
安装原生 dcg.exe,验证 SHA256 校验和(以及当 cosign 存在时的 Sigstore/cosign 签名),将其添加到你的用户 PATH(-EasyMode),运行自检(-Verify),并为检测到的代理钩子配置 Claude Code、Codex CLI、Gemini CLI、GitHub Copilot CLI、Cursor IDE 和 Hermes Agent。Copilot 在用户级别配置于 %COPILOT_HOME%\hooks(或 %USERPROFILE%\.copilot\hooks),因此每个工作区都受到保护。在 Windows 上,windows.filesystem 和 windows.system 包默认启用,因此 del /s、rd /s、Remove-Item -Recurse -Force、format 和 vssadmin delete shadows 开箱即被拦截。使用 -Version vX.Y.Z 固定版本。
概览
问题: AI 编码代理(Claude、Codex、Gemini、Copilot 等)偶尔会执行灾难性命令,如 git reset --hard、rm -rf ./src 或 DROP TABLE users——在几秒钟内摧毁数小时未提交的工作。
解决方案: dcg 是一个高性能钩子程序,可在破坏性命令执行前将其拦截,并提供清晰的解释和更安全的替代方案。
为什么使用 dcg?
| 特性 | 功能 | |------|------| | 零配置保护 | 开箱即拦截危险的 git/文件系统命令 | | 50+ 安全包 | 数据库、Kubernetes、Docker、AWS/GCP/Azure、Terraform 等 | | 亚毫秒级延迟 | SIMD 加速过滤——你几乎感觉不到它的存在 | | Heredoc/内联脚本扫描 | 捕获 python -c "os.remove(...)" 和嵌入式 shell 脚本 | | 智能上下文检测 | 不会拦截 grep "rm -rf"(数据),但会拦截 rm -rf /(执行) | | 丰富的终端输出 | 在 stderr 上输出人类可读的拒绝面板、规则上下文和建议 | | 代理安全流 | 机器可读的钩子输出保留在 stdout,而丰富的 UI 保留在 stderr | | 原生 Codex 支持 | Codex CLI 0.125.0+ 接收最小的 stdout JSON 拒绝信息,当前客户端可靠执行 | | 优雅降级 | 为 CI、管道、哑终端和无颜色环境提供纯文本输出 | | CI 扫描模式 | 预提交钩子和 CI 集成,用于在代码审查中捕获危险命令 | | 故障开放设计 | 永远不会因超时或解析错误而阻塞你的工作流 | | 解释模式 | dcg explain "command" 精确显示某条命令为何被拦截 |
快速示例
# AI 代理尝试运行:
$ git reset --hard HEAD~5
# dcg 拦截并阻止:
════════════════════════════════════════════════════════════════
BLOCKED dcg
────────────────────────────────────────────────────────────────
Reason: git reset --hard destroys uncommitted changes
Command: git reset --hard HEAD~5
Tip: Consider using 'git stash' first to save your changes.
════════════════════════════════════════════════════════════════
启用更多保护
# ~/.config/dcg/config.toml
[packs]
enabled = [
"database.postgresql", # 拦截 DROP TABLE, TRUNCATE
"kubernetes.kubectl", # 拦截 kubectl delete namespace
"cloud.aws", # 拦截 aws ec2 terminate-instances
"containers.docker", # 拦截 docker system prune
]
代理特定配置文件
dcg 会自动检测调用它的 AI 编码代理,并可应用代理特定的配置。trust_level 字段是一个建议性标签,记录在 JSON 输出和日志中——它不会直接改变规则评估。行为差异来自其他配置字段:
| 选项 | 效果 | |------|------| | disabled_packs | 从规则评估中移除规则包 | | extra_packs | 向规则评估添加规则包 | | additional_allowlist | 添加绕过拒绝规则的命令模式 | | disabled_allowlist | 当为 true 时,忽略所有允许列表条目 |
# 对 Claude Code 给予更多信任——更宽的允许列表,更少的包
[agents.claude-code]
trust_level = "high"
additional_allowlist = ["npm run build", "cargo test"]
disabled_packs = ["kubernetes"]
# 对未知代理进行限制——额外规则,无允许列表绕过
[agents.unknown]
trust_level = "low"
extra_packs = ["paranoid"]
disabled_allowlist = true
参见 docs/agents.md 获取关于受支持代理、信任级别和配置选项的完整文档。
Codex 支持
dcg 现在将 Codex CLI 视为一等钩子目标,而不仅仅是 Claude 形状的兼容路径。安装程序会在检测到 codex 在 PATH 上或存在 ~/.codex/ 目录时,自动为 Codex CLI 0.125.0+ 配置钩子。
| Codex 行为 | dcg 处理方式 | |------------|--------------| | 钩子配置 | 将 PreToolUse Bash 钩子合并到 ~/.codex/hooks.json | | 被拒绝的命令 | 以退出码 0 退出,在 stdout 上输出最小的 hookSpecificOutput 拒绝信息;人类可读警告保留在 stderr | | 允许的命令 | 以退出码 0 退出,stdout 和 stderr 均为空 | | 现有钩子 | 保留 |