Skip to main content
cc-safety-net gui 会打开本地仪表板。你可以查看本机判定,了解阻止原因,并直接修改策略,无需手动编辑 JSON。 本页说明你可以在仪表板中做什么,以及哪些操作具有破坏性。它不重述底层格式:policy.json schema 见策略,rulebook 编写见自定义规则,审计记录 schema 见审计日志

启动仪表板

该命令会打印仪表板 URL,然后在默认浏览器中打开:
只需要 URL 而不想启动浏览器时,请传入 --no-open。这适用于 SSH、容器,或需要在指定浏览器配置文件中打开 URL 的情况:
--no-open 是除 -h, --help 之外的唯一标志。其他任何参数都会被拒绝,输出 Usage: cc-safety-net gui [--no-open] 并返回非零退出码。 浏览器启动失败时,命令会打印底层错误和 Open this URL manually: <url>,然后继续提供服务。服务器在前台运行,直到你用 Ctrl-C 停止。

本地环回范围

仪表板不是托管服务。它的服务器只监听本地环回接口:
  • 服务器只绑定 127.0.0.1,端口为临时端口。局域网上的任何设备都无法访问它。
  • 每次启动都会生成一个新的随机令牌并嵌入 URL。每个请求都必须携带该令牌,改变状态的请求还必须把它作为请求标头发送。缺少令牌的请求会被拒绝,返回 403
  • 超过 1 MiB 的 JSON 请求体在解析前就会被拒绝,返回 413 和错误 Request body is too large;否则整个请求体都会驻留在内存中。
  • 响应一律带 cache-control: no-store 返回。
令牌打印在 stdout 上,启动这条命令的人就能读到它。浏览器页面正是靠这一点才能工作,但这也意味着:自己运行了 cc-safety-net gui 的智能体同样能访问那些由令牌把守的端点,其中包括下文的项目策略应用。令牌挡得住另一个页面,也挡得住没有看到这一行的进程,却挡不住启动者本人。直接路径仍然是封死的:智能体用命令编辑 policy.json,或者运行 cc-safety-net policy apply,依旧会被拒绝。 页面读取的数据全部来自本地策略文件和审计日志,不会为此发出出站请求。只有概览中的更新检查和 GitHub 加星操作例外,而且必须由你主动启用。
由于令牌按每次启动生成,从上一次会话收藏的 URL 不再有效。重新运行 cc-safety-net gui 获取新的 URL。

六个视图

侧边栏有六个视图,采用 hash 路由,因此可以在同一会话内链接或收藏其中某个视图: 无法识别的 hash 会回退到概览。集成和规则视图在首次访问时才加载数据。

概览

概览汇总的是一个保留窗口内的数据,而不是历史总量。该窗口为最近 7 天;保留期短于 7 天时,则为整个保留窗口。标题会以 Last N day(s) 说明它实际使用的窗口。 指标卡。 已阻止已分析两个计数器各有一张按天绘制的迷你图,时间从旧到新。每张图按自身最大值缩放,因此两张图的柱高不能直接比较。请比较数字。 保护状态。 卡片显示你的安全级别;override 偏离预设时会追加 · Customized;同时报告有多少条规则生效、机密保护是否开启。此卡只反映已保存的状态:策略视图中暂存的未保存开关在保存前不会影响它。破坏性命令保护或机密保护关闭时,或因配置中某项无法加载而正在执行 fallback 配置时,会显示横幅。 健康状态条。 报告 hook 是否在检测到的智能体中处于活动状态,或者检测到了智能体但 hook 未激活,又或者根本没有检测到智能体 hook。它还会提示可用的更新。有需要处理的问题时,它会链接到集成视图。 阻止次数最多的命令和规则。 两个面板各显示前五项,统计窗口与指标卡相同。选择某条命令会跳到活动视图,并应用一个可移除的精确命令签名过滤条件,只显示阻止记录。选择某条规则则按规则命名空间跳转:custom.* rule ID 进入规则视图,内置 rule ID 进入活动视图,并把该 rule ID 预填进搜索框。 防护错误。 窗口内如果有拒绝来自评估失败而非策略,就会出现一个按钮,文案为 。点击后会打开活动视图,并过滤为错误判定。这些拒绝属于 fail-closed:CC Safety Net 无法完成分析,因此拒绝了命令。如果反复出现,请参阅故障排除

