安全重启 Codex TUI 节点:不丢会话、不回退 rollout
重启一个 Codex TUI 人机共存节点时,草率操作会丢掉原来的会话、让 rollout 记录缩水、或把暂停的任务意外续跑。这份清单保证「重启后还是原来那个节点」,而不是「一个同名的新节点」。
一个 Codex TUI 共存节点由三部分组成:app-server(后端会话进程)、TUI(终端界面)、bridge(接 CommHub 的桥)。三者的工作目录、会话 ID、rollout 文件必须在重启后严格一致。「三个进程都起来了」不等于「恢复成功」 —— 一个起在错目录、接错会话、或 rollout 被覆盖的节点,进程齐全却已经不是原来那个。
重启前:逐节点记录一份现状
对每个要重启的节点(按 alias 逐个记,别凭记忆),先落纸五项:
| 记录项 | 为什么要它 |
|---|---|
| 预期工作目录(cwd) | TUI、bridge、CommHub 的 project_dir 三处都要对齐到它 |
| 完整会话 / thread ID | 恢复必须 exact;ID 要完整,别截短前缀 |
| rollout 文件绝对路径 + 当前字节数 | 重启后 rollout 不得缩小、不得被换成新文件 |
| goal 暂停状态 | 重启后要保持;不能被自动续跑改写 |
| app-server / TUI / bridge 的完整命令行 | 照原样拉起,任何一处参数漂移都会起成另一个节点 |
恢复时的六条硬规则
- exact 会话,禁猜。 用完整会话 ID 恢复。禁用「最近一个 session」或短前缀匹配 —— 短前缀会静默命中另一个会话,进程照样起、内容却是别人的。
- 凭据只备份、不外泄。 auth 凭据文件先备份一份,复制后把权限收到
0600。凭据绝不进命令行参数、日志或回执 —— 命令行参数会落进 shell history 和ps输出。 - TUI 显式指定工作目录。 启动 TUI 时显式传
-C <节点工作目录>,不要靠「当前在哪个目录」。 - bridge 先进工作目录再起。 启动 bridge 前先
cd到节点工作目录。CommHub 的 project_dir、TUI 的-C、节点配置三处必须一致 —— 不一致会让回来的消息落到错的会话上下文。 - rollout 不回退。 resume 之前先核 rollout 的大小和内容;重启后它只能持平或增长。一旦缩小或被替换成新文件,说明接错了会话或起了个全新会话,立即停。
- 保持原 goal 状态。 原来暂停的 goal 保持暂停;任何「自动续跑」必须立刻暂停。先把节点恢复干净、验收通过,再由人决定要不要继续原任务。
验收:六项全过才算恢复成功
- [ ] 身份可用 —— 用一个无副作用、固定短回复的登录探针验证(见下),别真派任务
- [ ] exact 会话已恢复 —— 完整会话 ID 与记录一致
- [ ] rollout 未回退 —— 字节数 ≥ 重启前,内容未被替换
- [ ] 工作目录正确 —— cwd == TUI 的
-C== CommHub project_dir == 节点配置 - [ ] 原任务保持暂停 —— 没有意外的 goal 在跑
- [ ] 三进程在线 —— app-server / TUI / bridge 都在
🔴 任一项不一致:立即 STOP,修好后重新走完整验收。「进程存在」是六项里的一项,不是结论。
登录探针怎么发
验证「身份能用、会话在」时,用一个固定的、无副作用的探针 —— 让节点回一个约定好的短字符串就够了。不要用真实任务当探针:真任务会写 rollout、改状态、可能触发 goal,验证动作本身就破坏了你要验证的东西。