brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
android-ui-automationAutomate Android apps that have no public API or web version by driving the UI layer through the Accessibility Service. Handles: deep-link launch (open an app into a specific screen), intelligent node location (find a button or text by fuzzy match, not exact text), tap-and-verify (confirm an action had its effect), and human-like swipes. Use this whenever t…
Independent GitHub snapshot · Automated classification · Original documentation governs
spotify://, weixin://, or apps with no web/API surface. Also
use when the user asks why an automation didn't work (permissions, missing
app, hidden view trees). Android-only; requires the Minis Accessibility
Service enabled.
compatibility: Android-only; requires the Minis app (Android) with its bundled android-a11y-cli / android-open CLIs and the Minis Accessibility Service enabledDrive Android apps through their UI layer when they have no public API or web version. This is the fallback that makes "phone-only" apps automatable.
This skill drives the user's Android phone. It relies on two CLI tools
that ship with the Minis app for Android (installed at
/usr/local/bin/ inside the Minis runtime):
| CLI | Role |
|---|---|
android-a11y-cli | Accessibility-Service bridge: ui dump, tap node, gesture swipe, wait, extract, ... |
android-open | Launch any URL/scheme via the system handler (spotify://..., weixin://..., tel:, ...) |
Prerequisites on the device:
which android-a11y-cli first,
and if missing, tell the user this skill only runs inside Minis on Android.android-a11y-cli service ping; if it reports not running, ask
the user to re-enable it before anything else.These are device-side capabilities, not network APIs — no API keys, no
OAuth, no server. If a step returns permission_denied from the a11y service,
it means the service was revoked; recover via Settings → Accessibility.
Do not use this for apps that already have a proper skill (e.g.
bilibili-hub, spotify-hub) — prefer the API path when one exists.
Follow this order. Each step has a reason; don't skip verification.
Resolve the target Confirm the app is installed. If unsure, ask the user or try the deep link and check the foreground package (see step 2).
Launch via deep link — scripts/open_deep_link.py
python3 scripts/open_deep_link.py "spotify://search/circles%20post%20malone" --pkg com.spotify.music
&/? break raw links).ok:false, don't proceed — the app is missing, the scheme
is unhandled, or something redirected. Surface the error.references/app-deep-links.md), then locate the
result.Locate the node — scripts/find_node.py
python3 scripts/find_node.py "Circles" --clickable-only --top 5
nodeId and center from the top result.Tap and verify — scripts/tap_and_verify.py
python3 scripts/tap_and_verify.py --query "Circles – Post Malone" --marker "暂停"
marker is the proof it worked (e.g. after tapping play, a pause
button must appear). Never report success without a marker.Human-like swipes (when the tree is unavailable) — use gestures:
android-a11y-cli gesture swipe X1 Y1 X2 Y2
Vary distance/pause randomly to look natural. This is the ONLY fallback when an app (like WeChat Moments) hides its view tree.
A raw tap is fire-and-forget: the UI may be mid-animation or the node may have drifted. Verifying a success marker (pause button, title, toast) converts "I clicked something" into "I know it worked". If the marker never appears, say so honestly instead of claiming success.
ui dump returns no app nodes, do NOT
blind-tap guessed coordinates — either use swipes (scroll-only) or ask the
user to tap precisely.android-a11y-cli service status; if not running, ask the user to re-enable
it in Settings → Accessibility.references/app-deep-links.md
for the tested set and always confirm foreground.Play a song on Spotify (no API key, no Premium):
python3 scripts/open_deep_link.py "spotify://search/circles%20post%20malone"
python3 scripts/find_node.py "添加建议" # suggestion page → tap to get results
python3 scripts/tap_and_verify.py --query "添加建议“circles post malone”" --marker "Circles"
python3 scripts/find_node.py "Circles – Post Malone" --clickable-only
python3 scripts/tap_and_verify.py --query "Circles – Post Malone" --marker "暂停"
Human-like feed scroll (WeChat Moments):
android-a11y-cli ui info # confirm weixin:// foreground
android-a11y-cli gesture swipe 540 1600 540 800 # repeat with varied distance/pause
Decline gracefully when the app can't be reached:
Report ok:false from open_deep_link.py rather than proceeding blind.
Always report the confirmed state, e.g.: