跳转到主要内容
Degraded 表示 CC Safety Net 拒绝了你的部分配置,例如有 JSON 错误的 rulebook,或值不正确的 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 或保护性默认值。
Degraded 状态不会额外放行任何东西,也没有恢复模式。读取或编辑 rule.json、运行 cc-safety-net rule update 都是普通工具调用,因此智能体可以自行修复规则配置。
丢弃来源并非对安全没有影响。该来源提供的拒绝会随之消失,因此你在被丢弃的 rulebook 中特意阻止的命令,在修复之前又能运行了。不要假定错误中提到的 rulebook 仍在保护你。
原因为“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 和保留期。
最后修改于 2026年10月22日