活动

活动视图按时间倒序列出本地审计日志中的命令。命令在写入时就已脱敏,在任何内容进入日志之前完成;脱敏只覆盖已识别的凭证形式,因此条目中仍可能包含路径、主机名和名称。分享此视图中的内容前,请先参阅审计日志,了解记录 schema 和准确的脱敏范围。

时间窗口由保留期决定

时间窗口选择器不是固定选项集合。它根据配置的审计日志保留期计算:候选窗口为 7、30、90、180 和 365 天,只保留严格短于保留期的值;保留期本身始终作为最宽的选项追加。这样,任何选项都不会承诺显示已被保留期清理删除的历史记录,同时完整日志始终可访问。 窗口按完整的本地日历日计算,即今天加之前的若干天,因此概览中按天分桶的迷你图之和与总数完全一致。请求超过保留期的窗口会被拒绝;缩短保留期后,当前选择会自动收窄。保留期本身如何配置和执行,见审计日志

过滤器

  • 窗口:上文所述的、由保留期派生的选择器。
  • 判定 chipAllBlockedAllowed 始终存在;Errors 仅在窗口内含防护错误时出现;Likely false positive 仅在启发式找到候选项时出现。该启发式会标记带失败阶段的拒绝,以及在同一会话中被拒绝两次及以上的命令签名。
  • 智能体 chip:只有窗口内出现至少两个不同的已知智能体时才显示,并提供 All agents chip 用于清除过滤。
  • 命令 pill:精确匹配命令签名、且只显示阻止记录的过滤条件;从概览点击跳转时添加,可在此处移除。
  • 搜索:顶栏输入框(Filter by rule or command)以不区分大小写的子串匹配 rule ID 和命令文本。
重新加载时,无效过滤条件会自动修复。如果已过滤的智能体不再出现,或窗口内不再有错误或疑似误报,对应条件会重置,而不是显示空列表。

刷新

刷新按钮会同时重新加载概览和活动,避免指标卡与活动列表不一致。即使本地刷新很快,按钮也会短暂旋转,以确认操作已经执行。

渲染条目与计数

活动列表最多呈现 500 个条目。上限按判定类别分配:每类保证获得一半容量,并把未使用的容量借给另一类。因此,大量拒绝不会让允许记录完全消失。 计数不受 500 条显示上限影响。Chip、指标卡和排名面板使用服务器端完整窗口聚合,与列表实际呈现的内容无关。页脚用 Showing X of Y entries from the last N day(s) 同时说明显示数和总数;发生截断时再添加 (capped at 500, newest of each decision) 只有一种情况会使计数本身不完整:某些审计日志来源无法读取时,页脚会追加 N audit log source(s) could not be read, so this list is incomplete.。聚合也会缺少这些条目,因此在来源恢复可读前,列表和计数都只能视为下限,不能视为总数。
浏览列表并据此下结论之前,请先读页脚。Showing 500 of 4,120 表示列表只是最近的一个切片,而每个 chip 和指标卡仍反映全部 4,120 个条目。

每个条目的操作

每个条目都显示判定 badge(BlockedAllowedError)、智能体 badge、rule ID chip、相对时间戳,以及把原始日志条目复制为 JSON 的按钮。过长的命令会被折叠,并提供 Show more 开关。复制出来的是原始审计记录,字段说明见审计日志 被拒绝的条目提供报告误报,点击会打开一个对话框,准备一份预填好的公开 GitHub issue。继续之前,命令和日志条目都可以编辑;项目路径会被替换为 <project>,主目录被替换为 ~;在你自己到 GitHub 上提交之前,不会提交任何内容。 被允许的条目提供今后阻止此命令操作。它会把命令预填到规则视图的 prompt composer 中,但不会创建规则。参见下文规则

