Phone Harness
ShawnPana/phone-harness
Control the user's phone — an iPhone through the Mac's iPhone Mirroring window, an Android over adb, or a rented cloud Android: open apps, tap, type, swipe, read the screen.
Build the debug APK, install it on a connected device/emulator via ADB, and launch the app.
$ npx skills add timusus/Shuttle2 --skill run-android -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install timusus/Shuttle2 run-android --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/timusus/Shuttle2.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/run-android .claude/skills/run-android && 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 "run-android" agent skill from https://github.com/timusus/Shuttle2/tree/main/.claude/skills/run-android into .claude/skills/run-android/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-android", 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/timusus/Shuttle2/tree/main/.claude/skills/run-androidType 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 timusus/Shuttle2 --skill run-android -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install timusus/Shuttle2 run-android --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/timusus/Shuttle2.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/run-android .agents/skills/run-android && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "run-android" agent skill from https://github.com/timusus/Shuttle2/tree/main/.claude/skills/run-android into .agents/skills/run-android/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-android", 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 timusus/Shuttle2 --skill run-android -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install timusus/Shuttle2 run-android --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/timusus/Shuttle2.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/run-android .cursor/skills/run-android && 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 "run-android" agent skill from https://github.com/timusus/Shuttle2/tree/main/.claude/skills/run-android into .cursor/skills/run-android/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-android", 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/timusus/Shuttle2.git --path .claude/skills/run-android--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 timusus/Shuttle2 --skill run-android -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install timusus/Shuttle2 run-android --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/timusus/Shuttle2.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/run-android .gemini/skills/run-android && 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 "run-android" agent skill from https://github.com/timusus/Shuttle2/tree/main/.claude/skills/run-android into .gemini/skills/run-android/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-android", 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 timusus/Shuttle2 run-androidInstalls 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 timusus/Shuttle2 --skill run-android -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/timusus/Shuttle2.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/run-android .github/skills/run-android && 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 "run-android" agent skill from https://github.com/timusus/Shuttle2/tree/main/.claude/skills/run-android into .github/skills/run-android/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-android", 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 timusus/Shuttle2 --skill run-android -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install timusus/Shuttle2 run-android --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/timusus/Shuttle2.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/run-android .opencode/skills/run-android && 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 "run-android" agent skill from https://github.com/timusus/Shuttle2/tree/main/.claude/skills/run-android into .opencode/skills/run-android/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-android", 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.
run-androidBuild the debug APK, install it on a connected device/emulator via ADB, and launch the app.
Run Android is an agent skill from timusus/Shuttle2. Build the debug APK, install it on a connected device/emulator via ADB, and launch the app.
Its SKILL.md is about 450 tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Mobile, covering Mobile testing and debugging. It works with Android. The repository describes itself as: Shuttle Music: a music player for Android and iOS. Plays local files and streams from Jellyfin, Emby, Plex and Navidrome/Subsonic, with Chromecast, Android Auto, EQ and replay… The licence is Apache-2.0.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 9cef5dd. 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:
adbFrom 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.
Run Android loads about 453 tokens when it runs. Until then it costs about 26 tokens; SKILL.md has 167 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 timusus/Shuttle2 at commit 9cef5dd, republished under its Apache-2.0 licence (© timusus). 167 words, ~453 tokens.
.claude/skills/run-android/SKILL.md (or your agent's skills folder).Build, install, and launch the debug app. Pick the device in this order and say which one you used.
A device listed as device (not unauthorized/offline) in adb devices beats every emulator.
build-brief ./gradlew :android:app:installDebug && adb shell am start -n com.simplecityapps.shuttle.dev/com.simplecityapps.shuttle.ui.MainActivitysupport/scripts/remote-emu.sh status, then start and eval "$(support/scripts/remote-emu.sh env)"
— lane protocol, ports and stop discipline are in .claude/rules/android.md's Desktop Emulator section.
support/scripts/remote-emu.sh install # runs :android:app:assembleDebug and installs over the tunnel
adb shell am start -n com.simplecityapps.shuttle.dev/com.simplecityapps.shuttle.ui.MainActivityUse remote-emu.sh install instead of :android:app:installDebug (Gradle's install task ignores
ANDROID_ADB_SERVER_PORT). Shell state does not persist between tool calls, so re-run the eval
in each command that uses adb. remote-emu.sh stop when done, including after a failure.
status says the box is unreachable or all three lanes are busybuild-brief ./gradlew :android:app:installDebug && adb shell am start -n com.simplecityapps.shuttle.dev/com.simplecityapps.shuttle.ui.MainActivityKill it afterwards; never leave a local AVD running, and never kill one you did not start.
If no device is connected and the box is unreachable, check with adb devices and report the issue.
© timusus, 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
Just SKILL.md in .claude/skills/run-android of timusus/Shuttle2.
Open the folder on GitHubat commit 9cef5dd
Run Android 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 |
|---|---|---|---|---|---|---|
| Run Android this skilltimusus/Shuttle2 | 229 | — | ~453 | Automated safety check: Pass | Apache-2.0 | |
| Phone HarnessShawnPana/phone-harness | 3.2k | — | ~4.3k | Automated safety check: Pass | MIT | |
| Mobile QAtloncorp/tlon-apps | 107 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Androidyang1ming/android-harness | 176 | — | ~259 | Automated safety check: Pass | MIT | |
| Debug Bridgegetknit/knit | 131 | — | ~2.2k | Automated safety check: Pass | GPL-3.0 | |
| Capturing Screenshots And Screenrecordskydoves/android-testing-skills | 333 | — | ~3.7k | Automated safety check: Pass | Apache-2.0 |
ShawnPana/phone-harness
Control the user's phone — an iPhone through the Mac's iPhone Mirroring window, an Android over adb, or a rented cloud Android: open apps, tap, type, swipe, read the screen.
tloncorp/tlon-apps
Run a mobile QA checklist on a physical Android device over adb for tlon-apps, then triage what fails into fixes.
yang1ming/android-harness
Direct Android device control through ADB. An agent skill from yang1ming/android-harness.
getknit/knit
Drive and verify Knit on a device or emulator through the headless debug bridge (am broadcast to app.getknit.knit.debug.<ACTION, replies as JSON) — send a message on one phone and confirm it landed…
skydoves/android-testing-skills
A skill your agent uses to capture visual artefacts from a device for test failures, golden image generation, QA repro, and demo videos.
Moustachauve/WLED-Android
Production-ready scripts for Android app testing, building, and automation.
timusus/Shuttle2
Comprehensive guidance for writing deterministic tests for Android code using Kotlin coroutines.
timusus/Shuttle2
Drive the S2 debug build's playback and queue over ADB broadcasts — play the whole library, play/pause, skip, seek, remove a queue item, toggle shuffle/repeat, dump playback state as JSON, reimport…
timusus/Shuttle2
Deploy the Android app to the Play Store via GitHub Actions.
timusus/Shuttle2
Weekly Play Store review flow for S2: fetch new reviews, draft replies, get owner approval, then post.
timusus/Shuttle2
Run lint + unit tests, investigate and fix failures. An agent skill from timusus/Shuttle2.
timusus/Shuttle2
Analyse working tree changes, group them into logical atomic commits, and create well-structured conventional commits with module scopes.
Works with
Categories
Build the debug APK, install it on a connected device/emulator via ADB, and launch the app. Run Android is an agent skill from timusus/Shuttle2. Build the debug APK, install it on a connected device/emulator via ADB, and launch the app.
Run Android fits situations like: tasks that involve Mobile testing and debugging.
Run `npx skills add timusus/Shuttle2 --skill run-android -a claude-code`. Or copy the skill folder (.claude/skills/run-android in timusus/Shuttle2) into .claude/skills/run-android in your project. Claude Code loads it when a task matches its description.
Run `npx skills add timusus/Shuttle2 --skill run-android -a codex`. Or copy the skill folder (.claude/skills/run-android in timusus/Shuttle2) into .agents/skills/run-android 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 timusus/Shuttle2 --skill run-android -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/run-android, .gemini/skills/run-android, .github/skills/run-android and .opencode/skills/run-android in your project.
Going by SKILL.md and its folder, Run Android needs the command-line tools its instructions call (adb).
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. Review the folder before installing.
Run Android 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 453 tokens (SKILL.md is roughly 1.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Run Android: Phone Harness (ShawnPana/phone-harness, 3.2k stars), Mobile QA (tloncorp/tlon-apps, 107 stars), Android (yang1ming/android-harness, 176 stars) and Debug Bridge (getknit/knit, 131 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
timusus (a GitHub user) maintains it in timusus/Shuttle2, which has 229 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 7, 2026.
Source: timusus/Shuttle2 on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.