Skip to main content
CC Safety Net 以插件、扩展或 hook 的形式安装在编码智能体内,不需要常驻服务或守护进程。部分集成会为每次检查启动一个短时 hook 子进程。 大多数集成支持 Windows、macOS 和 Linux。它们会检测主机操作系统,并按系统规则处理路径和解析命令。在 Windows 上,它们会按不区分大小写的方式处理路径,并通过 COMSPECPATHEXT 解析 cmd.exe 或 PowerShell。安装命令和交互式选择器也能识别 npm 在 Windows 上安装的 .cmd shim,因此 install --codex 这类命令可以找到智能体 CLI。Windows 自动化测试只覆盖分析器和部分集成。其余宿主的 Windows 支持未经测试,只提供尽力支持。Amp 官方手册仅列出 macOS、Linux 和 WSL,不包括原生 Windows。 Hermes AgentOpenClaw 集成仅支持 macOS 和 Linux。它们使用 POSIX 主目录路径 ~/.hermes~/.openclaw,不支持 Windows 路径。 开始前请安装 Node.js 18 或更高版本。示例使用 npx 运行 CLI 子命令。 使用 cc-safety-net install <target-flag> 安装单个集成,使用 cc-safety-net uninstall <target-flag> 将其删除。cc-safety-net update 则刷新所有已安装的集成。

交互式安装

在交互式终端中,不带目标参数运行安装程序,可从检测到的编码 CLI 中选择一个或多个目标:
在选择器中,Space 选择目标,Enter 确认,u 改为更新每个已安装的集成,qEsc 取消且不做任何更改。@latest 限定符很重要:不加版本限定的 cc-safety-net 可能会让 npx 从缓存中重新运行旧副本,而不是当前发布版本,因此本页的每条安装、卸载和更新命令都固定该限定符。 以相同方式删除集成:
如果你经常使用 CLI,可以全局安装,以获得相同命令的短别名 ccsn
该别名随全局安装一并提供;通过 npx 运行时仍使用完整的 cc-safety-net 名称。

更新已安装的集成

要原地刷新每个已安装的集成,请运行:
update 会检测已安装的集成,包括已禁用的集成,并用更新模式重新运行各集成的安装流程。找不到智能体 CLI 的集成会报告为 skipped。如果没有安装任何集成,命令会要求你先运行 cc-safety-net install。在交互式安装程序中按 u 会执行相同的更新。 update 也是主要版本之间的升级路径。在 v1 安装上运行它会将每个已安装的集成迁移到当前 v2 版本。如果你在 v1 内联配置中定义了自定义规则,请完成旧配置迁移。然后运行 npx cc-safety-net doctor,确认运行时为 ready 如果你在 2.2 或更早的版本上从 GitHub 安装过 rulebook,升级后需要按范围各运行一次 rule sync,用户范围的来源加上 --global。rulebook 现在是落盘后的实时文件,不再依赖 lock 和缓存。该命令会把每个缓存的 rulebook 迁移到其来源实际加载的实时路径,然后删除残留文件。在此之前,来自 GitHub 的这些规则处于未生效状态,statusdoctor 会把这些来源报告为 degraded。

安装指定智能体

对于脚本化的非交互式安装,请传入且仅传入一个目标参数。传入零个或超过一个目标参数都会报错。在交互式终端中,不带目标参数会启动安装选择器。 所有安装命令都是幂等的。对已配置的智能体再次运行命令是安全的,最终只会保留一个托管条目。

Amp Code 安装

