mcpField
D
destructive-command-guard

destructive-command-guard

github.com/oakoss安全2094 次安装10 周前更新
代码仓库

关于 destructive-command-guard

用于 Claude Code 的命令防护技能,在 Bash 命令执行前拦截已知的破坏性操作。适合希望减少 Agent 误操作的开发环境;默认允许未识别命令,并提供可配置的安全规则包。

主要功能

  1. 01作为 PreToolUse 钩子检查 Bash 调用
  2. 02优先匹配安全规则,再检查危险规则
  3. 03支持按类别配置安全规则包
  4. 04扫描文件中的破坏性命令上下文
  5. 05未识别命令默认放行

适用场景

  1. 01阻止 git 强制重置等破坏性操作
  2. 02限制文件系统删除命令
  3. 03为数据库或云环境启用对应规则
  4. 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.md
installation.md
pack-configuration.md
safety-patterns.md
troubleshooting.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
Kuberneteskubernetes.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 installDCG 需要 Rust nightly(edition 2024);请使用 cargo +nightly install

委派

  • 审计 Agent 会话尝试过哪些破坏性命令:使用 Explore Agent
  • 为新项目环境设置带有自定义规则包的 DCG:使用 Task Agent
  • 规划结合 DCG 与其他防护措施的分层安全架构:使用 Plan Agent

参考资料

评论

支持 Markdown