关于 destructive-command-guard
用于 Claude Code 的命令防护技能,在 Bash 命令执行前拦截已知的破坏性操作。适合希望减少 Agent 误操作的开发环境;默认允许未识别命令,并提供可配置的安全规则包。
主要功能
- 01作为 PreToolUse 钩子检查 Bash 调用
- 02优先匹配安全规则,再检查危险规则
- 03支持按类别配置安全规则包
- 04扫描文件中的破坏性命令上下文
- 05未识别命令默认放行
适用场景
- 01阻止 git 强制重置等破坏性操作
- 02限制文件系统删除命令
- 03为数据库或云环境启用对应规则
- 04在 CI 中扫描破坏性命令上下文
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill destructive-command-guard安装后在 Claude Code 中输入/destructive-command-guard确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/command-detection.mdinstallation.mdpack-configuration.mdsafety-patterns.mdtroubleshooting.md详细介绍
Destructive Command Guard
一个高性能的 Claude Code 钩子,可在破坏性命令执行前拦截并阻止它们。使用 Rust 编写,通过 memchr crate 实现 SIMD 加速过滤,并使用 Aho-Corasick 多模式匹配,将延迟控制在亚毫秒级。假设 Agent 出于善意,但也会犯错。
概览
DCG 采用白名单优先架构:先检查安全模式,再检查破坏性模式;默认允许无法识别的命令(故障安全)。这样既能确保合法工作流不会受到影响,也能始终阻止已知的危险模式。DCG 在 Claude Code 中作为 PreToolUse 钩子运行,每次调用 Bash 工具时从 stdin 接收 JSON,并返回退出码 0(允许)或 2(阻止)。它只检查直接的 Bash 工具调用,不检查 shell 脚本的内容。
处理流程分为四个阶段:JSON 解析、命令规范化(去除 /usr/bin/git 等绝对路径)、SIMD 快速拒绝过滤器(跳过不包含 git 或 rm 的命令的正则匹配),以及模式匹配。memchr crate 提供硬件加速的子串搜索(在 x86_64 上使用 SSE2/AVX2,在 ARM 上使用 NEON),而 Aho-Corasick 无论模式数量多少,都能以 O(n) 时间处理多模式匹配。
DCG 支持 49 个以上按类别组织的模块化安全包(git、文件系统、数据库、容器、Kubernetes、云服务提供商、基础设施工具)。核心安全包(core.git、core.filesystem)始终启用;其他安全包可通过 ~/.config/dcg/config.toml 或 DCG_PACKS 环境变量配置。dcg scan 子命令还可审查文件中的破坏性命令上下文,适用于集成到 CI 中。
DCG 未发布到 crates.io;可通过 GitHub 使用 cargo +nightly install 安装,也可使用适用于 Linux、macOS 和 Windows WSL 的预编译二进制文件。威胁模型假设 Agent 出于善意,但也会犯错;DCG 能捕获无心之失,而非对抗性攻击。
快速参考
| 类别 | 被阻止的命令 |
|---|---|
| 未提交的工作 | git reset --hard、git checkout -- <file>、git restore <file>、git clean -f |
| 远程历史 | git push --force / -f、git branch -D |
| 暂存的工作 | git stash drop、git stash clear |
| 文件系统 | rm -rf(/tmp、/var/tmp、$TMPDIR 之外) |
| 类别 | 允许的命令 |
|---|---|
| 安全的 git 命令 | git status、git log、git diff、git add、git commit、git push、git pull、git fetch、git branch -d、git stash、git stash pop |
| 安全模式 | git checkout -b、git restore --staged、git clean -n、git push --force-with-lease |
| 临时目录 | rm -rf /tmp/*、rm -rf $TMPDIR/* |
| 设置 | 值 |
|---|---|
| 退出码(安全) | 0 |
| 退出码(被阻止) | 2 |
| 默认行为 | 允许(故障安全) |
| 模式优先级 | 先检查安全模式,再检查破坏性模式 |
| 安全模式数量 | 34 |
| 破坏性模式数量 | 16 |
| Pack 类别 | 示例 |
| -------------- | --------------------------------------------------------------- |
| Core(默认) | core.git、core.filesystem |
| 数据库 | database.postgresql、database.mysql、database.mongodb |
| 容器 | containers.docker、containers.compose、containers.podman |
| Kubernetes | kubernetes.kubectl、kubernetes.helm、kubernetes.kustomize |
| 云 | cloud.aws、cloud.gcp、cloud.azure |
| 基础设施 | infrastructure.terraform、infrastructure.ansible |
| 系统 | system.disk、system.permissions、system.services |
| 其他 | strict_git、package_managers |
| 环境变量 | 用途 |
|---|---|
DCG_PACKS | 启用 Pack(以逗号分隔) |
DCG_DISABLE | 禁用指定的 Pack |
DCG_VERBOSE | 详细输出 |
DCG_BYPASS | 完全绕过 DCG(紧急绕过开关) |
DCG_COLOR | 颜色模式(auto、always、never) |
| 安装方式 | 命令 |
|---|---|
| 快速安装 | curl -fsSL ".../install.sh" | bash -s -- --easy-mode |
| 从源码安装 | cargo +nightly install --git https://github.com/Dicklesworthstone/destructive_command_guard destructive_command_guard |
| 预编译二进制文件 | Linux x86_64、Linux ARM64、macOS Intel、macOS Apple Silicon、Windows WSL |
| 处理阶段 | 说明 |
|---|---|
| JSON 解析 | 读取 PreToolUse 钩子输入,允许非 Bash 工具 |
| 规范化 | 去除绝对路径(/usr/bin/git 会变为 git) |
| SIMD 快速筛选 | memchr 子串搜索会跳过与无关命令的正则匹配 |
| 模式匹配 | 先匹配安全模式,再匹配破坏性模式,默认允许 |
常见错误
| 错误 | 正确做法 |
|---|---|
| 添加钩子后忘记重启 Claude Code | 修改 ~/.claude/settings.json 后务必重启 Claude Code |
在 shell 配置文件中永久设置 DCG_BYPASS=1 | 仅为单条命令临时设置绕过变量,之后将其移除 |
| 认为 DCG 会检查脚本中的命令 | DCG 只检查直接调用的 Bash 工具,不检查 ./deploy.sh 的内容 |
将 git branch -d(小写)误认为具有破坏性而阻止 | 小写 -d 是安全的(会检查是否已合并);只有大写 -D 会强制删除 |
| 未为生产环境启用数据库或云 Pack | 在 ~/.config/dcg/config.toml 中为你的技术栈配置相关 Pack |
| 期望 DCG 能阻止恶意行为者 | DCG 用于防止无心之失;有意绕过钩子的用户始终可以做到 |
未使用 nightly 工具链就运行 cargo install | DCG 需要 Rust nightly(edition 2024);请使用 cargo +nightly install |
委派
- 审计 Agent 会话尝试过哪些破坏性命令:使用
ExploreAgent - 为新项目环境设置带有自定义规则包的 DCG:使用
TaskAgent - 规划结合 DCG 与其他防护措施的分层安全架构:使用
PlanAgent