Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add simiancraft/simiancraft-skills --skill android-emulator-harnessgit clone --depth 1 https://github.com/simiancraft/simiancraft-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/simiancraft/simiancraft-skills/android-emulator-harness)<a href="https://agentmods.dev/skills/simiancraft/simiancraft-skills/android-emulator-harness"><img src="https://agentmods.dev/badge/skills/simiancraft/simiancraft-skills/android-emulator-harness/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/simiancraft/simiancraft-skills/android-emulator-harness"><img src="https://agentmods.dev/badge/skills/simiancraft/simiancraft-skills/android-emulator-harness.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00203 | $0.03296 |
| Opus 5 | $0.00102 | $0.01648 |
| Sonnet 5 | $0.00041 | $0.00659 |
| Haiku 4.5 | $0.00020 | $0.00330 |
Grade D, and why
android-emulator-harness scanned grade D with 3 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Asks for rootmediumPrivilege escalation
A mod that escalates privileges can change anything on the machine, not only the project.
`kvm` group: `sudo gpasswd -a $USER kvm` (needs a real terminal for the password). Downloads and executes remote codehighSupply chain
curl | sh runs whatever the server returns today, which is not necessarily what it returned when this was reviewed.
`curl -Ls "https://get.maestro.mobile.dev" | bash`. Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
`curl -Ls "https://get.maestro.mobile.dev" | bash`. How it starts
The opening of the file, as written. The whole thing — 224 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Android Emulator Harness (headless, WSL/Linux, Maestro-driven)
Specializations (e.g. camera/mask) sit ON TOP of this kernel and override only the parts they must.
Runtime/package manager. Examples use
bun/bunx; substitute your own runner (npm/npx,pnpm/pnpm dlx, oryarn) wherever they appear. The Android tooling itself (adb,emulator, Maestro, the JDK) is unaffected.
Environment gotchas (verify once per machine)
- KVM group. x86/x86_64 emulation needs
/dev/kvm; the user must be in thekvmgroup:sudo gpasswd -a $USER kvm(needs a real terminal for the password). No relogin if you launch undersg kvm -c "...". Symptom if missing:x86_64 emulation currently requires hardware acceleration!. - JDK 17 must be the active
javaforsdkmanager/avdmanager/Maestro. Maestro 2.x aborts on Java 8 withERROR: Java 17 or higher is required; it reads thejavaon PATH, so exportingJAVA_HOMEalone is not enough; prepend it to PATH. Symptom: bare~/.maestro/bin/maestro --versionfails until you do. - EAS builds/artifacts. If
easisn't on PATH, installeas-cliand use it directly, or use the Expo MCPmcp__expo-mcp__*tools if your host provides them. - GPU. Under WSL there is usually no GPU passthrough (
/dev/driabsent); on native Linux you may have one. Either way the default software GLES is fine for UI/logic; only GPU-compute workloads (e.g. MediaPipe) need theswangleoverride, which the specialized camera skill covers. - Resolve binaries explicitly and put JDK 17 on PATH; don't trust a stale PATH
emulatoror the systemjava. This one block gets you to an operating state:# ANDROID_HOME varies by OS: Linux (Android Studio default) $HOME/Android/Sdk, macOS $HOME/Library/Android/sdk export ANDROID_HOME="${ANDROID_HOME:-$HOME/Android/Sdk}" # JDK 17 home is OS/distro-specific; point this at wherever your JDK 17 lives. # Debian/Ubuntu: /usr/lib/jvm/java-17-openjdk-amd64 macOS: $(/usr/libexec/java_home -v 17) export JAVA_HOME="${JAVA_HOME:-/usr/lib/jvm/java-17-openjdk-amd64}" export PATH="$JAVA_HOME/bin:$PATH" # so Maestro's wrapper sees Java 17 SDK="$ANDROID_HOME"; EMU="$SDK/emulator/emulator"; ADB="$SDK/platform-tools/adb" # modern SDKs install to cmdline-tools/latest/bin; older/hand-installed to cmdline-tools/tools/bin CLT="$(ls -d "$SDK"/cmdline-tools/latest/bin 2>/dev/null || ls -d "$SDK"/cmdline-tools/*/bin 2>/dev/null | head -1)" SDKMGR="$CLT/sdkmanager"; AVDMGR="$CLT/avdmanager" MAESTRO="$HOME/.maestro/bin/maestro" # preflight: java -version → 17; $ADB version; $MAESTRO --version → 2.x
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 224 lines · 203 tokens per session scan D 80dacbb5d412
android-emulator-harness is a skill published in the GitHub repository simiancraft/simiancraft-skills (7 stars, last pushed 7d ago), licensed MIT. It adds 203 tokens to every session and 3,296 once invoked, about $0.0010 per session on Opus 5. A static security scan graded it D with 3 findings (asks for root, downloads and executes remote code, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
test-native-extension
Validate a third-party control repo across four automated layers plus one printed manual recipe. Layer 1 asserts native-source structure (Android getName() and iOS +moduleName to manifest nativeModule; @ReactMethod / RCTEXPORTMETHOD to methods; no @ReactModule) plus load/init readiness (ReactPackage public no-arg…
ios-device-qa
Use when the user runs /ios-device-qa to drive a real iPhone over USB through a debug-bridge daemon and return a device QA report with verified interactions. Do not use for remote, credential, publish, deploy, or irreversible changes.
xcode-simulator-testing
Use when asked to run /xcode-simulator-testing with a scheme name or current to build and launch an iOS app in a simulator. Not for project regeneration: use ios-build-fix.
mobile-app-testing
Record real-device (iOS Simulator / Android emulator) test flows for your app (web or native) via tapflow's MCP server, replay them with tapflow's own CLI, and stream results into an installed e2e-dashboard.
xcode-testing-workflow
Guide Swift Testing, XCTest, XCUITest, XCUIAutomation-oriented mechanics, code coverage, xctestplan matrices, accessibility-verification follow-through, test filtering, retries, diagnostics, and test-specific fallback work in existing Xcode-managed projects and workspaces. Use when Xcode-aware execution is needed and…
maestro-fix-cycle
Auto-repair loop for failing Maestro mobile tests on the iOS Simulator, one flow at a time. Use when you want mobile/simulator tests fixed automatically. Triggers on: conserta os testes mobile, arruma o teste do simulador, loop de correcao mobile, fix mobile tests, auto fix ios tests.