SuperAPI AI Directory

vmos-edge-control-api

General & other

View repository

Updated 10-16 09:33

About this skill

VMOS Edge Android Control

Use this skill when you need to control a single Android cloud device through the VMOS Edge Android Control API. MCP is an optional channel, not a prerequisite.

Connection entry

  • If the user has already explicitly given host_ip or cloud_ip, prefer the value given by the user
  • If the user has not explicitly given an IP, first check whether cbs_go exists locally; if it does, default to host_ip=127.0.0.1
  • If the user has not explicitly given an IP, and there is no cbs_golocally, guide the user to provide host_ip、cloud_ip, or provide db_id
  • in a known host scenario. If both vmos-edge-container-api:
    • are installed in the current session, use the host route http://{host_ip}:18182/android_api/v2/{db_id}
    • . You must first obtain the target POST /container_api/v1/get_db via the container API's GET /container_api/v1/get_android_detail/{db_id} or db_id
  • . If currently only vmos-edge-control-api:
    • is available, by default prefer the cloud device direct connection http://{cloud_ip}:18185/api
    • only supports cloud devices with LAN mode enabled
  • If currently only vmos-edge-control-api, and the current path requires going through host_ip:
    • If the user has already given db_id, use http://{host_ip}:18182/android_api/v2/{db_id}
    • directly. If there is no db_id, clearly state that db_id is still missing, or vmos-edge-container-api
  • If the direct connection to http://{cloud_ip}:18185/api/base/version_info cannot connect, times out, or returns 5xx, clearly state that the current cloud device has not exposed the Control API, or has not enabled LAN mode

Core flow

  • Always follow Observe -> Plan -> Act -> Verify
  • On the first connection, first check whether /base/version_info
  • /base/version_info can return successfully; if so, consider the current environment to support the Control API; if no return can be obtained, then explain that the current environment does not support it or has not exposed the interface
  • When locally checking cbs_go , prefer exact matching, for example pgrep -x cbs_go >/dev/null 2>&1
  • , then use /base/list_action for capability discovery:
    • When you need a low-cost way to see which interfaces the current device supports, first get the interface list
    • When you need detailed usage of a certain interface, then query by paths in a targeted way and include detail
  • Observation priority:
    • The screenshot interface screenshot/format、screenshot/raw、screenshot/data_url
    • /accessibility/dump_compact
    • /accessibility/node 's action-free query
    • /display/info、/activity/top_activity、/package/list
  • Observation strategy:
    • When you need to see the visual layout, icons, colors, popup occlusion, or coordinate click positions, prioritize screenshots
    • When you need a low-cost way to obtain text, hierarchy, bounds, or need to connect with /accessibility/node , prioritize dump_compact
    • When both can be used, take a screenshot first to understand the interface, then use dump_compact / node for structured positioning
    • When echoing screenshots to the user: first use bash/exec's curl -o to save the screenshot to the workspace directory (such as ~/.openclaw/workspace/), then use the read tool to read that file so the model can see the image content
    • When returning images, prioritize saving screenshot/format or screenshot/raw as files; only when screenshot/data_url is available, then base64-decode and save to disk
    • Do not write MEDIA: in text replies or directly paste base64 / data_url — these will not render as images
    • If you need to forward the image to a messaging channel (Telegram, etc.), use message --media <路径> tool to send
  • Do not include the old accessibility export / lookup interfaces in the default flow
  • Interaction priority:
    • Plan actions based first on the screenshot,dump_compact or /accessibility/node Planning actions
    • Structured node location / operation priority /accessibility/node
    • Tap / swipe priority /input/click、/input/swipe、/input/scroll_bezier
    • Input priority /input/text
    • Launch app priority /activity/start; when first-launch authorization is needed, prioritize /activity/launch_app
    • Browser / web page scenarios priority /activity/start_activity Open the specified browser; browser package name priority mark.via, if not available then use com.android.chrome
    • Installation priority /package/install_sync or /package/install_uri_sync
    • Reading or modifying Settings priority /system/settings_get、/system/settings_put
  • Re-observe after each key action; do not perform aggregated batch actions
  • Only consider when there is no dedicated interface /system/shell

Required reading reference

  • First look at the index in references/api-reference.md , then open only the needed reference files by module
  • Prioritize using /base/list_action to confirm capabilities as needed, then decide whether to expand more interface details
  • Only read the corresponding module reference when precise paths, fields, or example requests are needed
  • If the task is "install, download, and open a third-party app", then read references/app-installation.md
  • If the task is "search, open web pages, and extract web page content in the cloud phone browser", then read references/browser-search-and-reading.md

Security boundaries

  • Confirm user intent before deleting apps, clearing data, system settings, permission modifications, or shell operations
  • When there is no explicit requirement, do not change the time zone, language, country, Google status, device information, location, or sensors