起因很简单:出门在外,突然想改个 Bug、发个版本。身边只有手机,代码却在家里的电脑上,服务器还在云端。
折腾了一圈之后,我没有买新电脑,也没有租大内存服务器,而是把「手机 + 电脑 + 服务器」三个设备串了起来,让手机成为 Codex 的遥控器。


一、先说结论:我最后用了什么方案

手机 + 电脑 + 服务器三端互联

  1. 电脑负责真正干活(跑 Codex、看代码、跑构建);
  2. 手机负责远程控制(发指令、看实时输出、收通知);
  3. 服务器只负责最终发布,任务很轻。

三者通过 Tailscale 组成一个私有虚拟局域网,流量不走公网,自己的数据自己掌控。

┌────────┐   Tailscale 虚拟局域网   ┌──────────────┐   SSH/部署   ┌────────┐
│  手机   │ ──────────────────────► │  电脑(公司/家) │ ──────────► │  服务器 │
│ 遥控器  │     加密直连              │ Codex+网关    │  推送发布    │ 最终部署 │
└────────┘                          └──────────────┘              └────────┘

手机上装的是我自己开发的安卓壳 Codex Mobile(基于开源项目 OpenCodex 二次开发),打开就是一个完整还原原生 Codex 桌面 UI 的界面:能看到会话列表、文件面板、实时对话流、活动记录,收到完成通知,点一下直接回到对应会话。想细看代码的时候,随时回到电脑上,界面一模一样,零学习成本。


二、为什么不是「直接部署到服务器」?

我最早的想法和很多人一样:既然要 7×24 小时都能用,那直接在服务器上部署一个常驻助手不就行了?

试过之后,被三个现实问题劝退:

1. 服务器配置不够

我用的是一般的 2 核 2G 云服务器。跑一个常驻的 AI 编码助手,内存捉襟见肘,任务一多、上下文一长就卡住,甚至直接 OOM 被杀。

2. 任务会「卡死」

大模型生成代码往往要几十秒到几分钟。在低配服务器上,等待时间被无限放大,有时候看起来像「卡住」,实际是资源不够在排队。

3. 最致命的一点:盲盒开发

服务器上跑的助手,我只能看到最终结果——代码生成完了没、任务成没成功。

  • 我看不到它正在改哪些文件;
  • 我看不到中间产物;
  • 报错了我只能把错误贴回去让它继续改,像在跟一个「盲盒」对话。

这对我这种需要掌控代码细节的人是难以接受的。写代码最怕的不是慢,而是不可见。

维度 服务器直部署 手机+电脑+服务器(本方案)
算力 2核2G,任务多了会卡 用电脑算力,充足
可看代码 ❌ 只能看结果 ✅ 电脑上随时看全部代码
可看产物/日志 ❌ 盲盒 ✅ 实时输出、日志、文件全可见
出问题排查 困难,只能贴错误 直接在电脑上打开调试
7×24 可用 ✅ 但体验差 ✅ 手机遥控 + 电脑开机即可
服务器负担 高(跑 AI 任务) 低(只做最终部署)

一句话总结:让服务器干它擅长的事(部署),让电脑干它擅长的事(写代码),让手机干它擅长的事(遥控)。


三、为什么不用官方移动端?

Codex 本身是有官方移动端的,看起来很方便,但有一个关键限制:它要求登录官方账号

而我的场景是使用第三方 API(比如 DeepSeek——官方明确表示其模型针对 Codex 使用场景做了专门优化,价格也更友好)。第三方 API 走的是自己的 Key,官方移动端的登录体系用不了。

官方移动端 自研 Codex Mobile
登录方式 官方账号 自己的访问密码
第三方 API ❌ 不支持 ✅ 完全支持(DeepSeek 等)
界面体验 官方原生 UI 完整还原原生 UI(基于 OpenCodex)
可扩展 封闭 开源可改

既然官方不给这条路,那就自己造一个。


四、同类开源项目对比:为什么我不直接用它们?

市面上其实已经有不少「Codex 遥控器」开源项目。我把它们都研究了一遍,最后为什么没有直接用?核心原因只有一个:

我喜欢的不是「能控制 Codex」,而是「和电脑上完全一样的 Codex 桌面 UI」。

在这里插入图片描述

在手机上打开,一眼就能看到和电脑端一模一样的界面:会话列表、文件面板、活动流、设置、模型路由……手机上看到什么,电脑上就是什么。切回电脑继续看代码、继续跟进,完全不用重新适应

而大部分同类项目,都是自己重新画一个精简界面,本质上只有「会话列表 + 对话流」,桌面网页里的那些 UI 功能(文件浏览、活动记录、模型设置等)都没有。

同类项目一览

