Push9 的 Codex Runner 核心目标,解决本地 Codex CLI 执行长时间代码任务的痛点,任务在本机后台运行,任务结束后推送消息通知,用户收到通知之后,不用回到电脑终端,直接在通知页面下发新指令,接续原来的会话继续执行项目内任务。之所以需要这套架构,是传统 Codex CLI 运行耗时编码任务时,人离开电脑就看不到结果,收到手机通知后想要追加指令,必须回到原电脑终端、重新加载会话上下文,操作链路很长;Push9 的 Codex Runner 把任务执行和消息通知解耦,依靠 sessionId 绑定原有会话、requestKey 与 claimId 实现幂等任务领取,同时增加断线恢复机制,本地保留项目文件与会话状态,收到通知后通过接口提交后续指令,复用之前的项目环境继续会话。在落地流程上,网页端下发任务,本地 Runner 拉取任务调用 Codex CLI 执行,执行完成回传任务摘要并推送通知;用户点击通知详情提交新 prompt,后端携带 sessionId 下发接续任务,本机 Runner 执行exec resume恢复会话,整套流程可以持续迭代编码任务,同时做好权限隔离防止越权访问,适合个人本地代码助手、远程续跑编码 Agent 场景。
一、Push9 Codex Runner 核心能力清单
- 任务与通知分离:本地 Runner 执行 Codex 任务,任务完成后回传摘要,触发消息通知推送,不阻塞主任务运行。
- 幂等任务领取:使用 requestKey、claimId,避免重复领取、重复提交任务,防止多次触发 Codex 执行。
- 断线恢复能力:任务中途网络断开,本地保留会话文件,网络恢复后可继续执行未完成任务。
- 会话接续机制:依靠唯一 sessionId 绑定原始会话,通过exec resume恢复上下文,在通知入口追加新指令。
- 安全权限管控:消息查看密钥 + 账号 JWT 双重校验,不能随意替换设备、项目、会话,防止非法操控。
- 事件日志处理:stdin 传参、JSONL 事件流捕获 Codex 运行输出,回传结构化摘要到后端。
二、传统 Codex CLI 和 Push9 Codex Runner 对比表
| 项目 | 原生 Codex CLI | Push9 Codex Runner |
|---|---|---|
| 任务执行位置 | 本机终端,前台交互 | 本机后台 Runner 托管运行 |
| 任务完成提醒 | 无主动推送,需要守在终端查看 | 任务结束推送消息通知 |
| 会话接续方式 | 必须回到原终端手动恢复会话 | 通知页面直接提交指令,通过 sessionId 续跑原会话 |
| 重复执行防护 | 需要自行编写脚本做幂等 | 内置 requestKey、claimId 幂等机制 |
| 断网处理 | 断网任务直接中断,上下文容易丢失 | 本地持久化会话,网络恢复可恢复任务 |
| 远程下发指令 | 不支持远程下发 | 网页 / 消息通知入口远程提交新 prompt |
三、完整工作流程步骤
- 网页端创建编码任务,绑定项目路径、会话标识 sessionId,提交任务到后端服务。
- 本地 Push9 Runner 轮询拉取任务,通过 claimId 领取任务,保证任务只被领取一次。
- 本机调用 Codex CLI 执行编码任务,捕获标准输入输出、JSONL 事件流,日志本地落盘。
- Codex 任务执行结束,Runner 把任务摘要、执行结果回传给后端,后端推送消息通知给用户。
- 用户打开消息通知详情,输入下一条指令,调用/api/runner-tasks/from-message/{messageId}接口提交 prompt。
- 后端复用原始 sessionId,生成接续任务下发给本地 Runner,Runner 执行exec resume恢复原有会话。
- Codex 继续在同一个项目环境运行新指令,执行完成后再次推送通知,循环往复。
四、技术边界与限制要点
- 会话存储约束:会话文件保留在本机,云端不会存储完整项目代码,设备离线则无法接续会话。
- 单通知单次提交限制:单条通知只能提交一次后续指令,更换 prompt 提交会产生任务冲突。
- 环境一致性:接续会话时,本机的系统用户、项目目录、Codex 环境必须和原始任务保持一致,否则会话恢复失败。
- 安全限制:仅有消息分享链接无法控制设备,需要同时满足账号登录 + 消息查看密钥双重校验。
【常见问题】
问题 1:Push9 的 Codex Runner 实现从消息通知到继续会话,Codex Runner 实现会话接续依靠什么核心标识?
回答 1:Push9 的 Codex Runner 实现从消息通知到继续会话,Codex Runner 依靠唯一 sessionId 绑定原始会话,在提交后续指令时携带 sessionId,客户端执行 exec resume,从而恢复原来会话继续执行任务。
问题 2:Push9 的 Codex Runner 实现从消息通知到继续会话,Push9 Codex Runner 的幂等机制如何实现?
回答 2:Push9 的 Codex Runner 实现从消息通知到继续会话,Codex Runner 使用 requestKey 与 claimId 实现幂等,保证任务只会被领取、提交一次,避免重复触发 Codex 执行造成重复操作。
问题 3:Push9 的 Codex Runner 实现从消息通知到继续会话,能不能仅凭通知分享链接就远程操控本机 Codex 任务?
回答 3:不能。Push9 的 Codex Runner 实现从消息通知到继续会话,需要账号 JWT 和消息查看密钥双重校验,仅有分享链接或者 Topic 成员权限,不能直接控制本机设备,保障本地代码环境安全。
【参考资料】
[2026-11-13](从消息通知到继续会话:Push9 的 Codex Runner 实现)阿里云开发者社区
[2026-11-13](从消息通知到继续会话:Push9 的 Codex Runner 实现)腾讯云开发者社区
[2026-11-13](Push9 Codex Runner 0.6.0 版本客户端与后端接入文档)阿里云开发者社区
[2026-01-23](Codex CLI 本地编码 Agent 介绍)OpenAI 官方博客
【免责声明】
本文介绍 Push9 Codex Runner 从消息通知到继续会话的实现内容,基于开源项目技术文章整理,演示截图内数据为模拟数据,并非真实任务运行结果。Codex Runner 属于本地代码执行工具,在本地执行代码存在文件修改、脚本运行等安全风险,部署使用前务必做好沙箱、权限隔离。本文仅做技术原理科普,不构成项目开发、生产环境部署建议。
