一次工具调用的生命周期
1
智能体准备工具调用
智能体决定运行某项操作。它可能是
git reset --hard 这样的 shell 命令,也可能是文件写入、编辑、搜索或 patch。然后,智能体把操作交给自己的工具层。2
集成拦截调用
该智能体对应的 CC Safety Net 集成会在工具执行前、操作系统看到它之前接收这次调用。部分智能体把 CC Safety Net 作为短生命周期的子进程 hook 调用,另一些则在进程内以插件或扩展的形式加载它。两种方式运行的是同一套防护。哪个智能体采用哪种模型,请参阅集成架构。
3
CC Safety Net 检查操作
CC Safety Net 在深度、大小和字段数量的限制内读取工具输入。它只解析一次输入,然后按按顺序检查的内容中的固定次序逐阶段运行。这个次序不随智能体而变。
4
返回允许或阻止结果
安全的调用会正常执行。被阻止的调用不会运行。智能体会收到一条消息,其中写明原因、触发阻止的命令和后续操作。请参阅阻止消息的形式。
5
判定可供审计
拒绝判定会追加到本地审计日志。当配置的审计范围包含允许判定时,符合条件的允许命令判定也会记录下来。请参阅审计记录。
按顺序检查的内容
每次工具调用都会按以下顺序走过同样的阶段:- 有界输入提取。 在深度、节点数、键数和大小限制内,从工具输入中读出命令。超过任一限制就阻止调用,避免无界遍历。
- 单次解析。 命令只解析一次,并生成后续阶段共用的结构化事实。解析器预算耗尽时,所有安全级别都会阻止调用。
- 策略文件保护。 任何会修改或删除 CC Safety Net 自己的
policy.json、其目录或祖先目录的操作都会被直接阻止。 - Git 元数据保护。 任何会删除、移动、覆盖或 patch 仓库
.git元数据或 hooks 目录的操作都会被直接阻止,包括从工作目录内部发起的操作。 - 加载配置。 解析出你的策略、rulebook 和安全级别。
- 敏感路径保护。 对照内置的敏感位置(
.env、~/.ssh、云服务和编码 CLI 的凭证文件)以及你配置的拒绝路径,检查命令、路径、搜索和 patch。 - 破坏性命令分析。 把命令拆成命令段,展开包装器和解释器,再交给对应的分析器分类。分析器覆盖
git、rm、Remove-Item、find、xargs、parallel、设备命令和自定义规则。
为什么分析意图,而不是匹配字符串
CC Safety Net 分析命令做什么,而不是它长什么样。它会解析可执行文件、子命令、标志和参数,再按该可执行文件的选项语法进行分析。
两者都以
git checkout 开头。如果不重复实现 Git 的选项逻辑,简单的前缀规则无法区分这两种结果。结构化分析还能应对调换顺序的标志(rm -r -f /)、shell 包装器(sh -c "rm -rf /")和解释器单行命令(python -c 'import os; os.system("rm -rf /")')。CC Safety Net 最多会展开并重新分析 10 层嵌套命令。
本页不会列出每一条规则。完整阻止行为矩阵见被阻止的命令,有意允许的内容见被允许的命令。
阻止消息的形式
智能体会以工具结果的形式收到这条阻止消息:Rule: id、Tool: 名称、触发阻止的 Segment:,以及回退配置生效时的 Config warning:。命令和命令段只保留摘录。消息离开进程前,所有内容都会经过机密脱敏。
阻止不会结束智能体会话。消息会作为普通工具结果返回,引导智能体继续任务,避免反复尝试命令变体。结尾指令由规则的 intent 决定:
这些消息为何这样写,以及为何指令只是建议、执行始终由防护负责,见设计原则。
审计记录
CC Safety Net 始终把拒绝记入本地审计日志,默认还会记录允许的命令判定。用以下命令读取日志:判定出乎预期时
1
询问原因
npx cc-safety-net explain "<command>" 会对一条命令重放分析过程,显示命中了哪条规则以及原因。加上 --json 可获得结构化跟踪。2
检查保护是否确实生效
npx cc-safety-net status 会在一屏之内输出 ready 或 degraded,并把所有未生效的项列在 Not active 下,其中包括已禁用的 Claude Code 插件。degraded 表示某个配置来源被拒绝,当前执行的是回退配置。哪些生效、哪些没有,以及如何修复,见配置恢复。npx cc-safety-net doctor 会给出完整报告。