npx -y cc-safety-net@latest install --kimi-code,并从两种方式中选择一种:由安装程序把全局 hook 写入 ~/.kimi-code/config.toml,或在 Kimi Code 内安装原生插件。两种方式对每次工具调用执行相同的检查,用 npx cc-safety-net doctor 都能确认是否生效。无论哪种方式,Kimi Code 的 hook 都是 fail open。
在 Kimi Code 中安装 CC Safety Net
在终端中,install --kimi-code 和交互式安装程序会询问是立即安装全局 hook,还是打印原生插件的安装步骤。选择插件时不会写入任何内容。在终端以外的环境中,例如 CI,该选项直接安装全局 hook,不会询问。
- 全局 hook
- 原生插件
1
运行安装程序
2
确认 hook 已生效
Kimi Code 全局 hook 安装会改动什么
安装程序把一个[[hooks]] 块写入 ~/.kimi-code/config.toml,设置了 KIMI_CODE_HOME 时写入 $KIMI_CODE_HOME/config.toml。该块在每次 PreToolUse 调用时运行 npx -y cc-safety-net hook --kimi-code。
Kimi Code hook 检查什么
全局 hook 和插件对每次工具调用执行相同的检查:把Bash 调用当作 shell 命令分析,并检查其他工具输入中的受保护路径。
Kimi Code 检查失败时会怎样
Kimi Code 的 hook 是 fail open。无论哪种方式,hook 进程无法启动、崩溃或超时时,工具调用都会照常执行。此外,只要有一个 hooks 条目无效,Kimi Code 就会忽略config.toml 中的所有 hook。见 Kimi Code 中无效的 hooks 条目。
Kimi Code 的覆盖限制
在kimi web 和 ACP 会话中,Kimi Code 把服务器的启动目录作为 payload 的 cwd 发送,而不是会话自己的目录。因此在这些会话中,CC Safety Net 会以服务器启动目录为基准检查每次 Bash 调用:
- 相对路径,以及针对工作目录之外路径的规则,都按错误的目录解析。安全的命令可能被阻止,本应阻止的命令也可能被放行。
- 如果
cwd参数指定的会话目录位于服务器启动目录之外,hook 会拒绝该调用。
kimi 会话不受影响。这个缺口只能由 Kimi Code 发送会话目录来弥补。
从全局 hook 迁移到原生插件
先安装插件并确认它已生效,再移除全局 hook:在 Kimi Code 中更新 CC Safety Net
update 会刷新全局 hook,但从不更新原生插件。对于插件,它会打印:
从 Kimi Code 卸载 CC Safety Net
Kimi Code 故障排除
Kimi Code 中无效的 hooks 条目
只要有一个 hooks 条目不符合 schema,Kimi Code 就会忽略config.toml 中的所有 hook。因此 doctor 会检查每一个 [[hooks]] 条目,而不只是 CC Safety Net 的那一个,并为每个有问题的条目打印以下错误:
<n> 从 1 开始计数。<problem> 为以下之一:
Kimi Code 插件已安装但未启用
doctor 从 Kimi 主目录($KIMI_CODE_HOME 或 ~/.kimi-code)下 plugins 中的 installed.json 读取插件记录。记录显示未启用时,会打印:
/plugins enable cc-safety-net。doctor 无法读取该文件时,会打印 Cannot read <path>, so doctor cannot tell whether the Kimi Code plugin is installed 并以 1 退出。