系统组件
集成适配器
适配器把智能体的工具调用 payload 转为规范 invocation,并把防护判定转为智能体的 deny 格式。系统层面有两点需要了解:- 适配器只向准确的集成专用工具名授予命令执行能力。未知工具不会按 shell 命令处理。它仍接受策略文件、Git 元数据和敏感路径检查,但其文本不会解析为命令。
- 适配器负责
config-state报告路径。防护本身不发出该阶段。
策略快照
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 元数据,因为此时尚不知道两者。
命令分析内部流程
阶段 12 运行分类器。它按 shell 运算符把命令拆为多个段,并分别处理。任何段被阻止时,整个命令被拒绝。 引擎会跟踪各段之间的工作目录变化(通过cd 和 pushd),并传播环境 assignment,使目标分类反映真实 shell 行为。递归进入 shell 包装器和解释器 body 的上限为 10 层。各分析器、安全级别边界和完整目标分类顺序见分析引擎。
解析器和运行时依赖面
parseCommand(source, dialect, limits) 分派到 CC Safety Net 自有的 POSIX 解析器或自有的 PowerShell 解析器。auto dialect 会检测适用解析器。两者都是内部模块,不包装第三方语法。
解析器和分析器预算是编译时常量,不是策略设置,配置不能提高它们:
前三项限制初次解析。第四项限制初次解析后分析器从命令派生的工作,包括从
find -exec、xargs 和 parallel 重建的子命令、包装器后的内嵌命令、重新送入分析器的已跟踪 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,包括各分析器、安全级别边界和递归删除分类顺序。
- 然后:设计原则说明此顺序、始终启用的保护和自有解析器背后的原因。
ready 与 degraded,安全模型说明信任边界,已知限制说明此设计无法覆盖的范围。