Warpdroid UI Test
Warp-net/warpnet
A skill your agent uses whenever a warpdroid (Android client) change or bug needs to be verified by actually driving the app's visual UI — any task phrased as "test the warpdroid UI", "click through…
Run a mobile QA checklist on a physical Android device over adb for tlon-apps, then triage what fails into fixes.
$ npx skills add tloncorp/tlon-apps --skill mobile-qa -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install tloncorp/tlon-apps mobile-qa --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/tloncorp/tlon-apps.git skills-src && mkdir -p .claude/skills && cp -r skills-src/tools/agent-skills/mobile-qa .claude/skills/mobile-qa && 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 "mobile-qa" agent skill from https://github.com/tloncorp/tlon-apps/tree/develop/tools/agent-skills/mobile-qa into .claude/skills/mobile-qa/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mobile-qa", 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/tloncorp/tlon-apps/tree/develop/tools/agent-skills/mobile-qaType 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 tloncorp/tlon-apps --skill mobile-qa -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install tloncorp/tlon-apps mobile-qa --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tloncorp/tlon-apps.git skills-src && mkdir -p .agents/skills && cp -r skills-src/tools/agent-skills/mobile-qa .agents/skills/mobile-qa && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "mobile-qa" agent skill from https://github.com/tloncorp/tlon-apps/tree/develop/tools/agent-skills/mobile-qa into .agents/skills/mobile-qa/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mobile-qa", 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 tloncorp/tlon-apps --skill mobile-qa -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install tloncorp/tlon-apps mobile-qa --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tloncorp/tlon-apps.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/tools/agent-skills/mobile-qa .cursor/skills/mobile-qa && 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 "mobile-qa" agent skill from https://github.com/tloncorp/tlon-apps/tree/develop/tools/agent-skills/mobile-qa into .cursor/skills/mobile-qa/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mobile-qa", 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/tloncorp/tlon-apps.git --path tools/agent-skills/mobile-qa--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 tloncorp/tlon-apps --skill mobile-qa -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install tloncorp/tlon-apps mobile-qa --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tloncorp/tlon-apps.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/tools/agent-skills/mobile-qa .gemini/skills/mobile-qa && 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 "mobile-qa" agent skill from https://github.com/tloncorp/tlon-apps/tree/develop/tools/agent-skills/mobile-qa into .gemini/skills/mobile-qa/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mobile-qa", 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 tloncorp/tlon-apps mobile-qaInstalls 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 tloncorp/tlon-apps --skill mobile-qa -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/tloncorp/tlon-apps.git skills-src && mkdir -p .github/skills && cp -r skills-src/tools/agent-skills/mobile-qa .github/skills/mobile-qa && 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 "mobile-qa" agent skill from https://github.com/tloncorp/tlon-apps/tree/develop/tools/agent-skills/mobile-qa into .github/skills/mobile-qa/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mobile-qa", 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 tloncorp/tlon-apps --skill mobile-qa -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install tloncorp/tlon-apps mobile-qa --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tloncorp/tlon-apps.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/tools/agent-skills/mobile-qa .opencode/skills/mobile-qa && 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 "mobile-qa" agent skill from https://github.com/tloncorp/tlon-apps/tree/develop/tools/agent-skills/mobile-qa into .opencode/skills/mobile-qa/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mobile-qa", 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.
mobile-qaRun a mobile QA checklist on a physical Android device over adb for tlon-apps, then triage what fails into fixes.
Mobile QA is an agent skill from tloncorp/tlon-apps. Run a mobile QA checklist on a physical Android device over adb for tlon-apps, then triage what fails into fixes. Use this whenever the user hands over a list of QA tasks / test cases / a "QA pass" to run on-device, asks to drive the Android app (io.tlon.groups[.preview]) via adb, wants failures filed as Linear issues (with screenshots), or wants a found bug fixed, PR'd, and verified on the device. Covers the full loop: drive the UI → record pass/fail → file Linear issues → fix the code → rebuild and verify…
Its SKILL.md is about 2.4k 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/adb-driving.md`, `references/fix-and-verify.md` and `references/linear-filing.md`).
It sits in Mobile, covering Mobile testing and debugging, QA and bug reports and Android development. It works with Android and Linear. The repository describes itself as: Native, web clients, and server for Tlon Messenger. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 61e412a. 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/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
pnpmnpxghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, npx and gh, 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 QA loads about 2.4k tokens when it runs, and up to ~7.4k if it reads all its reference files. Until then it costs about 177 tokens; SKILL.md has 1,221 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 tloncorp/tlon-apps at commit 61e412a, republished under its MIT licence (© tloncorp). 1,221 words, ~2,352 tokens.
.claude/skills/mobile-qa/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.This skill drives the tlon-apps Android app on a physical device over adb, runs a QA checklist, and turns failures into filed-and-fixed work. It exists because the useful signal from mobile QA is spread across five phases that each have their own traps; doing them from memory reliably loses time to the same snags (adb not on PATH, RN swipes that snap back, taps that miss because screenshot coordinates were guessed, a preview build that won't hot-reload).
The phases are independent — the user may ask for any subset. Read the phase you need; each points to a reference file for the fiddly details.
This is a workflow recipe, not tied to any one agent. It works in any coding agent that has:
adb, git, gh, curl, pnpm/npx, and Gradle.references/linear-filing.md is
written against MCP tool names, but each maps 1:1 to an API call.gh CLI (used here) or the GitHub API.Where this skill says "view"/"look at" a screenshot, use your agent's
image-viewing capability. Paths like scripts/adbx.sh are relative to this
skill's install directory — resolve them there (shown as $SKILL below).
The app on the device is almost always the user's real, logged-in account
with real colleagues and groups — not a throwaway ship. That constraint shapes
the whole pass. Read references/safety.md first and keep it in mind: never send
messages to real people, route destructive/admin tests (kick/ban/leave/delete)
through a throwaway group you create and later delete, and confirm outward-facing
actions. When the plan involves genuinely destructive or person-affecting steps,
surface them and get a yes before doing them — a blanket "run the QA tasks" is not
consent to nuke a shared group.
Single device also means you can verify the initiating side of an action but
not "all members see the change" cross-ship effects, and you can't do
mismatched-agent-version tests. Mark those NOT TESTABLE (single device) rather
than guessing.
adb is typically not on PATH. The helper script scripts/adbx.sh locates
it and wraps the common gestures; use it instead of re-deriving adb invocations.
# point screenshots at a scratch dir (default: a temp dir OUTSIDE the repo, so
# real-account captures never land in the worktree), then sanity-check
export QA_SHOT_DIR=/path/to/scratch
SKILL=/path/to/this/skill # wherever your agent installed it
A="$SKILL/scripts/adbx.sh"
"$A" adb devices -l # confirm a device is attached
"$A" focus # what app/activity is focused
"$A" shot s001 # capture; prints the PNG pathThen view the PNG (image input required) to see the screen. Screenshots are
the device's native resolution (e.g. 1080×2400). input tap/swipe take
device-native coordinates, so tap the raw pixel coordinates from the
screenshot — do not apply the viewer's display-scale factor to them.
The full gesture/quirk catalogue (slow-drag for RN rows, long-press, reading
element bounds when a tap misses, the input text space bug, keyboard-dismiss
traps, screen sleep/lock) lives in references/adb-driving.md. Skim it before
driving — several of these will bite on the first attempt otherwise.
Work the checklist top to bottom. For each row: perform the action, screenshot, view the shot, and judge the result against the "Expected" column.
Keep a running results table in a scratch markdown file (one row per checklist item) so nothing is lost and the final report is a copy-paste. Use these verdicts:
Be honest and specific in the notes — a FAIL should name the observed behavior, and a PASS* should quote the actual label/URL/path. When a failure looks real, capture a clean screenshot of the broken state; you'll reuse it when filing.
Report failures first, then discrepancies, then not-run/not-testable, then "all else passed". The user asked which ones fail — lead with that.
One issue per genuine failure. The mechanics — team lookup, save_issue with the
Bug label, and the three-step screenshot attachment (prepare upload → curl PUT
with the signed headers → finalize) — are in references/linear-filing.md.
Before filing, confirm with the user which failures to file if there are several;
don't mass-create issues unprompted. Write issues someone can act on without this
conversation: summary, numbered repro steps, expected vs actual, environment
(device, io.tlon.groups.preview, build version from dumpsys), and any
measured detail that makes the bug concrete (e.g. an element's bounds). If the
user already has the broken state on their device, take a fresh screenshot rather
than reusing an older one.
Locate the screen from a string in the UI (grep -rn "Edit channel info" packages/), then look for a working sibling — a near-identical screen that
doesn't have the bug — and mirror its structure. Most mobile-UI bugs here are a
component wired slightly differently than an equivalent that works; the diff
against the working version is the fix and the explanation.
Then the standard hygiene: pnpm -r tsc (or npx tsc --noEmit in the package),
pnpm format on changed files, branch off develop, commit with the
Co-Authored-By: Claude ... trailer, push, and gh pr create using the repo PR
template (.github/pull_request_template.md — Summary / Changes / How did I
test? / Risks and impact / Rollback plan / Screenshots). Naming the branch
<user>/tlon-<NNNN>-... auto-links the PR to the Linear issue. Details and the
exact PR-body shape are in references/fix-and-verify.md.
Know your variant — this is easy to get wrong. previewDebug is a
debuggableVariant in apps/tlon-mobile/android/app/build.gradle, so its JS
bundle is not embedded; that build loads JS from Metro. So:
APP_VARIANT=preview npx expo start --dev-client), point the
device at it, and confirm Metro logs an Android Bundling line when the app
loads — otherwise you're looking at stale/cached JS and the check is a lie.previewRelease (with APP_VARIANT=preview) — not
installPreviewDebug, which won't contain your source.The full recipe (both paths, JDK/SDK env, the non-destructive "never uninstall"
rule, screen-sleep/unlock handling) is in references/fix-and-verify.md.
Once the fix is live: reproduce the original failing steps, screenshot the now-correct behavior, and view the shot to confirm. Proof is the before (filed screenshot) and after (post-fix screenshot) of the same repro.
Phases 4–5 involve a long Gradle build and a physical device that sleeps/locks.
Run the build in the background and watch for its terminal state; set
adbx.sh stayon so the screen doesn't sleep mid-pass; and if the device is on a
secure lockscreen, ask the user to unlock it — never attempt to bypass a PIN.
© tloncorp, 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 (scripts, references) in tools/agent-skills/mobile-qa of tloncorp/tlon-apps.
Open the folder on GitHubat commit 61e412a
Mobile QA 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 QA this skilltloncorp/tlon-apps | 107 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Warpdroid UI TestWarp-net/warpnet | 157 | — | ~3.5k | Automated safety check: Pass | Custom licence | |
| Android Emulator SkillMoustachauve/WLED-Android | 169 | 1 repos | ~911 | Automated safety check: Pass | Apache-2.0 | |
| Run Jetpack Android Appwordpress-mobile/WordPress-Android | 3.2k | — | ~886 | Automated safety check: Pass | GPL-2.0 | |
| Orca Android Emulator Controlstablyai/orca | 87k | — | ~558 | Automated safety check: Pass | Apache-2.0 | |
| Frb Android Emulator Preparefzyzcjy/flutter_rust_bridge | 5.4k | — | ~2.1k | Automated safety check: Notes | MIT |
Warp-net/warpnet
A skill your agent uses whenever a warpdroid (Android client) change or bug needs to be verified by actually driving the app's visual UI — any task phrased as "test the warpdroid UI", "click through…
Moustachauve/WLED-Android
Production-ready scripts for Android app testing, building, and automation.
wordpress-mobile/WordPress-Android
Builds the Jetpack debug app with Gradle and installs it on a connected Android device or an emulator started from an available AVD.
stablyai/orca
Android device and emulator control from inside Orca over adb, with the live device view in Orca's emulator pane. Use when driving an adb-connected emulator…
fzyzcjy/flutter_rust_bridge
A skill your agent uses when preparing, installing, diagnosing, or explaining the host Android Emulator environment for flutterrustbridge local runtime validation, including Android SDK command-line…
hyochan/react-native-nitro-sound
Build and run repeatable react-native-nitro-sound recorder/player regression tests on an iOS Simulator or Android emulator, with explicit virtual-device selection, microphone permission, Maestro…
tloncorp/tlon-apps
Read Tlon activity and message history; manage workspaces (Tlon groups), channels, Markdown notes, shared Bucket files, contacts, profiles, settings, and channel hooks; expose content publicly…
tloncorp/tlon-apps
A skill your agent uses when taking a Tlon Messenger task from a fresh worktree to a merged pull request: reproducing or fixing something in the iOS, Android or web app, validating it on a…
tloncorp/tlon-apps
A skill your agent uses when setting up a machine for mobile agent work on this repository, when the tlon-workflow skill's prerequisite check fails, or when stim, agent-device, eas-cli, gh, or their…
tloncorp/tlon-apps
Verify tlon-apps web UI changes end-to-end with a single local ship + vite dev server (lighter than the full playwright-dev rig)
tloncorp/tlon-apps
Answer questions about Tlon, Urbit, Tlon Messenger, Tlonbot, and OpenClaw — what they are, how they work, and how to use them.
Categories
Run a mobile QA checklist on a physical Android device over adb for tlon-apps, then triage what fails into fixes. Mobile QA is an agent skill from tloncorp/tlon-apps. Run a mobile QA checklist on a physical Android device over adb for tlon-apps, then triage what fails into fixes.
Mobile QA fits situations like: hands over a list of QA tasks / test cases / a QA pass to run on-device; asks to drive the Android app (io.tlon.groups[.preview]) via adb; wants failures filed as Linear issues (with screenshots); wants a found bug fixed.
Run `npx skills add tloncorp/tlon-apps --skill mobile-qa -a claude-code`. Or copy the skill folder (tools/agent-skills/mobile-qa in tloncorp/tlon-apps) into .claude/skills/mobile-qa in your project. Claude Code loads it when a task matches its description.
Run `npx skills add tloncorp/tlon-apps --skill mobile-qa -a codex`. Or copy the skill folder (tools/agent-skills/mobile-qa in tloncorp/tlon-apps) into .agents/skills/mobile-qa 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 tloncorp/tlon-apps --skill mobile-qa -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/mobile-qa, .gemini/skills/mobile-qa, .github/skills/mobile-qa and .opencode/skills/mobile-qa in your project.
Going by SKILL.md and its folder, Mobile QA needs a shell for the scripts in its folder and the command-line tools its instructions call (pnpm, npx and gh). Our summary lists: Node.js; A Bash shell.
SKILL.md contains no URLs. Its commands use npx and gh, 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Mobile QA is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.4k 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 5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Mobile QA: Warpdroid UI Test (Warp-net/warpnet, 157 stars), Android Emulator Skill (Moustachauve/WLED-Android, 169 stars), Run Jetpack Android App (wordpress-mobile/WordPress-Android, 3.2k stars) and Orca Android Emulator Control (stablyai/orca, 87k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
tloncorp (a GitHub organization) maintains it in tloncorp/tlon-apps, which has 107 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 7, 2026.
Source: tloncorp/tlon-apps on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.