Mobilerun Docs Reference
droidrun/mobilerun
Answers questions about Mobilerun, the LLM-agent framework for automating Android and iOS devices, by pointing the agent to the right page of its v5 documentation.
Drive iOS Simulator, Android emulator/device, and physical iPhone/iPad screens for AI agents.
$ npx skills add lycorp-jp/sim-use --skill sim-use -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install lycorp-jp/sim-use sim-use --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/lycorp-jp/sim-use.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/sim-use .claude/skills/sim-use && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "sim-use" agent skill from https://github.com/lycorp-jp/sim-use/tree/main/skills/sim-use into .claude/skills/sim-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sim-use", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/lycorp-jp/sim-use/tree/main/skills/sim-useType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add lycorp-jp/sim-use --skill sim-use -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install lycorp-jp/sim-use sim-use --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lycorp-jp/sim-use.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/sim-use .agents/skills/sim-use && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "sim-use" agent skill from https://github.com/lycorp-jp/sim-use/tree/main/skills/sim-use into .agents/skills/sim-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sim-use", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add lycorp-jp/sim-use --skill sim-use -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install lycorp-jp/sim-use sim-use --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lycorp-jp/sim-use.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/sim-use .cursor/skills/sim-use && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "sim-use" agent skill from https://github.com/lycorp-jp/sim-use/tree/main/skills/sim-use into .cursor/skills/sim-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sim-use", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/lycorp-jp/sim-use.git --path skills/sim-use--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add lycorp-jp/sim-use --skill sim-use -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install lycorp-jp/sim-use sim-use --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lycorp-jp/sim-use.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/sim-use .gemini/skills/sim-use && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "sim-use" agent skill from https://github.com/lycorp-jp/sim-use/tree/main/skills/sim-use into .gemini/skills/sim-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sim-use", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install lycorp-jp/sim-use sim-useInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add lycorp-jp/sim-use --skill sim-use -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/lycorp-jp/sim-use.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/sim-use .github/skills/sim-use && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "sim-use" agent skill from https://github.com/lycorp-jp/sim-use/tree/main/skills/sim-use into .github/skills/sim-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sim-use", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add lycorp-jp/sim-use --skill sim-use -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install lycorp-jp/sim-use sim-use --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lycorp-jp/sim-use.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/sim-use .opencode/skills/sim-use && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "sim-use" agent skill from https://github.com/lycorp-jp/sim-use/tree/main/skills/sim-use into .opencode/skills/sim-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sim-use", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
sim-useDrive iOS Simulator, Android emulator/device, and physical iPhone/iPad screens for AI agents.
Sim Use is an agent skill from lycorp-jp/sim-use. Drive iOS Simulator, Android emulator/device, and physical iPhone/iPad screens for AI agents. Use when asked to automate a simulator or emulator, drive a real iOS device, tap/swipe/type on a device, describe UI, take a screenshot, or interact with a mobile app.
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including scripts and reference files (for example `references/batch-reference.md`, `references/cheatsheet.md` and `references/crash-awareness.md`).
It sits in Mobile. It works with iOS and Android. The repository describes itself as: Give your AI agent eyes and hands on iOS Simulator and Android emulator/devices. The licence is Apache-2.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 3cd5070. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Sim Use loads about 3.2k tokens when it runs, and up to ~8.7k if it reads all its reference files. Until then it costs about 67 tokens; SKILL.md has 1,589 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from lycorp-jp/sim-use at commit 3cd5070, republished under its Apache-2.0 licence (© lycorp-jp). 1,589 words, ~3,172 tokens.
.claude/skills/sim-use/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.Before first interaction with a device, run the preflight check:
python3 scripts/preflight.py --device <UDID>This verifies sim-use is installed and compatible with the skill, the device is reachable, and the daemon is healthy. If you don't have the script, do the checks manually:
sim-use --version — confirm sim-use is on PATH and supports the skill's documented commands.sim-use devices — confirm the target device is listed and booted/connected.sim-use ui --device <UDID> — confirm you can read the screen.A WARN UI content line still passes preflight: the read works, but the outline can miss app controls. See the Pitfalls index.
--device is optional when only one simulator is booted or one daemon is running. For Android, run sim-use android init --device <serial> once to install the bridge APK. Attached physical iPhones/iPads appear in sim-use devices with kind physical and route through the top-level verbs too — but only ui, selector-based tap and screenshot; every other verb rejects on that target. See Physical iOS devices below before driving one.
Every interaction follows the same cycle: observe → act → verify.
sim-use ui --device <UDID>Read the outline. Each element has an @N alias and optionally a #<id> identifier. List cells carry #N (dominant list) or #N@M (scoped).
Frames in the JSON output (--json: entries[].frame, screen) are in platform-native units — iOS points, Android pixels. Key off the envelope's platform field before doing math on coordinates across platforms. Always pair --json with --no-raw — see Keeping output small below.
Pick a selector, in order of preference:
| Selector | When to use |
|---|---|
tap @N | Right after ui. Fastest, cache-backed. |
tap #<id> | Stable across minor layout changes. Paste from the outline. |
tap --label 'X' | Scripted flows. Combine with --wait-timeout for transitions. |
tap --label-regex '...' | Dynamic labels with counters/timestamps. Anchor with ^...$. |
tap --label-contains 'X' | Substring match when exact label is unknown. |
tap -x N -y N / tap --point x,y | Last resort for elements with no AX data. Device-native portrait space by default; add --coordinate-space ui when the numbers come from the outline and the device may be rotated. |
Disambiguate collisions with --element-type or --frame minY=0.7r (see references/cheatsheet.md).
Always verify after acting — commands are fire-and-forget:
sim-use ui --device <UDID> # read the new screen state
sim-use screenshot --device <UDID> --output after.pngEvery byte of command output you read costs context. Defaults that keep the loop cheap:
--json. The outline carries everything a tap needs (@N / #<id> aliases, roles, frames, states); reach for --json when you need structured fields for coordinate math (entries[].frame, screen) or full untruncated text (the outline truncates labels at 60 graphemes, value= at 30).--json, add --no-raw. data.raw is the raw accessibility tree — typically the bulk of the envelope's bytes, and useful only for debugging sim-use itself.ui per action: the Verify read of step N is the Observe read of step N+1. Don't run a second ui in between.tap --label 'X' --wait-timeout 3 (polls for the element) over re-running ui in a loop. Android tap has no --wait-timeout; use sleep between commands instead.sim-use ios batch (see references/batch-reference.md) — one invocation, one output.| Task | Command |
|---|---|
| Scroll down | sim-use gesture scroll-up --device <UDID> (scroll-up = content moves up = page down) |
| Type text | sim-use type 'hello' --device <UDID> |
| Paste unicode | sim-use paste 'こんにちは 🎉' --device <UDID> (iOS: needs hardware keyboard) |
| Hardware button | sim-use button home --device <UDID> |
| Android back | sim-use button back --device <UDID> |
| Wait for animation | sleep 0.4 between commands, or --pre-delay 0.5 |
| Toggle/switch | sim-use tap @N --duration 0.05 --device <UDID> (UISwitch needs a brief hold) |
| Swipe | sim-use swipe --from 50,500 --to 350,500 --device <UDID> |
| Pinch zoom in | sim-use gesture pinch-out --device <UDID> (two-finger spread) |
| Rotate | sim-use gesture rotate-cw --angle 90 --device <UDID> |
| Record evidence GIF | sim-use record-video --output demo.gif --device <UDID> — stop with SIGINT/SIGTERM (never SIGKILL); transcodes after stop; auto-plays inline in PRs; add --gif-markers for START/END loop-boundary cards |
The top-level verbs route a physical UDID automatically, but only three of them: ui, tap (#<id> / --id / --label / --label-contains / --element-type forms) and screenshot. Never assume capability parity with the simulator — every other verb or form (coordinates, @N/#N aliases, swipe/gesture/multi-touch, type/paste, recording, --value/--label-regex/--frame/--duration/--wait-timeout) rejects with the reason and the nearest alternative in the hint; read it instead of retrying. The sim-use ios-device namespace is the physical-only peer of ios/android (same verbs, plus ECID addressing and tree-tuning flags).
Hard requirement for ui / tap: the device must be paired, trusted, unlocked and in Developer Mode, and the foreground target app must be development-signed with get-task-allow=true. A Release-configuration binary installed with a Development profile is supported. Distribution/Ad Hoc, TestFlight, App Store and system apps are unsupported; do not retry them or claim success. sim-use itself installs and signs no runner and needs no Developer Disk Image. screenshot is exempt from the signing rule — it runs over CoreDevice and captures any screen, system apps included.
# Physical-device preflight — physical rows carry kind `physical`
sim-use devices
# Observe → act → verify, same loop and verbs as the simulator
sim-use ui --device <UDID>
sim-use tap --label "Friends" --element-type Button --device <UDID>
sim-use ui --device <UDID>
# For dynamic labels
sim-use tap --label-contains "Reply" --element-type Button --device <UDID>
# By stable identifier (the #id shown in ui) — positional or --id
sim-use tap '#BackButton' --device <UDID>
# Screenshot — any screen, not limited to development-signed apps
sim-use screenshot --output shot.png --device <UDID>Rules for this experimental surface:
get-task-allow entitlement. Do not fall back to coordinates or focus walking.#id or label, not @N. Element handles expire with the DTX connection, so there is no @N alias (nor coordinates — no geometry). Use the #id shown in the outline (positional #<id> or --id) — it is stable and the best choice when a label is dynamic — or --label / --label-contains, with --element-type to disambiguate. The navigation-bar back button appears as a normal Button "<previous screen title>" #BackButton; go back by tapping #BackButton (or the shown label) like any other element — no special "back" verb.sim-use ui and confirm the expected state before continuing.not supported on physical iOS devices error is a statement about the channel, not a transient failure — follow its hint (usually ui + tap '#<id>' / --label) instead of retrying or substituting a lookalike form. --json works on every verb with the standard {ok, data} envelope; physical results carry "kind":"physical" and omit geometry fields (screen, x/y).sim-use ios-device ui --fast is quicker but omits nested elements; do not poll in a tight loop.If ui succeeds with zero elements or tap prints success for a missing/ambiguous label, treat it as a sim-use bug; the command is expected to fail loudly instead.
Quick symptom index — see references/pitfalls.md for detailed recipes.
| Symptom | Cause | Fix |
|---|---|---|
tap --label hits wrong element | Label collision (e.g. header and tab bar share text) | Add --frame minY=0.7r or --element-type to narrow |
tap @N fails after navigation | Alias cache is stale | Re-run ui before tapping |
App: line shows wrong app | System layer (alert, share sheet) is on top | Dismiss it first, then re-run ui |
multipleMatches error | Several elements share the selector | Use --frame, --element-type, or a more specific selector |
| Tap lands but nothing happens | Animation in progress, or element not yet interactive | Add --pre-delay 0.3 or --wait-timeout 3 |
iOS: paste drops text | Soft keyboard only; HID Cmd+V is ignored | Use paste --via-menu --target-id <id> |
Android: paste denied | Background clipboard access blocked | Use type instead |
Outline shows U+FFFC in label | iOS icon placeholder character | Match with --label-regex excluding the prefix |
[i] … covers ~N% of the screen warning (text output, or --json top-level advisory key) | The selector resolved to a near-full-screen wrapper (common on Flutter/canvas UIs) and the tap hit its center, likely missing the intended control | Re-run ui and target the control via @N/#<id>, or pass explicit -x/-y/--point |
[i] Screen orientation could not be confirmed… / …coordinates may be stale… advisory | Device/app is rotated (the App: header shows a tag like (landscape-right)) and orientation self-calibration couldn't verify the mapping, or the @N snapshot predates a rotation | Re-run ui and tap again; selectors handle rotation automatically once calibration succeeds. Explicit -x/-y/--point is device-native portrait space by default — on tap/swipe/touch, pass --coordinate-space ui to use outline (visual-space) coordinates on a rotated device |
Outline is empty or misses visible app controls, or [i] … recovered from other processes … advisory (--json: advisory.kind: remote_content_recovery) | The app exposed an empty accessibility tree. Normal for a system picker. Otherwise, on an iOS simulator, a likely cause is that app accessibility was off when the app launched | Compare the outline with the screen. If controls are missing, see Missing app controls |
See references/crash-awareness.md for the full protocol. Summary:
sim-use watches for the target process disappearing between commands. When it detects a crash:
================ PROCESS DISAPPEARED ================
com.example.app (pid 12345) was alive at the previous command and is GONE now.On Android, ui also detects the AOSP system crash dialog directly from the accessibility tree.
Mandatory response:
After an intentional relaunch, call sim-use app-state --reset to clear the signal.
Stop and ask the user when:
Before reporting a task as complete:
sim-use ui (or screenshot) to capture the final state.ui output or screenshot to the user.© lycorp-jp, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (scripts, references) in skills/sim-use of lycorp-jp/sim-use.
Open the folder on GitHubat commit 3cd5070
Sim Use next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Sim Use this skilllycorp-jp/sim-use | 1.4k | — | ~3.2k | Automated safety check: Pass | Apache-2.0 | |
| Mobilerun Docs Referencedroidrun/mobilerun | 9.6k | — | ~943 | Automated safety check: Pass | MIT | |
| App Store Screenshots GeneratorParthJadhav/app-store-screenshots | 7.2k | — | ~14k | Automated safety check: Pass | MIT | |
| Rnn Codebasewix/react-native-navigation | 13k | — | ~2k | Automated safety check: Pass | MIT | |
| Building Native UICherryHQ/cherry-studio-app | 4k | 8 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Appiumblokadaorg/blokada | 3.3k | — | ~3.5k | Automated safety check: Pass | MPL-2.0 |
droidrun/mobilerun
Answers questions about Mobilerun, the LLM-agent framework for automating Android and iOS devices, by pointing the agent to the right page of its v5 documentation.
ParthJadhav/app-store-screenshots
Scaffolds a Next.js editor for designing App Store and Google Play screenshots as ads and exporting them at every required size, for iOS, Mac and Android.
wix/react-native-navigation
Navigate and work with the react-native-navigation (RNN) codebase.
CherryHQ/cherry-studio-app
Complete guide for building beautiful apps with Expo Router.
blokadaorg/blokada
A skill your agent uses for dynamic inspection and navigation of the Blokada app through the repo-local Appium machine session.
rounak/PhoneAgent
Control a connected iPhone, iOS simulator, Android emulator, or Android device from macOS through PhoneAgent's JSON-RPC bridge.
lycorp-jp/sim-use
Build a release-shaped sim-use binary and install it locally for testing.
lycorp-jp/sim-use
Cut a sim-use release end-to-end. An agent skill from lycorp-jp/sim-use.
lycorp-jp/sim-use
Prepare the environment and run the LLM-driven agent evals (e2e/agent-evals/) against a chosen sim-use binary.
Categories
Drive iOS Simulator, Android emulator/device, and physical iPhone/iPad screens for AI agents. Sim Use is an agent skill from lycorp-jp/sim-use. Drive iOS Simulator, Android emulator/device, and physical iPhone/iPad screens for AI agents.
Sim Use fits situations like: asked to automate a simulator; drive a real iOS device; tap/swipe/type on a device; take a screenshot.
Run `npx skills add lycorp-jp/sim-use --skill sim-use -a claude-code`. Or copy the skill folder (skills/sim-use in lycorp-jp/sim-use) into .claude/skills/sim-use in your project. Claude Code loads it when a task matches its description.
Run `npx skills add lycorp-jp/sim-use --skill sim-use -a codex`. Or copy the skill folder (skills/sim-use in lycorp-jp/sim-use) into .agents/skills/sim-use in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add lycorp-jp/sim-use --skill sim-use -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sim-use, .gemini/skills/sim-use, .github/skills/sim-use and .opencode/skills/sim-use in your project.
Going by SKILL.md and its folder, Sim Use needs Python for the scripts in its folder and the command-line tools its instructions call (python3). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Sim Use is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Sim Use: Mobilerun Docs Reference (droidrun/mobilerun, 9.6k stars), App Store Screenshots Generator (ParthJadhav/app-store-screenshots, 7.2k stars), Rnn Codebase (wix/react-native-navigation, 13k stars) and Building Native UI (CherryHQ/cherry-studio-app, 4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
lycorp-jp (a GitHub organization) maintains it in lycorp-jp/sim-use, which has 1,393 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 6, 2026.
Source: lycorp-jp/sim-use on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.