emulator

emulator is a skill for Claude Code, Codex from mttmcknn/android-emulator-plugin. It costs 67 tokens per session (2,540 once invoked), scanned A, original, Apache-2.0.

A tool for using an Android emulator, which is a simulated Android phone or tablet, from a coding session. It can start or create virtual devices, install and launch apps, and inspect device behavior and settings.

In plain words
What is it for?
Use it to test APKs, inspect Android screens, check dark mode, text size, rotation, location, and battery behavior, or work with a connected Android device.
Why use it?
It lets you check Android apps without needing a physical phone and helps diagnose device, panel, connection, display, or app-launch problems.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one. Also seen: mentions Codex.

Good fit Use it to test APKs, inspect Android screens, check dark mode, text size, rotation, location, and battery behavior, or work with a connected Android device.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/mttmcknn/android-emulator-plugin/emulator
Install

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.

Any agent
npx skills add mttmcknn/android-emulator-plugin --skill emulator
Clone the repo
git clone --depth 1 https://github.com/mttmcknn/android-emulator-plugin

Made for: Claude Code, Codex.

Wrote 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.

agentmods badge for emulator

README.md
[![agentmods](https://agentmods.dev/badge/skills/mttmcknn/android-emulator-plugin/emulator/github.svg)](https://agentmods.dev/skills/mttmcknn/android-emulator-plugin/emulator)
Your own site
<a href="https://agentmods.dev/skills/mttmcknn/android-emulator-plugin/emulator"><img src="https://agentmods.dev/badge/skills/mttmcknn/android-emulator-plugin/emulator/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.

agentmods 80×15 button for emulator

Your own site · 80×15
<a href="https://agentmods.dev/skills/mttmcknn/android-emulator-plugin/emulator"><img src="https://agentmods.dev/badge/skills/mttmcknn/android-emulator-plugin/emulator.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 67 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,540 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5.1 $0.00067 $0.02540
Opus 5.5 $0.00027 $0.01016
Sonnet 5.5 $0.00013 $0.00508
Haiku 4.5 $0.00007 $0.00254

Measured today against content hash 9afe52f6fcac, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

emulator scanned grade A with 0 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 today.

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.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

plugins/android-emulator-plugin/skills/emulator/SKILL.md · 62 lines

How it starts

The opening of the file, as written. The whole thing — 62 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Android Emulators

Each Codex chat can pin multiple emulators and connected Android devices. Every device belongs exclusively to one chat. The emulator MCP tools identify the calling chat automatically and reject another chat's device IDs.

Start and show the emulator

  1. Call list_devices or check_device_status. To use a connected phone, call pin_device with its listed serial. If it belongs to another chat, let the user confirm the move in the panel; never try to bypass confirmation. If the user named an existing AVD, pass it to start_emulator; otherwise let start_emulator choose one that is not already running. Without a name, start_emulator uses the user's default device setting.
  2. If no AVD exists or none matches the requested device, call create_emulator with a profile such as pixel_9 or pixel_tablet. It uses the newest suitable installed system image and starts the device. Leave keep false unless the user wants the device after this chat.
  3. Successful start_emulator and create_emulator startup open the device panel automatically and reuse this chat's tab. Do not call show_device_panel afterward. Use it to reopen a closed panel or when the user asks to show it. Creating with start: false does not open the panel.
  4. Tell the user which AVD and serial the chat owns, and whether it is read-only (state is discarded on stop).

For comparison, start another AVD or use newInstance: true for a second instance of the same AVD. The panel has separate device tabs; Compare or dragging one tab onto another shows both. Use the IDs from list_devices and pass deviceId on every device action when multiple devices are pinned. Never infer a target from the visible tab. Disconnecting a phone leaves its pin unavailable; it never redirects actions to a different device.

Operate the device

  • Use only this plugin's device tools for this device. Do not run adb, emulator, or Gradle device tasks against another serial, and never stop an emulator this chat does not own.
  • Start with inspect_screen for a screenshot, UI elements, and foreground app in one call. Reads run concurrently; check partial errors and remember a changing screen may differ between reads. Use read_screen_elements for lighter target lookup.
  • Find targets with read_screen_elements, then tap_screen by text, description, or resourceId. Use coordinates only when the tree has no usable element. Set durationMs on tap_screen for a long press.
  • Use wait_for_screen after an action that changes the screen. Give it a text, description, or resourceId selector; it waits up to 10 seconds by default for the target to appear, or use state: "disappears" for transient UI to go away. timeoutMs accepts whole milliseconds from 1 through 30000.
  • Use scroll_to_element for an off-screen named element, optionally with tap: true. It stops after five swipes by default (ten maximum), on ambiguity, or when the viewport stops changing. Directions describe the finger movement. For nested scroll containers, use explicit swipe_screen coordinates.
  • Use type_text for Unicode text, including emoji. Supply target to focus a named editable field and replace: true to select all first. It uses the device clipboard and reports whether the UI confirms the result. Never automatically retry an unverified entry; inspect it first. submit: true presses Enter only after verification; password/opaque fields need a separate explicit key action after inspection.
  • Use manage_app to restart or force-stop a named package, or grant/revoke one named runtime permission. It does not clear data.
  • Use take_screenshot to confirm visual results, layout, and anything the accessibility tree cannot show. Ordinary screenshots are temporary. Set save: true when the user wants a reusable capture for clipboard or chat sharing; the result includes its capture ID and local file path.
  • Install builds with install_app using absolute APK paths, then launch with open_app_or_link. For a shell-based Gradle install, target this chat's serial explicitly: ANDROID_SERIAL=<serial> ./gradlew :app:installDebug.
  • Use change_device_settings for dark mode and font scale on any device. Location, battery, rotation, fold posture (posture: "folded", "half-folded", or "unfolded"), and snapshots require an emulator. check_device_status.foldable lists the supported postures and current reading; posture controls require a foldable AVD with hinge support. Use run_device_command for logcat, package management, and other device-scoped commands.
  • Use record_screen to capture a flow as MP4 when the user wants a video. Stop returns a saved capture ID and local file path. Use view_or_copy_captures with action: "copy" and that ID to copy the PNG image or MP4 file to the macOS clipboard; action: "list" recovers this chat’s latest 20 captures. action: "context" returns the screenshot or up to four timestamped video samples (requires FFmpeg). Treat those frames as samples, not evidence of every event in the video; inspect the saved MP4 when motion or intervening events matter. These tools return media to the agent; the panel’s Add to chat action adds media to the user’s next message.
  • Use manage_emulator_snapshots to save or restore device state around risky steps.
  • The user sees each tap, swipe, key, and text-entry action in the panel, and may interact at the same time. Re-read the UI tree before acting if the screen may have changed.
  • The user can attach the current screen to their message, @-mention devices or installed apps, drag APKs onto the device, and open .apk files in a viewer that installs them. Check the capture timestamp before treating an attached screen as current.

Read the full file on GitHub · 62 lines

Changes

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.

  1. today First seen · 62 lines · 67 tokens per session scan A 9afe52f6fcac

Subscribe to this mod's changes

emulator is a skill published in the GitHub repository mttmcknn/android-emulator-plugin (17 stars, last pushed today), licensed Apache-2.0. It adds 67 tokens to every session and 2,540 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-18.

Related

Other skills, from other repositories

android_ui_verification

Automated end-to-end UI testing and verification on an Android Emulator using ADB.

sickn33/agentic-awesome-skills · 22 tokens

solopi-ai

A command-line framework for testing Android apps and devices with SoloPi, including on-device or cloud AI decision models. It manages devices, test cases, recorded interactions, replays, performance history, and evidence.

alipay/SoloPi · 82 tokens

ios-simulator

Verify and debug native, React Native, Expo, or Flutter apps on an iOS Simulator with agent-device. Use when an agent needs to launch an app, inspect its live UI, tap, type, scroll, validate a code change, collect failure evidence, or reproduce a workflow on an iPhone or iPad Simulator.

callstack/agent-device · 69 tokens

dogfood

Systematically explore and test a mobile app on iOS/Android with agent-device to find bugs, UX issues, and other problems. Use when asked to dogfood, QA, exploratory test, find issues, bug hunt, or test this app on mobile.

callstack/agent-device · 55 tokens

eas-simulator

Run and control a user's app on a remote iOS/Android simulator hosted on EAS cloud. Read before running any eas simulator: commands - it has the current syntax for this experimental API. Use whenever the user needs a simulator they can't run locally - 'run my app on a cloud simulator', 'use eas simulator to…

expo/skills · 243 tokens

mobile-automation

Control Android and iOS devices, emulators and simulators — launch apps, tap, swipe, type, take screenshots, read the accessibility tree. Use when a task involves a mobile device or app, mobile UI testing, or reproducing a bug on a phone.

mobile-next/mobile-mcp · 58 tokens