项目 形态 界面 平台 我的顾虑
OpenCodex(我用的基础) 网关中间层,浏览器访问 ✅ 完整还原桌面 UI 任意浏览器 功能全,但原生 UI 需要自己套壳适配
Remodex 本地桥接 + 原生 App 自绘 UI,会话为主 主要是 iOS / Mac 自绘界面,无完整桌面 UI;我是安卓+Windows,用不了
CC Pocket WebSocket 桥 + 原生 App 自绘 UI,会话+权限审批 Android / iOS / 桌面 能控制会话,但没有网页版的完整 UI 功能
remote_codex 移动端 Web UI 自绘 UI,会话为主 浏览器 偏「移动控制台」,不是桌面 UI 还原
esper-relay 移动优先 Web 界面 自绘 UI,会话为主 浏览器 + Tailscale 同理,只是精简控制面
code-helm Discord 机器人 聊天界面 Discord 极端精简,纯文本控制

这些项目各有价值,但对我这种「重度使用、需要在手机上看得清清楚楚、回电脑还要无缝衔接」的人来说,自绘精简界面等于信息降级

  • 看不到文件结构,改了什么只能靠猜;
  • 看不到活动记录,不知道任务进行到哪一步;
  • 回到电脑,界面和手机上完全不一样,还得重新熟悉。

所以我的选择是:用 OpenCodex 保留 100% 的桌面 UI,再给它套一个安卓壳,把移动端该有的体验(键盘避让、通知、下拉同步、挖孔屏适配)全部补齐。


五、架构原理:三端是怎么连起来的?

第 1 层:Tailscale 组网

Tailscale 是一个免费的组网工具,基于 WireGuard。装到手机、电脑、服务器三端后,它们就像插在同一个局域网里,互相可以用私有 IP 直连,加密传输,不暴露任何公网端口。

第 2 层:电脑上的「网关」

电脑上跑着开源的 OpenCodex

  • 它调用 Codex CLI 的官方远程接口(app-server),把 Codex 的能力变成 Web 服务;
  • 网关开在本地 3737 端口,有访问密码保护;
  • 通过 Tailscale Serve 把 HTTPS 入口暴露给手机,地址形如 https://xxx.ts.net,证书都是现成的。
手机浏览器/App
      │  HTTPS(Tailscale 内网)
      ▼
  Tailscale Serve(电脑)
      │
      ▼
  OpenCodex 网关 :3737(含访问密码)
      │
      ├──► Codex CLI app-server(真正干活)
      └──► 第三方 API(DeepSeek)

第 3 层:手机上的安卓壳

手机端是自研的安卓 WebView 应用(Codex Mobile):

  • 内置 Tailscale 访问地址,打开就是完整的 Codex 界面;
  • 支持通知推送:任务完成时手机弹通知,点通知直接回到对应会话;
  • 长连接实时推送,切出后台再回来也能看到最新进度;
  • 做了大量移动端适配(见第七节)。

六、Tailscale 的价值:公司电脑开着,人回家也能用

这套方案最爽的一点是时空连续性

我的电脑白天在公司开着,晚上人回到家,手机和电脑仍然在同一个 Tailscale 虚拟局域网里,随时可以继续控制 Codex 写代码。不需要电脑在旁边,不需要公网 IP,不需要路由器端口映射。

因为是同一个"局域网",顺带的好处一大把:

  1. 继续写代码:回家路上、躺床上,拿出手机继续让 Codex 干活;
  2. 随时看项目:直接浏览电脑上的项目文件、源码、目录结构,就像在电脑面前一样;
  3. 直接访问网站:电脑上跑着的本地开发服务器、预览页面,手机用局域网地址就能打开看效果;
  4. 随手下载:构建产物、安装包、日志文件,从电脑传到手机就是一次普通内网传输,速度快、不绕公网;
  5. 安全:全程 WireGuard 加密,数据只走自己的虚拟网络,不经过任何第三方中转。

本质上,Tailscale 让「电脑在公司、人在家」这件事变得和「电脑就在手边」一样自然。


七、开发过程中解决了哪些问题?

这条路不是一帆风顺的,从「能打开网页」到「好用」,踩了不少坑,也逐个解决:

1. 手机访问入口

最初尝试 SSH + 密码直连服务器,结果服务器配置差异导致访问不通,果断放弃,换成 Tailscale 三端组网——手机、电脑、服务器都在一个虚拟局域网里,稳定且免费。

2. 键盘遮挡输入框

这是移动端最烦的问题。安卓 15 强制 edge-to-edge 后,系统不再自动避让键盘。最终方案是监听系统 IME 内边距:键盘弹出时给界面加底部留白,任何版本都生效。

3. 前置摄像头挡住顶栏

手机是挖孔屏,顶栏按钮被摄像头挡住点不到。解决方案是取「状态栏高度」和「屏幕挖孔高度」的较大值,再额外加缓冲距离,保证顶栏整行都在摄像头下方。

