让 agent 做事
让 agent 用你的 iPhone
装好 iphone-use 之后,你只要说想在手机上做什么,agent 就去做:按名字打开 App,把屏幕读成文字, 点击、输入、滚动,并检查每一步。没有 API 的 App 也行,用的是手机上已有的登录状态。
可以这样说
打开健康,告诉我这周每天走了多少步。
在微信里找到妈妈发的最新一条消息,念给我听。
把这个银行流水页面的每一笔交易都抄下来,一直翻到底。
把这篇 2000 字的草稿写进备忘录,新建一条。
在真机上跑一遍我们 App 的登录测试,告诉我哪一步失败了。
打开设置查看电池电量。
把我们 App 的设置页都点一遍,找到的问题连同截图写成报告。
我的 Dock 和第一页文件夹里都有哪些 App?
agent 能做什么
- 按名字打开任意 App(
launch_app {"app": "健康"}),不用找图标。 - 把屏幕读成文字。手机的无障碍树以元素列表的形式返回,agent 根据标签和数值来判断,而不是看像素。需要看画面时也能截图。
- 一次输入一长段文字,最长 2 万字,中文也没问题。
- 读完整个列表。跨页读列表,并说明有没有读到底。
- 操作禁止截屏的页面。银行和支付 App 会把截屏涂黑;agent 按元素操作,截图返回的是带标签的线框图,而不是一片空白。
- 读主屏幕布局。
phone_home_layout不打开文件夹、不截图,就能读出各页主屏幕、Dock、文件夹和小组件堆栈。 - 成批操作。一次调用最多 24 步,屏幕切换之间可以等待,返回结果里就带着这批操作结束时的画面。
- 复用做过的事。agent 进入某个 App 时,返回结果里列着这个 App 已保存的 flow;有合适的就一次调用跑完。见 Flow 录制与重放。
登录、锁屏密码和验证码
遇到登录、锁屏密码、Face ID,agent 会停下来请你在手机上完成,绝不向你要密码或验证码。
如果账号存在你自己的 bitwarden-use 密码库里,
phone_login 会在守护进程内部填好并提交 App 的登录表单:数据从密码库直接到手机,密码不会经过模型,
返回结果只给出条目名和打码后的账号。App 要的验证码可以来自短信(message-use)、邮件(mail-use)或该条目的验证器,每次登录最多两次。
给开发和测试用
抓取并过滤手机系统日志;列出崩溃报告并读取其中一份。
把手机屏幕录成 MP4,保存在 Mac 上。
Mac 上的 .ipa、.app,或一个 https 链接;可以先卸载再装。
设置一个 GPS 位置,直到你清除为止。
守护进程跨会话保存每个 App 的笔记,agent 进入该 App 时会自动读到。
可重跑的 YAML 测试套件,退出码直接接 CI,也能定时运行。见 Flow 录制与重放。
iphone-use-qa skill 让 agent 对一个 App 做探索式测试:先列出要覆盖的部分,分批去点,每个问题都留证据 (截图、元素树、准确的复现步骤),最后写成 Markdown 报告。它从不付款、发送、发布或删除。
把一个目标交给守护进程
调用方也可以不一步步操作,而是把一句话的目标交给守护进程(POST /agent/task),再轮询结果。守护进程在它的手机上这样执行:
- 先找已保存的 flow。有匹配目标的 flow 就一次调用跑完;执行 flow 本身不花模型 token。
- Jev 根据元素表选出每一步;Jev 卡住时,由更强的 assist 模型接手这一步。
- 确认关卡。遇到会付款、发消息、删除、分享或提交订单的步骤,任务停下来先问。
- 总结。用几句话告诉人做了什么、读到了哪些数值;没有验证到结果的目标会以 blocked 结束。
每一步里屏幕上的文字都只当作不可信的数据,绝不当作指令。在 MCP 客户端里对应的是 phone_jev_run,需要先配置好模型凭据。
你设的限制,和 iOS 的限制
IPHONE_USE_BLOCKED_APPS,例如 Wallet, Passwords),并限制每个任务的操作步数
(IPHONE_USE_MAX_ACTIONS),不管 agent 的提示词怎么写。
- 它过不了锁屏密码和 Face ID,需要有人解锁手机。
- App 切换器和控制中心是 runner 够不到的系统手势。系统弹窗要用专门的动作应答,点按无效。
force_press需要 3D Touch;从 XR / 11 起的 iPhone 上会在碰屏幕之前被拒绝,改用长按(menu)。- 结果不确定的操作会标成
retry_safe:false:agent 要先重新读屏,再决定下一步。
接上你的 agent:MCP、HTTP API 与 skill。隐私和安全限制:隐私与安全。