policy.json 是 CC Safety Net 的用户范围设置文件。它选择你的安全预设,打开或关闭各个内置保护,添加额外的受保护路径,并设置审计记录的保存时间。
它与 rule.json 和rulebook分开,后者定义你自己的自定义阻止规则 - 有关该schema,请参阅自定义规则。
策略文件位置
设置
CC_SAFETY_NET_HOME 后,该文件直接位于该目录下,作为 rules/ 的同级文件。有关覆盖本身,请参阅环境。
只有一个策略文件。 不存在项目范围内的 policy.json - 运行时读取该单个路径,而不读取其他任何内容,因此项目无法降低或提高你的策略。
当仪表板写入文件时,它会创建带有 0700 的目录和带有 0600 的文件。
策略文件保护
规范用户policy.json 在每个运行时状态(ready或degraded)中都是受保护的路径。策略文件保护在加载配置快照之前运行,因此损坏的配置不会削弱它。这些操作硬停止:
- 通过任何工具写入、编辑和修补文件
- Shell 命令将文件命名为操作数
- 将重定向写入文件
- 其目录或任何祖先的递归
rm find … -delete和find … -exec rm达到它mv以文件、其目录或祖先作为源
[、cat、file、grep、head、jq、less、ls、more、rg、sed、 stat、tail、test 和 wc — 仅当 sed 未与 -i 或 --in-place 就地编辑时。 Grep 和 Glob 等只读工具完全不受此限制。
编辑策略文件
选择以下选项之一:- **使用仪表板。**运行
cc-safety-net gui。仪表板使用正确的权限写入文件,并且可以修复未验证的文件。虽然文件有错误,但表单会显示完整的默认值,而不是文件中的有效值。在修复文件之前,你无法保存。修复保留每个已识别的有效设置并丢弃无效字段。如果你不希望出现此修复行为,请手动编辑文件并使用status进行检查。 - 直接编辑 JSON。 在编辑器中打开文件并手动更改它。运行时会在下一次工具调用时读取更改。你不需要重新启动任何东西。
degraded 判决意味着你的文件的一部分被拒绝。 npx cc-safety-net doctor 准确命名了哪些字段。运行时从不自行重写 policy.json,因此无效文件将完全保持原样,直到你修复它或使用仪表板修复操作。
完整的策略示例
每个字段都有其默认值:version。其他所有字段都可以省略,省略的字段采用上面显示的默认值。如果该文件根本不存在,CC Safety Net 将按这些默认值运行并保持 ready。
根对象是 严格:无法识别的顶级密钥是错误,safety、workflow、destructive_command_protection、secret_protection 或 audit 内无法识别的密钥也是如此。
schema参考
integer
必填
schema版本。必须是
1。这是唯一必填字段;值缺失或错误的诊断为 version must be 1。string
默认值:"standard"
安全预设。
"standard"、"strict" 或 "paranoid" 之一。每个预设都提供继承的能力默认值:strict 启用 fail_closed; paranoid 启用 fail_closed、paranoid_rm 和 paranoid_interpreters。请参阅模式 了解每种能力的变化。boolean
明确设置故障关闭能力(向上或向下),无论预设如何。省略要从预设继承的键。
boolean
显式设置偏执
rm 能力,向上或向下。省略要从预设继承的键。boolean
明确设置偏执解释器的能力,向上或向下。省略要从预设继承的键。
boolean
默认值:"false"
在已确认的链接worktree中放宽本地丢弃 git 规则。检测是失败关闭的:如果工作目录不能被明确识别为链接的worktree,则更严格的默认规则仍然有效。请参阅模式 了解放松和从不放松的确切列表。
boolean
默认值:"true"
已注册破坏性命令规则的主开关。将其设置为
false 会短路每个已注册的规则 - 除了始终强制执行的灾难性规则。object
默认值:"{}"
每规则状态,由注册的破坏性命令规则 id 键入,值为
"on" 或 "off"。应用在能力派生状态之上,因此 "on" 可以启用你的预设未启用的规则,而 "off" 可以禁用它打开的规则。string[]
默认值:"[]"
不受破坏性命令规则约束的路径。条目必须是绝对的或以
~/ 开头。boolean
默认值:"true"
机密保护总开关。将其设置为
false 会跳过整个机密阶段,包括你的 deny_paths。object
默认值:"{}"
按已注册机密保护规则 id 设置的单项规则状态,值为
"on" 或 "off"。启用机密保护时,大多数机密规则默认开启,因此通常使用 "off"。编码 CLI 配置层默认关闭,使用显式 "on" 可以启用其中一项规则。integer
默认值:"30"
在清理删除审计历史记录之前要保留天数。必须是
1 和 365 之间的整数。安全级别和能力覆盖
safety.level 选择预设;然后,safety.overrides 显式设置各个能力。这是唯一可以降低能力的地方——环境标志只能升高。
paranoid 预设,但不阻止解释器单行命令。最终的能力组合不匹配任何预设时,报告的有效级别会变为 custom。
环境可以提高你的策略水平并迫使其能力发挥作用,但绝不会相反。请参阅环境,了解
policy.json 和环境之间的完整排序,包括 worktree_mode OR 和旧版 SAFETY_NET_* 别名。破坏性命令保护
destructive_command_protection.overrides 通过id来寻址内置规则,例如:
unknown destructive command rule id "<id>",除 "on" 或 "off" 之外的任何值都会被拒绝为 destructive_command_protection.overrides.<id> must be "on" or "off"。
灾难性规则始终强制执行且用户不可配置。 它们忽略 enabled: false 并忽略 "off" 覆盖。这些规则涵盖删除 / 或你的主目录以及删除 Git 元数据及其 PowerShell 和 find 等效项。有关每个规则强制执行的行为,请参阅阻止的命令。
允许路径
destructive_command_protection.allow_paths 将特定位置排除在破坏性命令规则之外。验证比拒绝路径更严格:
机密保护
机密保护阻止对包含凭据的文件的读取和写入。这部分是配置契约;内置规则的完整目录 - 每个 ID、每个保护的路径以及豁免 - 是机密保护参考。secret_protection.overrides 通过 id 寻址各个内置规则,其值为 "on" 或 "off"。 "off" 禁用默认启用的规则; "on" 选择默认关闭层中的规则:
unknown secret protection rule id "<id>",任何其他值都会被拒绝,并显示为 secret_protection.overrides.<id> must be "on" or "off"。
默认情况下关闭的规则
只要启用机密保护,大多数内置机密规则都会启用。第一层不是:编码 CLI 配置规则,它涵盖支持的编码智能体的设置和 MCP 配置文件。这些文件可以内嵌凭证,但智能体也会将它们作为日常工作进行编辑,因此该层会离开,你可以选择使用显式"on" 覆盖的每个规则。你打开的配置规则可以保护智能体的用户级配置文件,并且还可以保护在任何存储库根(例如任何 .mcp.json)处与名称匹配的项目级文件。
机密保护参考中列出了十个默认关闭的 ID、其默认打开的 编码 CLI 凭证 对应项以及每个规则保护的确切路径。
拒绝路径
secret_protection.deny_paths 在内置敏感路径之上添加你自己的受保护位置。在内置规则之前首先检查拒绝路径,命中是归因于规则 ID secret.deny-path 的硬停止。
验证:
相对条目之所以被接受,正是因为它们针对每个会话的工作目录进行解析,而保存文件时该工作目录是未知的。被拒绝的类 - home、home 之上的任何内容以及
/ - 没有合法的读取,并且基本上会阻止 home 下每个工作区中的每个命令。
有效的拒绝路径保护什么:路径本身以及每个后代。在比较之前,目标会根据执行工作目录进行规范化,每个配置的路径会根据配置工作目录进行规范化。
值得了解的两个限制:
- 拒绝路径仅在
secret_protection.enabled为true时适用。将其设置为false会关闭它们以及机密阶段中的其他所有内容。 secret.deny-path不是已注册的机密规则 ID,因此secret_protection.overrides无法禁用它。只有secret_protection.enabled: false可以。
审计保留
audit.retention_days 控制审计记录在保留扫描删除之前保留的时间。默认值为 30 天,接受的范围为 1 到 365。
保留期独立于策略的其余部分解析。清理扫描直接从文件中读取这一字段,因此即使策略的其他部分验证失败,审计记录仍会按独立解析出的保留期清理。缺失、非整数或不可用的值会回落至 30;低于
1 的值被限制到 1,高于 365 的值被限制到 365。因此,超出范围的值会同时执行两件事:模式拒绝它们,降低运行时间,而扫描限制它们。 "retention_days": 1000 均显示为诊断并在 365 天进行清理。无效的策略行为
无效的policy.json 永远不会阻止正常工作。它将运行时移至 degraded 并使用回退。
字段保留会优先提供保护,因此损坏的文件通常会产生比你配置的更多拒绝:
配置恢复是
degraded状态的完整契约,包括如何上报以及如何回到ready。
相关页面
模式
每种安全能力有何变化,以及worktree 模式放宽了哪些内容。
环境
每个变量,包括提高策略级别的变量。
自定义规则
你自己的阻止规则的单独
rule.json 和rulebookschema。配置恢复
ready与degraded、回退矩阵和修复顺序。