不需要预发布环境,也不用打开笔记本电脑。只有一部 iPhone、一台放在隔壁房间的 Mac,以及一个通过 SSH 运行的 AI Coding Agent。
简单来说
Mac 开启系统自带的「远程登录」,iPhone 再连接这台 Mac。AI Agent 实际运行在 Mac 上,而不是手机上。手机只是一个轻量终端,但配合 tmux 会话保持、一键启动 Project 和断线后仍能继续的后台任务,你完全可以启动一个需要几分钟的构建,关掉 App,稍后再回来查看结果。
刚开始我也以为这只是个玩具。直到凌晨两点,我躺在床上重构了一个 Next.js 应用,而且整套流程真的跑通了。
第一步:把 Mac 变成 SSH Server
这是整套配置的基础。不需要第三方服务器,也不需要云主机。
在 Mac 上:
# 1. 系统设置 > 通用 > 共享 > 远程登录 → 开启
# 2. 只允许你的开发账号访问
# 3. 查找局域网 IP
ifconfig | grep "inet " | grep -v 127.0.0.1
# → 找到 192.168.x.x 或 10.x.x.x,这就是局域网地址
在 iPhone 上:
- 打开 Redock,进入 Launch → Add Host
- 点击「Discover Local Devices」,扫描局域网中的 SSH Host
- 也可以手动填写:Host
192.168.1.23、Port22、Mac 用户名和密码 - 点击连接,现在你已经从手机进入了 Mac 上的真实终端
就这么简单。现在,你可以在手机上进入项目目录、打开 nvim、运行 git status,与直接坐在 Mac 前使用同一个开发环境。局域网延迟通常只有 2–5 ms。
第二步:使用 Tailscale,从任何地方连接
局域网连接很适合在沙发上使用,但切到蜂窝网络或咖啡店 Wi-Fi 后就无法访问家里的 Mac。Tailscale 可以把手机和 Mac 放进同一个虚拟私有网络,同时不需要把 SSH 端口直接暴露到公网。
# 在 Mac 上
brew install tailscale
tailscale up
# 在 iPhone 上:从 App Store 安装 Tailscale,并登录同一个账号
完成后,Mac 会获得一个 100.x.y.z 格式的 Tailscale IP。把 Redock Host 中的局域网 IP 换成这个地址,Port 和认证信息保持不变。无论使用蜂窝网络、公司 Wi-Fi,还是人在其他国家,都可以用同一套方式连接。
不需要开启 Tailscale SSH。让 Tailscale 只负责网络层,macOS「远程登录」继续作为 SSH Server,并使用原来的系统账号认证。这样更简单,需要维护的环节也更少。
如果你偏好其他方案,也可以使用 ngrok TCP 建立临时通道,或者在拥有公网 IP 时配置端口转发。但对大多数个人开发者来说,Tailscale 是配置成本最低的日常方案。
第三步:让手机开发真正好用起来
直接在手机上使用原始 SSH 并不轻松。输入长命令、记住每个项目路径、切换 App 后丢失会话,这些小摩擦会不断累积。下面几层工作流能让操作快很多。
Project + Action:一键进入工作现场
Project 只需配置一次:选择默认 Host,填写工作目录,再为常用命令创建带有运行模式的 Action。
最重要的是三种运行模式:
- Terminal Interactive:打开实时交互终端,适合 Claude Code、Codex、OpenCode 等 AI Agent,也适合 REPL 和其他需要持续输入的程序。
- Quick Task:通过 SSH 运行一次命令,收集输出并保存为 Run。适合
git status、npm test和服务健康检查。 - Background Long Task:在远程 tmux 中启动命令,关闭 App 后仍继续运行。适合构建、完整测试和批处理任务。
tmux 会话保持:内置工作流,无需手动操作
先在 Mac 上安装 tmux:
brew install tmux
然后在 Host 设置中启用 tmux。Redock 会自动处理 Session 的创建、进入和恢复。你不需要每次输入 tmux new 或 tmux attach;重新连接时,现有 Session 会直接显示出来,选择需要继续的一个即可。
一个 pane 可以运行 AI Agent,另一个 pane 用来查看日志或执行测试。即使手机在任务中途断线,工作仍会留在 Mac 上继续运行。
真实的日常工作循环
一个典型的晚间流程大概是这样:
- 打开手机,从 Launch 点击「My Project」
- 点击「Claude Code」Action,终端自动在正确项目目录中打开 Agent
- 描述需要完成的修改,让 Agent 开始工作
- 切换到第二个终端连接,运行
git diff检查改动 - Agent 完成后,从 Snippet Bar 发送
git add . && git commit -m "..." - 执行
git push
总共大约点击 6 次。真正需要使用手机键盘的部分,主要是 Prompt 和 Commit Message,其他步骤都通过一键入口或 Snippet 完成。
关键不只是终端——iOS 上早已有很多 SSH 客户端。真正影响体验的是 Project、Action 和 tmux 这一层能否消除终端周围的摩擦:不再记路径、不再重复输入启动命令、不会因为断线丢失 Session,也不用翻找历史记录来确认某个任务的输出。
常见问题
问:这只是个噱头,还是你真的会用它发布代码?
我确实会用它处理真实工作:快速修复问题、检查 Pull Request、睡前启动长时间构建,或者外出吃饭时查看 CI 失败原因。它不会替代桌面环境中需要长时间专注的深度开发,但能覆盖大量「人不在电脑前,工作仍需要继续」的时刻。
问:支持哪些 AI Agent?
任何能在终端中运行的工具都可以,例如 Claude Code、Codex、OpenCode、aider 和 cursor-agent。Agent 在 Mac 上运行,手机只负责显示和输入,不需要额外集成某个移动端 SDK。
问:延迟怎么样?
同一局域网通常是 2–5 ms,几乎感觉不到延迟。通过 Tailscale 使用蜂窝网络时一般为 30–80 ms,终端交互依然足够流畅。如果网络环境非常不稳定,也可以使用 Mosh。
问:安全吗?
SSH 凭据只保存在手机上,并由 Apple Keychain 保护。使用 Tailscale 时,连接保持在自己的 Tailnet 内。如果必须通过公网访问,请使用 SSH Key;Redock 支持生成 Key,也可以导入已有 Key。不要把使用密码认证的 SSH 端口直接暴露到公网。
问:iPad 可以使用吗?
可以。它与 iPhone 使用同一个 App,更大的屏幕尤其适合查看多 pane tmux 布局。
问:可以连接 VPS,而不是 Mac 吗?
可以。Linux VPS 的工作方式完全相同:通过 SSH 连接、启用 tmux、配置 Project。如果 VPS 已有公网 IP,可以跳过 Tailscale,直接连接。
问:Quick Task 和 Background Long Task 有什么区别?
Quick Task 会等待命令结束并立即展示输出,适合几秒钟内完成的检查。Background Long Task 会把命令放进远程 tmux,关闭 App 后也继续运行,稍后可以通过 Run Log 查看结果,适合 npm run build 或需要几分钟的完整测试。
延伸阅读
- Redock 设置指南 — 包含故障排查的完整入门流程
- Tailscale 快速入门
- ngrok SSH Tunnel
- Apple 远程登录