npx -y cc-safety-net@latest install --devin。它会在 Devin CLI 的 config.json 中添加一个 PreToolUse hook,让每次工具调用都先经过 CC Safety Net。然后运行 npx cc-safety-net doctor,确认 hook 已生效。Devin CLI 的 hook 是 fail open:hook 超时,或在给出应答前就退出时,调用照常执行。
在 Devin CLI 中安装 CC Safety Net
1
运行安装程序
2
确认 hook 已生效
Devin CLI 安装会改动什么
安装程序在 Devin CLIconfig.json 的 hooks.PreToolUse 中写入以下托管条目:
$XDG_CONFIG_HOME/devin/config.json,默认为 ~/.config/devin/config.json,Windows 上为 %APPDATA%\devin\config.json。具体规则见 Devin CLI 的配置存放位置。
- 该条目不带 matcher,因此到达 hook 的不只是
exec,而是每一次工具调用。 - 安装会保留文件中其他所有键、hook 事件和
PreToolUse条目。config.json不存在时,安装会新建一个只含这一个hooks键的文件。 - Devin CLI 允许在
config.json中写注释和尾随逗号。安装和卸载写回的是普通 JSON,因此其中的注释会丢失。
Devin CLI hook 检查什么
exec是唯一的命令工具,hook 会自动识别它的 shell 方言。write_to_process调用输入到运行中进程的文本,hook 也会分析。见 Devin CLI hook 如何检查输入的文本。- 对其他工具,hook 检查工具输入中的受保护路径。
Devin CLI hook 在哪个目录下分析命令
Devin CLI 不会把会话的工作目录告诉 hook,因此 hook 以自身运行所在的目录为准。exec 调用可以在 workdir 中指定另一个目录,hook 就改在那个目录下分析命令。
- 相对路径的
workdir按会话目录解析。 workdir不必位于会话目录之内。workdir为空或不是字符串时,hook 拒绝该调用。workdir不是已存在的目录时,hook 拒绝该调用,拒绝消息中会写明该目录。
Devin CLI hook 如何检查输入的文本
write_to_process 调用向已在运行的进程输入内容。hook 把 text_input 或 bytes_input 中的文本当作 shell 命令分析。例如 text_input 为 y、bytes_input 为 <CR> 时,分析的是 y。
无法确定接收程序实际执行哪一行时,hook 拒绝该调用:
- 文本与
<ESC>、<BS>、方向键或<C-…>键一起出现。 bytes_input中有 Devin CLI 文档未列出的<Name>按键。text_input和bytes_input都带有文本。
<UP><CR> 或 <C-c>,不是命令,hook 不会分析。
Devin CLI 检查失败时会怎样
Devin CLI 的 hook 是 fail open。只有退出码 2 或block 决策才能阻止工具调用。超时、缺少 npx,或 hook 进程在应答前退出时,调用照常执行。hook 自己捕获的错误仍会阻止调用,因为 hook 会为它返回 block。
Devin CLI 的覆盖限制
- 项目级 hook。 CC Safety Net 只支持安装程序写入的用户级
config.json。项目中.devin/hooks.v1.json里的 hook 以仓库根目录为工作目录运行,而 Devin CLI 没有给 hook 提供纠正的途径。 - 分段输入。 hook 对每次
write_to_process调用单独分析,因此分几次输入的命令不会作为一条完整命令检查。 - Devin Cloud。 CC Safety Net 不覆盖 Devin Cloud 会话。
- Claude Code hook。 Devin 默认会加载 Claude Code 的 hook 文件,因此为 Claude Code 安装的 CC Safety Net hook 也可能在 Devin 会话中运行。这只会让拒绝重复出现。
从 Devin CLI 卸载 CC Safety Net
hooks.PreToolUse 最终变为空,卸载也不会删除 config.json。文件中没有托管处理程序时,卸载不写入任何内容,并报告该 hook 未安装。
Devin CLI 的配置存放位置
Devin CLI 允许移动它的配置目录。CC Safety Net 遵循同样的覆盖规则,因此配置移动后也能找到:- 设置了
XDG_CONFIG_HOME且不为空时,为$XDG_CONFIG_HOME/devin。 - 否则为
<home>/.config/devin。 - Windows 上为
%APPDATA%\devin;APPDATA未设置或为空时,为<home>\AppData\Roaming\devin。
config.json。CC Safety Net 按原样使用变量的值,不展开 ~。
Devin CLI 故障排除
config.json 有问题时,安装会停止,不写入任何内容。doctor 以 Error (Devin CLI): <message> 的形式打印同一条消息,把 Devin CLI 计为未配置,并以 1 退出。修复该文件后重新运行安装。
如果
doctor 警告 hook 条目被改动,请重新运行安装。警告列表见托管 hook 漂移。