ARTICLE · 1245704
DSH插件测评:cc-safety-net 拦 rm -rf
AURORA LAB · 前沿观察
DSH插件测评:cc-safety-net 拦 rm -rf
cc-safety-net 是 kenryu42 做的一道命令闸门,装给编码 agent 用。它在工具调用真正执行前把命令解析成结构,命中危险规则就拒绝,不弹确认框、也不等你点头。装它之前,这一层要么靠宿主自带的权限弹窗,要么根本没有。 截至 2026-10-25,1749 星、npm 上 2.6.19 版(2026-10-24 发布)、上周下载 17,141 次。MIT 许可,Node 18 起。它不是沙箱,不隔离进程,也不管网络出口。
agent 一天要跑上百条 shell 命令。删库的那条、读 .env 的那条,只要失手一次,就没有回滚按钮。
一、它是什么

二、它管什么
拦的依据是结构化解析,不是关键词匹配。
01
破坏性命令:Git 侧 30 多条规则,reset --hard、push --force、branch -D、stash drop 都在列,拒绝时会原样返回规则 id;push --force-with-lease 放行——它要的不是禁用 Git,是让你用安全的那一版。
02
文件系统与设备:rm -rf /、rm -rf ~、rm -rf .git 属 10 条 catastrophic 规则,写成 "off" 也关不掉,这一档就是不给关。
03
绕道执行:bash -c、sudo、env 这类包装会解析到 10 层深,python -c 里塞 os.system 也在扫描范围,藏在引号里不算隐身。
04
敏感文件:138 条规则,读和写都拦,curl -d @.env 这种上传按读处理,因为它发得出去;扩展名那 21 类里包括 .pem、.p12、.pfx 和抓包留下的 .pcap。
05
防越权:agent 改不了 policy.json,也不能自己执行 policy apply——改防护策略只能你本人来,这条挡的是 agent 自己给自己松绑。
三、三个场景
清掉没提交的改动
个人开发者最容易踩这个。让 agent 收拾工作区,它先 git reset --hard,你写半天没 commit 的东西就没了;git stash drop 连备份一起清。命令在执行前被解析,命中 git.reset-hard 直接拒绝,返回规则 id,并建议换 git stash 或 git switch,现场还在。想提前知道某条命令会不会被拦,用 npx cc-safety-net explain --json "<命令>" 先问一遍。它不阻止你手动做这些事,只阻止 agent 替你做。你要做:把项目级 .cc-safety-net/policy.json 提交进仓库,让这个判断跟着代码走。
把 Key 一起读走
做内容或运营的同学,把 AppID、模型 key 都塞在 .env 里,让 agent 跑发稿脚本。它一排查配置就 cat .env,或者 curl -d @.env 把整份 key 发出去,一次普通调试就完成泄露。138 条规则覆盖 .env、.npmrc、id_rsa、~/.ssh、~/.aws、~/.kube/config 和 21 类扩展名,读、写、上传都拦,连 python -c "open('.env')" 也扫。你要做:真需要读某个 .pcap 时,用 secret_protection.allow_paths 只放开那一个目录,这份白名单只能你自己改,agent 改不了。
换台机器就失效
团队里换人、换机器时最容易漏。同事机器上没有这套配置,agent 照旧全权限跑。策略分两层:项目级随 git 走,用户级在 ~/.cc-safety-net/policy.json;DSH 侧它是个 profile 插件 bundle,哪套 profile 装了才生效。你要做:装完跑 npx cc-safety-net doctor 确认 bundle 是 active;它的输出会点名哪个 profile 已配置,哪个 profile 只装了包却没启用 bundle。

四、对比与版本对应
DSH 自带的文件策略和审批是「文件级 + 人工点头」,cc-safety-net 是「命令语义级、不问就拒」,两层不冲突,可以一起开。
严格度三档:Standard 默认,动态目标(rm -rf "$target")放行;CC_SAFETY_NET_STRICT=1 开 Strict,这一档才拦动态目标;再往上是 Paranoid,连解释器一行式都拦,日常容易误伤。换档只靠环境变量,不改代码也不改配置文件。命令可能来自提示注入,我只建议把 Strict 当起点。
版本面:2.6.19、累计 81 个版本、peerDependencies 里只有两个 opencode 包且都是 optional,没有声明 DSH 宿主版本门槛——装不装得上得自己看 dsh --version。

下载口径:npm 上周 17,141 次(10-16~10-22),插件市场榜记的是 5.7 万/周,两个口径别混。GitHub 1749 星。
五、踩坑与三步上手
1. 装完不启用 = 白装。bundle 没进 dsh.profile.bundles,守卫完全不跑,DSH 只打一行 warning,你以为有保护其实裸奔。先去插件页把它勾上,再跑 doctor。 2. 只拦内置 bash/pwsh。别的插件自带的 shell 工具默认不读命令,要 npx -y cc-safety-net rule tool add <tool-name> 声明,声明完用 rule tool list 核对,否则它跑 git reset --hard 也没人管。 3. 只覆盖 web/desktop。acp/headless/sdk 得自己 dsh plugin --profile <name> add cc-safety-net,不补的话那几套 profile 里它一行都不跑。 4. PTC 模式的 run_code 直接调 Node API,写文件不过守卫;terminal_send 也不过,这是文档自己写的盲区。
三步:
1. 查版本:dsh --version,确认宿主能装。 2. 装:npx -y cc-safety-net@latest install --deepseek-harness,需要 PATH 上有 pnpm,装完重启 dsh web。 3. 验:npx cc-safety-net doctor,再到插件页确认 bundle 已启用。
写在最后
看到这儿,说明你把它读完了。这类文章能走多远,只取决于两件事:你的在看和转发。
顺手关注并设为星标,下一篇更新第一时间见。
END
一起聊聊
你希望这道闸门先拦住 git reset,还是先拦住 cat .env?
欢迎在评论区说说你的做法。
乌鸦君疯狂学AI
让天下没有难用的AI
#DSH插件# #AI编程安全# #cc-safety-net#















































































