手机上的 Agent,终于开始碰真实 iPhone 了。
过去想要让Claude、Codex操作手机,一般都离不开模拟器、ADB或者专门的自动化框架。
到了 iPhone 上更麻烦。
Xcode、WebDriverAgent、签名、开发者配置等一套东西装下来,光环境就折腾半天。
最近我在 GitHub 上看到了一个很有趣的一个项目。
它叫 phone-harness,现在已经获得了 2.3K 的星星。

它做的事情很直接:
让 Claude、Codex 这类 Agent,直接操作你手里的真实 iPhone。
不需要越狱,也不需要安装WebDriverAgent。
中间真正用到的桥梁,其实是苹果自己的 iPhone Mirroring,也就是 iPhone 镜像。

原理其实没有那么复杂
phone-harness 没有直接去控制 iOS 系统。
它控制的是 Mac 上的 iPhone 镜像窗口。
iPhone Mirroring 本来就可以把手机画面显示到 Mac 上,同时接收鼠标和键盘操作。
phone-harness 就利用了这一点。
整个过程可以理解成三步:
看屏幕 → 找位置 → 点下去。
它先截取 iPhone 镜像窗口,再通过苹果 Vision Framework 做 OCR。
比如屏幕上出现:
天气 地图 照片 备忘录
OCR 不只是把这些字识别出来,还会返回文字在屏幕上的坐标。
这样 Agent 看到“地图”之后,就知道应该点哪里。

Agent 是怎么点手机的
找到坐标之后,下一步就是操作。
phone-harness 使用 macOS 的 CGEvents 模拟输入,把点击、键盘等操作送进 iPhone 镜像窗口。
所以它已经可以完成点击、长按、滑动、滚动、输入文字这些常见动作。

还封装了几个比较实用的操作。
比如:
home() 回到桌面。
open_app("Notes") 打开备忘录。
tap_text("New Note") 找到文字并点击。
type_text("hello") 输入内容。
从 Agent 的角度看,不需要研究底层怎么控制 iPhone,只需要调用这些现成能力。
每一步都会重新确认
这里还有一个细节比较重要。
网页自动化可以读取 DOM,知道按钮、输入框现在是什么状态。
iPhone 镜像没有这些东西。
所以 phone-harness 的处理方法很简单:
操作完,再看一眼。
比如说让 Agent 打开天气。
它先用 OCR 找到 Weather 图标。
点击对应坐标。
等待页面稳定。
然后再截图、做OCR,看下天气页面是否真的打开了。
也就是说,它不是点完就完成了,而是:
识别、操作、再识别、确认结果。
手机上显示出来的画面就是最后的判断依据。
找不到文字怎么办
OCR 很适合处理带文字的按钮,但手机里还有大量没有文字的图标。
phone-harness 也有办法。
Agent 可以直接截屏,然后用视觉模型来判断图标的位置,再计算出坐标进行点击。
因此它实际上有两只“眼睛”。
有文字的地方先用OCR,速度快,坐标也清楚。

没有文字的地方就让视觉模型看截图。
这套思路虽然不如 DOM 精确,但是已经可以覆盖很多真实的手机操作了。
还能自己补工具
我觉得这个项目比较有 Harness 味道的地方,在 agent-workspace。
里面有一个agent_helpers.py。

核心代码负责截图、OCR、点击这些基础能力,这部分保持稳定。
任务需要的额外能力可以让 Agent 自己写入到agent_helpers.py中。
也就是说,遇到重复操作时,不一定每次都重新规划。
Agent 可以给自己补一个 helper,下次直接调用。
底层提供手和脚,Agent 根据任务给自身补充工具。
这也是它和一般的手机自动点击脚本不一样的地方。
安装也做成了 Skill
作者给出的安装方式也很有意思。

可以直接把一段 Setup Prompt 丢给 Codex 或 Claude,让 Agent 自己克隆项目、读取 install.md、安装依赖,再注册成 phone-harness Skill。
真正需要人操作的主要有两件事。
第一次将iPhone和Mac的iPhone Mirroring进行配对。
然后为终端开启Accessibility和Screen Recording权限。
安装完毕之后运行:
phone-harness--doctor
就可以检查整条控制链路有没有正常工作。
目前也有明显限制
phone-harness 现在更像一个轻量实验项目,还不是完整的 iPhone 自动化平台。
一次只能控制一台手机。
实体 iPhone 解锁后,镜像会暂停。
它也不支持多点触控,所以双指缩放这类操作做不了。
相机、Face ID 流程同样有限制,DRM 视频还会直接显示黑屏。
另外 OCR 只能识别文字,并不知道一个没有标签的图标代表什么,这时候还是需要视觉模型来判断。
写在最后
phone-harness 最有意思的地方,不是又做了一套手机自动化框架。
它反而很轻。
直接借用苹果已经提供的 iPhone Mirroring,把 Mac 变成 Agent 和真实 iPhone 之间的桥梁。
Agent 用截图和 OCR 看手机,用 CGEvents 去点击,再重新截图确认结果。
整条链路很容易理解。
