用智能体驱动

智能体和 XPhoneUse 桌面端之间只有一条通道:http://127.0.0.1:7070/mcp,外加一份教它怎么用的 Skill。这一页是动词表和几条约定。

坐标是归一化的

所有坐标都是 0~1 的比例,(0,0) 是左上角,(1,1) 是右下角。不用管设备是 1080p 还是 2K,也不用管镜像被缩放成多大——同一条命令在 Android 和 iPhone 上意思完全一样。

python scripts/xphoneuse-cli.py tap 0.5 0.92      # 屏幕底部中间
python scripts/xphoneuse-cli.py longtap 0.5 0.3 1200   # 长按 1.2 秒

动词表

命令 说明
tap <x> <y> 默认的点击方式
longtap <x> <y> [ms] 长按,默认 800ms,范围 100–10000
swipe <fx> <fy> <tx> <ty> 滑动
scroll <x> <y> <dx> <dy> 滚动,dy 为负表示向下滚
text <TEXT> [--enter] 输入文本,完整 Unicode;--enter 输入后回车(聊天软件里等于直接发送)
unicode-text <TEXT> [--method clipboard|agentinput] iOS 非英文文本指定投递方式:剪贴板粘贴(默认,无需装东西但会弹「允许粘贴」)或 AgentInput 输入法(不弹框、不动剪贴板,需手机已装并切到该键盘)
press home|back|recents|power|volume_up|volume_down 按键;iOS 没有 back
screenshot [--compare ref.png] 截图;带 --compare 时只返回像素差异结论与变化区域
ui-tree / find --text ... Android:读控件树、按文字找控件(返回可直接用的坐标)
launch <PACKAGE> / open-url <URL> Android:启动应用 / 打开链接
macro record|play 录一次流程,之后反复回放(Android 与 iOS 都支持)
wifi enable|connect|ip Android:无线调试

screenshotlistshellwifi * 不需要会话;输入类命令要先 connect

三条经验

先看再做。 动作之前要知道屏幕上是什么,动作之后要知道变了什么。没验证的操作在真机上就是抛硬币。

能读文字就别看图。 Android 上 ui-treefind 返回整屏文字与坐标,成本约为看图的三十分之一。只有在游戏、地图、相册这类画布界面上才值得花截图。

一次一个动作。 点一下、看一眼、再点。连点五次再截图,是走错会话的经典方式。

截图对比

智能体最贵的感官是眼睛。--compare 让它在本地做像素对比,只在画面真的变了时才需要看图:

python scripts/xphoneuse-cli.py screenshot --compare xphoneuse-screenshot.png
# VERDICT: CHANGED (86.95% of pixels differ, threshold 0.50%)
# changed region: x 0-1178, y 0-2555 (normalized 0.000-1.000, 0.000-1.001)

UNCHANGED 就跳过,CHANGED 再看图,而“变化区域”这一行往往已经说明了问题:底部三分之一变了=键盘弹出来了,中间一小块=弹了个对话框。

MCP 客户端

{
  "mcpServers": {
    "xphoneuse": { "url": "http://127.0.0.1:7070/mcp" }
  }
}

MCP 工具与命令行共享同一个会话:命令行连上的设备,MCP 这边直接就能用。


最后更新 2026-09-17