一次工具调用的生命周期
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 凭证文件)以及你配置的 deny path 检查命令、路径、搜索和 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 会提供完整报告。