← 返回日报
🌐 机器翻译 · DeepSeek · GitHub

Dicklesworthstone destructive_command_guard


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) 及相关工具。

已支持:

适用于 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.filesystemwindows.system 包默认启用,因此 del /srd /sRemove-Item -Recurse -Forceformatvssadmin delete shadows 开箱即被拦截。使用 -Version vX.Y.Z 固定版本。

概览

问题: AI 编码代理(Claude、Codex、Gemini、Copilot 等)偶尔会执行灾难性命令,如 git reset --hardrm -rf ./srcDROP 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 均为空 | | 现有钩子 | 保留 |

📖 阅读原文 →