VMOS Edge Android Control
在需要通过 VMOS Edge Android Control API 控制单台安卓云机时使用这个 skill。MCP 是可选通道,不是前置依赖。
连接入口
- 如果用户已经明确给了
host_ip或cloud_ip,优先使用用户给的值 - 如果用户没有明确给 IP,先检查本地是否存在
cbs_go进程;存在则默认host_ip=127.0.0.1 - 如果用户没有明确给 IP,且本地没有
cbs_go,引导用户提供host_ip、cloud_ip,或在已知宿主机场景下提供db_id - 如果当前会话里同时安装了
vmos-edge-container-api:- 使用宿主机路由
http://{host_ip}:18182/android_api/v2/{db_id} - 必须先通过 container API 的
POST /container_api/v1/get_db或GET /container_api/v1/get_android_detail/{db_id}拿到目标db_id
- 使用宿主机路由
- 如果当前只有
vmos-edge-control-api:- 默认优先使用云机直连
http://{cloud_ip}:18185/api - 仅支持开启了局域网模式的云机
- 默认优先使用云机直连
- 如果当前只有
vmos-edge-control-api,而当前路径要走host_ip:- 如果用户已经给了
db_id,直接使用http://{host_ip}:18182/android_api/v2/{db_id} - 如果没有
db_id,明确说明还缺少db_id或vmos-edge-container-api
- 如果用户已经给了
- 如果直连
http://{cloud_ip}:18185/api/base/version_info连不上、超时,或返回5xx,明确说明当前云机没有暴露 Control API,或没有开启局域网模式
核心流程
- 始终遵循
Observe -> Plan -> Act -> Verify - 第一次连接先查
/base/version_info /base/version_info能成功返回,就视为当前环境支持 Control API;拿不到返回再说明当前环境不支持或没有暴露接口- 本地检查
cbs_go时,优先用精确匹配,例如pgrep -x cbs_go >/dev/null 2>&1 - 再用
/base/list_action做能力发现:- 需要低成本查看当前设备支持哪些接口时,先取接口列表
- 需要某个接口的详细用法时,再按
paths定向查询并带上detail
- 观察优先级:
- 截图接口
screenshot/format、screenshot/raw、screenshot/data_url /accessibility/dump_compact/accessibility/node的无动作查询/display/info、/activity/top_activity、/package/list
- 截图接口
- 观察策略:
- 需要看视觉布局、图标、颜色、弹窗遮挡、坐标点击位置时优先截图
- 需要低成本获取文本、层级、bounds,或要衔接
/accessibility/node时优先dump_compact - 能同时用时,先截图理解界面,再用
dump_compact/node做结构化定位 - 截图回显给用户时:先用 bash/exec 的
curl -o把截图落盘到 workspace 目录(如~/.openclaw/workspace/),再用 read 工具读取该文件让模型看到图片内容 - 回图时优先把
screenshot/format或screenshot/raw落成文件;只有screenshot/data_url可用时,再 base64 解码落盘 - 不要在文本回复里写
MEDIA:或直接贴 base64 / data_url —— 这些不会渲染为图片 - 如果需要把图片转发到消息渠道(Telegram 等),使用
message --media <路径>工具发送
- 不要把旧版无障碍导出 / 查找接口写进默认流程
- 交互优先级:
- 先根据截图、
dump_compact或/accessibility/node规划动作 - 结构化节点定位 / 操作优先
/accessibility/node - 点击 / 滑动优先
/input/click、/input/swipe、/input/scroll_bezier - 输入优先
/input/text - 启动应用优先
/activity/start;需要首启授权时优先/activity/launch_app - 浏览器 / 网页场景优先
/activity/start_activity打开指定浏览器;浏览器包名优先mark.via,没有再用com.android.chrome - 安装优先
/package/install_sync或/package/install_uri_sync - 读取或修改 Settings 优先
/system/settings_get、/system/settings_put
- 先根据截图、
- 每个关键动作后重新观察,不要做聚合式批量动作
- 没有专用接口时才考虑
/system/shell
必读参考
- 先看
references/api-reference.md里的索引,再按模块只打开需要的 reference 文件 - 优先先用
/base/list_action按需确认能力,再决定要不要展开更多接口细节 - 只有在需要精确路径、字段、示例请求时,才读取对应模块 reference
- 如果任务是“安装、下载并打开某个第三方应用”,再读取
references/app-installation.md - 如果任务是“在云机浏览器里搜索、打开网页、提取网页内容”,再读取
references/browser-search-and-reading.md
安全边界
- 删除应用、清数据、系统设置、权限修改、shell 操作前先确认用户意图
- 没有明确要求时,不要改时区、语言、国家、Google 状态、设备信息、定位或传感器