此命令把托管插件构件发布到你账户的 Amp Personal Plugins 仓库。构件是一个名为 cc-safety-net 的目录,里面放着 Amp 加载的入口文件 index.ts。个人插件跟随账户生效,因此也能保护在远程计算机上执行的线程,例如 Amp Orb。 安装需要 amp CLI 和已登录的账户。安装程序先运行 amp plugins repositories --json,查找你可写的 Personal Plugins 仓库。缺少 CLI 或未登录时,安装会停止并提示运行 amp login。然后,安装程序将 user-plugins 克隆到一次性临时目录,写入 cc-safety-net/index.ts,以工具身份 cc-safety-net 提交,再推送。暂存时只指定这一个文件(git add -- cc-safety-net/index.ts),而不是整个目录。如果仓库把该路径加进了 gitignore,git add 会失败并中止安装,而不是什么都没暂存却报告插件已安装。提交时会关闭签名,避免全局 git 配置阻塞安装。重新运行命令会更新已发布的构件。 早期版本把插件作为单个文件 cc-safety-net.ts 发布在仓库根目录。安装会迁移到新布局。托管的旧文件在同一次提交中删除,非托管的旧文件则会使安装失败。 安装还会将你的用户策略文件快照嵌入已发布的构件。运行时只有在没有策略文件的计算机上(例如 Orb 的空主目录)才应用该快照;计算机上存在的策略文件(即使无效)始终优先。如果你的策略文件不存在或无法解析,安装会发布不含快照的构件。快照不包含审计保留期、用户 rulebook 和项目范围策略;策略修改会随下一次 install --ampupdate 发布。
卸载以相同的提交并推送流程从个人仓库中删除 cc-safety-net/index.ts,根目录下如有托管的 cc-safety-net.ts 也一并删除。卸载只删除这一个入口文件,你放在 cc-safety-net 目录里的其他文件不受影响;旧根路径上的其他内容,包括非托管文件、符号链接和目录,也都原样保留。卸载报告删除的路径是 cc-safety-net 目录;只找到旧根文件时,报告的就是那个文件。
安装、更新或卸载后,请重启 Amp 或运行 plugins: reload,使更改生效。
对于个人仓库中不该由自己替换的插件,安装和卸载都会拒绝改动。两者都会拒绝符号链接或非目录的 cc-safety-net 条目,也会拒绝其中是符号链接、不是普通文件或不含 CC Safety Net 托管标头的 index.ts。请在仓库中删除该条目,然后重新运行命令。 早期版本会将插件复制到本地文件 ~/.config/amp/plugins/cc-safety-net.ts。也可以手动把插件目录复制到 ~/.config/amp/plugins/cc-safety-net/。两者都会遮蔽个人插件,因此安装会在发布后将其删除:托管副本形式的旧文件,以及只有一个托管 index.ts 的本地目录。这两个路径上的其他任何本地条目都会使安装失败:
卸载也会删除托管的本地副本,但会保留非托管的本地条目。

Antigravity CLI 安装

此命令在 ~/.gemini/config/hooks.json 中写入托管的 PreToolUse 项,对每次 run_command 工具调用运行 npx -y cc-safety-net hook --agy-cli hook 通过 npx 运行。为确保它解析到当前版本,安装程序会先从 npm 缓存的 _npx 目录删除所有缓存的 cc-safety-net 副本。如果设置了 $npm_config_cache,则使用该目录。否则,macOS 和 Linux 使用 ~/.npm,Windows 使用 %LOCALAPPDATA%\npm-cache。卸载不会修改缓存。
可以选择安装 /cc-safety-net skill,以便在 Antigravity CLI 中交互式编写规则:

Claude Code 安装

此命令从 kenryu42/cc-marketplace 添加 cc-marketplace,并安装 cc-safety-net@cc-marketplace 插件;如果已有已禁用的副本,则会将其启用。
启用自动更新 要自动保持 CC Safety Net 为最新版本,请在 Claude Code 中运行 /plugin,转到 Marketplaces,选择 cc-marketplace,然后启用 auto-update
该插件调用 Coding CLI hook:cc-safety-net hook --coding-cli(短参数 -cc)。这是标准参数名称。hook --claude-code 仅作为旧别名受支持,请勿在新配置中使用。

Codex 安装

此命令从 kenryu42/cc-marketplace 添加 cc-marketplace,并安装 cc-safety-net@cc-marketplace 插件。 Codex 集成有一个已知的强制执行边界。输入到现有交互式会话中的文本不会被检查,也不会被审计。参见 Codex 覆盖边界 信任 hook Codex 不会运行不受信任的 hook。启动 Codex,打开 /hooks,选择 cc-safety-net PreToolUse hook,然后按 t 信任它。
该插件按 Codex 自己的格式打包。它的 hook 运行 cc-safety-net hook --codex(短参数 -cx),同一个插件还附带 cc-safety-net 技能。

