将 Codex CLI 运行状况接入企业微信通知
整活:你是否也让 Codex 在服务器上跑着任务,然后每隔几十秒切回终端看一眼?你是否也遇到过它早就做完了,却因为窗口在后台而白白等了半小时?更难受的是,Codex 有时不是在工作,而是在安静地等你点一个权限审批。
既然人不能一直盯着终端,那就让终端主动来找人。本文将 Codex CLI 的通知接入企业微信群机器人。在匹配的事件触发时,脚本会把普通回合结束、计划制定完成、提问和权限审批消息推送到企业微信。为求方便,你也可以将本文的链接直接提供给 Codex CLI 并让其进行有关配置,有望相较自己从头配置消耗更少的 token,但注意企业微信的 webhook 仍需自行提供。
当前消息分为四种(详细的模板可根据自身需求在脚本里进行进一步调整):
✅ Codex 本轮已结束:包含项目、目录、原始任务和最终回复。⏳ Codex 已制定 plan,等待决策:包含任务和计划正文,提醒回到 Codex 选择执行或修改。⏳ Codex 等待你的决策:由提问工具触发;能否显示完整问题和选项取决于参数格式。🔐 Codex 等待权限审批:包含申请原因、工具以及命令摘要。
需要先强调:企业微信消息只负责通知,不能直接在群里回答问题或批准权限。 收到提醒后,仍然要回到 Codex CLI 中操作。
1. 创建企业微信群机器人
新建一个企业微信群,类型选择企业(不要选择个人组建团队,经尝试该选项创建的群聊不能添加群通知)。
Key 的格式大致如下:
1 | https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
这个地址里的 key 相当于机器人的密码,任何拿到它的人都可以向群里发消息,因此注意不要直接把 webhook 放在容易泄露的位置。将该 key 保存到本地的某个文件中,以在后续提供给通知脚本使用。
2. 编写统一通知脚本
点击此处获取脚本并将其保存到 ~/.codex/codex_notify_wecom.py(使用 '另存为' 功能以避免乱码),复制时请修改 WEBHOOK_FILE 和 SESSIONS_DIR 以吻合本地路径。
赋予脚本仅当前用户可执行、可读写的权限:
1 | chmod 700 ~/.codex/codex_notify_wecom.py |
3. 配置任务完成通知
打开用户级配置文件 ~/.codex/config.toml,在顶层添加:
1 | notify = ["python3", "/你的绝对路径/.codex/codex_notify_wecom.py"] |
例如 Linux 用户目录是 /home/alice 时,应写为:
1 | notify = ["python3", "/home/alice/.codex/codex_notify_wecom.py"] |
如果 config.toml 已经有其他配置,只增加这一行即可,不需要覆盖原文件。
4. 配置等待回答和权限审批通知
在 ~/.codex/hooks.json 中写入(请对 command 字段的路径进行调整):
1 | { |
这里的几个字段分别表示:
PreToolUse:在 Codex 调用受支持的本地工具之前触发。matcher:正则表达式,只匹配request_user_input和request_user_input_async,避免每次工具调用都发消息。PermissionRequest:Codex 即将向用户请求权限时触发。省略 matcher 表示匹配该事件的所有工具。async: true:在后台执行通知脚本,避免企业微信网络延迟卡住 Codex。timeout: 15:通知脚本最多运行 15 秒。statusMessage:Hook 运行时在 Codex 中展示的状态文字。
根据 OpenAI 官方文档,Codex 可以从 ~/.codex/hooks.json、~/.codex/config.toml 以及项目内对应的 .codex/ 配置中加载 Hooks,而且不同来源中匹配的 Hooks 会同时执行。因此如果出现重复通知,要检查是否在多个配置层写了同一套规则。
5. 检查并信任 Hooks
先做不会联网的语法和预览检查:
1 | python3 -m py_compile ~/.codex/codex_notify_wecom.py |
--preview 只在终端输出普通完成、等待决策和权限审批三种样例。确认预览排版正常后,可自行发送一条真实测试消息(--test 只发送普通完成样例):
1 | python3 ~/.codex/codex_notify_wecom.py --test |
接下来重新启动 Codex CLI,并输入:
1 | /hooks |
非托管 Hook 第一次运行前需要人工检查和信任。Codex 会按照 Hook 内容的哈希记录信任状态;以后只要修改了命令或配置,原有信任就会失效,需要再次进入 /hooks 检查。完成信任后,可以依次验证:
- 随便让 Codex 完成一个简单任务,检查
✅完成通知。 - 在 Plan 模式下让 Codex 制定计划,检查“已制定 plan,等待决策”消息。
- 让 Codex 调用提问工具,检查
⏳决策通知,并留意异步工具参数格式的限制。 - 在正常工作中遇到一次确实需要审批的命令,检查
🔐权限通知。不要为了测试而执行危险命令。
运行效果示例
后记
由于博主本人喜欢在下班吃饭前跑上一个 session,但往往又因为前几次点开都还没到要人工审批的时候而忘记这个 session,后面惊觉再看已经卡在一个地方很久……。添加了企业微信通知后就再也没遇到过这个问题,什么时候来通知了(或 plan 做决策了),就远程操控电脑审查通过一下。
个人感觉以上操作应该也能非常方便地迁移到飞书 / 电报之类的消息平台,所以有需要的小伙伴也可以再做进一步调整(包括模板等具有个人审美要求的元素也可以做修改),反正可以全部让 Codex CLI 来干(笑)。
