
大模型接管手机的前夜Open-AutoGLM 之后vphone-cli 补上 iPhone 战场【免费下载链接】vphone-cli项目地址: https://gitcode.com/GitHub_Trending/vp/vphone-cli2025 年底至今AI 圈子里最热闹的叙事之一是「大模型接管手机」让 Agent 不仅会写代码还会替你打开 App、下单、发消息。这条赛道上以 Open-AutoGLM 为代表的开源项目率先把「本地大模型 ADB 遥控 Android」的架构跑通了让 Android 成为第一个被 Agent 完整接管的主流移动平台。但在另一边iOS 生态长期缺席——直到 vphone-cli 把真实 iOS 系统跑上 Apple Silicon Mac并给 Agent 打开了一扇完全可编程的窗口。这篇文章从 Open-AutoGLM 的架构盘点切入逐层拆解 vphone-cli 为 Agent 准备的「iPhone 接口」从传输层VSOCK 虚拟通道到协议层HTTP/WebSocket RPC再到感知层截图、无障碍树、OCR与执行层触摸、滑动手势、文本输入最后讨论两条线汇合后Agent 手机生态可能长出的样子。Open-AutoGLM 为代表的 Android 手机自动化生态要理解 vphone-cli 补上的空白先要看懂 Android 侧已经走通的路。Open-AutoGLM 的核心架构是「三段式」推理端、控制端、设备端。推理端在本地 GPU 服务器上跑 vLLM 或 SGlang对外暴露 OpenAI 兼容的 HTTP API控制端是一个 phone_agent 进程通过 HTTP 与大模型对话拿到决策结果后转译为 ADB 指令设备端则是任何一台开启了 USB 调试的 Android 手机或模拟器。模型侧AutoGLM-Phone 系列视觉语言模型负责把手机截图「看懂」输出下一步操作控制侧ADB 的input、screencap、pm等子命令提供了截图、触摸、键盘输入等原子能力。这套架构之所以能快速扩散是因为它把「理解屏幕」和「操作屏幕」彻底解耦并且每一层都有成熟的开源基建。它甚至可以直接在服务器上批量部署Wi-Fi 调试把 USB 线换成网络端口 5555多设备脚本跑批任务配合 scrcpy 做实时屏幕镜像一个没有显示器、没有人工值守的 Agent 手机集群就搭起来了。但把镜头拉远Android 侧的所有努力都依赖一个前提ADB 是一个为开发者调试设计的、开放的系统级协议。iPhone 没有等价物——没有开放 ADB、没有可开启的「USB 调试」、没有一张随意的 Android 模拟器镜像。iOS 的封闭性在安全上是护城河在 Agent 生态上却是一堵墙。这正是 vphone-cli 切入的位置。vphone-cli把 iPhone 搬进虚拟机再把控制权交给 Agentvphone-cli 做的事情可以分两层看。第一层是「能跑」它基于 Apple 的 Virtualization.framework 和 PCC research 虚拟机在 Apple Silicon Mac 上启动经过预修补的真实 iOS 系统默认 64 GB 虚拟盘并配套了完整的主机工具链——Launchpad 负责下载固件、打补丁、恢复系统、创建虚拟机vphone-cli命令行负责虚拟机生命周期列表、启动、导出vphone-launchpad-cli则作为无状态客户端驱动这一切。第二层是「能控」这也是它与 Agent 场景最相关的部分。项目在 README.md 中明确列出了「Automation API: An optional local HTTP and WebSocket interface」并专门写了「Let an agent do it」一节说明 Claude Code、Codex 这类编码 Agent 可以通过读取项目里的 skill 文档在 Mac 上自动完成 Launchpad 安装、Bundle 校验、虚拟机创建的全流程。这本身就是一个信号这个项目从设计之初就把「被 Agent 驱动」当作一等公民。那么Agent 到底通过什么接口控制这台虚拟 iPhone答案是三层设计一个 Unix Socket 快捷入口、一套 VSOCK 上的 HTTP/WebSocket API、一个可供外部程序导入的 Swift 客户端。传输层VSOCK 虚拟通道 主机代理Guest 里的守护进程 vphoned 监听虚拟化环境专用的 VSOCK 端口 1339通过 SwiftNIO 提供 HTTP/1.1 服务并在同一端口支持 WebSocket 升级事件流在/v1/events。宿主机侧的vphone-vm进程通过VZVirtioSocketDevice直连这个端口——注意带图形窗口的 UI 也是走这条通道的见 VPhoneGuestControl.swift 中device.connect(toPort: 1339)的实现。对于外部 Agent 程序比如一个跑在 Mac 上的 Python 脚本、Swift 服务甚至远端机器vphone-cli 提供了可选的--api-listen host:port参数。开启后宿主机上会启动一个 TCP 代理VPhoneAPIProxy.swift把每个宿主 TCP 连接一对一地转发成一条新的 guest VSOCK 连接「HTTP upgrade、流式 body、未来的协议变化都原样透传」。Token 鉴权在代理层完成vphone-vm每次启动用SecRandomCopyBytes生成 32 字节随机 Token校验通过前不会建立任何 guest 连接同时代理会把Host头改写为localhost以通过 vphoned 的浏览器请求防护。除了这套网络 API每个虚拟机启动时还会在本地暴露一个 Unix Domain Socketlibrary/name/vphone.sock。它接收单行 JSON、返回单行 JSON支持tap、swipe、key、screenshot、rpc等原语并且每次操作默认附带一张压缩灰度 JPEG 截图。文档里甚至直接写明了典型用法场景「local processes (e.g. Claude Code vianc -U)」见 VPhoneHostAutomationServer.swift。也就是说一个编码 Agent 甚至不需要引入任何 SDK用nc就能驱动一台 iPhone。协议层JSON-RPC 风格的方法目录vphoned 的 API 是完整的 JSON-RPC 风格POST /v1/rpc接受{id, method, params}返回{type, id, result|error}WebSocket 同样支持请求-响应并额外推送connected、device.state、operation.completed等事件。方法目录按功能域组织每个域对应守护进程里的一个源文件全部约 60 个方法完整清单见 vphoned_http_api.md 的 Method catalog。这里挑几个对 Agent 最关键的来看。感知Agent 的「眼睛」screen.screenshot返回 base64 JPEG附带mime_type、width、height当前虚拟机输出 1290×2796ui.tree返回无障碍元素树带位置支持nested嵌套模式max_elements、max_depth、timeout_ms参数走的是 iOS 私有 AX 属性 5001/5002 的父子关系校验还会验证快照前后前台应用与 PID 一致ui.ocr对无无障碍接口的 UI 做 OCR返回文本及坐标框支持指定语言与最低置信度ui.describe对当前屏幕生成一段简短描述是最廉价的「看一眼」原语。这套感知组合与 Android 侧的screencap 无障碍服务在功能上完全对齐甚至更强——ui.tree直接给出语义树Agent 不需要从像素里猜按钮位置。执行Agent 的「手」基础手势input.tap、input.double_tap、input.long_press、input.swipe、input.drag多点路径、input.touch_sequence事件序列支持归一化坐标硬件与文本input.buttonhome/power/volup/voldown、input.key、input.type按键事件默认 30ms 间隔、input.paste语义级操作ui.tap_element按 selector 直接点选元素、ui.wait/ui.wait_gone等待元素出现或消失。应用与系统Agent 的「控制面」apps.launch返回 PID 和frontmost_verified前台校验、apps.foreground、apps.install支持 IPA/TIPA自带重签名管线、apps.open_urlscreen.unlock亮屏并越过锁屏支持 passcode、system.respring、system.reboot、system.shutdownlocation.set模拟定位走 CoreLocation 仿真序列并回读校验、time.timezone、clipboard.get/set、keychain.*services.list/start/stoplaunchd 级控制、processes.list/kill、logs.syslog/logs.crash、files.*全套文件操作甚至network.capture可以在 guest 内抓包。注意一个工程细节坐标体系是统一约定的——socket 层tap/swipe用 1290×2796 的像素坐标vphoned 的input.*方法用device.screen报告的屏幕点。文档特意警告「Do not mix the two in one script」。而ui.tap_element让 Agent 可以完全跳过坐标按文字/标识符选择元素。这套「感知返回语义树、执行按语义定位」的接口恰好就是 Computer Use 类 Agent 的标准交互模型。客户端面向宿主应用的 SDK对 macOS 原生应用项目提供了VPhoneAPIKit未签名公共产品见 VPhoneAPIClient.swift一个VPhoneAPIClient封装 HTTP RPC、WebSocket 事件流与流式文件上传下载Token 从构造参数或环境变量VPHONE_API_TOKEN读取。一个最小调用只需三行let client VPhoneAPIClient(baseURL: URL(string: http://127.0.0.1:8765)!, token: token) let device try await client.call(device.snapshot) let socket try client.openWebSocket() // 事件流这套分层设计的价值在于Agent 无论以何种形态存在——CLI 脚本、nc单行调用、Python/Node 进程、原生 macOS 应用——都能找到接入点。从「能控」到「真用」Agent 操作 iPhone 的完整闭环接口有了Agent 跑起来的体验如何把项目里现成的原语拼起来一个最小的「看图-决策-操作」循环是这样# 1. 看取一张当前屏幕截图 无障碍树 curl -H Authorization: Bearer $TOKEN -H Content-Type: application/json \ -d {method:screen.screenshot,params:{}} http://127.0.0.1:8765/v1/rpc curl -H Authorization: Bearer $TOKEN -H Content-Type: application/json \ -d {method:ui.tree,params:{nested:true}} http://127.0.0.1:8765/v1/rpc # 2. 想大模型根据截图 语义树决定下一步在 Agent 侧完成 # 3. 做按语义直接点元素或按坐标手势操作 curl -H Authorization: Bearer $TOKEN -H Content-Type: application/json \ -d {method:ui.tap_element,params:{text:设置,match:contains}} \ http://127.0.0.1:8765/v1/rpc # 4. 验再取一张截图确认页面状态如果场景要求「操作完立刻看到结果」socket 层的{t:tap,...}每次默认在动作 500ms 后附上一张压缩截图形成廉价的验证回路。在「运维 Agent」这类更重的场景里接口密度更高setup.skip一键跳过激活向导、apps.remove_system克隆并摘除 Apple 内置应用、services.profile一键裁剪 launchd 服务iOS 27 上内置了 137 个标签的默认裁剪组、apfs.snapshot.delete清理 OTA 更新快照——这些都是为「把一台 iPhone 打造成可复制的模板」准备的。配合vphone-cli vm export导出/克隆虚拟机Agent 可以从一台干净的 iPhone 快照开始执行任务用完即弃。值得一提的还有两点「真机级」细节。其一是screen.unlock的实现先读锁状态再SBSUndimScreen亮屏、按 Home 键越过锁屏有密码则键入 passcode无密码直接回到主屏——这不是模拟器里adb shell input keyevent的粗暴等价物而是与 SpringBoard 状态机真实交互。其二是与 Xcode 生态的打通研究文档记录了 DeviceHub 实时屏幕流在虚拟 iPhone 上的完整修复过程DDI 挂载、媒体流特性、帧缓冲掩码、分带宽流 GPU 死锁见 devicehub_screen_viewing.md。这意味着虚拟 iPhone 不仅能被 Agent 通过 API 操作还能被 Xcode 的 DeviceHub 当作一台「真设备」实时看屏——devicectl会把 guest 列出为 iPad / iPhone — Virtual Machine。两条线汇合Agent 手机生态的三种想象把 Open-AutoGLM 的 Android 路线和 vphone-cli 的 iPhone 路线放在一起看Agent 手机生态的下一个阶段至少有三个方向值得认真想象。一、iPhone 版「手机 Agent 基准测试」Android 侧已经有人在用 Open-AutoGLM 跑 App 操作评测但 benchmark 最大的敌人是「环境不可控」真实手机上有推送、通知、弹窗、网络波动测试不可复现。vphone-cli 天生解决这个问题——虚拟机、快照、克隆、确定性网络每一次测评都从同一台干净 iPhone 开始。vphone-cli vm export让「打包一台处于任意状态的 iPhone」变成一条命令。当 Agent 手机基准Mobile Computer Use Benchmark需要覆盖 iOS 时这几乎是现成的基础设施。二、Agent 农场从 Android 模拟器集群到 Mac 上的 iPhone 集群Android 侧已经出现了「模拟器/redroid 容器集群 ADB 批处理」的运维模式。vphone-cli 把同样的模式带到了 iOS一台高配 Apple Silicon Mac 可以承载多台并行虚拟 iPhone每台都有独立的vphone.sock与 API 端口Agent 进程通过vphone-launchpad-cli统一编排启动、等待 vphoned 就绪、日志、停止。services.profile裁剪后台服务、setup.skip免激活、apps.remove_system摘除内置应用——这些原语组合起来就是在为「无人工值守的 iPhone 农场」铺路。区别在于这套农场跑的是真实 iOS 系统不是兼容层Agent 操作的就是 App Store 里原封不动的应用。三、Mobile Computer Use 的统一抽象层再往上看一层。Open-AutoGLM 定义了「截图→理解→ADB 操作」的 Android 抽象vphone-cli 定义了「截图/无障碍树/OCR→理解→RPC 操作」的 iOS 抽象。两者在概念上是同构的感知原语截图、语义树、OCR、执行原语点击、滑动、输入、按键、系统原语启动应用、设置定位、剪贴板。当越来越多的 Agent 框架开始抽象「设备接口」时vphone-cli 的 RPC 方法目录几乎可以直接映射成一套跨平台的 Computer Use 协议——ui.tap_element对应 Android 的UiAutomator点击、screen.screenshot对应screencap、apps.launch对应monkey/am start。将来某个 Agent 框架把「Android 设备」和「iOS 虚拟机」统一进同一个设备池只是协议映射的问题。结语前夜的技术还是明天的基建回到标题的问题大模型接管手机到底还差什么Android 侧缺的从来不是能力而是「值得接管的真机生态」的规模化基础设施iOS 侧缺的从来不是生态而是「能被程序化控制」的开放接口。vphone-cli 用虚拟化绕开了 iOS 的封闭不破解真机、不依赖私有协议外泄而是把真实 iOS 装进 Apple 官方虚拟化框架再在 guest 内自建一条完整的控制面——从 VSOCK 传输、Token 鉴权、JSON-RPC 协议到截图、无障碍树、OCR、手势注入、应用安装、系统控制每一个环节都有源码级文档支撑vphoned_http_api.md 记录了全部约 60 个 RPC 方法的参数与返回语义。它还顺手回答了 Agent 生态最现实的问题环境从哪来、如何保证可复现、如何规模化。快照、克隆、模板、服务裁剪、激活跳过——这些原本属于「运维」的能力如今是 Agent 直接调用的 API。当 Open-AutoGLM 把「大模型操作手机」从演示变成可部署工程vphone-cli 则为这条路上最难啃的 iOS 侧补齐了最后一块拼图。前夜的技术往往就是明天的默认基础设施。【免费下载链接】vphone-cli项目地址: https://gitcode.com/GitHub_Trending/vp/vphone-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考