策略

策略视图用于选择 CC Safety Net 应阻止的内容。此视图中的所有内容都是内置保护:安全预设、破坏性命令规则,以及 CC Safety Net 自带的机密保护模式。自定义 rulebook 属于独立机制,不在此处编辑。 此视图写入文件的完整字段约定见策略

已保存与未保存

编辑会累积到草稿中,只有保存时才生效。
  • 草稿与磁盘内容不一致时,策略视图会出现保存栏,带有丢弃保存两个按钮。
  • 其他每个视图的顶栏都会出现 Unsaved policy changes · Review chip,点击即跳转到这里。
  • 在同一浏览器会话内重新加载页面,草稿依然保留;保存、丢弃、修复或重置都会清除它。
  • 带着未保存的更改离开页面时,会先弹出提示。
保存操作会写入策略文件,并报告路径。磁盘上的策略存在错误时,表单控件显示内置默认值,不显示运行时从文件中保留的有效值。只有原始 JSON 镜像仍显示文件内容。此时保存会被拒绝,并提示 Repair policy before saving changes.,以免默认值覆盖文件。请先修复,再保存。修复后,表单会重新加载保留下来的设置。

起草项目策略

视图顶部的 Draft project policy 会把整个策略视图切换为项目文件的草稿。草稿栏列出写入路径,并说明这个文件遵循的规则:Only the fields you mark are written here; everything else keeps inheriting from each member's own policy. Exit draft 返回编辑你自己的策略。在提供原生目录选择器的环境中会出现 Change…,确认后丢弃当前草稿并改用另一个目录。在你改动之前,目标就是仪表板的启动目录。 标记与继承。 每个控件都会带上一个 chip,说明它显示的值来自哪里。Inherited 表示该字段不写入项目文件,每位成员继续使用自己的值。Set by project 表示草稿会写入该字段,点击这个 chip 即可退回继承。编辑控件就会标记它对应的字段。被标记的路径列表只显示项目自己的条目,因此刚标记时是空的,不会把你的个人路径发布到仓库里。 复核并应用。 Save 变成 Review & apply。点击后向服务器请求差异,并打开 Apply this project policy? 对话框,其中给出写入路径,以及一张按 Setting / Now / After 排列的生效策略前后对照表;某一侧没有该字段时显示 (unset)。没有差异时,表格位置显示 No change to the effective policy.。表格下方逐条列出草稿相对用户策略削弱的字段,措辞与策略中记载的一致;磁盘上已有的文件无法读取时,还会加上 The existing project policy file is invalid and will be replaced.。默认获得焦点的是 Cancel。 差异加载期间修改表单,应用会被拒绝并提示 Error: the draft changed while the review was loading. Review it again.,需要重新复核一次。如果另一个标签页改动了项目目录,草稿会按新目标重新加载,并要求你在应用前再复核一遍。 草稿无法启动的情况。 用户策略有错误时,运行时会退回到保护性默认值;以这些值为基础起草,会让默认值看起来像团队继承的基线。因此仪表板拒绝起草,并连同诊断信息提示 Error: repair your user policy before drafting a project policy.。项目文件存在但读不出来则是另一回事:草稿从空白开始,并把该文件的诊断信息显示在表单上方。 与 CLI 相同的保证。 这份草稿就是表单形式的 cc-safety-net policy checkcc-safety-net policy apply。它写入同样稀疏的文件,针对同一份运行时用户基线计算差异,在你确认之前不写入任何内容。文件约定和两个范围的合并规则见策略 有一处差别值得留意。智能体执行的 cc-safety-net policy apply 会被防护以 intent hard_stop 拒绝,因为改写 CC Safety Net 所执行的配置必须由你本人来做。仪表板的应用同样是人的操作:你在页面上亲手点击,而这个页面只有持有会话令牌的人才能打开。但正如本地环回范围所述,启动仪表板的智能体也持有这个令牌。

