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 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…
$ npx skills add getknit/knit --skill debug-bridge -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install getknit/knit debug-bridge --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/getknit/knit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/debug-bridge .claude/skills/debug-bridge && 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 "debug-bridge" agent skill from https://github.com/getknit/knit/tree/main/.agents/skills/debug-bridge into .claude/skills/debug-bridge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-bridge", 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/getknit/knit/tree/main/.agents/skills/debug-bridgeType 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 getknit/knit --skill debug-bridge -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install getknit/knit debug-bridge --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getknit/knit.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/debug-bridge .agents/skills/debug-bridge && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "debug-bridge" agent skill from https://github.com/getknit/knit/tree/main/.agents/skills/debug-bridge into .agents/skills/debug-bridge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-bridge", 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 getknit/knit --skill debug-bridge -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install getknit/knit debug-bridge --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getknit/knit.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/debug-bridge .cursor/skills/debug-bridge && 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 "debug-bridge" agent skill from https://github.com/getknit/knit/tree/main/.agents/skills/debug-bridge into .cursor/skills/debug-bridge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-bridge", 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/getknit/knit.git --path .agents/skills/debug-bridge--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 getknit/knit --skill debug-bridge -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install getknit/knit debug-bridge --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getknit/knit.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/debug-bridge .gemini/skills/debug-bridge && 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 "debug-bridge" agent skill from https://github.com/getknit/knit/tree/main/.agents/skills/debug-bridge into .gemini/skills/debug-bridge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-bridge", 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 getknit/knit debug-bridgeInstalls 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 getknit/knit --skill debug-bridge -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/getknit/knit.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/debug-bridge .github/skills/debug-bridge && 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 "debug-bridge" agent skill from https://github.com/getknit/knit/tree/main/.agents/skills/debug-bridge into .github/skills/debug-bridge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-bridge", 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 getknit/knit --skill debug-bridge -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install getknit/knit debug-bridge --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getknit/knit.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/debug-bridge .opencode/skills/debug-bridge && 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 "debug-bridge" agent skill from https://github.com/getknit/knit/tree/main/.agents/skills/debug-bridge into .opencode/skills/debug-bridge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-bridge", 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.
debug-bridgeDrive 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…
Debug Bridge is an agent skill from 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 on another without screenshots, read mesh state, check custody / spool / ratchet convergence, run a LoRa, direct-transfer or Wi-Fi Aware fault trial on a locked lab device, or post a fixture notification for a UI test. Use whenever a task says run it on a device, check it on the phones, lab trial, device trial, soak…
Its SKILL.md is about 2.2k 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 Fine-tuning and Mobile testing and debugging. It works with Android. The repository describes itself as: Offline, serverless, end-to-end-encrypted mesh messenger for Android — runs Wi-Fi Aware and Bluetooth LE simultaneously, with no servers and no Google Play Services. The licence is GPL-3.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 71c07bc. 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:
adbjqFrom 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.
Debug Bridge loads about 2.2k tokens when it runs. Until then it costs about 159 tokens; SKILL.md has 1,061 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 getknit/knit at commit 71c07bc, republished under its GPL-3.0 licence (© getknit). 1,061 words, ~2,201 tokens.
.claude/skills/debug-bridge/SKILL.md (or your agent's skills folder).Debug builds carry an exported receiver (app/src/debug/.../debug/DebugBridgeReceiver.kt) that calls the
mesh directly and answers in JSON, so an agent can drive the send→verify loop with no UI and no screenshots.
This skill is the procedure. The per-action extras and reply fields are in
.agents/context/debug-bridge.md, and this file points into it rather than copying it.
Obey .agents/rules/devices.md. An emulator is fair game. A physical phone, including every lab phone on
network adb, needs the user's go-ahead for this task, every time. Being reachable in adb devices is not
permission, and neither is a yes from an earlier task. Never toggle Wi-Fi over adb on a lab phone. Always pin
the target with -s <serial> or ANDROID_SERIAL: several devices are usually attached.
nonMinifiedRelease install answers nothing../gradlew :app:installDebug. Don't adb install the intermediates/apk file, which AGP 9
never rewrites.scripts/bridge.sh delivers to it anyway
(-f 0x20). A hand-written am broadcast without that flag gets an empty reply until the app is opened.scripts/bridge.sh <serial|-> <ACTION> [am-extras…] # JSON on stdout; "-" = $ANDROID_SERIAL
scripts/bridge.sh emulator-5554 STATE | jq '{self, health, reachable}'
scripts/bridge.sh - SEND --es text 'hi there 😀' --es conv nearbyThe script single-quotes every extra for the device shell, adds -f 0x20 and -p app.getknit.knit, pulls
the data="…" out of Broadcast completed, and falls back to the receiver's KnitBridge:I log mirror
(only lines newer than the call). It exits 1 with a hint on stderr when nothing parsable came back. A
refusal is still a reply, though: a missing extra answers {"status":"error","message":"missing 'path' extra"} with exit 0, so check .status (jq -e '.status == "ok"') before reading fields. Extras use am's
own flags: --es string, --ei int, --ez bool.
If you must write the raw form, quote the whole remote command and single-quote the values. adb re-parses
on the device, so a bare --es text "hi there" arrives as hi:
adb -s A shell "am broadcast -f 0x20 -a app.getknit.knit.debug.SEND -p app.getknit.knit --es text 'hi there' --es conv nearby"STATE on each device: note self.nodeId and confirm the other side is in reachable[]. A peer that
isn't there is a radio problem, not a delivery one. Read transports[] (per-radio health, linked,
nearby) first, then meshEnabled, meshPaused and meshStartDeferred, any of which leaves a mesh
that looks alive with no peers.SEND --es text '<unique body>' --es conv <nearby | peerNodeId | g-…>. Use a body you
can grep for (prefix it soak or burst so PURGE can clean it up later).STATE --es conv <id>: the body appears in messages[]. Then, if the test is about
the ✓✓, read A's own row (mine: true) until its received flips: that flag is the delivery tick
coming home to the sender, not something the receiver's row carries. Poll in a bounded loop. Never
trust one bare sleep: delivery order and timing across radios are not promised.for i in $(seq 1 30); do
scripts/bridge.sh B STATE --es conv nearby | jq -e --arg b "$BODY" '.messages[] | select(.body == $b)' && break
sleep 2
done| Question | Action | Read |
|---|---|---|
| Did it arrive? | STATE --es conv <id> on the receiver | the body in messages[] |
| Did the ✓✓ get home? | STATE --es conv <id> on the sender | its own row's (mine: true) received |
| Did a reaction or typing cue land? | STATE on the receiver | messages[].reactions; typing |
| Do two nodes carry the same custody? | STORE on each | liveFingerprint equal across devices (never allFingerprint); digestVersion == liveFingerprint on each |
| Which frame is stranded? | STORE | allIds sorted per device, then comm between devices |
| Is the Internet plane converged? | SPOOL | per scope local == spool, invalid 0, lastError empty, connected |
| Is a DM session healthy? | RATCHET | hasSession and confirmed; peerPrekeyPinned before any reset |
| LoRa range or airtime? | LORA | loraSent/loraReceived, loraNakByReason |
| Why didn't a transfer start? | XFER | refusal first, then the live transfers |
| Is the mesh paused? | STATE | meshPaused / meshPausedUntil |
Each row's caveats (the retiring and accounted spool fields, the TTL edge on allFingerprint) are in
the context doc. Read its bullet before you call a result converged or diverged.
Extras and reply fields: the action's bullet in .agents/context/debug-bridge.md under Headless bridge.
SEND, SENDIMG (stage the file into app storage with run-as first), REACT,
TYPING, MKGROUP, LEAVE, PURGE (clean soak traffic off every phone).STATE, STORE, HEAL, PAUSE, RESUME, BLECAP, NANOFF (Wi-Fi Aware off, Bluetooth
alone), PHY (the Coded PHY experiment).SPOOL, COMMONS, LORA, LORATX, LORAPROV, XFER.INTRO (contact cards), RATCHET, BACKUP.NANFAIL, NANSTORM, NANREFUSE, NANICM, NANDIAL, NANINIT,
NANMSG, MODEL. Each has a negative control in its bullet; run it too.FLAGMSG, MSGNOTIF, REQNOTIF, REVIEW.WEBPPROBE, WEBPCONV, WEBPCHECK, SHAREAPK.result=0 with no data=, and nothing under KnitBridge usually means the action isn't in the debug
manifest's <intent-filter>, or is misspelt. It can also mean a non-debug build. Without -f 0x20 it can
be a stopped package.adb shell without the inner quotes.missing 'path' extra, or a path the app can't read: scoped storage means the app can't read /sdcard
or /data/local/tmp. Copy the file in with
adb shell "cat /data/local/tmp/x | run-as app.getknit.knit sh -c 'cat > files/x'" and pass
/data/data/app.getknit.knit/files/x.error from COMMONS means the build hides the commons (BuildConfig.COMMONS).lastError,
refusal, declined). Most gates in the mesh return silently, and these fields exist to tell them apart.Use the stable resource-ids, cold-start navigation (--es demo_route chat/<id>), and the rule that popups,
dialogs and bottom sheets don't surface their test tags. These are the Stable resource-ids and Cold-start
navigation sections of the context doc. Prefer a bridge action over driving a sheet. XFER exists partly
so nobody has to drive the consent sheet.
when in DebugBridgeReceiver and an ACTION_ constant.<action> in the receiver's <intent-filter> in app/src/debug/AndroidManifest.xml. Without it the
broadcast is never delivered, and nothing errors..agents/context/debug-bridge.md covering the extras, the reply fields, what the oracle is,
and the negative control if it injects a fault.Check for drift after any change. This must print nothing:
comm -3 <(grep -oE '"app\.getknit\.knit\.debug\.[A-Z]+"' app/src/debug/java/app/getknit/knit/debug/DebugBridgeReceiver.kt | tr -d '"' | sed 's/.*\.//' | sort -u) \
<(grep -oE 'debug\.[A-Z]+' .agents/context/debug-bridge.md | sed 's/.*\.//' | sort -u)© getknit, GPL-3.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 .agents/skills/debug-bridge of getknit/knit.
Open the folder on GitHubat commit 71c07bc
Debug Bridge 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 |
|---|---|---|---|---|---|---|
| Debug Bridge this skillgetknit/knit | 130 | — | ~2.2k | Automated safety check: Pass | GPL-3.0 | |
| Mobilerun Docs Referencedroidrun/mobilerun | 9.6k | — | ~943 | Automated safety check: Pass | MIT | |
| 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 | 175 | — | ~259 | Automated safety check: Pass | MIT | |
| Debug Receiverstimusus/Shuttle2 | 229 | — | ~1.9k | Automated safety check: Pass | Apache-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.
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.
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…
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.
getknit/knit
Idiomatic Kotlin patterns, best practices, and conventions for building robust, efficient, and maintainable Kotlin applications with coroutines, null safety, and DSL builders.
getknit/knit
Set up, author, and navigate the dotagents standard — a slim AGENTS.md "router" at the repository root plus a hidden .agents/ directory (rules, context, memory, personas, skills, specs, logs, tasks)…
getknit/knit
Read the vendor's breaking changes, deprecations, migration notes and CVEs for every version between the one pinned now and the one being moved to, through the whatsnew MCP server's upgradenotes tool.
Works with
Categories
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…. Debug Bridge is an agent skill from getknit/knit.<ACTION, replies as JSON) — send a message on one phone and confirm it landed on another without screenshots, read mesh state, check custody / spool / ratchet convergence, run a LoRa, direct-transfer or Wi-Fi Aware fault trial on a locked lab device, or post a fixture notification for a UI test.
Debug Bridge fits situations like: A task says run it on a device; check it on the phones; convergence check; names any …debug.<ACTION.
Run `npx skills add getknit/knit --skill debug-bridge -a claude-code`. Or copy the skill folder (.agents/skills/debug-bridge in getknit/knit) into .claude/skills/debug-bridge in your project. Claude Code loads it when a task matches its description.
Run `npx skills add getknit/knit --skill debug-bridge -a codex`. Or copy the skill folder (.agents/skills/debug-bridge in getknit/knit) into .agents/skills/debug-bridge 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 getknit/knit --skill debug-bridge -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/debug-bridge, .gemini/skills/debug-bridge, .github/skills/debug-bridge and .opencode/skills/debug-bridge in your project.
Going by SKILL.md and its folder, Debug Bridge needs the command-line tools its instructions call (adb and jq).
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.
Debug Bridge is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.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 Debug Bridge: Mobilerun Docs Reference (droidrun/mobilerun, 9.6k stars), Phone Harness (ShawnPana/phone-harness, 3.2k stars), Mobile QA (tloncorp/tlon-apps, 107 stars) and Android (yang1ming/android-harness, 175 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
getknit (a GitHub organization) maintains it in getknit/knit, which has 130 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 4, 2026.
Source: getknit/knit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.