一键导入
android-emulator
Control and interact with Android emulator via the andy CLI — launch apps, tap UI elements, take screenshots, and read accessibility trees.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Control and interact with Android emulator via the andy CLI — launch apps, tap UI elements, take screenshots, and read accessibility trees.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Comprehensive knowledge of Fedi's testing infrastructure for UI code (utilities, mock builders, conventions, and patterns) — use this when reading, writing or running unit/integration/e2e tests
Use when changing, adding, or consuming Fedi remote feature flags across the bridge runtime and web API. Covers crates/runtime/src/features.rs, ui/web/src/pages/api/features.ts, TypeScript bindings, local testing, and selector usage.
Pre-submit checklist for PRs that change Rust or bridge code (`crates/`) in the Fedi project. Use before opening or updating a Rust or bridge PR to run the right local checks and structure the description. Not for UI (`ui/`), docs, or config-only changes, which have their own conventions.
Review a UI pull request or diff in the `ui/` workspace (web, native, shared `common`) for regressions and scope creep, weighing each finding by cost and blocking only on a named cost. Use whenever asked to review a UI or frontend PR or diff, or to check a web or native change before merge, even if the user does not say "code review". Not for Rust, bridge, or infra changes.
Review Dependabot PRs updating GitHub Actions workflows/actions, with a security-focused upstream diff check before commenting.
Review Dependabot PRs updating Rust/Cargo crates with a security-focused crates.io tarball diff before commenting.
| name | android-emulator |
| description | Control and interact with Android emulator via the andy CLI — launch apps, tap UI elements, take screenshots, and read accessibility trees. |
# Launch app and verify
andy launch && andy a11y && andy screenshot /tmp/s.png
# Use Read tool on screenshot only if a11y is ambiguous or visual verification needed.
# Tap by text and verify
andy tap "Get started" && andy a11y && andy screenshot /tmp/s.png
# Tap unlabeled element by coordinates (from a11y bounds)
andy tap 945,80 && andy a11y && andy screenshot /tmp/s.png
# Scroll down to find more elements
andy swipe 540 1400 540 400 && andy a11y && andy screenshot /tmp/s.png
# Dismiss dialog and go back
andy key 4 && andy a11y && andy screenshot /tmp/s.png
wait-for-idle or sleep before them — auto-wait is more efficient than fixed sleeps. They print note: waited Xms for idle when they wait.&& for tap-then-verify workflows: andy tap "OK" && andy screenshot /tmp/s.pnga11y on unfamiliar screens before tapping by text. Many elements (tab bars, icon buttons, header icons) have NO text labels and require coordinate taps.(left,top,right,bottom). To tap center: ((left+right)/2, (top+bottom)/2).tap "text" errors if text is not in the a11y tree. It does NOT do fuzzy matching. Use exact text from a11y output.andy swipe 540 1400 540 400 (scroll down) or andy swipe 540 400 540 1400 (scroll up). Screen is 1080x1920.Andy supports running multiple app instances on separate virtual displays. Use ANDY_SCREEN env var or --screen <name> flag.
# Target a specific screen
ANDY_SCREEN=2 andy launch
andy --screen 2 launch # equivalent
Use && to chain steps on one screen, and parallel Bash tool calls across screens:
# Tool call 1: default screen
andy launch && andy tap "Get started" && andy a11y
# Tool call 2 (parallel): screen 2
andy --screen 2 launch && andy --screen 2 tap "Get started" && andy --screen 2 a11y
com.fedi.dev01 for default, com.fedi.dev02 for screen 2)../scripts/andy/reset-and-onboard.sh resets and completes app onboarding via the remote bridge API (no UI tapping needed). Use ANDY_SCREEN to target a screen. Run in parallel for multiple screens. Pass --no-launch to onboard without launching the app../scripts/andy/setup-dm.sh resets both screens, onboards, creates a DM via bridge API, sends an initial message, then launches both apps on the chat tab. Takes ~25s../scripts/andy/acquire-money.sh [amount_msats] joins a dev federation (if needed) and receives ecash. Default 100000 msats. Use ANDY_SCREEN to target a screen. Example: ANDY_SCREEN=2 bash scripts/andy/acquire-money.sh 500000open-url: If open-url fails with "Activity class does not exist", the package uses a shared activity class (e.g. com.fedi.MainActivity not com.fedi.dev00.MainActivity). Use adb shell am start directly:
# Find the correct activity: adb shell dumpsys package com.fedi.dev00 | grep activity
# Find the display ID: andy info -> display_id field
adb shell am start --display <display_id> -a android.intent.action.VIEW \
-d 'fedi://user/@userId:server' -n com.fedi.dev00/com.fedi.MainActivity
andy key 4 (BACK). Do NOT tap the dialog buttons by coordinates - they can trigger navigation to system App Info.andy info # screen info (JSON)
andy screenshot [--no-wait] /tmp/s.png # save screenshot (auto-waits for idle)
andy a11y [--no-wait] # human-readable accessibility tree (auto-waits for idle)
andy tap "Button text" # tap by a11y text or content_desc (retries 3x by default)
andy tap --tries 5 "Button text" # tap with custom retry count
andy tap 500,300 # tap by coordinates
andy swipe 500 1500 500 500 # swipe (optional 5th arg: duration_ms, default 300)
andy type "hello" # type text
andy key 4 # send keycode (3=HOME, 4=BACK, 66=ENTER)
andy launch # launch ANDY_PACKAGE
andy stop # force-stop ANDY_PACKAGE (rarely needed — launch auto-closes existing)
andy reset # clear app data & stop (pm clear ANDY_PACKAGE)
andy open-url https://example.com # open URL in ANDY_PACKAGE
andy wait-for-idle # explicit idle wait (rarely needed)
andy screens # list all screens (debug)
Use --screen <name> or ANDY_SCREEN=<name> for non-default screens.