Codex CLI 最适合运行在我真正用来开发的环境里:代码仓库、Git 配置、语言运行时、测试命令、本地服务和凭据都已经在 Mac 或服务器上准备好了。问题通常出现在离开电脑之后,尤其是同时跑着几个 Codex 任务时。
只保留一个终端并不难,难的是管理多个 Agent:哪个属于哪个仓库,哪个还在工作,哪个正在等审批,以及回来时应该进入哪一个 Session。如果每次都要把所有终端逐个打开检查,手机端的便利很快就会被抵消。
这正是 Herdr 适合登场的场景。Herdr 是运行在开发主机上的 Agent Terminal Runtime。它用后台 Server 保留真实 Terminal Pane,用 Workspace 组织项目,并识别 Codex 等 Coding Agent,汇总它们是正在工作、等待输入、已经完成,还是处于空闲状态。
Tailscale 和 SSH 负责把手机带回开发机,Herdr 则负责到达之后的长期 Terminal Workspace。最终得到的不是一堆叫不出名字的 SSH Tab,而是一个可以从手机查看多个 Codex 任务的控制台。
先看整体连接方式
完整链路如下:
手机 → Tailscale → SSH → 开发主机 → Herdr → Codex
Codex、Herdr、代码仓库和工具链都运行在 Mac、Linux PC 或服务器上。Tailscale 让手机可以通过私有网络找到 Host,SSH 进入 Shell,再运行 herdr 回到已经存在的 Herdr Session。
| 层级 | 职责 |
|---|---|
| Codex CLI | 读取仓库、修改文件、执行命令并 Review 结果 |
| Herdr | 管理持久 Terminal Pane、Workspace、Layout 和 Agent 状态 |
| SSH | 提供加密远程 Shell 和标准 Host 认证 |
| Tailscale | 通过私有 tailnet 连接手机与 Host |
| Redock | 用 Host、Project、Action 和 Terminal Session 组织手机端 SSH/Mosh 入口 |
本文把 Tailscale 当作网络层,登录认证仍使用标准 SSH Key 或密码。Tailscale SSH 也可以采用,但不是这套配置的必要条件。
可以在手机上运行 Codex 吗?
可以,前提是 Codex CLI 实际运行在开发主机上。iPhone 和 Android 都可以通过 SSH 连接 Host,显示与你在电脑前使用的同一个 Codex Terminal。
这样不需要在手机上重建开发环境。Codex 仍然可以读取 Host 上的仓库、AGENTS.md、Git 状态、Sandbox 设置、Plugin、语言工具和本地服务。手机只需要一条可靠的网络连接,以及能够正常显示 Herdr TUI 的 Terminal Client。
Host 仍然必须保持开机和唤醒。Herdr 可以承受 Client Detach,但不能让休眠的笔记本或关机的服务器继续执行代码。
在开发主机上准备 Codex
先在项目所在的机器上安装并登录 Codex。进入仓库,在添加 Herdr 之前确认 CLI 正常:
cd ~/projects/your-app
codex --version
codex
完成首次登录,并确认 Codex 可以读取仓库和执行合适的项目命令。权限设置要保持克制,特别是 Host 上还有生产环境凭据或其他敏感仓库时。
本文重点是手机访问,不展开 Codex 安装。如果 codex --version 失败,请先查看 Codex CLI 官方文档。
安装 Herdr 和 Codex Integration
Herdr 需要安装在运行 Codex 的同一台 Host 上。macOS 或 Linux 可以使用官方安装脚本,也可以在 macOS 上使用 Homebrew:
curl -fsSL https://herdr.dev/install.sh | sh
# 或在 macOS 上
brew install herdr
从项目目录启动一次:
cd ~/projects/your-app
herdr
Herdr 会启动或 Attach 默认的后台 Session。Workspace 保存项目级上下文,Tab 和 Pane 则用于 Shell、Codex、测试、日志和开发服务器。
即使不安装直接 Integration,Herdr 也能根据前台进程和 Terminal Screen 识别 Codex。如果希望 Herdr Server 重启后能够记录并恢复 Codex 原生 Session,还应安装官方 Codex Integration:
herdr integration install codex
herdr integration status
按照 Herdr 当前文档,这个 Integration 会更新 Codex Hook 配置并上报 Session Identity。Codex 是正在工作还是等待输入,仍由 Herdr 的 Screen Detection 判断。也就是说,Integration 主要改善 Restore,而可见状态来自 Herdr 对 Terminal 的识别。
在 Herdr 中启动 Codex
在 Herdr Pane 中进入仓库并正常启动 Codex:
cd ~/projects/your-app
codex
如果同时运行多个任务,最好为每个仓库或隔离的 Git Worktree 创建单独的 Workspace、Tab 或 Pane。除非已经明确协调修改,否则不要让多个 Codex 实例同时操作同一个可变 Checkout。
一套清楚的组织方式可以是:
| Workspace | Branch 或 Worktree | Agent Task |
|---|---|---|
web-auth |
fix/session-expiry |
修复并测试登录过期问题 |
api-review |
review/rate-limit |
Review API 未提交修改 |
docs |
docs/mobile-codex |
更新并验证文档 |
按 Ctrl+B,再按 q 可以从 Herdr Detach;SSH 直接断开也不会结束 Herdr Server 和 Pane 内的进程。稍后重新运行 herdr 即可 Attach。
开启 SSH 并加入 Tailscale
在 macOS 中开启 System Settings → General → Sharing → Remote Login,并把访问权限限制在开发账号。Linux 则需要安装并启用对应发行版的 OpenSSH Server。
在 Host 和 iPhone 或 Android 手机上安装 Tailscale,并登录同一个 tailnet。Host 地址可以使用 Tailscale IP,也可以使用 MagicDNS Name。测试时最好关闭手机 Wi-Fi,确认蜂窝网络下也可以连接。
这套方案中,Tailscale 提供私有网络可达性,OpenSSH 继续按照 Host 原有的 SSH Key 或密码策略认证,因此不需要把 22 端口直接暴露到公网。设备加入和连接检查见 Tailscale 指南,Redock 首次连接见 快速开始。
从手机连接 Herdr
任何可靠的手机 SSH Client 都可以使用 Herdr 官方推荐的移动路径:
ssh you@development-host
herdr
第二条命令会 Attach 已存在的 Herdr Session,并在手机 Terminal 中显示响应式 TUI。你可以切换 Workspace、查看 Agent 状态、找到需要处理的 Codex Pane,然后再次 Detach,而不停止任务。
基础连接并不复杂,真正的摩擦通常在日常使用几次之后出现:选择正确的 Host、找到仓库、记住检查命令,还要在连接上下文和项目上下文之间来回切换。
这时 Redock 就比较适合加入。把 Tailscale 地址、Port、Username 和 SSH Key 保存为 Host,再用 Project 关联这台 Host 与仓库目录。herdr 仍然运行在 Redock 的完整 Terminal 中,而常用测试、Git 检查、日志、构建和服务重启则可以保存为 Action,不用每次从 Shell History 重新寻找。
Redock 不会替代 Herdr。Herdr 负责 Host 上的持久 Terminal Runtime 和 Agent Layout;Redock 负责让 iPhone 或 Android 更方便地通过 SSH/Mosh 找到 Host,并回到正确的项目工作流。
一套实际的手机 Codex 工作流
同时运行多个 Codex 任务时,可以采用下面的循环:
- 打开对应仓库的 Redock Project 并连接 Host。
- 运行
herdr,Attach 已经存在的 Agent Workspace。 - 从 Herdr Sidebar 找到 Blocked、Done 或仍在 Working 的 Codex Pane。
- 查看当前输出,只处理真正需要决定的问题。
- Detach,让 Agent 继续在 Host 上工作。
- 稍后返回正确的 Worktree,检查
git status和git diff。 - 在 Herdr Pane 中运行 Test、Lint 或 Build,或者触发已经保存的 Redock Action。
- Review 实际修改和命令输出后,再 Commit 和 Push。
手机在这里最有价值的工作不是手写大量代码,而是看清多个 Codex Task 的状态,并在需要时及时介入。
Herdr 持久化不等于进程永远存活
Herdr 有两条不同的恢复路径,不能混为一谈。
普通 Detach 或 SSH 断开时,后台 Herdr Server 仍在运行,Pane、Shell、Codex Process、测试和日志都会继续。重新 Attach 回到的是同一批仍然存活的进程。
如果 Herdr Server 或 Host 真正停止,原进程就已经结束。Herdr 可以恢复保存的 Workspace、Tab、Pane、Directory 和 Layout;如果安装了当前版本的 Codex Integration,还可以调用 Codex 原生的 codex resume <id> 重新打开 Agent 对话。这是重建 Session,不是旧的操作系统进程穿过重启继续运行。
也不要在 Herdr Pane 中再用 tmux 包住 Codex。Herdr 官方文档明确说明 Agent Detection 不会穿透内部 tmux Session,此时它看到的前台进程是 tmux,而不是 Codex。这套工作流应直接把 Herdr 作为 Terminal Runtime,而不是叠加两层 Multiplexer。
Codex 应该用 Herdr 还是 tmux?
两者都能让 SSH 断开后继续保留终端,但解决的问题不同:
| 选择 | 更适合 |
|---|---|
| tmux | 少量标准、可移植 Session,以及成熟的 Unix 工作流 |
| Herdr | 多个 Coding Agent、项目 Workspace、状态汇总、直接 Agent Attach 和原生 Session Restore |
如果只运行一个 Codex Session,而且已经熟悉 tmux,tmux 可能已经足够。相同网络架构下的 tmux 配置可以参考 如何从手机运行 Claude Code。
当问题从“保留一个终端”变成“这些 Agent 里谁正在等我”时,Herdr 的价值才真正明显。Sidebar 和 Agent Model 可以减少逐个打开 Pane 检查的次数。
Codex Remote 呢?
OpenAI 也为受支持的账号和 Host 提供 ChatGPT 中的第一方 Codex Remote 体验。如果重点是 Codex Prompt、审批、Diff、截图和 Task Review,它会提供更完整的 Codex 原生移动界面。
SSH、Tailscale 和 Herdr 提供的是更宽的 Terminal 边界。同一台 Host 除了 Codex,还可以运行 Claude Code、OpenCode、测试、日志、数据库 Console 和服务。当工作离开 Codex 对话本身时,仍然可以直接操作完整 Shell。
两种方式可以同时保留:Codex Remote 用于更丰富的第一方 Review,SSH 则用于访问完整开发机和其他 CLI Agent。
故障排查
SSH 中出现 codex: command not found
分别在本地和 SSH Shell 中运行 which codex,修复 Remote Login Shell 的 PATH,再用同一个 Host User 验证 codex --version。
herdr: command not found
安装后重启 Shell,或者把 Herdr 安装目录加入 PATH。从手机测试之前先运行 herdr --version。
手机断开后 Codex 消失
Codex 可能启动在普通 SSH Shell,而不是 Herdr Pane 中;也可能是 Herdr Server 已经停止。重新连接并运行 herdr。如果 Workspace 恢复成新的 Shell,检查 herdr integration status,并显式 Resume Codex Session。
Herdr 无法识别 Codex
确认 Codex 直接作为 Herdr Pane 的前台进程运行,没有藏在内部 tmux 或其他 Wrapper 后面。可用 herdr agent explain <target> 排查错误状态。
Tailscale 在线但 SSH 失败
确认 OpenSSH 正在监听、Username 和 Key 正确、Host 允许 Tailscale 入站,并且 tailnet Policy 允许手机访问 Host 的 22 端口。先验证普通 SSH,再排查 Herdr。
FAQ
可以直接在 iPhone 本地运行 Codex 吗?
这套工作流让 Codex CLI 运行在 Mac、Linux PC 或服务器上,iPhone 通过 SSH 控制。仓库和开发工具都留在 Host。
可以从 Android 手机使用 Codex 吗?
可以。让 Android 和 Host 加入同一个 tailnet,通过 SSH 登录 Host,再运行 herdr 回到原来的 Codex Pane。
Herdr 为手机 Codex 工作流增加了什么?
Herdr 用后台 Server 保留 Terminal Pane,用 Workspace 组织多个 Agent,显示哪个 Agent 需要处理,并通过官方 Integration 支持 Codex 原生 Session Restore。
手机断开后 Codex 会继续运行吗?
普通断线时可以,前提是 Host 和 Herdr Server 仍在运行。Host 关机会停止进程,之后只能通过 Session Restore 重新打开对话。
Codex 应该使用 Herdr 还是 tmux?
少量标准 Session 使用 tmux;需要多个 Agent、可见状态、Workspace、直接 Attach 和原生 Restore 时使用 Herdr。不要在 Herdr 内再用 tmux 包住 Codex。
让整套 Agent Workspace 随时可达
Redock 通过 SSH 或 Mosh 从 iPhone 和 Android 连接你自己的开发主机。Project 保存 Host 和仓库入口,Action 保存 Git、测试、构建、日志和服务命令,完整 Terminal 则继续用于 Herdr、Codex 或其他 CLI Agent。