测试命令

把 shell 命令粘贴到测试命令中,就能看到它是否会被阻止。测试基于你当前未保存的编辑进行评估,因此可以先验证改动,再决定是否采用。 在项目草稿中,测试评估的是运行时真正会加载的内容,也就是继承的基线叠加草稿标记的字段。路径列表按你自己的条目与草稿条目的并集处理,因为加载器也是这样合并的。此视图的保护状态和每条规则的状态行使用同一份评估结果,所以被标记的路径列表在界面上显示为空,并不会把你自己的路径说成没有保护。 测试同样会执行从磁盘加载的自定义 rulebook 规则,尽管 rulebook 无法在仪表板中编辑。把它当作真实判定的预览,而不只是内置层的预览。要在终端里做同样的分析,参见 explain

安全预设

此视图提供三个安全预设,界面标签为 StandardStrictParanoid。它们是工作区后续自定义所继承的默认值,严格程度逐级提高。各预设和能力的准确变化以模式为准。 此处会列出提高保护强度的环境变量,用于解释界面级别与实际行为的差异。默认折叠的 Advanced overrides 区域显示预设解析出的各项能力,包括 fail closed、paranoid rm -rf 检查和 paranoid 解释器。你可以单独调整某项能力,不必更改预设。工作流例外与安全级别分开配置。

破坏性命令保护

这里有一个 master switch,其下的规则分为四个可折叠 tier: 所有 tier 默认折叠。在策略视图中搜索时,含匹配项的 tier 会自动展开。始终执行 tier 没有开关,也没有单条规则的复选框。它的标题把规则数显示为 N protections,每条规则都标记为 Always enforced,并带一个 ? 示例弹窗。 三个可配置 tier 会在标题中显示 N on · N off 计数,旁边是标记为 All <tier> protections 的 tier 开关。只要该 tier 中至少有一条规则处于开启状态,开关就是选中的。master switch 关闭时,tier 开关会被禁用。拨动它会批量写入与单条复选框相同的 per-rule override。最终与继承值一致的规则不会保留 override,因此没有单独保存的分组设置。 master switch 开启时,面板摘要显示 N active, N disabled。关闭后,摘要改为 Configurable protection disabled. Catastrophic protections remain active; saved rule settings and allow paths are preserved.。始终执行 tier 仍会继续阻止。 每张可配置规则卡片都有 ? 弹窗,其中给出该规则阻止的具体命令示例。状态行说明当前值的来源。例如, 表示 master switch 优先于你的 override。 切换规则会存储显式 onoff override。把规则恢复为继承值时会删除 override,而不是存储冗余值。每条规则还提供 Use inherited setting 直接完成此操作。面板标题中的 Restore defaults 会一次清除所有 override。 允许路径也在此面板中。指向列表内路径的递归删除不会被阻止,这正是 /tmp 可用的原因。条目必须是绝对路径或以 ~/ 开头的目录,主目录会被拒绝。完整的校验表见允许路径。允许路径放宽和保留的规则见允许的命令

机密保护

