
1. 先搞清楚手机要继续的到底是什么昨晚有个朋友问我人在外面电脑上的 Codex 任务跑了一半能不能拿手机继续。我的答案很简单能而且不用装手机 App。他电脑上跑的就是 Codex 桌面客户端主界面看起来像一个带聊天面板的编辑器但背后真正干活的其实是同一台机器上的 Codex CLI。只要把这个 CLI 的交互终端安全地暴露到局域网里手机浏览器扫个码就能接着聊、接着跑任务。1.1 Codex、Codex Desktop 和 CLI 是什么关系很多刚接触 Codex 的同学会有一个误解Codex Desktop 是独立软件功能都在它的图形窗口里。实际上 Codex Desktop 更像是套在 CLI 外面的一层界面。它帮你渲染文件 diff、给你一个确认修改的按钮、把你正在进行的对话保存下来真正执行命令、生成文件、调用模型的还是openai/codex这个命令行工具。这个关系决定了“手机上继续任务”的解法。你不需要把整个 Codex Desktop 的图形界面搬到手机上也不需要在手机端重新登录一次 ChatGPT 再去同步数据。很多长期跑 Codex 的同学都明白任务不是一次性执行完的一个复杂的重构经常要分几轮中间你可能要出门吃饭、接送孩子、临时开会。如果能有一个方案让手机连回电脑终端直接在原来的会话里继续提问那效率会比重新开一个会话高很多。1.2 三种接续方式哪种最值得用我把市面上看到过的“手机继续 Codex 任务”方案分了三类。第一类是远程桌面比如 Windows 自带的远程桌面或者第三方远程控制软件。优点是界面和电脑上完全一样缺点也明显手机上操作小按钮特别吃力还要处理登录、分辨率、剪贴板同步一系列问题。偶尔看一次可以经常用它接续任务会让人崩溃。第二类是在手机 Termux 里直接安装 Codex CLI。理论上确实能把整个 CLI 装进手机但你得额外解决终端环境、密钥管理、手机存储、系统权限等问题。手机等于变成第二台开发机配置成本高而且很多依赖在 Android 上没有现成包。第三类是在电脑上起一个 Web 终端例如 ttyd再用二维码把访问地址送到手机。手机只要打开浏览器就行不用安装任何 App。同一局域网内延迟很低输入法、剪贴板这些问题也比远程桌面好处理。这篇文章讲的正是第三类。1.3 这套方案的前提是什么需要强调一下网络前提这种方式最顺手的是“手机和电脑在同一个局域网”。比如你在办公室电脑上跑任务手机连着同一个 WiFi或者家里台式机在书房人躺在客厅沙发上手机连家用路由器。这个场景下电脑和手机之间的通信不经过公网配置最简单速度也最快。如果你人在外面想通过公网远程连回家里或办公室的电脑那我建议另外考虑带身份认证的反向接入方案别直接对公网开放端口。为了安全文章中所有演示都默认局域网访问并且要求必须给 Web 终端设置账号密码。提示本文的核心思路是“在电脑上开一个安全的网页终端让手机扫码连上之后操作codex resume接着跑”。它不要求公网 IP也不涉及任何复杂的网络工具理论上只要你家里有普通路由器就能复现。2. 桌面端 Codex 的安装与配置先把地基打好既然手机端接的是电脑上的 CLI那电脑端的 Codex 环境就必须是健康的。很多人后面扫码成功、终端也连上了结果一敲codex就报错回头检查还是 config.toml 的问题。所以这一章先把地基打好。2.1 安装好 CLI并确认版本Codex CLI 的安装方式很简单。Linux 和 macOS 上可以直接用 Homebrewbrew install codexWindows 上如果已经装了 Node.js建议直接用 npm 全局安装npm install -g openai/codex装完先确认版本避免桌面版和 CLI 版本不一致带来一些莫名其妙的问题codex --version装好之后登录一次codex login登录完成后Codex 会在当前用户目录下生成凭据文件。这时候建议顺手跑一个小任务比如codex exec show python version and current date能正常返回说明 CLI 本身没问题。接下来再回头看桌面版。2.2 config.toml 放在哪为什么老是“无法加载”在网络热词里经常看到“ChatGPT cant load config.toml, so this thread cant resume.” 这个报错翻译过来就是 ChatGPT 客户端在恢复会话时读配置文件失败。常见原因有三个配置目录权限不对、配置文件内容写坏、配置文件中模型名不合法。先找到文件位置。macOS / Linux 下是~/.codex/config.tomlWindows 下是C:\Users\你的用户名\.codex\config.toml。如果你从没手动创建过可以先执行codex config让 CLI 生成一份默认配置然后直接编辑它。这里分享一个我踩过几次的配置模板可以当成起点model gpt-5.2-codex model_provider openai approval_policy on-failure sandbox_mode workspace-write重点提醒model这一行必须是你账号真正可用的模型。之前很多同学为了尝试新模型把model改成了一串网上流传的字符串比如gpt-5.6-sol。结果客户端一恢复会话就提示 not supported。这不是 Codex 坏了是模型名和账号权限不匹配。比较稳妥的做法是先用codex exec跑一次确认能用再写死到配置文件里。还有一个常见坑Windows 用户用记事本编辑 config.toml保存时默认可能是带 BOM 的 UTF-8 或直接另存成了 UTF-16。Codex 的配置文件对编码很敏感建议用 VS Code 或 Notepad编码明确选 UTF-8 无 BOM。注意如果你遇到“配置文件在桌面版里加载失败、但命令行正常”的怪问题优先检查model行和文件编码这两个原因占了绝大多数。2.3 桌面版报错找不到 codex cli binaryCodex Desktop 并不是每台电脑都能自动找到 CLI。否则就会出现类似“ChatGPT failed to start. Unable to locate the codex cli binary. Set CODEX_CLI_PATH” 这种报错。意思很直白桌面版需要调用外部的 codex CLI但它找不着。解决办法是在系统环境变量里指定 CLI 二进制的位置。Windows 上先找到 codex 装到哪了Get-Command codex | Select-Object Source比如输出是C:\Users\你的用户名\AppData\Roaming\npm\codex.cmd那就新建一个用户环境变量CODEX_CLI_PATHC:\Users\你的用户名\AppData\Roaming\npm\codex.cmdmacOS / Linux 也类似which codex然后把路径填入环境变量即可。改完环境变量记得完全退出 Codex Desktop再重新打开。另外Windows 还容易出现“安装完成之后打不开”、“Windows 设置未完成”这类提示。这多半是上一次安装残留导致。稳妥办法是先完全卸载再以普通用户身份安装安装过程中不要开各种“一键优化”软件。如果系统提示“需要一次性权限才能在你的电脑上运行”确认安装包来自官方渠道后正常点击允许就行。2.4 给手机终端预留一个合适的审批策略在手机上继续 Codex 会话时你很难像在桌面端那样愉快地用鼠标滚轮翻 diff、点按钮确认。所以我会提前把审批策略设置得稍微宽松一点让普通改动自动执行只在风险高的操作时才停下来。config.toml 中等价于“按需确认”的策略大概是这样approval_policy on-failure sandbox_mode workspace-writeon-failure的意思是只有命令失败时才停下来询问workspace-write表示允许在工作区内写文件但不会随便动工作区之外的东西。这套组合比较适合长任务巡检。如果你运行的是只读类分析任务也可以考虑更严格的组合。3. 扫码接入用 ttyd 把 Codex 终端送到手机现在进入正题。手机继续任务最轻的方式是打开一个能跟电脑终端实时互动的网页。我在这里选 ttyd是因为它足够简单一个可执行文件就能把任意终端程序变成浏览器里的 Web 终端。3.1 ttyd 是什么为什么适合这个场景ttyd 是一个开源项目它把命令行程序的输入输出转发成 WebSocket浏览器里打开一个页面就能像操作终端一样操作。你可以理解成“网页化的终端模拟器”。我们用它启动一个 shell然后在 shell 里运行codex或codex resume手机浏览器就变成了一套远程 Codex 终端。它的亮点是免安装手机 App。iOS 和 Android 上打开 Safari 或 Chrome 就能直接用不需要额外配置终端 app也不依赖某种特定协议。对于我只是想在客厅沙发上继续盯一下 Codex 任务的人来说这已经非常够用了。3.2 Windows / macOS / Linux 上启动 ttydWindows 上如果装了winget直接一条命令winget install ttydmacOS 用 Homebrewbrew install ttydLinux 发行版一般自带包sudo apt install ttyd启动前先拿到电脑的局域网 IP。Windows 上在 PowerShell 里运行ipconfigmacOS 上运行ipconfig getifaddr en0Linux 上运行hostname -I假设 IP 是192.168.1.23端口用7681。我希望手机扫码后可以直接操作终端所以用-W开启可写再用-c设置账号密码最后绑定到局域网 IPttyd -W -i 192.168.1.23 -p 7681 -c admin:自己设一个长密码 bash这里解释一下参数含义-W让网页终端可以输入-i指定只监听局域网 IP不监听所有网口-p是端口-c是访问网页时弹窗用的账号密码。启动成功后你会看到日志提示监听地址此时终端不要关最小化留着就行。如果你的电脑装了 WSL也可以让 ttyd 跑在 WSL 里然后运行跟 Windows 共享同一网段的终端方案。不过为了少绕弯路日常使用我建议 ttyd 直接跑在 Windows 原生环境避免 WSL 的网络转发影响手机访问。3.3 用二维码把访问地址送到手机地址格式就是http://192.168.1.23:7681。手输地址有点烦而且容易输错所以才有了“扫码即用”。生成二维码最省事的方法之一是用qrencode命令行工具qrencode -o codex-mobile.png http://192.168.1.23:7681如果你不想装命令行工具找个在线二维码生成网站也行。重要的是二维码内容里填完整的 URL包括http://和端口号。生成二维码之后比如把图片保存到桌面手机相机扫码浏览器会弹出一个登录窗口输入前面-c设置的账号密码然后你就进入了一个 bash 终端。到这里扫码接入已经完成。3.4 如果不想用 ttyd还有哪些替代ttyd 不是唯一选择。同样思路的还有 wetty它是用 Node.js 写的 Web 终端适合已经有一堆 Node 环境的同学。启动方式大概是npm install -g wetty wetty --port 7681 --host 192.168.1.23 --ssh-host 127.0.0.1但 wetty 默认走 SSH配置链路长一点。还有像 GoTTY它的用法跟 ttyd 几乎一样只是更新不如 ttyd 勤快。实测下来ttyd 在 Android Chrome 和 iOS Safari 上的键盘兼容性相对更好所以我默认推荐它。注意千万别把 ttyd 的监听地址写成0.0.0.0并且不设密码那样等于把电脑终端敞在公网上风险非常大。绑定局域网 IP 加账号密码是底线。4. 实操从手机继续一个 Codex 会话下面我记录一次完整的操作。电脑上已经跑着一个 Codex 会话内容是一个 Python 服务重构任务。我在电脑上做了几轮修改然后临时要出门于是打算到客厅用手机继续盯。4.1 在 Web 终端里进入 Codex 交互模式手机扫码后先进入普通 shell。此时不要急着直接跑codex先确认一下网络环境没问题echo hello, mobile terminal能正常回显说明 ttyd 通道已经通了。然后运行codex如果没有历史会话Codex 会进入一个新的交互式终端如果有历史会话可以直接用codex resume不同版本的 Codex 对 resume 的处理略有差别有的会直接恢复最近一次会话有的会让你选择会话 ID。怎么看当前有哪些历史会话最简单的是看~/.codex/sessions目录ls -lt ~/.codex/sessions里面以时间命名的子目录或文件就是历史会话记录。记住你最关心的那个会话 ID 或时间戳在需要的时候传给 resume 参数。如果你不确定参数写法可以先看帮助codex resume --help4.2 继续让 Codex 改代码进入会话后手机终端和桌面端看到的是同一份工作区你在手机上发出新的指令Codex 会在电脑上直接改文件。我在实操时输入了这样一句话继续把刚才那个服务的异常处理补上先别动测试文件Codex 会先给出计划然后进入文件修改流程。因为手机屏幕小建议把字体调到浏览器能设置的最大值再用横屏模式。每次执行前看清楚它要改哪些文件再决定是否同意。这里有个重要经验手机端操作和桌面端不太一样桌面可以用鼠标快速滚动 diff、点按钮确认手机只能靠键盘命令。所以我会把审批策略预先设在 config.toml 里比如approval_policy on-failure让常规改动自动处理只在遇到高风险操作时才停下来询问。这样在手机上续跑长任务时不会因为某个确认对话框而卡住。4.3 手机键盘和输入法的几个小技巧直接在网页终端里输入中文时有些 Android 输入法的回车键发送的不是真正的 Enter而是把候选字上屏或者换行。这会导致 Codex 里的指令没发出去。很小一个坑却能卡住你十分钟。我的做法是需要确认时按浏览器工具条上的“Go”键或者干脆把输入法切到英文模式用英文发指令。Codex 对中英文都支持得不错但英文指令在 Web 终端里最不容易出兼容问题。另一个技巧是在手机浏览器中开启桌面版网站。不少 Android 浏览器在手机版模式下会给链接和输入框做额外处理导致 ttyd 的终端页面布局异常。改成桌面版网站后终端宽度接近电脑显示效果会好很多。4.4 终端卡住时怎么退出如果手机端直接关闭了浏览器ttyd 对应的连接会断开。Codex CLI 进程不一定马上退出但你的会话已经保存了。回到电脑端或重新扫码进入终端后用codex resume重新接上就行。如果手机终端里 Ctrl-C 没反应可以试试浏览器菜单里的“重新加载”或者直接关掉标签页重新扫码。ttyd 的连接断开通常不会影响电脑上 Codex 正在执行的命令因为命令本身跑在电脑的进程里这个设计比某些远程桌面工具还实用。注意不要用手机端 Web 终端去执行 rm -rf 这类不可逆的破坏性命令。手机屏幕小误触概率高我设置过只读提醒也还是会看错。重要的清理命令等回到电脑上再操作。5. 常见问题与报错排查照着抄就行这部分我把最近群里、搜索热词里出现频率最高的几个报错统一整理成一张速查表。扫码终端只是一层外壳真正决定任务能不能继续的还是 Codex 本身。5.1 “cant load config.toml / so this thread cant resume”出现这个报错时先打开配置文件逐行检查。重点看三个地方。第一是model是否填写了不存在的模型名。建议改成官方默认配置里给出的模型名再用codex exec验证。第二是文件编码。Windows 下记事本保存容易带 BOM。用 VS Code 重新保存为 UTF-8 无 BOM。第三是文件权限。macOS 和 Linux 下确保当前用户对~/.codex/config.toml有读写权限chmod 600 ~/.codex/config.toml5.2 “The gpt-5.6-sol model is not supported when using codex with a ChatGPT account”这句报错表面上是“模型不支持”实际原因通常是配置里写了一个账号没有权限的自定义模型名。账号层面支持的模型与 config.toml 里写的模型必须一致。处理方法是把model改成你可以用的真实模型名然后重新启动桌面版或 CLI。也有个别情况是版本太旧升级 Codex Desktop 到最新版本再同步更新 CLI。5.3 “cc switch local proxy failed while handling codex endpoint /responses”这个报错通常出现在借助配置切换工具修改 endpoint 之后。这类工具会把请求指向本地转发端口如果没有提前启动本地转发服务Codex 一请求/responses就会失败。解决思路是不要在切换配置后直接启动 Codex先确认本地转发服务确实在监听或者放弃“切换工具”直接在 config.toml 里写正确的 model_provider 和 base_url保持配置可复现。如果你并不需要自定义 endpoint就用默认的官方 provider把这个报错从根上规避掉。5.4 切换账号后登录报错有同学说“ChatGPT 切换两次账号后会登录报错”多半是凭据文件缓存了多个账号状态。处理办法是先退出登录再重新登录。CLI 里执行codex logout codex login如果还不行就手动删除凭据文件重新登录。凭据文件一般叫auth.json在~/.codex/目录下。退出 Codex Desktop 后把auth.json改名备份再重新登录。这个方法可以解决绝大多数切换账号造成的状态错乱。5.5 Web 终端打开后黑屏或无法输入先检查启动 ttyd 时有没有加-W没有-W的话页面默认是只读的只能看不能输入。再检查-c设置的密码是否正确。如果浏览器能打开登录框但登录后黑屏试一下换浏览器或开启“桌面版网站”。iOS Safari 和 Android Chrome 都支持 ttyd但有些内置浏览器会拦截 WebSocket尽量别用小程序内置网页或某些轻量浏览器的“无痕模式”。5.6 扫码后提示连接超时手机和电脑必须在同一网络。电脑防火墙也要放行 7681 端口。Windows 上首次启动 ttyd 时系统会弹防火墙询问确认允许专用网络如果之前手滑点了取消重新用管理员权限启动一次 ttyd 即可。6. 安全底线与几点个人经验扫码 Web 终端好用是好用但是把终端暴露在局域网里这件事本身就有风险。我长期用的原则是只绑定局域网 IP必须加密码不把端口映射到公网。只要做到这三点日常使用基本不会出问题。如果未来确实有公网远程需求不要直接在路由器或网关设备上做端口映射。更稳妥的方式是用支持 TLS 的应用层网关来转发 WebSocket并启用强身份认证。这个思路在 ttyd 的项目文档里也有相关说明。最后分享一个我实际用下来的组织习惯我会把二维码生成成图片和电脑的局域网 IP 一起写在一个备忘录里。这样每当手机需要继续 Codex 任务打开备忘录扫码就行不用每次重新查 IP、重新敲 URL。而且我特意把 ttyd 的密码和电脑登录密码分开即使二维码被同事不小心扫到也不会直接暴露系统登录凭据。用 ttyd 接续 Codex本质上是把“图形界面专用场景”转成“终端优先场景”。它适合长任务巡检、临时代码调整、会议间隙继续跑一轮改动。那些真正复杂的代码审查、大面积重构还是回电脑前做更舒服。但至少从今天起跑一半就出门这件事已经不是问题。