Cursor 安装

此命令在全局 Cursor hooks 配置 ~/.cursor/hooks.json 中写入托管的 preToolUse 项:
由于配置是全局的,这会保护所有项目中的 Cursor IDE 和 Cursor CLI 会话。failClosed 表示 hook 无法产生判定时,Cursor 会拒绝工具调用。 由于 hook 通过 npx 运行,安装会先清除 npm _npx 缓存中缓存的 cc-safety-net 副本,以便 hook 解析到当前版本;卸载不会修改缓存。缓存位置见 Antigravity CLI 部分

Gemini CLI 安装

此命令从 https://github.com/kenryu42/gemini-safety-net 安装 Gemini Safety Net 扩展;如果已有已禁用的副本,则会重新启用它。Gemini CLI 不是 cc-marketplace 插件,其扩展位于自己的仓库中,扩展 id 为 gemini-safety-net
安装后请重启 Gemini CLI(或开始新会话),以加载扩展及其 hook。

GitHub Copilot CLI 安装

此命令会添加 cc-marketplace(如果尚未注册),安装 cc-safety-net@cc-marketplace 插件;如果该插件在 ~/.copilot/settings.jsonenabledPlugins 中被显式禁用,则将其改为 true
安装或删除插件后,请重启 Copilot CLI,使更改生效。
Copilot CLI 的 hook 支持受版本限制。doctor 会检查 .github/hooks 下的仓库 hook 文件;.github/copilot/settings.local.json.github/copilot/settings.json.claude/settings.local.json.claude/settings.json~/.copilot/settings.json~/.copilot/config.json 中的内联 hook 定义;以及 ~/.copilot/hooks 下的用户 hook 文件。内联 hook 定义要求 Copilot CLI 1.0.8 或更高版本,用户 hook 文件要求 0.0.422 或更高版本。插件会为你处理此问题;如果你手动配置 hook 并遇到问题,请运行 npx cc-safety-net doctor。它会报告检测到的 Copilot 版本,以及哪些 hook 来源受支持。

Grok Build 安装

此命令在 ~/.grok/hooks/cc-safety-net.json(设置了 GROK_HOME 时为 $GROK_HOME/hooks/cc-safety-net.json)中写入托管的 PreToolUse 项:
该条目不带 matcher,因此到达适配器的不只是 run_terminal_command,而是每一次工具调用;适配器还会检查文件类和 patch 类工具输入中的受保护路径。 由于 hook 通过 npx 运行,安装会先清除 npm _npx 缓存中的 cc-safety-net 副本,以便 hook 解析到当前版本;卸载不会触及该缓存。缓存位置见 Antigravity CLI 部分
两条命令都只改动托管的 handler。安装先从已有条目中剥离托管 handler,再把规范条目作为独立的一条追加进去,因此非托管的条目、与托管 handler 同处一个条目的非托管 handler,以及其他 hook 事件都原样保留。卸载只移除托管 handler;某个条目移除后不再有 handler,该条目也一并删除。整个文件只有在其中没有其他内容时才删除。无法解析的文件在卸载时原样保留;安装则会把它修复为规范内容,因为 Grok Build 会整个跳过无法解析的 hook 文件,这样的文件本来也无法承载可用的 hook。
Grok Build hook 是 fail open,宿主也没有提供 failClosed 开关。只有明确的 deny 才能阻止工具调用;hook 崩溃、超时或输出格式错误时,调用照常执行。

Hermes Agent 安装

