
GitHub: https://github.com/dicklesworthstone/destructive_command_guard
一个独立开发者用 Rust 写的小工具,6 个月内在 GitHub 拿到 4369 stars —— 因为它几乎是为数不多真的能在 Claude Code / Codex / Gemini / Copilot / Hermes / Grok / Antigravity 七大 AI 编码 agent 执行 shell 之前把它们拦下来的护栏,并真实经历过 CVE 级别对抗并同日修复。
?-propagation 这三个模式,任何做 latency-sensitive guard 的项目都能直接抄。
README hero illustration ——「防止 AI agent 误删你的代码」的核心命题
维度 | 数据 |
|---|---|
GitHub | https://github.com/dicklesworthstone/destructive_command_guard |
Star / Fork | 4369 / 163 |
代码行数 | 165,163(Rust 86.0% / Shell 7.3% / PowerShell 2.3% / 其他 4.4%) |
项目年龄 | 6.2 个月(首 commit 2026-01-07) |
开发阶段 | 密集开发(v0.6.x 阶段,每月仍 30+ commits) |
贡献模式 | 独立开发(99.2% commit 来自 owner Jeff Emanuel) |
热度定位 | 中等热度(垂直领域第一,~23 stars/day) |
质量评级 | 代码 优(架构清晰、tests/prod 22.1%)· 文档 优(README+SKILL.md+docs/)· 测试 优(4208 个 #[test],contract test 而非 smoke) |
Jeff Emanuel(GitHub: Dicklesworthstone),NYC 独立开发者,bio 写「Building in NY」,Twitter doodlestein。账号 8.5 年,187 个 public repos,其中最有名的项目是这一堆「franken」:frankenscipy、franken_numpy、frankenpandas、frankensearch、frankenredis、frankenlibc、franken_whisper、frankensim —— 统一主题是「用 Rust 重写主流 C/Python 工具」*。再加上 asupersync(238⭐)和 ntm(392⭐,Go 写的终端复用器)。dcg(4369⭐)是他目前最大、最严肃的项目。
2025–2026 年 AI coding agent 大爆发,每个 agent(Claude Code / Codex / Gemini CLI / Copilot CLI)都有自己的 hook 协议 —— 但没有任何一个工具能跨所有 agent、在 shell 命令执行前做 destructive command 拦截。这是一个被所有人踩到、但没人修过的痛点。Emanuel 的判断是:与其让每个 agent 团队自己造轮子,不如做一个中立的「last mile safety layer」,各家 hook 都接进来。
SKILL.md 里写得很清楚:「Whitelist-First Architecture」、「Fail-Safe Defaults (Default-Allow)」、「Zero False Negatives Philosophy」。翻译一下: - 宁可多弹几次确认,也不放过一次 rm -rf / - 遇到超时 / 解析失败 → fail-open(让命令通过),但用 200ms 绝对上限 + 10ms 硬下限封顶,避免 perf 缺陷被武器化为 bypass - Zero False Negatives:架构设计围绕「绝不让破坏性命令通过」展开,false positives 是可接受的代价
商业化路径不明显(自定义 source-available 许可,不是 OSI 批准的开源协议),但从 99.2% 单作者占比、25.8% 周末 commits、49.5% 夜间 commits 看,更像是「认真做的产品级 side project」而非商业项目。Emanuel 用这一堆 franken* 项目建立 Rust 重写工具的品牌,dcg 是这个品牌下第一个冲到 4000+ stars 的旗舰。
官方文档丰富(README+SKILL.md+docs/),但无独立官网/博客。本文未 WebFetch 作者个人博客 https://www.jeffreyemanuel.com/。
src/perf.rs:430-481 的 budget_documentation_matches_source_of_truth 测试解析 README、AGENTS.md、ci.yml、bench.yml 四个文件,断言 7 层 Budget 常量的字面量文本一致 —— 从根本上消除了「文档说 5ms、代码写 50ms」的漂移。packs/mod.rs:833-918 把 91 个 pack 的 keywords 合成一个 Aho-Corasick 自动机,匹配后 OR 一个 u128 位掩码;比 per-pack memmem 扫描快 ~900 倍。?-propagation(novelty 4/5)—— v0.6.6 修复 #189 的关键:递归上限 + 用 ? 立即传播 unterminated 嵌套结构,而不是 advance 一字节然后重新扫描(重扫本身就是指数行为)。HookInput 通过 #[serde(alias)] 接受 7 种 agent 的 JSON,再用区分字段选 7 个 emit struct。核心洞察:多协议兼容的真正难点是下游输出 parser 的字段严格性(Copilot 丢弃未知字段),不是上游输入的差异。DCG_HOOK_TIMEOUT_MS=0 来绕过护栏。模式 | 适用 | 代码锚点 |
|---|---|---|
声明式 Budget 常量 + doc-drift test | 任何有 SLO 的延迟敏感服务 | src/perf.rs:430-481 |
Fail-open deadline + min-budget floor | 任何同步 guard | src/perf.rs:277, 321 |
AC candidate-set bitmask | 50+ 规则的小关键字集规则引擎 | src/packs/mod.rs:1916-1997 |
有界递归 + 保守触发-on-exhaustion | 任何面对不可信输入的递归下降 | src/heredoc.rs:142-215 |
Serde-alias 多态 + per-protocol emit | 任何多上游 + 严格输出下游 | src/hook.rs:19-379 |
Whitelist-first 两阶段评估 | 任何误报代价高的分类器 | src/packs/mod.rs:492-553 |
rm -rf / rm -r -f / rm --recursive --force 三种 flag 风格的 span attribution。维度 | dcg | claude-warden | sh-guard | no-nuke |
|---|---|---|---|---|
Stars | 4369 | 28 | 22 | 2 |
语言 | Rust | TypeScript | Rust | Python |
Agent 支持 | 7 个(Claude/Codex/Gemini/Copilot/Hermes/Grok/Antigravity) | 仅 Claude Code | 通用 | Claude+Codex |
Pack 系统 | 91 pack / 27 类别 | 单领域 | 无 | 无 |
AST heredoc 扫描 | ✅ | ❌ | ❌ | ❌ |
路径作用域 allowlist | ✅ | ❌ | ❌ | ❌ |
公开 CVE 履历 | ✅(GHSA-4cfr-w3v5-w5j5) | ❌ | ❌ | ❌ |
License | 自定义 source-available | MIT | MIT | MIT |
体量 | 65k LOC | ~1k LOC | ~1 Rust file | ~Python 单文件 |
「AI coding agent 的最后一道防线」 —— 位于 agent → shell 之间,是一个垂直但关键的安全层。GitHub 上存在 jms830/opencode-dcg-plugin、matznerd/antigravity-destructive-command-guard-dcg 等 dcg 包装器,说明它正在成为新 AI agent 默认对接的事实安全层。
src/perf.rs 的 budget + drift test 整套src/hook.rs 的 serde-alias + per-agent emit?-propagationevaluate_command_with_pack_order_deadline_at_path)—— 240 行核心流水线,单函数拿下 70% 架构理解 3. src/packs/mod.rs:833-918 + 2533-2790 —— u128 candidate-pack bitmask + v0.6.6 #189 修复 4. src/hook.rs:19-379 —— 7 协议 + 7 emit struct,per-vendor interop 最浓缩示例 5. src/packs/core/filesystem.rs:335-433(parse_rm_command)—— 手写 rm parser未收录(HTTP 403)分析时间:2026-07-14
分析者:repo-miner skill
方法:三阶段分析(Network + Meta + Content)—— 中间产物存于 tmp/destructive_command_guard-phase-{1,2,3}-analysis.md