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

过滤器

  • 窗口:上文所述的、由保留期派生的选择器。
  • 判定 chip:All、Blocked 和 Allowed 始终存在;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(Blocked、Allowed 或 Error)、智能体 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 check 和 cc-safety-net policy apply。它写入同样稀疏的文件,针对同一份运行时用户基线计算差异,在你确认之前不写入任何内容。文件约定和两个范围的合并规则见策略。 有一处差别值得留意。智能体执行的 cc-safety-net policy apply 会被防护以 intent hard_stop 拒绝,因为改写 CC Safety Net 所执行的配置必须由你本人来做。仪表板的应用同样是人的操作:你在页面上亲手点击,而这个页面只有持有会话令牌的人才能打开。但正如本地环回范围所述,启动仪表板的智能体也持有这个令牌。

测试命令

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

安全预设

此视图提供三个安全预设,界面标签为 Standard、Strict 和 Paranoid。它们是工作区后续自定义所继承的默认值,严格程度逐级提高。各预设和能力的准确变化以模式为准。 此处会列出提高保护强度的环境变量,用于解释界面级别与实际行为的差异。默认折叠的 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。 切换规则会存储显式 on 或 off override。把规则恢复为继承值时会删除 override,而不是存储冗余值。每条规则还提供 Use inherited setting 直接完成此操作。面板标题中的 Restore defaults 会一次清除所有 override。 允许路径也在此面板中。指向列表内路径的递归删除不会被阻止,这正是 /tmp 可用的原因。条目必须是绝对路径或以 ~/ 开头的目录,主目录会被拒绝。完整的校验表见允许路径。允许路径放宽和保留的规则见允许的命令。

机密保护

此区域包含 master switch 和按类别分组的 per-pattern 复选框,范围从默认敏感路径(主目录路径、凭证 basename、扩展名和变体)到 Coding CLI credential 和 Coding 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 projects 或 This project)以及规则数量。 列表显示 override 生效后实际执行的规则。被 override 禁用的规则仍属于原 rulebook,也仍在文件清单中,但不会显示在列表里。因此,这里展示的是生效后的 rulebook,不是原始文件内容。刷新按钮会重新读取磁盘。 没有配置任何 rulebook 时,面板会指引你运行 cc-safety-net rule init。若已有 rulebook 但全部被丢弃,面板会说明这一点,并把你引向诊断面板。

诊断

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

Prompt composer(仅复制)

Composer 为编码智能体构建 prompt。唯一操作是复制 prompt。此视图中没有创建、保存或写入控件,服务器也没有写入 rulebook 的路由。 输入:
  • 范围:Project 或 All 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 failed 或 Uninstall 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日