此区域包含 master switch 和按类别分组的 per-pattern 复选框,范围从默认敏感路径(主目录路径、凭证 basename、扩展名和变体)到 Coding CLI credentialCoding CLI config 位置。每个组标题是可折叠按钮,显示 N on · N off;旁边的组开关标记为 All <category> protections。它与破坏性规则 tier 开关行为相同:组内任一规则开启时即为选中,master switch 关闭时禁用,并批量写入 per-rule override。组默认折叠,在策略搜索期间会自动展开。 保护具体文件路径的规则带有 ? 按钮,点击可打开受保护的路径弹窗,其中准确列出该规则覆盖了哪些路径。 并非所有规则都默认开启。Coding CLI config 规则出厂时为关闭。settings 和 MCP 配置文件内嵌了凭证,但智能体也会在日常工作中编辑它们,因此需要逐条主动开启。只有当复选框状态偏离规则默认值时,系统才会存储 override。勾选一条默认关闭的规则会写入 on override,取消勾选则删除该 override。对默认开启的规则,取消勾选会写入 off,重新勾选则删除 override。 master switch 开启时,面板摘要显示 N active, N disabled。关闭时显示 Protection disabled. Saved rule settings and deny paths are preserved. 已保存的机密允许路径同样保留在草稿中。 拒绝路径也在此面板中。机密保护开启时,配置的路径及其下的所有内容都会被阻止。拒绝路径依赖 master switch。关闭机密保护后,系统不再执行这些拒绝路径。可接受的条目形式见拒绝路径 允许路径同样在此面板中。可以让某个具体文件或目录树免于内置的模式规则,但拒绝路径和 Coding CLI 保护仍然适用。每个新增条目在进入草稿前都会经过仪表板校验:glob 模式、覆盖主目录的路径以及防护自身的配置都会被拒绝。完整的优先级和校验规则见机密允许路径

策略 JSON

Policy JSON 面板位于此视图底部,是带复制按钮的只读镜像,不是第二个编辑器。面板副标题说明你看到的是什么。

要求确认的操作

单条规则的开关、预设变更以及添加或删除路径都会暂存在草稿中,由保存统一提交,因此不会单独确认。仪表板只对降低保护强度或丢弃配置的操作弹出模态确认: 在上述每个对话框中,取消都是默认焦点。
关闭破坏性命令保护或机密保护后,该层中的所有可配置规则都会停止阻止,直到重新开启。只有始终执行的破坏性规则 tier 会继续阻止。应优先使用单项规则 override 或较低的预设,而不是关闭 master switch。

修复

磁盘上的策略文件存在错误时,此视图会显示策略修复可用横幅和一个 Repair 按钮。修复会写入规范化的 JSON,保留所有有效设置并丢弃无效字段。如果 JSON 完全无法解析,则改为恢复默认值。加载的策略没有错误时,该按钮不起作用。
修复会丢弃无效字段,并在文件无法解析时回退到默认值。如果文件中有你在意的手写配置,请先备份到安全的地方,再执行修复。

重置

重置有意放在此视图,而是位于设置视图的危险区域中。

规则

规则视图显示你编写的自定义 rulebook,与策略视图中的内置保护不同。rulebook 的格式、范围、override 和校验方式见自定义规则,本页不再重述。
规则视图不是 rulebook 编辑器。CC Safety Net 绝不会从仪表板写入 rulebook。此视图以只读方式显示实际执行的规则,并生成 prompt 文本,供你复制给负责编写规则的编码智能体。

Rulebook 面板(只读)

每张 rulebook 卡片显示名称、版本 badge、与名称不同时显示的 source spec、范围(All projectsThis project)以及规则数量。 列表显示 override 生效后实际执行的规则。被 override 禁用的规则仍属于原 rulebook,也仍在文件清单中,但不会显示在列表里。因此,这里展示的是生效后的 rulebook,不是原始文件内容。刷新按钮会重新读取磁盘。 没有配置任何 rulebook 时,面板会指引你运行 cc-safety-net rule init。若已有 rulebook 但全部被丢弃,面板会说明这一点,并把你引向诊断面板。

诊断

没有问题时,诊断面板会隐藏。面板出现时,其中的错误表示某个 rulebook 已被丢弃,其规则未执行。你编写的规则未触发时,应先检查这里。

Prompt composer(仅复制)