4. 会话列表不同步

手机上的会话列表和电脑不一致。方案:下拉刷新改成整页刷新,切回前台超过 10 秒自动同步,保证列表永远是最新的。

5. 归档会话残留

在电脑上归档的会话,手机上还显示。方案:页面加载后持续监控 DOM 变化 + 定时拉取归档 ID,一出现就隐藏,React 后渲染也不会漏。

6. 下拉刷新误触

最开始用系统下拉刷新组件,结果在会话里向上滚动查看历史消息时,老被误判成「刷新」。方案:去掉系统组件,改用页面内 JS 手势判断——只有「列表页 + 滚到顶部 + 明显下拉」才触发刷新,会话内任意滑动都正常。

7. 通知推送

手机要能在任务完成时收到通知。方案:网关侧加 WebSocket 长连接推送,任务有更新立刻推到手机,点通知直接回到对应会话,而不是回到主界面。

8. 网关挂了手机就打不开

有次手机突然报「网页无法加载」,排查半天发现是电脑上的网关进程挂了。方案:写了一个看门狗守护脚本,每 5 分钟检查一次,网关掉了自动拉起,登录后自动运行。

9. 移动端 UI 优化

网页版界面在手机上还是「桌面 UI 塞进手机」的感觉。方案:写了一个移动端优化插件——隐藏桌面专用的返回/前进按钮、加大会话列表行高和正文字号、代码块窄屏自动横向滚动,而且只影响手机端,桌面端外观完全不变。

10. 一些小坑

构建时电脑内存不足导致打包失败(停掉残留的 Gradle 守护进程、调低构建内存解决);本机代理把 Tailscale 的 HTTPS 握手搞挂(排查时绕开代理验证);Service Worker 缓存导致手机拿到旧版本(升级缓存版本号强制刷新)……


八、发布到服务器:让服务器只干一件事

写完代码之后,发布环节同样重要。我的发布链路是:

手机发起/确认 → 电脑执行:构建 + 测试 → SSH 推送到服务器 → 服务器部署上线

这样做的好处非常明显:

  1. 构建在电脑上跑:编译、测试、打包全部用电脑的算力,不会因为服务器配置低而卡住;
  2. 发布过程可见:推了什么文件、执行了什么命令、日志输出什么,全在电脑上能看到,不是盲盒;
  3. 服务器只收成品:2核2G 跑个 Web 服务绰绰有余,压力几乎为零;
  4. 随时可发布:人在外面用手机触发,Codex 在电脑上执行部署命令,发完给你推送结果;
  5. 服务器更安全:不开放公网端口,部署走 SSH 密钥 / Tailscale 内网,少一层暴露面;
  6. 可以半自动化:把"测试通过后自动发布"做成一条流程,手机上一个指令完成从改代码到上线的全链路。

这也再次体现了三端分工的意义:手机指挥,电脑生产,服务器交付。


九、这个方案的优点(完整总结)

  1. 算力不浪费:重活全在电脑上,服务器只做部署,2核2G 够用;
  2. 不是盲盒:所有代码、产物、日志都在电脑上,随时回去看,也能随时打断;
  3. 完整原生 UI:手机上就是 100% 还原的 Codex 桌面界面,一目了然;
  4. 无缝衔接:手机上看到什么,电脑上就是什么,来回切换零学习成本;
  5. 时空连续:电脑在公司开着,人到家了,手机和电脑仍在同一个虚拟局域网,随时继续;
  6. 局域网便利:看项目文件、访问电脑上跑的网站、下载产物,全像在本地一样方便;
  7. 发布闭环:手机指挥 → 电脑构建 → 服务器上线,一条链路全可见;
  8. 第三方 API 友好:DeepSeek 等随便接,不依赖官方账号;
  9. 隐私可控:数据只走自己的 Tailscale 私有网络,不经过公网中转;
  10. 成本低:Tailscale 免费,OpenCodex 开源,安卓壳自己写;
  11. 可扩展:UI、通知、自动化都能按自己需求改。

十、结尾

如果你也有「出门在外想改代码」的痛点,不一定非要买高配服务器或者忍受盲盒开发。

手机、电脑、服务器各归其位,用一个私有网络串起来,你就能得到一个「随身携带的开发环境」——手机是遥控器,电脑是工作台,服务器是发布出口。

这套东西全部基于开源组件 + 自己写的壳,想看源码、想改功能,随时都能动手。

技术栈速览:Tailscale(组网) · OpenCodex(开源 Web 网关,完整还原桌面 UI) · Codex CLI app-server(官方远程接口) · Android WebView 壳(自研) · WebSocket(实时推送) · 看门狗脚本(守护) · SSH(发布到服务器)

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