升级 zn-gate
更新 zn-gate 时该做什么:何时重新运行 zn hooks install,为什么 Codex 会要求你再次信任钩子,用 nvm 升级或移动 Node.js 之后怎么办,如何用 zn-gate check 检查,以及 1.8.0 以来每个版本需要你做的事。
本页的所有命令都请在你自己的终端中运行,不要通过 AI 智能体运行:当智能体启动 zn hooks install 和另外几个命令时,zn 的钩子会拒绝。
简短版本
- 更新软件包:
npm install -g zn-gate(如果你使用 Python 包,再运行pip install -U zn-gate)。如果你一直只运行npx -y zn-gate ...,就没有什么需要更新。 - 在下面的表格中查找你的旧版本和新版本。大多数版本不需要其他操作。
- 运行
zn-gate check。每个已配置的智能体都应显示 OK。
如果 zn-gate check 提示某个智能体未受保护,它也会打印修复的命令。
当某个版本改动了钩子时,重新运行 zn hooks install <agent>
zn hooks install 的钩子(Claude Code、Codex CLI、Cursor)写入智能体自己的设置,因此新版 zn-gate 不会自动重写它们。当某个版本新增或改动了钩子,其发布说明会说明并指出是哪个智能体。为该智能体重新运行安装:
zn hooks install claude-code # 或 codex、cursor、opencode
重新运行是安全的:它只更新 zn 自己的条目,不动你的其他设置。从 1.13.0 起,如果 zn-gate check 发现的 Claude Code 钩子缺少你的 zn-gate 已有的某个钩子,也会提示你。
其他情况:
- Claude Code 的 zn-gate 插件通过 Claude Code 的插件管理器更新(在 Claude Code 中使用
/plugin)。之后开启一个新的 Claude Code 会话。插件会安装它所固定的 zn-gate 版本,所以不需要为它运行zn hooks install。不要同时保留插件和zn hooks install claude-code的钩子:两者都会运行。用zn hooks uninstall claude-code移除钩子。 - OpenCode 使用 zn-gate 写入的一个小插件文件。当某个版本提示时,重新运行
zn hooks install opencode。 - 项目安装(
zn hooks install <agent> --project)会写入可以提交到仓库的文件(.claude/settings.json、.codex/hooks.json、.cursor/hooks.json、.opencode/plugins/zn-gate.js)。它们从你的 PATH 调用zn,因此会跟随你已安装的 zn-gate。当某个版本改动了钩子时,在项目里重新运行安装,并提交改动后的文件。
Codex 要求你再次信任钩子
Codex 只有在你信任某个钩子之后才会运行它,并且在钩子是新的或已改动时会再次询问。运行 zn hooks install codex 之后(第一次,以及任何改动了钩子的版本之后),打开 Codex,使用 /hooks 批准这些钩子。在你批准之前,Codex 不会运行新的或改动过的钩子,也就是说 zn 没有检查那一部分。只有当钩子能正常工作时,zn-gate check 才会把 Codex 显示为受保护。
对于已经自行验证过钩子的自动化流程,codex exec --dangerously-bypass-hook-trust 可以在一次运行中跳过这个询问。日常使用请不要这样做。
Node.js 被升级、移动或删除(nvm、fnm、Homebrew)
钩子的用户级安装会写入当时运行它的 Node.js 的路径和 zn-gate 文件的路径。全局 npm 包属于某一个 Node.js 版本,所以 nvm use、nvm uninstall、Homebrew 升级 Node.js 或重新安装 Node.js 都可能让钩子指向一个已不存在的位置。当钩子无法启动时:
- 提示词:Claude Code 2.1.295 或更高版本、Cursor 和 OpenCode 会拦截它们,而不是不经检查就放行。Codex CLI 会放行。
- 工具调用:在 Claude Code 和 Codex CLI 中,它们会不经检查就执行。
要修复,使用你想保留的那个 Node.js:
- 运行
npx -y zn-gate check。它会列出每个未受保护的智能体以及修复它的命令。 - 通常是
npm install -g zn-gate,然后zn hooks install <agent>。如果你使用 Codex,请在/hooks中信任改动后的钩子。 - 如果使用 Claude Code 的 zn-gate 插件,先修复 Node.js(插件需要 20.12 或更高版本),然后开启一个新的 Claude Code 会话。
- 如果你马上就要用智能体,可以在修复前先为它关闭 zn:
npx -y zn-gate hooks uninstall <agent>(zn命令可能已随旧的 Node.js 一起消失),插件则用claude plugin disable zn-gate@usezn。之后用zn hooks install <agent>或claude plugin enable zn-gate@usezn重新开启,再运行一次zn-gate check。
检查是否正常工作
zn-gate check
它会创建一个临时文件夹,里面有一个带假密钥的 .env 文件和一个普通文件,让每个智能体已安装的钩子分别读取这两个文件,只有当 .env 文件被阻止、普通文件被允许时,才把该智能体算作受保护。不会发送任何内容,也不会更改任何设置。输出的含义。
每个版本需要你做什么
从 1.8.0 起的版本。“无需操作”表示更新软件包就够了。完整的改动列表见 changelog。
| 版本 | 日期 | 需要做什么 |
|---|---|---|
| 1.13.1 | 2026-10-20 | 仅当你使用 Python 的 LangChain 或 LlamaIndex 集成时:用 pip install -U zn-gate 更新。被阻止的提示词、工具调用或工具输出现在会停止 LangChain 的运行;在 mask_secrets=True 时,包含密钥的工具输出也会停止运行。ZnGuardCallbackHandler(on_block="return") 现在会抛出 ValueError:请改用 guard_langchain_tool(tool, on_block="return") 包装该工具(见 LangChain、CrewAI 和 LlamaIndex)。npm 包没有变化。 如果你用 guard_langchain_tool 包装工具,请以 mask_secrets=False 创建 handler。 |
| 1.13.0 | 2026-10-19 | 如果你用 zn hooks install claude-code 安装了 Claude Code 钩子,请重新运行它,以添加检查所输入的技能或命令会展开成什么内容的钩子(zn-gate check 会告诉你;插件已经包含它)。Node.js 低于 20.12 时,zn-gate init 会配置钩子而不是安装插件;如果你在那里装有插件,check 会给出解决办法。在不带 version 使用该 Action 的 GitHub 工作流中,请设置 version 来选择运行的版本:1.12.0 的 Action 默认使用 1.10.0。 |
| 1.12.0 | 2026-10-18 | 无需操作。如果你验证发布版本的签名,签名工作流现在是 build-release.yml(见验证发布版本)。 |
| 1.11.0 | 2026-10-17 | 无需操作。当 zn-gate scan 发现密钥就会失败的 CI 任务,可能开始因新类型的令牌而失败(例如 Square、Discord、Grafana 或 Notion 令牌):查看每一条发现,并轮换任何真实的令牌。 |
| 1.10.0 | 2026-10-16 | 如果脚本在使用系统钥匙串时运行 zn unlock,现在需要交互式终端(使用口令后端的 --passphrase-stdin 仍可从管道运行)。 |
| 1.9.1 | 2026-10-16 | 无需操作。因 zn-gate scan 的发现而失败的 CI 任务,可能因更多类型的密钥而开始失败。Node.js 低于 18 时,zn-gate 和 zn 命令会停止,并提示如何安装 Node.js 18 或更高版本。 |
| 1.9.0 | 2026-10-16 | 如果脚本不带选项运行 zn-gate init 来包装 MCP 服务器,请改为 zn-gate init --wrap-mcp:单独的 init 现在是引导式设置,只在你自己的终端中运行。 |
| 1.8.2 | 2026-10-15 | 无需操作。 |
| 1.8.1 | 2026-10-15 | 如果你使用智能体钩子,请更新;无其他步骤。 |
| 1.8.0 | 2026-10-15 | 更新后运行一次 zn unlock:仍在运行的旧版本保险库会让钩子中的密钥保持为标记和令牌,直到它重启。不再支持 Python 3.8 和 3.9(那里的 pip 仍会安装 1.7.1)。在启用了 Warn 规则的 zn Team 组织中,不要退回 1.7.1。 |
如果你是从早于 1.8.0 的版本更新,请逐个查看中间所有版本的行。更早的版本见 changelog。