policy.json 字段。它会用能加载的内容继续工作。这组缩减后的配置就是回退配置:文件中所有有效的部分、代替被拒绝 policy.json 字段的内置默认值,以及全部内置保护。
doctor 把这种状态报告为“Runtime is enforcing a fallback configuration”,仪表板横幅显示“A fallback configuration is being enforced”。doctor 的诊断项会指出每个被拒绝的文件和字段。按下面的步骤修复即可。
被拒绝的 rulebook 在修复之前不再阻止任何命令。被拒绝的 policy.json 字段会回退到默认值,而默认值通常比你配置的阻止得更多。
配置状态
一条警告就足以让运行时进入
degraded:
- 错误指出 CC Safety Net 已丢弃的来源。该来源不再提供任何规则。
- 警告指出仍然生效的来源。CC Safety Net 只忽略被拒绝的那部分。
无效配置的行为
无效配置本身绝不会阻止正常工作,CC Safety Net 也绝不会执行被拒绝的那部分。- 无法验证的规则来源会被 CC Safety Net 丢弃,其规则不再生效。
- 其他每个通过验证的范围继续执行自己的规则。
- 所有内置保护继续生效。破坏性命令规则、机密保护、
policy.json保护和 Git 元数据保护都不读取规则配置。 - 无效的
policy.json保留有效字段,其余字段使用内置默认值。参见逐字段保留的policy.json或保护性默认值。
rule.json、运行 cc-safety-net rule update 都是普通工具调用,因此智能体可以自行修复规则配置。
原因为“failed closed”的被阻止命令是另一回事:它表示 CC Safety Net 没能完成对那一条命令的分析。参见 Fail-closed 执行。
配置回退矩阵
丢弃来源的错误
上述每条消息都会指明它拒绝的文件或来源,以及对应的修复办法。远程来源缺少 rulebook 时,消息以
run `cc-safety-net rule update` to vendor <source> 结尾;本地来源缺少 rulebook 时,以 create that file or remove that source from the rules config 结尾;rulebook 无效和名称不一致都以 fix that file 结尾。
保留来源的警告
重复名称如何解析,见范围合并行为。
逐字段保留的 policy.json 或保护性默认值
对于能解析为 JSON 对象的文件,CC Safety Net 会逐字段保留:每个有效字段保持不变,每个无效字段按第二张表回退。其他损坏的用户文件会被替换为保护性默认值,即两项保护都开启、没有覆盖、没有允许路径或拒绝路径的内置默认值。
运行时从不重写
policy.json。请手动修复,或使用仪表板中的修复操作。
rule.json 中声明的覆盖范围
transparent_wrappers 和 command_tools 会扩大内置分析的覆盖范围,两者都写在 rule.json 中,而不是 rulebook 中。
- Rulebook 被丢弃时,这两个字段仍然保留,因为
rule.json本身仍可读取。 rule.json无法读取时,该范围会同时失去这两个字段。分析不再穿过该范围声明的包装命令,CC Safety Net 也不再分析它声明的社区 shell 工具。八个内置包装器(caffeinate、exec、nice、nohup、setsid、stdbuf、time、timeout)不依赖任何文件,仍然有效,另一范围的声明也照常生效。
rule.json 无法读取导致某个范围被丢弃时,请先修复这个文件。
degraded 状态的报告方式
doctor 是唯一同时报告规则配置和 policy.json 的命令。诊断会指出被拒绝的文件和问题,但从不复制文件内容,因此不会把损坏文件中的机密再次显示出来。
可见的失败与静默的失败
- 规则来源被丢弃时没有任何动静。 它减少的是拒绝,因此会话中不会有任何阻止或警告。每次修改规则配置以及每次升级后,请运行
cc-safety-net status。 - 未迁移的旧规则文件更加静默。 CC Safety Net 不加载它,状态保持
ready,而其中的规则什么也不保护。doctor会报告config.legacy-ignored。参见迁移旧配置。 - 无效的
policy.json字段通常会暴露出来。 保护会回退到开启状态,因此你会看到比配置的更多的拒绝。 - 有两种
policy.json错误会静默降低保护。 无效的safety.level回退到standard,因此把paranoid拼错会降低你的预设。无效的deny_paths条目会被丢弃,对应位置不再受保护。 - 只有状态行标记无需你做任何操作就会出现。
Config warning:行要依附一次无关的拒绝才会出现,其他呈现位置都要等你运行命令或打开仪表板。
恢复配置
即使运行时处于 degraded,智能体也能运行下面的每条命令。选项和退出码见 CLI 参考。1
查看判定
ready 或 degraded,并在 Not active 下逐行列出诊断。参见 status。2
获取完整报告
policy.json。config.runtime-degraded 诊断项会指出每个被拒绝的来源。参见 doctor。3
检查规则配置
rule list 显示哪些规则正在生效,可以看出被丢弃的来源带走了什么。rule verify 按运行时的加载方式检查两个 rule.json 文件,有问题时以 Config validation failed. 结束。参见 rule verify。4
修复来源
对于本地 rulebook,编辑诊断中指出的文件。运行时会在下一次工具调用时读取它。对于缺失或过期的远程来源,重新落盘:加上来源名称可以只更新那一个,加上
--global 则操作用户范围。仍有诊断时它会如实报告,而不会声称成功。参见 rule update。5
自己修复 policy.json
智能体无法编辑
policy.json。请修正诊断中指出的字段,或使用仪表板中的修复操作。参见编辑策略文件。status。运行时会在下一次工具调用时重新加载,无需重启任何东西。
相关页面
策略
完整的
policy.json 契约和默认值。自定义规则
Rulebook 布局、来源、落盘、覆盖和透明包装器。
CLI 命令
status、doctor 以及每个 rule 子命令的完整选项和退出行为。审计日志
决策记录在哪里、条目 schema 和保留期。