COMSPEC 和 PATHEXT 解析 cmd.exe 或 PowerShell。安装命令和交互式选择器也能识别 npm 在 Windows 上安装的 .cmd shim,因此 install --codex 这类命令可以找到智能体 CLI。Windows 自动化测试只覆盖分析器和部分集成。其余宿主的 Windows 支持未经测试,只提供尽力支持。Amp 官方手册仅列出 macOS、Linux 和 WSL,不包括原生 Windows。
Hermes Agent 和 OpenClaw 集成仅支持 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 改为更新每个已安装的集成,q 或 Esc 取消且不做任何更改。@latest 限定符很重要:不加版本限定的 cc-safety-net 可能会让 npx 从缓存中重新运行旧副本,而不是当前发布版本,因此本页的每条安装、卸载和更新命令都固定该限定符。
以相同方式删除集成:
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 的这些规则处于未生效状态,status 和 doctor 会把这些来源报告为 degraded。
安装指定智能体
对于脚本化的非交互式安装,请传入且仅传入一个目标参数。传入零个或超过一个目标参数都会报错。在交互式终端中,不带目标参数会启动安装选择器。
所有安装命令都是幂等的。对已配置的智能体再次运行命令是安全的,最终只会保留一个托管条目。
Amp Code 安装
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 --amp 或 update 发布。
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 插件;如果已有已禁用的副本,则会将其启用。
/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.json 中写入托管的 preToolUse 项:
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。
GitHub Copilot CLI 安装
cc-marketplace(如果尚未注册),安装 cc-safety-net@cc-marketplace 插件;如果该插件在 ~/.copilot/settings.json 的 enabledPlugins 中被显式禁用,则将其改为 true。
安装或删除插件后,请重启 Copilot CLI,使更改生效。
.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 项:
run_terminal_command,而是每一次工具调用;适配器还会检查文件类和 patch 类工具输入中的受保护路径。
由于 hook 通过 npx 运行,安装会先清除 npm _npx 缓存中的 cc-safety-net 副本,以便 hook 解析到当前版本;卸载不会触及该缓存。缓存位置见 Antigravity CLI 部分。
Grok Build hook 是 fail open,宿主也没有提供
failClosed 开关。只有明确的 deny 才能阻止工具调用;hook 崩溃、超时或输出格式错误时,调用照常执行。Hermes Agent 安装
__init__.py 和 plugin.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 秒。它保护 terminal、read_file、write_file 和 patch 工具;其他 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 会允许该工具调用。
~/.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 部分。
/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 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。如果允许列表遗漏它,即使插件已启用也不会加载。exec 工具注册 before_tool_call 处理程序。OpenClaw 的文件工具和带 tag 的 exec 变体不受保护。每次受支持的 exec 调用都会以智能体的 workspace 目录为基准分析;如果无法解析该 workspace、workdir 解析到该目录之外,或调用指定的执行 host 不是 auto 或 gateway(例如 sandbox 或 node),插件会 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.json 或 opencode.jsonc 的 plugin 数组中删除 cc-safety-net,并再次清除缓存的软件包。
安装或更新后,请重启 OpenCode,以从刷新的缓存加载插件。
Pi 安装
pi install npm:cc-safety-net;如果 Pi 设置中固定了会让 CC Safety Net 处于禁用状态的 extensions 过滤器,则会在 ~/.pi/agent/settings.json 中清除该过滤器。
bash 工具作为 shell 命令分析。它也检查其他工具输入中的受保护路径,但不支持名为 Shell 的自定义命令工具(例如 pi-grok-cli)。它还会注册用于管理 rulebook 的 /cc-safety-net 内置命令。详情见集成架构。
从旧插件标识符迁移
当前插件标识符在适用的所有位置都是cc-safety-net@cc-marketplace。早期版本的两个标识符仍可能出现在现有计算机上:
无需手动删除。运行对应智能体的常规安装命令即可完成迁移。新配置不要使用旧标识符。
验证安装
安装后,请运行 doctor 命令,确认 CC Safety Net 已正确接入,并按预期阻止命令:doctor 会检查每个受支持的智能体。检查内容包括 hook 集成、阻止功能自检、自定义规则、生效的模式标志、近期活动、系统版本和可用更新。各项检查的作用和参数见 doctor 命令参考。
如果任何检查失败,输出会包含问题说明和建议的修复方法。