UI Testing
championswimmer/TwoFac
How to run, write, and debug local UI tests for Android, iOS, and browser builds.
Drives iOS and Android devices and simulators from the command line: open apps, snapshot the UI tree, tap, type, scroll, take screenshots and read UI info.
$ npx skills add nuclearpasta/react-native-drax --skill agent-device -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nuclearpasta/react-native-drax agent-device --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/nuclearpasta/react-native-drax.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/agent-device .claude/skills/agent-device && 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 "agent-device" agent skill from https://github.com/nuclearpasta/react-native-drax/tree/main/.agents/skills/agent-device into .claude/skills/agent-device/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-device", 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/nuclearpasta/react-native-drax/tree/main/.agents/skills/agent-deviceType 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 nuclearpasta/react-native-drax --skill agent-device -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nuclearpasta/react-native-drax agent-device --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nuclearpasta/react-native-drax.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/agent-device .agents/skills/agent-device && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "agent-device" agent skill from https://github.com/nuclearpasta/react-native-drax/tree/main/.agents/skills/agent-device into .agents/skills/agent-device/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-device", 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 nuclearpasta/react-native-drax --skill agent-device -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nuclearpasta/react-native-drax agent-device --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nuclearpasta/react-native-drax.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/agent-device .cursor/skills/agent-device && 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 "agent-device" agent skill from https://github.com/nuclearpasta/react-native-drax/tree/main/.agents/skills/agent-device into .cursor/skills/agent-device/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-device", 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/nuclearpasta/react-native-drax.git --path .agents/skills/agent-device--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 nuclearpasta/react-native-drax --skill agent-device -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nuclearpasta/react-native-drax agent-device --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nuclearpasta/react-native-drax.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/agent-device .gemini/skills/agent-device && 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 "agent-device" agent skill from https://github.com/nuclearpasta/react-native-drax/tree/main/.agents/skills/agent-device into .gemini/skills/agent-device/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-device", 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 nuclearpasta/react-native-drax agent-deviceInstalls 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 nuclearpasta/react-native-drax --skill agent-device -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/nuclearpasta/react-native-drax.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/agent-device .github/skills/agent-device && 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 "agent-device" agent skill from https://github.com/nuclearpasta/react-native-drax/tree/main/.agents/skills/agent-device into .github/skills/agent-device/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-device", 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 nuclearpasta/react-native-drax --skill agent-device -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install nuclearpasta/react-native-drax agent-device --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nuclearpasta/react-native-drax.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/agent-device .opencode/skills/agent-device && 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 "agent-device" agent skill from https://github.com/nuclearpasta/react-native-drax/tree/main/.agents/skills/agent-device into .opencode/skills/agent-device/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-device", 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.
agent-deviceDrives iOS and Android devices and simulators from the command line: open apps, snapshot the UI tree, tap, type, scroll, take screenshots and read UI info.
The agent-device CLI opens an app or boots a device or simulator, takes a snapshot of the accessibility tree, and then interacts with elements by reference, using commands such as click @ref and fill @ref with some text. The core loop is to open, snapshot, interact, snapshot again after navigation or UI changes, and close the session. If the tool is missing, npx -y agent-device runs it.
Snapshots default to XCTest, which is fast and complete and needs no permissions, with an AX fallback when something breaks, and interactive-only and compact snapshots are available. A semantic find command can click or fill by visible text or label, and get commands return text and attributes or save a screenshot. Simulator settings helpers toggle wifi and airplane mode, though on iOS they change status bar indicators rather than the real network state. Trace capture, app state and app listing commands exist, and reference files cover the coordinate system, permissions, session management, snapshot refs and video recording.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 52ff42e. 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.
Shell commands in SKILL.md call:
npxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.
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.
Mobile Automation with agent-device loads about 1.4k tokens when it runs, and up to ~2.1k if it reads all its reference files. Until then it costs about 59 tokens; SKILL.md has 282 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); files beside SKILL.md are not scanned.
The full file from nuclearpasta/react-native-drax at commit 52ff42e, republished under its MIT licence (© nuclearpasta). 282 words, ~1,419 tokens.
.claude/skills/agent-device/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.agent-device open Settings --platform ios
agent-device snapshot -i
agent-device click @e3
agent-device wait text "Camera"
agent-device alert wait 10000
agent-device fill @e5 "test"
agent-device closeIf not installed, run:
npx -y agent-deviceopen [app]snapshot to get full XCTest accessibility tree snapshotclick @ref, fill @ref "text")agent-device open [app] # Boot device/simulator; optionally launch app
agent-device open [app] --activity com.example/.MainActivity # Android: open specific activity
agent-device close [app] # Close app or just end session
agent-device session list # List active sessionsagent-device snapshot # Full XCTest accessibility tree snapshot
agent-device snapshot -i # Interactive elements only (recommended)
agent-device snapshot -c # Compact output
agent-device snapshot -d 3 # Limit depth
agent-device snapshot -s "Camera" # Scope to label/identifier
agent-device snapshot --raw # Raw node output
agent-device snapshot --backend xctest # default: XCTest snapshot (fast, complete, no permissions)
agent-device snapshot --backend ax # macOS Accessibility tree (fast, needs permissions, less fidelity, optional)XCTest is the default: fast and complete and does not require permissions. Use it in most cases and only fall back to AX when something breaks.
agent-device find "Sign In" click
agent-device find text "Sign In" click
agent-device find label "Email" fill "user@example.com"
agent-device find value "Search" type "query"
agent-device find role button click
agent-device find id "com.example:id/login" click
agent-device find "Settings" wait 10000
agent-device find "Settings" existsagent-device settings wifi on
agent-device settings wifi off
agent-device settings airplane on
agent-device settings airplane off
agent-device settings location on
agent-device settings location offNote: iOS wifi/airplane toggles status bar indicators, not actual network state. Airplane off clears status bar overrides.
agent-device appstate
agent-device apps --metadata --platform ios
agent-device apps --metadata --platform androidagent-device click @e1
agent-device focus @e2
agent-device fill @e2 "text" # Clear then type (Android: verifies value and retries once on mismatch)
agent-device type "text" # Type into focused field without clearing
agent-device press 300 500 # Tap by coordinates
agent-device long-press 300 500 800 # Long press (where supported)
agent-device scroll down 0.5
agent-device pinch 2.0 # Zoom in 2x (iOS simulator)
agent-device pinch 0.5 200 400 # Zoom out at coordinates (iOS simulator)
agent-device back
agent-device home
agent-device app-switcher
agent-device wait 1000
agent-device wait text "Settings"
agent-device alert getagent-device get text @e1
agent-device get attrs @e1
agent-device screenshot out.pngagent-device trace start # Start trace capture
agent-device trace start ./trace.log # Start trace capture to path
agent-device trace stop # Stop trace capture
agent-device trace stop ./trace.log # Stop and move trace logagent-device devices
agent-device apps --platform ios
agent-device apps --platform android # default: launchable only
agent-device apps --platform android --all
agent-device apps --platform android --user-installedpinch <scale> [x y]) is supported on iOS simulators only; scale > 1 zooms in, < 1 zooms out.snapshot -i to reduce output size.xctest is the default and does not require Accessibility permission.open <app> can be used within an existing session to switch apps and update the session bundle id.--backend xctest.--session <name> for parallel sessions; avoid device contention.--activity <component> on Android to launch a specific activity (e.g. TV apps with LEANBACK).fill when you want clear-then-type semantics.type when you want to append/enter text without clearing.fill for important fields; it verifies entered text and retries once when IME reorders characters.© nuclearpasta, MIT. 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 (references) in .agents/skills/agent-device of nuclearpasta/react-native-drax.
Open the folder on GitHubat commit 52ff42e
Mobile Automation with agent-device 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 |
|---|---|---|---|---|---|---|
| Mobile Automation with agent-device this skillnuclearpasta/react-native-drax | 714 | — | ~1.4k | Automated safety check: Pass | MIT | |
| UI Testingchampionswimmer/TwoFac | 129 | — | ~215 | Automated safety check: Pass | None | |
| Mobilerun Docs Referencedroidrun/mobilerun | 9.6k | — | ~943 | Automated safety check: Pass | MIT | |
| Appiumblokadaorg/blokada | 3.3k | — | ~3.5k | Automated safety check: Pass | MPL-2.0 | |
| Phoneagentrounak/PhoneAgent | 798 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Simvynpranshuchittora/simvyn | 437 | — | ~938 | Automated safety check: Pass | MIT |
championswimmer/TwoFac
How to run, write, and debug local UI tests for Android, iOS, and browser builds.
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.
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.
pranshuchittora/simvyn
Operate iOS Simulators, Android Emulators, and connected mobile devices with Simvyn.
handsontable/handsontable
Opens a live BrowserStack session on a real Android, iOS or desktop browser for a local or public URL, tunneling localhost through Cloudflare when needed.
Categories
Drives iOS and Android devices and simulators from the command line: open apps, snapshot the UI tree, tap, type, scroll, take screenshots and read UI info. The agent-device CLI opens an app or boots a device or simulator, takes a snapshot of the accessibility tree, and then interacts with elements by reference, using commands such as click @ref and fill @ref with some text. The core loop is to open, snapshot, interact, snapshot again after navigation or UI changes, and close the session.
Mobile Automation with agent-device fits situations like: driving an iOS or Android app from an agent; extracting UI information from a simulator screen; tapping, typing, scrolling or pinching in a mobile app; capturing screenshots or videos of a mobile session.
Run `npx skills add nuclearpasta/react-native-drax --skill agent-device -a claude-code`. Or copy the skill folder (.agents/skills/agent-device in nuclearpasta/react-native-drax) into .claude/skills/agent-device in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nuclearpasta/react-native-drax --skill agent-device -a codex`. Or copy the skill folder (.agents/skills/agent-device in nuclearpasta/react-native-drax) into .agents/skills/agent-device 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 nuclearpasta/react-native-drax --skill agent-device -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/agent-device, .gemini/skills/agent-device, .github/skills/agent-device and .opencode/skills/agent-device in your project.
Going by SKILL.md and its folder, Mobile Automation with agent-device needs the command-line tools its instructions call (npx). Our summary lists: An iOS simulator or device, or an Android device or emulator; Node.js with npx, to run agent-device.
SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. 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. Review the folder before installing.
Mobile Automation with agent-device is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.4k tokens (SKILL.md is roughly 5.7k 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 731 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Mobile Automation with agent-device: UI Testing (championswimmer/TwoFac, 129 stars), Mobilerun Docs Reference (droidrun/mobilerun, 9.6k stars), Appium (blokadaorg/blokada, 3.3k stars) and Phoneagent (rounak/PhoneAgent, 798 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
nuclearpasta (a GitHub organization) maintains it in nuclearpasta/react-native-drax, which has 714 GitHub stars. The repository was last updated on October 3, 2026.
Source: nuclearpasta/react-native-drax on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.