说明

本文基于社区检索整理(2026-04-01),重点面向“手机 Termius + 远程 Linux + Codex CLI”场景。

先看结论

  1. 手机端要稳定用 Codex,核心不是“让 Termius 后台常驻”,而是“让工作负载在服务器端持久化”。
  2. tmux new-session -A -s <name> 是最稳妥的基础模式(有则附加,无则创建)。
  3. codex resume --last 现在默认按当前目录筛选会话,跨项目误恢复问题比早期版本明显改善。
  4. 默认建议优先 --full-auto(on-request + workspace-write)而不是直接 --yolo。
  5. 需要跨重启恢复时,再上 tmux-resurrect + tmux-continuum,不要一开始就堆复杂度。

1. 为什么是 tmux,而不是“保持 App 后台”

Termius 官方文档明确提到:iOS/iPadOS 背景执行受系统限制,App 进入后台后进程会很快被系统挂起。官方给出的建议之一就是使用 screen/tmux 保住会话内容。
这意味着:手机断网、锁屏、切 App 都是常态,你要把“会话持续性”放在服务器端解决。

2. Codex 会话恢复:当前目录优先

Codex CLI 官方文档现在已明确:

  • codex resume --last 默认恢复“当前工作目录”内最近会话;
  • 需要跨目录时再加 --all。

这对多仓库场景非常关键,能避免“在 A 项目里误恢复到 B 项目”。

3. 推荐的最小可用入口(bashrc 版)

下面这段是当前社区里最常见且实用的统一入口形态:

tmux-codex() {
    local session="solo-codex"
    local cmd='env -u http_proxy -u https_proxy -u all_proxy -u no_proxy -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY -u NO_PROXY codex'
    if [ "$#" -eq 0 ]; then
        cmd="$cmd --full-auto"
    else
        local escaped_args
        escaped_args="$(printf '%q ' "$@")"
        cmd="$cmd $escaped_args"
    fi
    tmux new-session -A -s "$session" "$cmd"
}

常用法:

  • tmux-codex:启动/附加默认会话
  • tmux-codex --yolo:在已隔离环境中按需启用高权限模式
  • tmux-codex resume --last:恢复当前项目最近会话
  • tmux-codex resume --all:跨目录找最近会话

4. 安全模式建议:先 full-auto,再 yolo

Codex 官方 CLI 说明里:

  • --yolo(--dangerously-bypass-approvals-and-sandbox)会绕过审批和沙箱;
  • --full-auto 是 --ask-for-approval on-request + --sandbox workspace-write 的快捷组合。

生产/日常建议:

  1. 默认入口用 --full-auto。
  2. --yolo 仅在“外层已隔离(专用 VM/容器/低权限账号)”时使用。
  3. 需要额外目录写权限时,用 --add-dir,不要直接切到 danger-full-access。

5. 手机网络抖动场景:SSH keepalive 要配

tmux 解决的是“远端进程不中断”,但 SSH 链路本身仍会掉。
OpenSSH 官方参数里更推荐用协议层 keepalive(ServerAliveInterval / ServerAliveCountMax)来尽早感知僵死连接并重连。

可在 ~/.ssh/config 对移动场景主机加:

Host your-host
    ServerAliveInterval 15
    ServerAliveCountMax 3
    TCPKeepAlive yes

上面这组参数的效果是:约 45 秒无响应时主动断开,减少“假在线”卡死。

6. 可观测与自检:把 /status 当成日常命令

Codex CLI slash commands 里,最实用的是:

  • /status:看模型、审批策略、可写目录、上下文用量
  • /statusline:把关键状态放到底部状态栏
  • /resume:会话恢复
  • /ps:看后台 terminal 状态(启用相关执行模式时)

建议每次重连后第一件事就是 /status,确认当前策略是否符合预期。

7. 进阶:跨重启恢复(社区常见做法)

如果你不仅要“断线可回连”,还要“服务器重启后可恢复”,社区常见组合是:

  1. TPM(tmux plugin manager)
  2. tmux-resurrect(保存/恢复会话、pane、目录)
  3. tmux-continuum(定时自动保存、tmux 启动时自动恢复)

注意两个细节:

  • tmux-continuum 依赖 status line 机制执行定时逻辑;
  • 主题或其他插件覆盖 status-right 时可能导致自动保存失效(需按其 README 建议放置插件顺序)。

8. 社区大规模实践信号

社区项目 codex-cli-farm 的核心思路与上面一致:

  • 长生命周期 tmux session;
  • 多实例管理、日志聚合;
  • 保存/恢复;
  • 可选 systemd user 自动恢复。

这说明“tmux 持久化 + 统一入口命令”已经是 Codex CLI 多实例使用的主流工程化方向。

9. 推荐落地顺序(避免过度设计)

阶段 A(今天就能用)

  1. 配 tmux-codex 统一入口
  2. 配 SSH keepalive
  3. 用 codex resume --last 作为默认续跑方式

阶段 B(稳定后再上)

  1. 把默认 --yolo 调整为 --full-auto
  2. 会话名按项目拆分(如 codex-<repo>)
  3. 增加 /status 和 /statusline 的日常检查

阶段 C(重启恢复需求明确后)

  1. 引入 TPM
  2. 引入 tmux-resurrect
  3. 再引入 tmux-continuum

参考链接

  • Codex CLI 命令选项(含 resume、--yolo、--full-auto):https://developers.openai.com/codex/cli/reference
  • Codex CLI Features(含恢复会话行为说明):https://developers.openai.com/codex/cli/features
  • Codex CLI Slash Commands(/status、/statusline、/resume 等):https://developers.openai.com/codex/cli/slash-commands
  • Termius 后台连接说明(iOS 限制与 tmux 建议):https://support.termius.com/hc/en-us/articles/900006226306-Keep-your-Termius-sessions-alive-in-the-background
  • tmux 手册(new-session -A 语义):https://man.openbsd.org/tmux
  • OpenSSH 客户端配置(ServerAliveInterval / ServerAliveCountMax):https://man7.org/linux/man-pages/man5/ssh_config.5.html
  • Codex 社区需求(背景会话诉求):https://github.com/openai/codex/issues/3968
  • 社区工程化示例(codex-cli-farm):https://github.com/waskosky/codex-cli-farm
  • TPM:https://github.com/tmux-plugins/tpm
  • tmux-resurrect:https://github.com/tmux-plugins/tmux-resurrect
  • tmux-continuum:https://github.com/tmux-plugins/tmux-continuum
  • Mosh(移动网络下的替代交互链路):https://mosh.org/