Skill v1.0.0
Automated scan93/100name: meowhub-device description: "Control your Android phone via MeowHub — screenshot, tap, swipe, type, open apps, execute shell commands, make/accept/end calls, and control audio channels. Use this skill whenever you need to interact with the phone's screen or perform device operations." metadata: openclaw: always: true emoji: "=^._.^=" requires: bins: ["curl"]
MeowHub Device Control
You have direct control over an Android phone through the MeowHub system-level protocol. This is real device control — equivalent to physical finger touches, undetectable by any application.
⚠️ MANDATORY: Only use $PREFIX/bin/curl — NEVER use Python/wget/scripts
你必须且只能使用 `$PREFIX/bin/curl` 命令来调用所有 API。这是唯一允许的方式。
⚠️ 重要:不要使用 `curl` 或 `/bin/curl` 或 `/system/bin/curl`!系统自带 curl 已损坏。必须使用完整路径 `$PREFIX/bin/curl`。
严格禁止:
- ❌ 使用
python3、python、urllib、requests或任何 Python 代码 - ❌ 使用
wget - ❌ 编写任何脚本文件(.py, .sh)
- ❌ 使用
base64命令行工具 - ❌ 使用
/bin/curl或/system/bin/curl(系统 curl 已损坏) - ❌ 使用裸
curl命令(可能解析到错误的路径)
只允许:
- ✅
$PREFIX/bin/curl(Termux 预装的 curl,完整路径)
违反此规则的任何工具调用都是错误的。如果你发现自己要写 Python,停下来,改用 $PREFIX/bin/curl。
How It Works
MeowHub provides an HTTP Bridge Server at http://127.0.0.1:18790. All device operations go through this bridge via $PREFIX/bin/curl.
Quick Reference (直接复制使用)
# 截图$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/screenshot -H 'Content-Type: application/json' -d '{"quality":50}'# 打开应用$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/open_app -H 'Content-Type: application/json' -d '{"name":"com.tencent.mm"}'# 点击坐标$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/tap -H 'Content-Type: application/json' -d '{"x":540,"y":960}'# 输入文字$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/type -H 'Content-Type: application/json' -d '{"text":"hello"}'# 按键$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/press_key -H 'Content-Type: application/json' -d '{"key":"home"}'# 检查连接$PREFIX/bin/curl -s http://127.0.0.1:18790/api/status# 接听来电$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/accept_call -H 'Content-Type: application/json' -d '{}'# 挂断/拒接电话$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/end_call -H 'Content-Type: application/json' -d '{}'# 拨打电话$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/make_call -H 'Content-Type: application/json' -d '{"number":"13800138000"}'
Standard Operation Flow (2-3 步完成)
你运行在手机本机上。截图返回 base64 图片数据,你的视觉模型可以直接分析,不需要任何中间脚本。
- 截图 + 分析 — 一步完成。用
$PREFIX/bin/curl调用截图 API,返回的image字段(base64 JPEG)直接用你的视觉能力分析。 - 操作 — 根据分析结果用
$PREFIX/bin/curl执行操作(点击、输入等) - 验证 — 再用
$PREFIX/bin/curl截图确认结果(可选)
截图 API 返回格式:
{"image": "<base64-jpeg>", "data": "<base64-jpeg>", "width": 1080, "height": 2340, "mimeType": "image/jpeg"}
Available Tools (29)
Connection
| Tool | Endpoint | Method | Description | |
|---|---|---|---|---|
check_connection | /api/status | GET | Check bridge & socket connection status |
Visual & Information
| Tool | Endpoint | Method | Key Parameters | |
|---|---|---|---|---|
screenshot | /api/screenshot | POST | quality(1-100), maxSize(resolution) | |
get_ui_tree | /api/get_ui_tree | POST | (none) | |
find_element | /api/find_element | POST | text, resourceId, className | |
read_ui_text | /api/read_ui_text | POST | filter, exclude | |
get_device_info | /api/device_info | POST | type: apps/battery/storage/network/all |
Touch & Input
| Tool | Endpoint | Method | Key Parameters | |
|---|---|---|---|---|
tap | /api/tap | POST | x, y | |
long_click | /api/long_click | POST | x, y | |
swipe | /api/swipe | POST | startX, startY, endX, endY, duration(ms) | |
scroll | /api/scroll | POST | direction: up/down/left/right | |
type_text | /api/type | POST | text | |
press_key | /api/press_key | POST | key: home/back/power/recent/volume_up/volume_down/enter | |
click_by_text | /api/click_by_text | POST | text, index(if multiple) |
App Management
| Tool | Endpoint | Method | Key Parameters | |
|---|---|---|---|---|
open_app | /api/open_app | POST | name (必须是包名,如 `com.tencent.mm`) | |
list_packages | /api/list_packages | POST | thirdPartyOnly(bool), includeVersions(bool) | |
get_app_info | /api/get_app_info | POST | package (package name) | |
force_stop_app | /api/force_stop_app | POST | package (package name) | |
uninstall_app | /api/uninstall_app | POST | package, keepData(bool) | |
install_apk | /api/install_apk | POST | path (APK path on device) | |
clear_app_data | /api/clear_app_data | POST | package (package name) |
System
| Tool | Endpoint | Method | Key Parameters | |
|---|---|---|---|---|
execute_shell | /api/execute_shell | POST | command, timeout(sec) |
SMS
| Tool | Endpoint | Method | Key Parameters | |
|---|---|---|---|---|
send_sms | /api/send_sms | POST | destination (phone number), text | |
read_sms | /api/read_sms | POST | limit(int), unreadOnly(bool) |
Call & Audio
| Tool | Endpoint | Method | Key Parameters | |
|---|---|---|---|---|
accept_call | /api/accept_call | POST | (none) | |
end_call | /api/end_call | POST | (none) | |
make_call | /api/make_call | POST | number | |
open_audio_channel | /api/open_audio_channel | POST | mode: telephony(default)/voip | |
close_audio_channel | /api/close_audio_channel | POST | (none) |
curl Examples
所有命令必须使用 `$PREFIX/bin/curl`,不能省略路径!
# Check connection$PREFIX/bin/curl -s http://127.0.0.1:18790/api/status# Response: {"connected":true,"status":"connected","screenWidth":1080,"screenHeight":2340}# Screenshot$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/screenshot \-H 'Content-Type: application/json' \-d '{"quality":50}'# Tap$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/tap \-H 'Content-Type: application/json' \-d '{"x":540,"y":960}'# Swipe (scroll down)$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/swipe \-H 'Content-Type: application/json' \-d '{"startX":540,"startY":1800,"endX":540,"endY":400,"duration":300}'# Scroll$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/scroll \-H 'Content-Type: application/json' \-d '{"direction":"down"}'# Type text$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/type \-H 'Content-Type: application/json' \-d '{"text":"你好世界"}'# Press key$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/press_key \-H 'Content-Type: application/json' \-d '{"key":"home"}'# Open app$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/open_app \-H 'Content-Type: application/json' \-d '{"name":"com.tencent.mm"}'# Get UI tree$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/get_ui_tree \-H 'Content-Type: application/json' -d '{}'# Find element$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/find_element \-H 'Content-Type: application/json' \-d '{"text":"搜索"}'# Click by text$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/click_by_text \-H 'Content-Type: application/json' \-d '{"text":"确定"}'# Read visible text$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/read_ui_text \-H 'Content-Type: application/json' -d '{}'# Device info (battery, network, storage, memory, display, foreground app)$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/device_info \-H 'Content-Type: application/json' \-d '{"type":"all"}'# Execute shell command (response: {"output":"..."})$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/execute_shell \-H 'Content-Type: application/json' \-d '{"command":"wm size"}'# List installed packages (third party with versions)$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/list_packages \-H 'Content-Type: application/json' \-d '{"thirdPartyOnly":true,"includeVersions":true}'# Get app details$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/get_app_info \-H 'Content-Type: application/json' \-d '{"package":"com.tencent.mm"}'# Force stop app$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/force_stop_app \-H 'Content-Type: application/json' \-d '{"package":"com.example.app"}'# Uninstall app$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/uninstall_app \-H 'Content-Type: application/json' \-d '{"package":"com.example.app","keepData":false}'# Install APK from device path$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/install_apk \-H 'Content-Type: application/json' \-d '{"path":"/sdcard/Download/app.apk"}'# Clear app data$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/clear_app_data \-H 'Content-Type: application/json' \-d '{"package":"com.example.app"}'# Send SMS$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/send_sms \-H 'Content-Type: application/json' \-d '{"destination":"13800138000","text":"Hello"}'# Read SMS (recent 5, unread only)$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/read_sms \-H 'Content-Type: application/json' \-d '{"limit":5,"unreadOnly":true}'# Accept incoming call$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/accept_call \-H 'Content-Type: application/json' -d '{}'# End current call (or reject incoming call)$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/end_call \-H 'Content-Type: application/json' -d '{}'# Make a phone call$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/make_call \-H 'Content-Type: application/json' \-d '{"number":"13800138000"}'# Open audio channel (telephony mode for regular calls, voip for VoIP/Android 12+)$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/open_audio_channel \-H 'Content-Type: application/json' \-d '{"mode":"telephony"}'# Close audio channel$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/close_audio_channel \-H 'Content-Type: application/json' -d '{}'
Error Handling
- HTTP 503: MeowHub Socket not connected — wait and retry
- HTTP 500: Internal error — check the error message in response body
- Bridge unreachable: The MeowHub app may not be running or Bridge Server not started
When you get a 503, tell the user that the MeowHub device connection is not active and they may need to check TutuGui Server status.
⚠️ 应用包名规则(open_app / force_stop_app / get_app_info 等)
所有涉及应用的 API 必须传入包名(如 `com.tencent.mm`),绝对不能传入中文名或英文显示名(如"微信""WeChat")。
常用应用包名速查(直接使用,无需查询)
| 用户说 | 你必须传 | |
|---|---|---|
| 微信 / WeChat | com.tencent.mm | |
com.tencent.mobileqq | ||
| 抖音 / TikTok | com.ss.android.ugc.aweme | |
| 小红书 | com.xingin.xhs | |
| 淘宝 | com.taobao.taobao | |
| 支付宝 | com.eg.android.AlipayGphone | |
| 美团 | com.sankuai.meituan | |
| 京东 | com.jingdong.app.mall | |
| 拼多多 | com.xunmeng.pinduoduo | |
| 高德地图 | com.autonavi.minimap | |
| 百度地图 | com.baidu.BaiduMap | |
| 哔哩哔哩 / B站 | tv.danmaku.bili | |
| 网易云音乐 | com.netease.cloudmusic | |
| QQ音乐 | com.tencent.qqmusic | |
| 微博 | com.sina.weibo | |
| 今日头条 | com.ss.android.article.news | |
| 快手 | com.smile.gifmaker | |
| 设置 / Settings | com.android.settings | |
| Chrome | com.android.chrome | |
| 短信 / Messages | com.android.mms | |
| 电话 / Dialer | com.android.dialer | |
| 相机 / Camera | com.android.camera2 | |
| 日历 / Calendar | com.android.calendar | |
| 时钟 / Clock | com.android.deskclock | |
| 计算器 | com.android.calculator2 | |
| 文件管理器 | com.android.documentsui |
不认识的应用 → 先查再开
如果用户提到的应用不在上表中,必须先调用 `list_packages` 查询包名,然后再用包名调用 open_app:
# 第一步:查找包名$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/list_packages -H 'Content-Type: application/json' -d '{"thirdPartyOnly":true}'# 从返回的 packages 列表中找到匹配的包名# 第二步:用包名打开$PREFIX/bin/curl -s -X POST http://127.0.0.1:18790/api/open_app -H 'Content-Type: application/json' -d '{"name":"com.xxx.xxx"}'
错误示范 ❌: {"name":"微信"} {"name":"WeChat"} {"name":"抖音"} 正确示范 ✅: {"name":"com.tencent.mm"} {"name":"com.ss.android.ugc.aweme"}
Tips
- Screen coordinates are based on device resolution. Use
curl -s http://127.0.0.1:18790/api/statusto get screen dimensions. - After typing CJK characters, the input method may need a moment to process.
- For scrolling through feeds (TikTok, Xiaohongshu), use
swipefrom bottom to top. - When an app isn't responding, try
press_key backthen retry. - Use
get_ui_treewhen you need precise element positions instead of guessing coordinates. - For complex flows, break them into small steps and verify each one.
- Prefer `list_packages` and `get_app_info` over
device_infofor app-related queries — they return structured data directly from the device. - `get_device_info` returns battery, network, storage, memory, display info and current foreground app — use
device_infoendpoint withtypeparameter. - SMS: Use
read_smsto check messages,send_smsto send. Always confirm with user before sending. - App management:
force_stop_app,clear_app_data,uninstall_appare destructive — confirm with user first. - Prefer specific API endpoints (
list_packages,get_device_info,read_sms,get_app_info) overexecute_shellwhen available — they return structured JSON data. Useexecute_shellonly for operations not covered by specific endpoints. - SMS: Use
read_smsto check messages,send_smsto send. Always confirm with user before sending.
Safety
- Always screenshot before and after critical operations
- Ask before sending messages, making purchases, or posting content
- Never delete system files, format storage, or bypass security
- When in doubt, stop and ask the user