信任边界
主边界:命令来源到执行环境
核心信任边界位于 AI 编码智能体和主机 shell 之间。CC Safety Net 在这条边界上检查命令。- 不可信侧:AI 智能体生成的命令字符串。这些字符串一律按可能有敌意处理,因为提示注入、上下文混淆或对抗性指令都可能操纵智能体生成破坏性命令。
- 执行侧:命令将要执行的主机 shell。
次级边界
五个次级边界从外部来源进入 CC Safety Net。每一个都会先经过验证,之后才能影响分析。各安全级别的保证
Standard、strict 和 paranoid 是三个预设,为fail_closed、paranoid_rm 和 paranoid_interpreters 三项能力提供默认值。各级别的保证并不相同。
启用机密保护时,安全级别不会放宽已匹配敏感内容的访问,也不会放宽用户配置的拒绝路径及其后代。配置的
secret_protection.allow_paths 条目可以让字面文件或目录树豁免于非 CLI 的内置机密规则;拒绝路径和 secret.cli.* 规则仍然优先。灾难性保护始终强制执行,包括递归删除根目录或用户主目录、对受保护 Git 元数据的破坏性更改,以及对用户或项目 policy.json 的破坏性更改。
配置恢复边界
配置是信任边界,不是 kill switch。无效配置会落入两种运行时状态之一,且绝不会仅因无效而拒绝普通工作。ready:每个活动来源都已通过验证。degraded:某个候选来源被拒绝,并由安全的替代方案接替生效:rulebook 文件缺失、无法读取、无效或名称与来源不符时,该来源被丢弃,不提供任何规则;重复的 rulebook 名称保留第一次声明;项目策略中的audit部分被忽略;任一范围中无法读取的策略文件回退到可挽救的策略或内置保护默认值。
rule.json 会恢复其中 overrides 原本禁用的内置规则。一个例外有明确范围和记录:transparent_wrappers 位于 rule.json,因此某个范围的 rule.json 无法读取时,内置分析在该范围内展开的包装命令范围会收窄。作为交换,系统不会把任何命令或路径加入允许列表,因为不会有任何东西因无法配置而被拒绝。
策略文件保护和 Git 元数据保护在加载策略快照之前评估,因此它们在两种状态下的行为完全相同,并且不携带配置元数据。
每种失败、对应回退和恢复命令的完整约定见配置恢复。
Fail-closed 执行
当分析自身无法完成时,fail-closed 适用于该次工具调用,例如分析器意外失败、输入无法解析或达到资源限制。它不描述无效配置的处理方式。1
Hook 入口点
Hook 适配器用 try/catch 包装分析调用。如果分析抛出错误,hook 会发出拒绝判定,而不会让命令继续。命令达到分析预算时,拒绝会带上专门的原因,提示智能体简化或拆分命令。
failed closed 这个原因只用于分析器的意外失败。所有基于 stdin hook 的智能体都适用:Antigravity CLI、Claude Code、Codex、Cursor、Gemini CLI、GitHub Copilot CLI、Grok Build 和 Kimi Code。Grok Build 有一点不同:它的 hook 是 fail open,宿主也没有提供 failClosed 开关,因此只有 stdout 上明确的 deny 才能阻止工具调用。适配器仍会为自身的 fail-closed 情况输出明确的 deny,例如工具输入被截断或工作目录不可用。在这个宿主上,如果失败导致适配器完全没有输出,这次调用就不会被阻止。2
插件和扩展入口点
Amp Code、OpenCode、OpenClaw 和 Pi 进程内集成使用相同模式:捕获分析错误并再次作为阻止消息返回,使平台把命令视为已拒绝。Codex 以插件安装,但运行的是 stdin hook
cc-safety-net hook --codex,因此属于上一步。Hermes Agent 叠加两层:其托管 Python 插件调用相同 stdin hook(cc-safety-net hook --hermes-agent),并在分析无法完成时由插件自身阻止该调用,包括缺少 npx、无法解析工作目录或 Hermes 会话记录、spawn 失败、30 秒超时、非零分析器退出码,或无法读取输出。各智能体采用哪种集成方式见集成架构。3
格式错误或超大的工具输入
不可信递归工具输入限制为 64 个对象层级、10,000 个已访问值、10,000 个自有键、每个字符串 1 MiB,以及字符串数据总计 4 MiB。Hook stdin 原始字节上限为 8 MiB。超过任何一项边界都会拒绝该调用。
4
解析器资源耗尽
输入超过 131,072 个 UTF-16 码元、超过 16,384 个词,或嵌套超过 64 层时会被拒绝,而不是进行不完整的分析。另有 16,384 个 derived token 的预算,用于限制初次解析后嵌套和内嵌命令增加的工作量,见解析器和运行时依赖面。两种限制都适用于每个安全级别,包括 standard。
5
Strict 模式
Strict 模式把 fail-closed 扩展到 shell 解析器无法安全 tokenize 的命令,因此无法解析的输入会被阻止,而不是直接通过。Standard 模式允许看似安全但无法解析的文本。
无效配置有意不在此列表中。被拒绝的规则来源会被丢弃,无法读取的策略文件会回退到保护默认值,因此普通工作继续。见配置恢复边界。
机密脱敏
任何命令或段文本写入审计日志或返回智能体之前,都会经过自动机密脱敏。脱敏器会清除 PEM 私钥、数据库 URL 环境变量、通用的携带机密的环境变量赋值、常见的机密 HTTP header、URL 凭证、预签名 URL 签名查询参数(x-amz-signature、x-goog-signature、sig、signature)、已知服务商 token 前缀(GitHub、Slack、npm、Stripe、PyPI),以及 JWT 和 AWS access key ID。每个匹配值替换为 <redacted>。
脱敏采用保守的模式匹配,能降低偶然出现在命令参数中的机密被泄漏的风险,但只限于已识别的凭证形式。绝对文件系统路径、项目和目录名、主机名、IP 地址、用户名,以及不在模式列表中的凭证格式都会原样保留。新的机密格式会不断出现,因此请避免让真实凭证经过智能体运行的命令。完整脱敏范围见审计日志参考。
相同边界也适用于 cc-safety-net explain:真实跟踪会包含你提供的命令文本、解析后的 token,以及包括主目录在内的绝对路径。把跟踪粘贴到任何地方之前,请先检查一遍。见 Explain 跟踪。
攻击面
威胁模型列出主要攻击面和缓解措施。
网络攻击和针对智能体平台本身的攻击不在范围内。CC Safety Net 在分析命令时不发出网络请求,也没有网络层。资源耗尽只通过固定上限约束,不依靠隔离来缓解。输入超过解析器或工具输入限制时会被拒绝,不会只做部分分析。
披露分类
安全策略定义完整报告流程。使用下表选择报告类型。
报告覆盖缺口时只报告命令形式。不要包含可直接粘贴的武器化提示注入 payload。两种提交渠道见安全策略。