昨天在 GitHub 热榜上刷到一个讨论串,有人把 Codex CLI 直接跑进了手机终端,配图是一只手指在屏幕上敲代码,角落里 Codex 正自动改文件。乍一看像整活,仔细顺着思路试了试,才发现这其实是一套相当实用的移动开发方案。Codex CLI 是 OpenAI 开源的终端 AI 编程助手,能读代码仓库、改文件、执行命令,而把终端搬进手机、再让 Codex 在终端里跑起来,相当于把一整套“能自己干活的命令行环境”塞进了口袋。这篇文章我会把从安装、配置到各种报错排坑的完整过程写出来,适合平时就在用 macOS/Linux、也能接受“半块屏幕写代码”的开发者参考。
1. 先搞清楚:手机终端跑 Codex CLI,到底在跑什么
1.1 Codex CLI 不是网页版,它是一个本地 Agent
很多人第一次听说 Codex CLI,会下意识觉得它就是网页版 ChatGPT 套了个命令行皮肤,其实不是。Codex CLI 是一个安装在本地、通过终端交互的 AI Agent。你给它一句话,它会自己去读当前项目里的文件、定位相关代码,必要时还会执行 shell 命令来验证思路、跑测试或者直接改动代码。
它和你电脑上的 IDE、Git、Node 环境都工作在同一个操作系统里。也就是说,它能访问到的文件和命令,全依赖你给它的权限范围。这个特性放到手机终端一样成立:只要手机上的终端环境能装 Node.js、能联网、能访问 API,理论上 Codex CLI 就能跑起来。这也解释了为什么很多人不只是把它当成一个“AI 聊天框”,而是当成一个远程开发助理在用。
1.2 为什么有人愿意在手机终端上折腾 Codex
最直接的需求是“人不一定在电脑前”。比如周日在外面,线上服务出了个日志异常;比如人在高铁上,临时想看一段仓库里的逻辑;再比如你习惯在服务器上写脚本,突然想让它顺手优化一段代码。你不可能每次都从包里掏出笔记本,但手机是随身带的。
手机终端跑 Codex 也不是没有代价。屏幕小、虚拟键盘难按、长命令容易敲错,这些都是现实问题。所以真正适合手机终端的用法,并不是“把所有开发都搬到手机上”,而是做这几类事情:
- 应急查看代码和日志,听 Codex 解释一段逻辑正在发生什么;
- 让 Codex 执行一次已经验证过的修复操作,比如批量替换、生成补丁;
- 通过 SSH 连到服务器,让 Codex 在服务器上帮你查问题;
- 配合 tmux 在后台跑一轮长时间任务,回来再拉取结果。
想明白这个定位之后,你会发现这件事不是“伪需求”,而是很自然的移动办公补充。它和桌面环境不是替代关系,而是互补关系。
1.3 三种运行形态,帮你选最合适的
手机终端跑 Codex CLI,我试验下来主要有三种形态。
| 方案 | 适合谁 | 优点 | 明显短板 |
|---|---|---|---|
| Android Termux 直装 Codex CLI | 喜欢折腾、希望手机单机运行的人 | 不依赖外部机器,手机本身就是一个 Linux 环境 | Termux 环境较精简,按键和权限需要额外适配,长期跑任务手机发热明显 |
| iPhone / Android 通过 SSH 连开发机 | 手上有云主机或家里有常开电脑的人 | 计算和网络都在远端,手机只做显示;Codex 能访问完整开发环境 | 依赖网络,需要提前配好 SSH |
| SSH + tmux 后台常驻 | 要跑长任务、经常中断连接的人 | 会话不丢失,随时恢复现场 | 需要额外学一点 tmux 操作,初期觉得多余,用久离不开 |
我在三种方案里都踩过坑,最后日常用的其实是第三种:手机 SSH 到服务器,在服务器上运行 Codex CLI,再用 tmux 把会话挂住。不是 Termux 不行,而是开发机上的环境更完整,Codex 干活更放得开,而且手机只是当一块便携终端屏幕,灵活很多。
2. 搭建 Codex CLI 之前,先把这些环境装对
2.1 Node.js 版本与 npm 源设置
Codex CLI 官方分发走的是 npm,所以第一件事就是确认系统里有可用的 Node.js 环境。官方通常要求 Node.js 18 以上、推荐 20 LTS 或 22 LTS。低于 18 会在安装或运行时出现各种奇怪问题,比如某些依赖编译到一半就崩。
装完先确认版本:
node -v npm -v如果你以前没装过 Node,macOS 上我建议用 nvm 或 fnm 这种版本管理器,不要直接去官网下 pkg 安装包。版本管理器能让你在不同 Node 版本间随时切换,Codex 要求变了,切一下就行。
国内网络环境下,直接用默认 npm 源装 Codex 可能会卡在下载阶段。这时候先把这个命令执行一下,之后所有 npm 包都会走国内镜像,速度会快很多:
npm config set registry https://registry.npmmirror.com这条命令不是给 GitHub 做代理,只是把 Node 包下载源换成国内可访问的镜像,属于常规操作,不影响 Codex 本身的 API 连接。
2.2 安装 Codex CLI 与鉴权配置
Node 环境就绪后,安装 Codex CLI 非常简单:
npm install -g @openai/codex安装完成之后验证一下:
codex --version如果能看到版本号,说明安装成功。如果没有,不要急,这大概率是 npm 全局 bin 目录没有加进 PATH,这一节先记着,第四章会专门排查。
Codex CLI 本身需要 API 鉴权。最直接的方式是配置环境变量OPENAI_API_KEY。在 macOS/Linux 的 shell 配置文件中加入:
export OPENAI_API_KEY="你的 API Key"然后重新加载配置:
source ~/.zshrc # 或者 source ~/.bashrc,取决于你用哪个 shell这里多提醒一句:Codex CLI 所有功能都要在它能正常访问对应 API 服务的前提下工作。如果你所在网络访问 API 不稳定,后面就会看到一堆 timeout、connection error。这是环境问题,不是 Codex 代码的问题。我的建议是先在一台网络环境稳定的机器上跑通,再拿到手机终端里去用,别一开始就在手机上反复试错。
2.3 验证 Codex 是否能正常干活
装好、配置好 API Key 之后,先跑一个最基本的请求:
codex "用 Python 写一个脚本,统计当前目录下所有 md 文件的总字数"正常情况下,Codex 会开始生成方案、给出代码,并询问你是否要执行。初次运行时它还会提示你选择命令执行权限模式,建议在个人开发机上选择需要逐个批准或更宽松的模式,这样它改文件、跑命令时都会先经过你同意。
还有一个小技巧:Codex CLI 会自己创建配置文件目录,一般是在~/.codex/config.toml。你可以在里面调整默认模型、输出风格等参数,官方文档里关于这部分写得很清楚。如果你不想改,用默认配置也能跑,但至少要知道配置文件在哪,后面遇到奇怪行为时排查会快很多。
3. 手机端实操:三种跑法,我最后留了这种
3.1 方案 A:Android Termux 直装 Codex CLI
Termux 是 Android 上一个非常成熟的终端模拟器,能让手机拥有一个精简的 Linux 环境。先提醒一点:去 F-Droid 下载 Termux,不要用 Play Store 版本,后者维护滞后,功能也不全。
安装完成后,在 Termux 里依次执行:
pkg update && pkg upgrade -y pkg install nodejs-lts git openssh -y npm install -g @openai/codex这里nodejs-lts会给你一个长期支持版的 Node,比 Termux 默认源里的旧版要稳。装完同样执行codex --version验证。
Termux 直装的体验有两个坎。第一,手机的软键盘没有 ESC、Ctrl 这些键,而终端里的很多快捷键恰好绕不开它们。建议在 Termux 里把“额外按键”功能打开,它会在键盘上方生成一排 ESC、Ctrl、Tab 等虚拟键,配合起来会舒服很多。
第二,Termux 默认只能访问 App 自己的数据目录,想让它读取手机存储里的文件,需要先执行:
termux-setup-storage执行后手机会弹出存储权限申请,同意之后~/storage下才会出现 shared、downloads 这些目录。
Termux 直装方案最大的好处是:“手机本身就是那台机器。”即使你在户外、没有任何服务器可用,也能打开 Codex 处理任务。代价是手机性能和散热撑不起特别重的项目,跑大仓库时容易发热降频。
3.2 方案 B:手机 SSH 到开发机,在远端跑 Codex
如果你的代码主战场在云主机或家里那台常开的电脑上,其实没必要在手机里完整搭一套开发环境。你只需要一台能 SSH 登录的开发机,以及一个优秀的手机终端 App。
开发机那边保证 SSH 服务正常运行,安装好 Codex CLI 并完成 API Key 配置就行。手机端可以选择 Termius、Blink Shell 或 Termux 配合ssh命令登录。
Termius 是我个人用得比较多的手机终端,原因不是它功能有多深,而是它把“连接管理”做得很好:主机列表、密钥对、端口转发都能同步,换了手机也不用手动重配密钥。Blink Shell 在 iOS 上口碑也不错,对 Mosh 的支持很成熟,移动网络切换时不容易断线。
手机 SSH 到服务器跑 Codex 的操作如下:
ssh user@your-server-ip codex进入 Codex 交互界面后,它和你在电脑上看到的界面几乎一样。无论是让它改代码、跑测试、还是解释一段日志,Codex 的执行都发生在服务器上。手机端崩溃、App 被切后台、网络闪断,最多只是显示断了,Codex 那边的任务不一定停。
3.3 方案 C:tmux 保活,别让 Codex 被断网毁掉
移动网络最大的特点就是不稳定。地铁过隧道、电梯里信号弱、电话进来,SSH 随时可能断开。如果你直接在 SSH 会话里跑 Codex,一旦断开会话就没了,Codex 干到一半的任务可能直接被终止。
解决办法是 tmux,一个终端复用工具。简单理解,tmux 能帮你开一个“永不消失的终端房间”,即使你手机 SSH 断开了,房间里的进程还在继续跑。下次登录进去,重新进入那个房间,现场原封不动。
在开发机上安装 tmux:
# Ubuntu / Debian sudo apt install tmux -y # macOS brew install tmux用 tmux 新建一个会话,命名为 work:
tmux new -s work codex把 Codex 放在里面跑。之后不管手机网络断多少次,只要服务器不重启,任务都会一直在后台。下次 SSH 上来执行:
tmux attach -t work就能回到刚才的 Codex 会话。
tmux 还有几个常用的操作,如果你不习惯记快捷键,建议至少记住这组命令:
# 分离当前会话,让它在后台继续跑(Ctrl+b 然后按 d 也可以) tmux detach # 查看所有会话 tmux ls # 重开会话 tmux attach -t work我实际用下来的体会是:tmux 是整个手机终端方案里最不可或缺的一环。没有它,Codex 在手机上跑得再顺,也经不起一次地铁隧道断连。
3.4 把 Terminal 键盘调顺手
手机终端还有一个被很多人低估的问题:键盘和快捷键。要输入Ctrl+C、ESC、方向键、Tab,如果没有实体键盘,就必须依靠终端的额外按键区。
- Termux:在屏幕上从左边缘向右滑动,可以唤出隐藏的额外按键行;
- Termius:在设置中打开“快捷键栏”,编辑自定义快捷键布局;
- Blink Shell:支持连接实体蓝牙键盘,配置也丰富。
蓝牙键盘是另一个思路。给手机配一个便携折叠键盘之后,Codex CLI 这种大量依赖文本输入的工具,操作体验会接近笔记本。
4. 常见报错速查:最近搜到的问题,我基本都踩过
每次 GitHub 上有 Codex CLI 相关话题火起来,评论区都会出现一批眼熟的报错。很多并不是 Codex 本身的问题,而是安装方式或环境配置不一致造成的。下面是最近大家搜得比较多的几个。
4.1 unable to locate the codex cli binary
这个报错在很多使用桌面客户端或插件启动 Codex 的场景中会碰到。完整的报错大概是:
unable to locate the codex cli binary. set codex_cli_path or ensure the electron resources include bin/codex.它的意思是:某个基于 Electron 的客户端在本机找 Codex CLI 二进制文件,但没找到。常见原因是:你是用npm install -g @openai/codex安装的,Codex 的命令文件被放到了 npm 全局目录;而那个桌面客户端去自己的resources/bin目录里找,两边路径对不上,于是报错。
解决办法比较直接。先确认命令行里到底能不能找到 codex:
# macOS / Linux which codex # Windows where codex如果能找到,把路径设置到环境变量里指向它。报错信息里提示的变量名是CODEX_CLI_PATH,不同版本可能显示为小写,但系统读取时通常是不区分大小写的:
export CODEX_CLI_PATH=$(which codex)在 macOS/Linux 上,可以把它写进~/.zshrc或~/.bashrc,这样每次打开终端都自动加载。
如果which codex找不到任何内容,说明 npm 全局 bin 目录不在 PATH 里,或者 Codex 没有被安装成功。这时先回看 2.2 节,确认安装过程没有报错,再用npm list -g @openai/codex查看全局包里有没有它。
4.2 codex 提示“当前会话没有可用的终端或文件读取工具”
这个报错出现时,Codex 会告诉你它没有终端工具或文件读取工具可用,导致它无法读文件、执行命令。
这通常不是二进制缺失,而是运行时工具权限或模式受限。Codex 的设计里,读取文件和执行命令都属于“高权限操作”,需要显式开启,或者因为你启动时选择了受限模式而不允许使用。你可以检查以下几个方面:
- 当前运行 Codex 的终端是否允许 Codex 调用 shell;
- Codex 的配置文件中是否设置了过于严格的沙箱限制,导致文件系统和进程访问被阻断;
- 若你在远程连接中遇到这问题,确认远程环境里的 Codex 版本和本机一致,避免客户端与服务端之间的能力不匹配。
最直接的排查方式是先用全功能模式启动试试,不要带额外限制参数,然后看能不能读取当前目录:
codex "列出当前目录下的文件"如果仍然说没有工具,检查一下 Codex 有没有更新到最新版,或者完整卸载重装一次。
4.3 GitHub 页面打不开、下载仓库慢的处理思路
很多人会抱怨 GitHub 打不开,或者仓库 clone 到一半就失败。这个情况分两种:一种是域名解析出问题,一种是网络连接质量差。
先做基础检查,在终端里执行:
ping github.com nslookup github.com如果 ping 不通但 nslookup 能解析出 IP,往往不是域名解析的锅,而是网络链路问题。如果 nslookup 本身失败,那大概率是本机 DNS 有问题。可以试着把 DNS 换到公共 DNS 服务,再刷新本机 DNS 缓存:
# macOS sudo dscacheutil -flushcache sudo killall -HUP mDNSResponder # Windows ipconfig /flushdns # Linux sudo resolvectl flush-caches如果换了网络环境之后能打开,那说明之前你所在网络和 GitHub 之间的链路质量不好,这种只能换网络或稍后再试。核心原则是只解决网络连通性问题,任何“绕过访问限制”的操作都不在讨论范围内。
另外,clone 大仓库变慢时,可以先用--depth=1浅克隆,只拿最新代码,等确实需要历史记录再拉深:
git clone --depth=1 https://github.com/openai/codex.git这条命令对 GitHub 官方仓库同样适用。它不改变访问方式,只是减少要下载的数据量,很多时候能救急。
4.4 问题排查速查表
| 现象 | 可能原因 | 处理办法 |
|---|---|---|
codex命令不存在 | npm 全局目录不在 PATH | 执行npm prefix -g,把 bin 目录加入 PATH |
| 安装时卡在 npm 下载 | npm 默认源慢 | npm config set registry https://registry.npmmirror.com |
| unable to locate the codex cli binary | Electron 客户端找不到 codex 二进制 | 设置export CODEX_CLI_PATH=$(which codex) |
| Codex 说没有终端或文件工具 | 权限模式受限 | 用全功能模式启动,检查配置文件沙箱选项 |
| SSH 断开后 Codex 任务丢失 | 没有使用 tmux | tmux new -s work后再运行 Codex |
| 手机键盘没有 Ctrl / ESC | 终端 App 未启用额外按键 | 打开额外按键行,或接蓝牙键盘 |
| GitHub clone 总是中断 | 网络链路不稳定 | 换网络环境重试,或使用--depth=1 |
写到这里,我发现 GitHub 上另一个热门项目 QZoneArchive 也常被和 Codex 一起讨论。一个是帮你把分散数据归档的自动化工具,一个是把 AI 能力带进终端的编程助手,看表面毫无关系,但本质上都在说明一件事:现在的开发者越来越习惯用脚本和终端去解决原本要登录网页、反复点击才能完成的事。Codex CLI 正好站在这个趋势的正中间。
最后说点个人实际操作的体会。
我最开始也觉得“手机跑 Codex CLI”是个噱头,真正让我改变看法的一次,是周六在外面接到一个服务告警。我打开手机 Termius,SSH 到服务器,tmux attach 进之前挂着的会话,Codex 还在等我的下一步指令。我让它先看错误日志,它快速定位到一个配置文件写错的地方,然后我敲了一行命令让它修正,服务很快就恢复正常。整个过程没用电脑,就靠一只手机。
如果你的第一步是“在手机装一个终端,然后直接跑 Codex”,我建议稍微调整一下优先级:先在电脑或服务器上把 Codex 跑熟,再用手机 SSH 连过去。等真的遇到需要在户外动手的场景时,你会发现这套方案比你想象中可靠得多。