Nezha Hook机制揭秘:不改用户配置给Claude Code和Codex注入事件监听的设计之道
发布时间:2026/10/11 23:57:31 锦皓数字建站

人工智能AI 应用Vibe Coding开发工具IDE桌面应用【免费下载链接】nezhaCode Editor for the AI Agents Era. Run multiple Claude Code and Codex agents across projects on your machine.项目地址https://gitcode.com/gh_mirrors/nezha7/nezha点击查看免费下载Nezha哪吒是一款面向 AI Agent 时代的代码编辑器核心能力是在本机同时运行多个 Claude Code 和 Codex 智能体任务。它靠什么判断Agent 正在工作还是Agent 在等你审批答案是 Hook 事件监听。而更精妙的是Nezha 在几乎不修改用户配置文件的前提下就把事件监听注入到了这两大 Agent 中。本文将拆解这套设计。为什么需要 Hook不监听就瞎了Nezha 的任务看板要实时展示每个 Agent 的状态running执行中、input_required等你审批、awaiting_review本轮完成待验收。如果只能靠固定间隔轮询 Agent 进程状态更新会滞后也拿不到会话 id这类关键信息。Claude Code 和 Codex 都提供了官方 Hook 机制——Agent 在关键节点会话开始、提交提示词、工具执行完成、本轮结束等会主动触发 hook 脚本。Nezha 的思路是给 Agent 注入一个共享 hook 脚本把事件落盘成日志文件后端读取日志驱动任务状态。整个链路涉及三个核心文件文件职责hooks.rs安装期写共享脚本 生成 Claude settings 注入 Codex 配置nezha-hook.mjs运行时读事件 → 归一化 → 追加写入 events.jsonlevent_watcher.rs监听日志增量把事件映射为任务状态Claude 方案命令行 --settings用户的 settings.json 一个字节都不动Naive 的做法是往用户的~/.claude/settings.json里塞 hook 条目——这会污染用户配置卸载时还可能删错东西。Nezha 换了一条路写入自有文件Nezha 生成~/.nezha/hooks/claude-settings.json里面只有 hooks 配置构建逻辑见 hooks.rs。启动任务时命令行传入claude --settings 自有文件参数注入见 pty.rs。合并语义天然共存Claude 的hooks是数组型 key跨 settings 来源是concat 按 command 去重不会覆盖用户已有的 hook。效果用户的~/.claude/settings.json完全不被修改。这也是设计目标里最重要的一条。值得一提的是Nezha 早期版本确实曾用_nezha_managed标记直接注入用户配置现版本的清理函数只负责把历史残留移除属于迁移兜底。Codex 方案Codex 没有 --settings只能写 config.tomlCodex CLI 没有外部配置文件参数hook 只能写在~/.codex/config.toml里。Nezha 的折中是marker 块注入# nezha-managed-begin (do not edit; managed by Nezha) [[hooks.Stop]] [[hooks.Stop.hooks]] type command command node \~/.nezha/hooks/nezha-hook.mjs\ # ... 共 6 个事件 ... # nezha-managed-end 用一对注释 marker 把 Nezha 的 TOML 区块整体包裹区域外的用户内容按字符串切片完整保留注入逻辑。升级时整块替换卸载时整块精确移除用户原有配置一个字符都不动移除逻辑。还有一个坑Codex 的非托管 hook 需要先 review trust 才会执行否则会被静默跳过。Nezha 通过--dangerously-bypass-hook-trust参数绕过且该参数必须放在--/resume之前才能被识别命令构建见 pty.rs。共享脚本的两个小心机守卫 字段归一化Claude 和 Codex 共用同一个nezha-hook.mjs里面有值得借鉴的两个设计① 环境变量守卫——用户手动跑 Agent 时零副作用。脚本只在NEZHA_TASK_ID和NEZHA_EVENT_DIR两个环境变量同时存在时才工作否则立即exit 0守卫代码。也就是说hook 被注入到 Agent 里之后只有 Nezha 启动的任务才会产生事件用户自己在终端跑 Claude Code 完全无感。② 多 key 兜底——抹平两家 Agent 的字段命名差异。同一个语义Claude 叫session_id老版 Codex 叫conversation_idClaude 叫hook_event_nameCodex 早期叫event_name。脚本用 pick() 按优先级逐个尝试甚至兜底到CODEX_SESSION_ID等环境变量让脚本对两家 Agent 的多个版本都鲁棒。归一化后每次事件追加一行 JSON 到~/.nezha/events/task_id/events.jsonl{ts:1733300000000,task_id:t_abc,agent:claude,event:Stop,session_id:sess_x,transcript_path:...}另外脚本永远exit 0内部任何异常都被吞掉绝不让 hook 失败阻塞 Agent 执行——观察者的失败不应影响被观察者。6 个事件驱动状态只订阅真正需要的Nezha 在两个 Agent 上各只订阅 6 个事件事件清单定义event_watcher 的 dispatch 把它们映射为任务状态事件状态变化用途SessionStart注册 session拿到会话 id 与转录路径支撑会话可视化Notification/PermissionRequest→input_requiredAgent 请求工具审批角标亮起UserPromptSubmit/PostToolUse→running复位等待输入回到执行中Stop→awaiting_review本轮结束、等用户验收SubagentStop不处理子代理结束、主代理还在跑这里有个实测得出的细节Claude 的Notification(idle_prompt)要在空闲约60 秒后才触发如果拿它当等待输入的信号状态角标会晚亮一分钟。所以 Nezha 直接依赖Stop事件即时置状态不靠 Notification 兜底。兜底设计版本门槛 轮询回退Hook 链路不是万能的Nezha 用usable_for()做三重判定node 可用 hook 已安装 Agent 版本达到最低门槛Claude ≥ 2.1.87Codex ≥ 0.131.0。三条同时满足才信任 hook任一不满足就静默回退到/status轮询用户无感知、功能不降级。一键卸载痕迹清零在 设置面板的 Hooks 选项卡 中点击卸载uninstall() 会执行三件事重建 Claude 自有 settings 文件移除 hooks 字段、清理用户 settings 中的历史残留、从 Codex 配置中精确切除 marker 块。至此 Nezha 的注入全部可逆。小结这套 Hook 设计的精髓可以归纳为四点能不改就不改Claude 走命令行--settings用户配置零接触Codex 受限才用 marker 块且块外内容逐字节保留。守卫式设计环境变量缺失即退出注入不等于打扰。只订阅、不干预hook 纯观测、永远exit 0绝不阻塞 Agent。永远有 Plan B版本/环境不达标时无缝回退轮询。完整的字段对照、版本门槛与踩坑记录可参考项目内的 agent-hooks-support.md。赞分享人工智能AI 应用Vibe Coding开发工具IDE桌面应用【免费下载链接】nezhaCode Editor for the AI Agents Era. Run multiple Claude Code and Codex agents across projects on your machine.项目地址https://gitcode.com/gh_mirrors/nezha7/nezha点击查看免费下载相关推荐Browsersync文件监听机制揭秘实时刷新和CSS注入的终极指南Browsersync文件监听机制揭秘实时刷新和CSS注入的终极指南 Browsersync是一款革命性的前端开发工具能够自动同步多个浏览器和设备的页面状态开发工具前端CLIwagmi Tempo fee.useWatchSetUserToken Hook 完全指南监听 Fee Manager 的用户代币设置事件wagmi Tempo fee.useWatchSetUserToken Hook 完全指南监听 Fee Manager 的用户代币设置事件 导读 本文围绕区块链Web3前端告别等待Cap开源录屏工具如何让屏幕录制变得简单高效告别等待Cap开源录屏工具如何让屏幕录制变得简单高效 你是否曾经因为需要录制屏幕演示而烦恼等待视频导出、上传、处理的时间让人抓狂传统的录屏工具要么功能复杂屏幕录制音视频桌面应用后端前端视频处理AI 应用移动开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。