赶在 AI 智能体运行之前,拦 下破坏 性命令。
CC Safety Net 是面向 Claude Code、Codex、Cursor 等 AI 编码智能体的执行前 hook。它在命令运行前阻止破坏性的 git 和文件系统命令以及机密文件读取,而不是指望智能体自觉遵守准则。
- MIT 许可证
- 最新版本 v2.6.18(2026年10月23日)
- GitHub star 数 1,753(截至 2026年10月23日)
支持所有主流编码智能体
截至 v2.6.18,只需一个安装程序,即可覆盖 macOS、Linux 和 Windows 上全部 16 个受支持的编码智能体。
它看的是命令实际做什么。
把命令包进 bash -c 或调换选项顺序都瞒不过它,更安全的写法则照常放行。
cc-safety-net · pre-exec hook
$ git push --force
✖ BLOCKEDgit.push-force
git push --force destroys remote history. Use --force-with-lease for safer force push.
$ git push --force-with-lease
✔ ALLOWED
远程分支在你上次 fetch 之后有变动时,拒绝推送。
机密不容触碰,读 取也不例外。
环境变量文件、SSH 密钥、云凭证和编码智能体令牌一律阻止,无论访问来自 shell,还是智能体自带的读取、编辑、写入和搜索工具。
$ cat .env
已阻止
原因:从环境变量文件中读取 API 密钥和令牌。
$ cp ~/.ssh/id_rsa /tmp/key
已阻止
原因:把 SSH 私钥复制到密钥目录之外。
$ cat ~/.aws/credentials
已阻止
原因:从凭证存储中读取 AWS 访问密钥。
$ grep token ~/.claude/.credentials.json
已阻止
原因:读取编码智能体自身的身份验证令牌。
默认精准,按需从严
在本地仪表板中选择安全预设、开关各项保护,不必手动编辑 JSON。
127.0.0.1:52341/?token=f3a9…
- $ $TOOL --force✔ 允许
- $ rm -rf ./build✔ 允许
- $ python -c "shutil.rmtree('build')"✔ 允许
以上为三个示例。预设适用于智能体运行的每一条命令。
你的命令始终 留在本 机。
hook 离线做出决策,审计日志保存在 ~/.cc-safety-net 中,而且没有任何遥测。
~/.cc-safety-net/logs/…/2026-10-01-a1b2c3.jsonl
{
"ts": "2026-10-01T13:16:56.213Z","decision": "deny","agent": "claude-code","toolName": "Bash","command": "GITHUB_TOKEN=<redacted> git push --force","ruleId": "git.push-force",…}一条 命令完成安装
安装程序会找出本机上的编码智能体,并为你选中的智能体接入 hook。
常见问题
开发者在让智能体接触自己的仓库之前,会问这些问题。
CC Safety Net 是什么?
CC Safety Net 是面向 Claude Code、Codex、Cursor 等 AI 编码智能体的执行前 hook。它在每条 shell 命令和每次文件工具调用运行前进行检查,阻止会毁掉工作成果或泄露机密的操作:git reset --hard、git push --force、针对主目录的 rm -rf,以及对 .env 文件、SSH 密钥和云凭证的读取。它支持 macOS、Linux 和 Windows 上的 16 个编码智能体 CLI,免费且采用 MIT 许可证。它不是沙箱。
如何阻止 Claude Code、Codex 或 Cursor 运行 git reset --hard 或 rm -rf?
git reset --hard 或 rm -rf?用 npx -y cc-safety-net@latest install 安装 CC Safety Net,然后运行 npx -y cc-safety-net@latest doctor 确认 hook 已生效。需要 Node.js 18 或更高版本。此后,git reset --hard、git checkout -- .、git clean -f、git stash clear 和 git push --force 都会被拒绝,智能体会得知拒绝原因以及应改用的更安全命令。针对主目录、文件系统根目录和项目外路径的 rm -rf 会被阻止。除非开启 paranoid 级别,否则允许在项目内删除。
Claude Code 的权限 deny rule 不是已经能做到这些了吗?
视情况而定。deny rule 是确定性的,在 bypassPermissions 模式下仍然生效。如果你只需要在一个 CLI 中阻止几条确切的命令,它们可能就够了。局限在于,deny rule 拿命令字符串去和通配符模式比对,调换选项顺序(rm -r -f)、套上 shell 包装器(sh -c "...")或借助解释器,都可能绕过它们。CC Safety Net 解析命令实际做什么,所以这些变体照样会被拦下。它还让 16 个 CLI 共用一份策略和一份审计日志,不必为每个工具分别使用不同的格式。很多配置会两者并用。
Claude Code 的 auto 模式不是已经会阻止 git reset --hard 了吗?
git reset --hard 了吗?只能挡住一部分。截至 2026年10月,Claude Code 的 auto 模式使用一个分类器模型,默认阻止 git reset --hard、git clean -fd、git stash clear 等类似命令。但这是一次判断,Anthropic 公布该分类器在真实过激操作上的漏报率为 17%。bypassPermissions 模式则什么都不问。CC Safety Net 的拒绝是确定性检查:经 Claude Code 2.1.251 测试,它在 default、auto 和 bypassPermissions 模式下都会生效。如果你在 default 模式下亲自审查每一条命令,可能用不上它。
如果我在沙 箱或容器里运行智能体,还需要 CC Safety Net 吗?
如果你在意未提交的工作,大概率仍然需要。Claude Code 或 Codex 的沙箱会把写入限制在项目目录内,并限制网络访问。但 git reset --hard 和 rm -rf . 写入的正是这个目录,git push --force 发往的是你允许的远程仓库,所以沙箱对这三条命令都会放行。CC Safety Net 会阻止它们。它不隔离进程,也不控制网络。如果你主要担心提示注入、恶意依赖、不可信代码或数据经网络外泄,沙箱是更好的选择。两者一起用。
能用 Claude Code 的检查 点撤销破坏 性 命令吗?
无法可靠地撤销。截至 2026年10月,Claude Code 的检查点文档写明,检查点不跟踪 bash 命令修改的文件,只有通过 Claude 文件编辑工具所做的编辑才能 rewind。git reset --hard、git clean 和 rm 都作为 bash 命令运行,它们丢掉的工作不在 rewind 能恢复的范围内。容器也有同样的缺口:挂载进来的工作树里是你真实的未提交工作,push 也照样会到达你真实的远端。更稳妥的一层是在命令运行前就阻止它,长期历史则交给 Git commit。
Claude Code 默认 会阻止读 取 .env 或 ~/.aws/credentials 吗?
.env 或 ~/.aws/credentials 吗?不会。截至 2026年10月,Claude Code 的沙箱文档说明它没有内置的凭证拒绝列表,默认读取权限仍允许读取 ~/.aws/credentials 和 ~/.ssh/ 等文件。其他 CLI 提供可选的拒绝设置,但需要你按工具逐一编写。CC Safety Net 一经安装,就会阻止读取 .env 文件、SSH 私钥、云凭证存储和编码智能体的身份验证令牌,既覆盖 cat .env 这类 shell 命令,也覆盖智能体自身的读取、编辑、写入和搜索工具。你还可以添加自己的拒绝路径。
CC Safety Net 会把我的命令发送到别处吗?它免费吗?
免费,并以 MIT 许可证开源。hook 检查工具调用时不发起任何网络请求,决策记录在你机器上的 ~/.cc-safety-net/logs 下。只有少数由你亲自运行的命令会联网:doctor 会向 npm 注册表查询是否有新版本,GUI 会获取 GitHub star 数,rulebook 同步会从 GitHub 下载 rulebook。这些都不会发送你的命令或文件内容。
CC Safety Net 会阻止我真正需要的命令吗?该如何调整?
有可能,所以级别可以调整。默认的 standard 级别阻止可识别的破坏性模式,普通命令和项目内的删除照常运行。strict 还会阻止它无法完全分析的命令。paranoid 进一步阻止项目内的 rm -rf,以及 python -c 或 node -e 单行命令。可以在 npx cc-safety-net gui 或 policy.json 中选择级别,并单独开启或关闭某条规则。Worktree 模式允许在已确认的 linked Git worktree 内执行 git reset --hard 等本地丢弃操作。npx cc-safety-net explain 会显示命令被阻止的原因。

CC Safety Net