此命令将托管的 Python 插件(__init__.pyplugin.yaml)写入 $HERMES_HOME/plugins/cc-safety-net/(未设置 HERMES_HOME 时为 ~/.hermes/plugins/cc-safety-net/),然后运行 hermes plugins enable cc-safety-net --no-allow-tool-override。仅有这些文件并不会生效:Hermes 只在自己的配置将用户插件列为已启用时加载它,因此即使文件已是最新版本,安装也会运行启用命令。 由于插件要通过 npx 调用外部命令,安装会先清除 npm _npx 缓存中缓存的 cc-safety-net 副本,以便插件解析到当前版本;卸载不会修改缓存。缓存位置见 Antigravity CLI 部分
安装、更新或卸载后,请重启 Hermes,使更改生效。
在每次 pre_tool_call 时,插件通过 JSON stdin 将工具调用发送到 npx -y cc-safety-net hook --hermes-agent(短参数 -ha),超时为 30 秒。它保护 terminalread_filewrite_filepatch 工具;其他 Hermes 工具不会转发。该插件采用 fail-closed:当 npx 缺失、分析无法启动、超时、以非零状态退出或返回无法读取的输出时,会用明确消息阻止工具调用,而不是让其通过。
卸载会在删除插件文件之前运行 hermes plugins disable cc-safety-net。Hermes 只能解析仍在磁盘上的插件,而保持启用的配置项会自动加载将来同名的任何插件。如果 hermes CLI 失败或缺失,仍会删除文件,并显示警告,说明 Hermes 配置中可能仍列有 cc-safety-net。卸载还会删除 Python __pycache__ 字节码目录,并且仅在插件目录中没有其他内容时回收该目录。 如果插件目录是符号链接或不是普通目录,安装和卸载都会拒绝改动它;如果某个托管文件是符号链接、不是普通文件或不含 CC Safety Net 托管标头,也会拒绝覆盖或删除它。请自行移动或删除它,然后重新运行命令。 此集成仅支持 macOS 和 Linux。

Kimi Code 安装

Kimi Code 有两种安装方式。一种是在 Kimi Code 配置中写入全局 hook,另一种是在 Kimi Code 内安装原生插件。在交互式终端中,install --kimi-code,或在安装程序中选择 Kimi Code,会提示你二选一:立即安装全局 hook,或打印原生插件的安装步骤。在非交互式会话中,该参数直接安装全局 hook,脚本和 CI 流水线不会等待输入。update 的行为不变。
两种方法下 Kimi Code hook 都是 fail open:当 hook 进程无法启动、崩溃或超时时,Kimi Code 会允许该工具调用。
全局 hook
此命令在 ~/.kimi-code/config.toml(或 $KIMI_CODE_HOME/config.toml)中写入 [[hooks]] 块,对每次 PreToolUse 调用运行 npx -y cc-safety-net hook --kimi-code。适配器将 Bash 作为 shell 命令工具处理,并检查其他工具输入中的受保护路径。 由于 hook 通过 npx 运行,安装会先清除 npm _npx 缓存中缓存的 cc-safety-net 副本,以便 hook 解析到当前版本;卸载不会修改缓存。缓存位置见 Antigravity CLI 部分
原生插件 要改用原生插件,请在 Kimi Code 中运行:
确认信任提示(默认选项是取消),然后运行 /reload 或开始新会话。插件声明一个没有工具 matcher 的 PreToolUse hook。它对每个工具调用运行 node ./dist/bin/cc-safety-net.js hook --kimi-code,超时为 30 秒,并使用与全局 hook 相同的适配器。 当全局 hook 已配置时,交互式安装程序中的 Kimi Code 行仍可选择,并标注 (global hook installed);打印的插件步骤会额外显示警告:仅在插件生效之后运行 cc-safety-net uninstall --kimi-code。两个 hook 同时运行的短暂重叠只会重复拒绝消息,而两者都未生效的空窗期会让你失去保护。 可以选择安装 /cc-safety-net skill,以便在 Kimi Code 中交互式编写规则:

OpenClaw 安装

