Skip to main content
本页是面向维护者的防护管线规范。工作原理提供用户视角。集成架构说明每个智能体如何到达防护。 CC Safety Net 是静态执行前策略门。每个受支持编码智能体向其发送工具调用。防护按相同顺序检查每个调用。集成之间只有调用到达方式不同:标准输入 hook 子进程,或进程内插件或扩展。 下列阶段顺序只在此定义。其他页面只用一两句说明,并链接回本页。每个分析器的具体行为见分析引擎

系统组件

集成适配器

适配器把智能体的工具调用 payload 转为规范 invocation,并把防护判定转为智能体的 deny 格式。系统层面有两点需要了解:
  • 适配器只向准确的集成专用工具名授予命令执行能力。未知工具不会按 shell 命令处理。它仍接受策略文件、Git 元数据和敏感路径检查,但其文本不会解析为命令。
  • 适配器负责 config-state 报告路径。防护本身不发出该阶段。
各智能体的适配器、hook 标志和配置位置见集成架构,设置命令见安装

策略快照

loadPolicySnapshot() 从本地策略配置、rulebook lockfile 和已验证 rulebook 缓存条目组成有效运行时策略。它的约定和内容同样重要:
  • 不写入、不发出网络请求,也不使用内存缓存。同步远程 rulebook 始终是显式 CLI 操作(cc-safety-net rule sync)。
  • 结果深度不可变。策略对象、规则数组、每条规则及其 block_args、透明包装器列表、安全块及其 override、破坏性命令规则 override、allow path、机密保护块及其 disabled rule 和 deny path 都会冻结,快照包装器本身也会冻结。
  • 它只解析为两种状态ready 表示执行每个已验证来源;degraded 表示候选来源被拒绝,并执行安全替代内容。Degraded 原因会指出失败来源、未活动内容和修复方法。
  • 每条规则的来源信息(rulebook 名和版本、公开 source spec、override 原因)会注册到快照,供诊断和 GUI 显示。
被拒绝的策略或规则来源本身不会拒绝普通工具调用。运行时丢弃该来源,而不是把它变成阻止。状态约定和修复路径见配置恢复

有序防护阶段

每个集成上的每次工具调用都执行以下固定顺序。拒绝操作会在审计日志中报告所示 failureStage 值。 该顺序直接产生三个位置事实:
  • 阶段 6 和 7 在阶段 8 前运行。 策略文件和 Git 元数据保护在加载任何配置前拒绝。它们始终启用、不带 config state,任何 preset、override 或 master switch 都不能削弱它们。
  • 敏感路径保护在快照之后、命令分析之前运行。 三种 hard-stop 保护中只有它受策略控制,控制项包括 master switch、per-pattern override 和 deny path。
  • 只有阶段 8 后做出的判定才报告安全级别。 输入边界、策略文件或 Git 元数据保护产生的拒绝有意不带 level 和 config fallback 元数据,因为此时尚不知道两者。
防护内的每个依赖调用都有包装,因此抛出的错误会变为归因于该阶段的 fail-closed 拒绝。工具输入边界是原因时,会从证据中删除命令替换来源的文本,绝不回显超大输入。

命令分析内部流程

阶段 12 运行分类器。它按 shell 运算符把命令拆为多个段,并分别处理。任何段被阻止时,整个命令被拒绝。 引擎会跟踪各段之间的工作目录变化(通过 cdpushd),并传播环境 assignment,使目标分类反映真实 shell 行为。递归进入 shell 包装器和解释器 body 的上限为 10 层。各分析器、安全级别边界和完整目标分类顺序见分析引擎

解析器和运行时依赖面

parseCommand(source, dialect, limits) 分派到 CC Safety Net 自有的 POSIX 解析器自有的 PowerShell 解析器auto dialect 会检测适用解析器。两者都是内部模块,不包装第三方语法。 解析器和分析器预算是编译时常量,不是策略设置,配置不能提高它们: 前三项限制初次解析。第四项限制初次解析后分析器从命令派生的工作,包括从 find -execxargsparallel 重建的子命令、包装器后的内嵌命令、重新送入分析器的已跟踪 heredoc 文件,以及 PowerShell Invoke-Expression 来源。耗尽预算会以 “Command analysis exceeds CC Safety Net’s derived-command work limit. Reduce nested or embedded command complexity and retry.” 拒绝。它不同于递归深度限制和上表的结构验证限制。 分析器的公开约定有意保持狭窄:允许时不返回内容,阻止时返回结果对象。它不会公开解析器内部 complete / partial / limited 状态,因此调用方不能按解析置信度分支。 PowerShell 支持是以 Remove-Item 及其别名和现有跨 shell 规则为中心的保守子集。该子集保留原生引号、路径分隔符、连接符、pipeline 和动态 word 来源。它不是通用 PowerShell 解释器。

依赖项

CC Safety Net 只有一个运行时软件包依赖 zod,仅用于配置验证。它通过 createRequire 延迟加载,只在实际验证配置时付出成本。Node 和 Pi bundle 将其保持为 external,使其从已安装软件包解析。只有一个源模块导入它。 已发布 bundle 不包含第三方 shell 解析器。路径扫描器读取的 flat entry stream 由 projectShellSyntax 从已解析 IR 投影。因此,上述内部 POSIX 和 PowerShell 解析器是 shell 结构的唯一来源,不存在可能与其 drift 的第二次原始命令文本 tokenization。 已发布运行时目标为 Node.js 18 或更高版本。

关键设计属性

  • 所有集成使用一个固定顺序。 上表是完整约定。防护中没有按智能体分支。
  • 始终启用的保护先于配置。 策略文件和 Git 元数据保护无法禁用,因为它们在读取可能禁用自己的策略前拒绝。
  • 防护自身失败时 fail closed。 依赖抛出错误、解析器预算耗尽或工具输入越界时会拒绝并归因于失败阶段,而不是允许。无效配置是另一情况,不会导致拒绝。见配置恢复
  • 评估时无网络、无写入。 运行时评估不发出网络请求,快照加载器不写入。防护不检查或过滤出站流量。
  • 核心不依赖平台。 适配器转换格式;防护和分类器完全共享。
  • 有界,而非穷尽。 它是静态执行前策略门,不是操作系统沙箱、权限边界,也不保护绕过已安装集成的命令。见已知限制

后续阅读

技术指南从面向用户的生命周期逐步深入设计依据。本页是第 3 步。
  • 上一页:集成架构说明每个智能体调用如何到达上述适配器;工作原理以用户层次说明同一序列。
  • 下一页:分析引擎详细说明阶段 12,包括各分析器、安全级别边界和递归删除分类顺序。
  • 然后:设计原则说明此顺序、始终启用的保护和自有解析器背后的原因。
相关页面:配置恢复说明 readydegraded安全模型说明信任边界,已知限制说明此设计无法覆盖的范围。
最后修改于 2026年8月12日