Composer 为编码智能体构建 prompt。唯一操作是复制 prompt。此视图中没有创建、保存或写入控件,服务器也没有写入 rulebook 的路由。 输入:
  • 范围ProjectAll projects
  • 项目路径:仅在项目范围下显示,默认预填仪表板的启动目录。在提供原生目录选择器的环境中,该字段为只读,并配有 Choose… 按钮;运行时没有可用选择器时,该字段改为可编辑。
  • 请求:描述你想要的规则。规则匹配的是命令、它的子命令路径和精确参数,而不是文件路径或模式。
  • 示例:一键填入的起始文案,分别用于建议规则、阻止命令和校验现有规则。
生成的 prompt 会要求智能体使用 cc-safety-net skill;该 skill 不可用时,先运行 npx -y cc-safety-net rule doc,并以其输出作为 schema、路径和校验的准绳。prompt 包含范围、项目路径和现有 rulebook 名称,帮助智能体选择未占用的名称。它包含 rulebook 名称。规则名称、被阻止的参数、原因和版本不会随 prompt 离开你的机器。 规则尚未加载、请求为空,或选择了项目范围却没有项目路径时,复制会被拒绝,并给出具体的提示信息。

集成

集成视图为本机上的每个编码智能体安装或删除 CC Safety Net hook。智能体面板列出检测到的 CLI 及其 hook 状态。每个智能体的连接方式见集成架构,GUI 外的等效步骤见安装 Not inspected 附带一条 tooltip 说明这一点:This runtime's state file could not be read, so its status is unknown. CLI 本身已找到,因此仍会提供安装操作。 检测结果决定可用操作。未检测到 CLI 时不会显示按钮,因为没有可安装 hook 的目标。安装和卸载按顺序执行,不会交错。请求执行期间,按钮会被禁用。失败时会报告 Install failedUninstall failed,不会静默回退。 刷新按钮会重新检测每个智能体,适合在安装 CLI 或手动编辑智能体配置后使用。下方的系统面板报告 CC Safety Net 版本、Node.js 版本和本机检测到的平台。

设置

设置视图涵盖外观、文件位置和维护操作。 外观。 主题控件按 Auto → Light → Dark 循环切换。该偏好存储在当前浏览器中,不写入策略。 文件。 只读信息行,显示 CC Safety Net 在本机上的读写位置:策略文件和审计日志目录。有项目策略生效时,两行之间会出现 Project policy 行;信息行下方还有一条以 Merged on top of this file: 开头的提示,列出这个文件改了哪些设置。 审计日志保留期。 可接受的天数、记录内容和清理方式见审计日志。与策略视图不同,保留期一改动就立即保存,没有保存栏。策略视图存在未保存的更改时,无法保存保留期。你需要先保存或丢弃这些更改。保留期只属于用户范围,因此项目草稿打开期间同样无法保存。磁盘上的策略有错误时,策略保存按钮不可用,但保留期控件仍能保存。此时表单中只有默认值,修改保留期会写入一份除新保留期外全部使用默认值的文档。因此,修改保留期前请先修复策略。
缩短保留期不可逆。早于新窗口的审计条目会在下次清理时删除,且无法恢复。活动视图之后只能回溯到新的保留期。仪表板会在缩短保留期前要求确认,并列出要清理的日志目录。请先导出需要的内容。活动列表中的每个条目都可以复制为 JSON。
版本。 一行只读信息,显示当前运行的 CC Safety Net 版本。 危险区域。 只有重置策略这一项操作。它会在配置的路径上恢复默认策略 JSON。
重置会丢弃已保存的配置。所有预设选择、规则 override、允许路径和拒绝路径都会恢复默认,且无法撤销。重置只影响策略文件。自定义 rulebook 是独立文件,不会被改动。
策略文件 schema 见策略;rulebook 编写见自定义规则;审计日志格式和保留行为见审计日志gui 及其他所有命令见 CLI 命令
最后修改于 2026年8月31日