此命令通过 OpenClaw CLI 安装插件。它先运行 openclaw plugins install <packaged plugin dir> --force,再运行 openclaw plugins enable cc-safety-net。打包的插件目录包含在 npm 软件包中。随后,安装程序运行 openclaw plugins inspect cc-safety-net --runtime --json,确认插件已加载。插件可能安装并启用成功,但因运行时损坏而不提供保护。为避免这种静默故障,状态不是 loaded 时安装会失败,并提示运行 openclaw plugins inspect cc-safety-net --runtime 查看详情。 由于 --force 会覆盖(卸载时会删除)占用 cc-safety-net 扩展 id 的内容,两条命令都会先确认扩展目录中只有 CC Safety Net 的托管插件,或者什么都没有,否则拒绝运行。请移动或删除该目录,然后重新运行命令。
安装、更新或卸载后,请重启 OpenClaw Gateway,使更改生效。如果 openclaw.json 设置了 plugins.allow,其中也必须列出 cc-safety-net。如果允许列表遗漏它,即使插件已启用也不会加载。
OpenClaw 将 CC Safety Net 作为进程内插件加载,而不是 hook 子进程,因此没有运行时 hook 参数。插件只为没有 tag 的 exec 工具注册 before_tool_call 处理程序。OpenClaw 的文件工具和带 tag 的 exec 变体不受保护。每次受支持的 exec 调用都会以智能体的 workspace 目录为基准分析;如果无法解析该 workspace、workdir 解析到该目录之外,或调用指定的执行 host 不是 autogateway(例如 sandboxnode),插件会 fail closed。 设置 OPENCLAW_STATE_DIR 时,OpenClaw 状态目录使用该值;否则使用 OPENCLAW_CONFIG_PATH 所在目录;再否则使用 ~/.openclaw。设置 OPENCLAW_CONFIG_PATH 时,配置文件使用该值;否则使用状态目录中的 openclaw.json。如果任一环境变量的路径以 ~ 开头,则会基于用户的主目录展开。安装和 doctor 按相同顺序解析路径,因此移动过位置的 OpenClaw 安装同样能被正确处理,而不会报告为不存在。 此集成仅支持 macOS 和 Linux。

OpenCode 安装

XDG_CACHE_HOME 已设置且非空时,OpenCode 使用 $XDG_CACHE_HOME/opencode 作为缓存目录;否则使用 ~/.cache/opencode。OpenCode 可能会一直沿用缓存中过期的插件版本,因此安装命令会先清除该目录下的 packages/cc-safety-net@latest,再运行 opencode plugin -g -f cc-safety-net@latest。然后,安装会验证缓存的软件包存在、其声明的 main 入口可以加载,并且导出可调用的 CCSafetyNetPlugin。如果验证失败,安装会停止,因为 OpenCode 否则会在没有保护的情况下继续运行。
XDG_CONFIG_HOME 已设置且非空时,OpenCode 使用 $XDG_CONFIG_HOME/opencode 作为配置目录;否则使用 ~/.config/opencode。卸载会从该目录中的 opencode.jsonopencode.jsoncplugin 数组中删除 cc-safety-net,并再次清除缓存的软件包。 安装或更新后,请重启 OpenCode,以从刷新的缓存加载插件。

Pi 安装

此命令运行 pi install npm:cc-safety-net;如果 Pi 设置中固定了会让 CC Safety Net 处于禁用状态的 extensions 过滤器,则会在 ~/.pi/agent/settings.json 中清除该过滤器。
Pi 将 CC Safety Net 作为进程内扩展加载,而不是 hook 子进程。扩展只将 Pi 的内置 bash 工具作为 shell 命令分析。它也检查其他工具输入中的受保护路径,但不支持名为 Shell 的自定义命令工具(例如 pi-grok-cli)。它还会注册用于管理 rulebook 的 /cc-safety-net 内置命令。详情见集成架构

从旧插件标识符迁移

当前插件标识符在适用的所有位置都是 cc-safety-net@cc-marketplace。早期版本的两个标识符仍可能出现在现有计算机上: 无需手动删除。运行对应智能体的常规安装命令即可完成迁移。新配置不要使用旧标识符。

验证安装

安装后,请运行 doctor 命令,确认 CC Safety Net 已正确接入,并按预期阻止命令:
doctor 会检查每个受支持的智能体。检查内容包括 hook 集成、阻止功能自检、自定义规则、生效的模式标志、近期活动、系统版本和可用更新。各项检查的作用和参数见 doctor 命令参考 如果任何检查失败,输出会包含问题说明和建议的修复方法。
最后修改于 2026年9月3日