Agent skill

Mobile QA

by tloncorp in tloncorp/tlon-apps

Run a mobile QA checklist on a physical Android device over adb for tlon-apps, then triage what fails into fixes.

MITAuto-check passedMobile

Install Mobile QA

skills CLI
$ npx skills add tloncorp/tlon-apps --skill mobile-qa -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install tloncorp/tlon-apps mobile-qa --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
mobile-qa
GitHub stars
107
Token cost
~2.4k tokens
SKILL.md length
1,221 words
Files
6 (incl. scripts, references)
Skills in repo
6
Repo updated
First seen
Licence
MIT

At a glance

Run a mobile QA checklist on a physical Android device over adb for tlon-apps, then triage what fails into fixes.

  • Works in 5 steps: Setup & device control → Run the QA pass → File Linear issues → …
  • Hands over a list of QA tasks / test cases / a QA pass to run on-device
  • SKILL.md covers Capabilities this skill assumes, Before you start: this is…, Phase 1 — Setup & device control and Phase 2 — Run the QA pass, plus 4 more sections
  • Runs Shell scripts from its folder; calls pnpm, npx and gh

What it does

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.

When your agent uses it

  • 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

Example prompts

  • “QA pass”
  • “run these QA tasks on my phone”
  • “file that as a Linear bug with a screenshot”
  • “/mobile-qa”

Requirements

  • Node.js
  • A Bash shell

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Setup & device control
  2. Run the QA pass
  3. File Linear issues
  4. Fix
  5. Verify on-device

What it can do on your machine

Read from SKILL.md and the folder at commit 61e412a. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships 1 file in scripts/ (Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • pnpm
    • npx
    • gh

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~177
When it runs · the whole SKILL.md, loaded when a task matches
~2.4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~7.4k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from tloncorp/tlon-apps at commit 61e412a, republished under its MIT licence (© tloncorp). 1,221 words, ~2,352 tokens.

Download SKILL.mdSave it as .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.
name
mobile-qa
description
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 on-device. Reach for it even when the user only asks for one phase ("run these QA tasks on my phone", "file that as a Linear bug with a screenshot", "now fix it and verify on device").

Mobile QA (Android, on-device) → triage → fix → verify

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.

  1. Setup & device control — locate adb, drive taps/swipes/text, screenshot loop
  2. Run the QA pass — work the checklist, record pass/fail with evidence
  3. File Linear issues — one per real failure, screenshot attached
  4. Fix — find the screen, mirror a working sibling, PR it
  5. Verify on-device — rebuild with the fix, reproduce, capture proof shots

Capabilities this skill assumes

This is a workflow recipe, not tied to any one agent. It works in any coding agent that has:

  • A shell to run adb, git, gh, curl, pnpm/npx, and Gradle.
  • Filesystem read/write for the repo and a scratch directory.
  • Image input (vision) — you drive the UI by taking screenshots and looking at them, so an agent that can't see images can't run Phase 2.
  • A Linear integration for Phase 3 — either a Linear MCP server or the Linear REST/GraphQL API called directly with a token. references/linear-filing.md is written against MCP tool names, but each maps 1:1 to an API call.
  • GitHub access for Phase 4 — the 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).

Before you start: this is usually a real account

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.

Phase 1 — Setup & device control

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.

bash
# 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 path

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

Phase 2 — Run the QA pass

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:

  • PASS / FAIL — behaved / didn't behave as the Expected column says
  • PASS* — works but with a wording/path discrepancy worth noting (e.g. a button labeled "Edit group" where the checklist says "Customize"); record what actually appeared
  • NOT RUN — skipped to avoid disruption (outward-facing/destructive on a real account, or a gesture that can't be driven via synthetic input); say why
  • NOT TESTABLE — needs a second ship / mismatched version / cross-ship confirmation
  • N/A — precondition doesn't hold (e.g. "if new account" on an existing one)

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.

Show full SKILL.md (461 more words)Show less

Phase 3 — File Linear issues

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.

Phase 4 — Fix

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.

Phase 5 — Verify on-device

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:

  • JS/TS-only fix (common case): verify via Metro, no rebuild. Start Metro on the fixed source (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.
  • Native change, or a standalone APK that embeds the fix: build the bundling variant 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.

A note on pacing

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

Files

SKILL.md and 5 other files (scripts, references) in tools/agent-skills/mobile-qa of tloncorp/tlon-apps.

  • SKILL.md
  • references/adb-driving.md
  • references/fix-and-verify.md
  • references/linear-filing.md
  • references/safety.md
  • scripts/adbx.sh

Open the folder on GitHubat commit 61e412a

Compare with similar skills

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.

Mobile QA compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Mobile QA this skilltloncorp/tlon-apps107—~2.4kAutomated safety check: PassMIT
Warpdroid UI TestWarp-net/warpnet157—~3.5kAutomated safety check: PassCustom licence
Android Emulator SkillMoustachauve/WLED-Android1691 repos~911Automated safety check: PassApache-2.0
Run Jetpack Android Appwordpress-mobile/WordPress-Android3.2k—~886Automated safety check: PassGPL-2.0
Orca Android Emulator Controlstablyai/orca87k—~558Automated safety check: PassApache-2.0
Frb Android Emulator Preparefzyzcjy/flutter_rust_bridge5.4k—~2.1kAutomated safety check: NotesMIT

Similar skills

  • 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…

    157 GitHub stars~3.5k tokensUpdated yesterday
    MobileAuto-check passed
  • Android Emulator Skill

    Moustachauve/WLED-Android

    Production-ready scripts for Android app testing, building, and automation.

    169 GitHub starsUsed in 1 repo~911 tokens
    MobileAuto-check passed
  • Run Jetpack Android App

    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.

    3.2k GitHub stars~886 tokensUpdated today
    MobileAuto-check passed
  • 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…

    87k GitHub stars~558 tokensUpdated today
    MobileAuto-check passed
  • Frb Android Emulator Prepare

    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…

    5.4k GitHub stars~2.1k tokensUpdated yesterday
    MobileAuto-check: notes
  • Simulator Audio E2E

    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…

    961 GitHub stars~1.1k tokensUpdated 9 days ago
    MobileAuto-check passed

More from tloncorp/tlon-apps

  • Tlon

    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…

    107 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Tlon Workflow

    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…

    107 GitHub stars~8.9k tokensUpdated today
    Auto-check: notes
  • Tlon Workflow Doctor

    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…

    107 GitHub stars~1.2k tokensUpdated today
    Auto-check: notes
  • Verify

    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)

    107 GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Tlon Product Guide

    tloncorp/tlon-apps

    Answer questions about Tlon, Urbit, Tlon Messenger, Tlonbot, and OpenClaw — what they are, how they work, and how to use them.

    107 GitHub stars~11k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Mobile QA

What does Mobile QA do?

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.

When should I use Mobile QA?

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.

How do I install Mobile QA in Claude Code?

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.

How do I install Mobile QA in Codex?

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.

Can I use Mobile QA in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Mobile QA need to run?

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.

Does Mobile QA access the network?

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.

Is Mobile QA safe to install?

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.

What licence does Mobile QA use?

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.

How many tokens does Mobile QA use?

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.

What are the alternatives to Mobile QA?

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.

Who maintains Mobile QA?

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.