Appfunctions
MartinStyk/apk-analyzer
A skill your agent uses when discovering, implementing, documenting, or testing Android App Functions (androidx.appfunctions) that expose app capabilities to on-device AI agents like Gemini.
Debug Android apps on a connected device or emulator through the Spock ADB MCP server (tools named android).
$ npx skills add WahdanZ/SpockAdb --skill spock-adb -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install WahdanZ/SpockAdb spock-adb --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/WahdanZ/SpockAdb.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/spock-adb .claude/skills/spock-adb && 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 "spock-adb" agent skill from https://github.com/WahdanZ/SpockAdb/tree/master/skills/spock-adb into .claude/skills/spock-adb/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spock-adb", 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/WahdanZ/SpockAdb/tree/master/skills/spock-adbType 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 WahdanZ/SpockAdb --skill spock-adb -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install WahdanZ/SpockAdb spock-adb --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/WahdanZ/SpockAdb.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/spock-adb .agents/skills/spock-adb && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "spock-adb" agent skill from https://github.com/WahdanZ/SpockAdb/tree/master/skills/spock-adb into .agents/skills/spock-adb/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spock-adb", 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 WahdanZ/SpockAdb --skill spock-adb -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install WahdanZ/SpockAdb spock-adb --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/WahdanZ/SpockAdb.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/spock-adb .cursor/skills/spock-adb && 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 "spock-adb" agent skill from https://github.com/WahdanZ/SpockAdb/tree/master/skills/spock-adb into .cursor/skills/spock-adb/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spock-adb", 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/WahdanZ/SpockAdb.git --path skills/spock-adb--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 WahdanZ/SpockAdb --skill spock-adb -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install WahdanZ/SpockAdb spock-adb --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/WahdanZ/SpockAdb.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/spock-adb .gemini/skills/spock-adb && 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 "spock-adb" agent skill from https://github.com/WahdanZ/SpockAdb/tree/master/skills/spock-adb into .gemini/skills/spock-adb/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spock-adb", 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 WahdanZ/SpockAdb spock-adbInstalls 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 WahdanZ/SpockAdb --skill spock-adb -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/WahdanZ/SpockAdb.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/spock-adb .github/skills/spock-adb && 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 "spock-adb" agent skill from https://github.com/WahdanZ/SpockAdb/tree/master/skills/spock-adb into .github/skills/spock-adb/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spock-adb", 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 WahdanZ/SpockAdb --skill spock-adb -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install WahdanZ/SpockAdb spock-adb --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/WahdanZ/SpockAdb.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/spock-adb .opencode/skills/spock-adb && 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 "spock-adb" agent skill from https://github.com/WahdanZ/SpockAdb/tree/master/skills/spock-adb into .opencode/skills/spock-adb/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spock-adb", 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.
spock-adbDebug Android apps on a connected device or emulator through the Spock ADB MCP server (tools named android).
Spock Adb is an agent skill from WahdanZ/SpockAdb. Debug Android apps on a connected device or emulator through the Spock ADB MCP server (tools named android). Use when asked to investigate a UI bug, a state bug, a crash or ANR, process-death survival, background work (WorkManager, JobScheduler, alarms, Doze), a deep link, or an accessibility problem in an Android app — or whenever android tools are available and the task involves a running Android app.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `README.md`).
It sits in Mobile, covering Mobile testing and debugging and Android development. It works with Android, Model Context Protocol and JetBrains IDEs. The repository describes itself as: Spock Adb Plugin Helps you to have full control of your project. The licence is Apache-2.0.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f719f37. 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.
No scripts in the folder and no shell commands in SKILL.md.
From 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.
Spock Adb loads about 3.3k tokens when it runs. Until then it costs about 105 tokens; SKILL.md has 1,757 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 WahdanZ/SpockAdb at commit f719f37, republished under its Apache-2.0 licence (© WahdanZ). 1,757 words, ~3,284 tokens.
.claude/skills/spock-adb/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Spock ADB is an IntelliJ / Android Studio plugin that exposes a device to agents as typed MCP
tools, all named android_*. This skill is the order to call them in. The tool descriptions
say what each tool does; this says which one to reach for first, and what to check before and
after a change.
android_get_debug_context returns a bounded,
ranked likelyProblems list plus one short section each for the screen, app, log, UI,
background work and device conditions — all describing the same moment. Read
likelyProblems first. Each section's more entry names the exact call that returns its
raw data; fetch that only when the summary points there. Use
android_diagnose_current_screen instead when you also need to see the screen: same
report, every section, plus a screenshot.packageName (or rely on the open project's app, which is the
default) so logcat, storage, jobs and alarms are the app's, not the whole device's. Read the
log at minLevel: "W" or "E" before reading it at "V". Pass packageName: "" only when
you mean the whole device.android_wait_for_element, an android_assert_*, or
android_get_debug_context again). Never report an outcome you inferred rather than read.android_list_devices, then android_select_device. Every
device tool also takes deviceSerial.android_select_project. With one open, skip it.Every tool has a fixed level. A client cannot change it.
| Level | What happens | Examples |
|---|---|---|
| Read-only | Runs automatically; changes nothing | android_get_debug_context, android_get_logcat, android_get_ui_tree, android_assert_text |
| Safe action | Runs automatically; changes only what a developer routinely does by hand and can undo | android_launch_app, android_tap_element, android_open_deep_link, android_grant_permission, android_set_battery_level |
| Destructive | Stops and asks the developer, per call. Denied by default: no answer, a closed IDE or a timeout all mean no | the list below |
The destructive tools, all of them:
<!-- destructive-tools -->
android_clear_app_data — deletes the app's preferences, databases and cachesandroid_uninstall_app — removes the appandroid_revoke_permission — revoking a permission the app is using usually kills its processandroid_set_app_preference — rewrites one SharedPreferences / DataStore key; force-stops the appandroid_delete_app_preference — removes one key; force-stops the appandroid_set_http_proxy — routes all device traffic through a host, and survives a rebootandroid_force_doze — defers every app on the device until resetandroid_run_adb_command — arbitrary shell; requires a reason the developer reads<!-- /destructive-tools -->
How to behave around them:
android_run_adb_command. Ask the developer, or continue without it.android_run_adb_command is for what no other tool expresses. Its
reason must say which typed tool you considered and why it does not fit.android_clear_http_proxy after
android_set_http_proxy, android_reset_device_conditions after Doze, buckets or battery
changes. android_get_device_conditions lists what Spock changed and has not reset.android_find_ui_element with testTag, then text, then
contentDescription. android_get_ui_tree with interactiveOnly: true when you do not know
what is on screen, or meaningfulOnly: true when you also need to know what each control is
for: it keeps the labels beside them.android_tap_element, android_long_press_element,
android_scroll_to_element, android_input_text_into_element. They refuse, and say why, when a
selector matches several elements or a disabled one. Refine the selector (for example with
containerTag); do not fall back to coordinates to get around a refusal.android_tap, android_swipe and android_input_text are the coordinate fallback, for
surfaces with no semantics (a game view, a map, a WebView without accessibility).expectText, expectTestTag or
expectContentDescription, with expectUntil — and it reports VERIFIED, NOT OBSERVED or
INCONCLUSIVE instead of leaving you to guess.android_wait_for_element (until: visible, gone, enabled, checked, …)
rather than sleeping and re-reading.Each playbook is a default order. Stop as soon as the evidence answers the question.
android_diagnose_current_screen — the screen as an image and as data, in one call. Check
screen.activity is the screen the developer means; if another app is in front, the bug
report is about the wrong screen.android_find_ui_element for the element in question. Not found, found twice, or found
disabled are each a different bug — report which.android_tap_element (or the matching element action) with an expected result.android_assert_visible, android_assert_enabled or android_assert_text to state the
outcome as a fact.android_get_logcat with minLevel: "W" for what the tap
triggered.android_get_debug_context — rule out a crash or failing request before looking at state.android_list_app_storage, then android_read_app_storage for the file that holds the value.
Compare what is stored with what is shown (android_assert_text).android_get_logcat around the action that changed it.android_set_app_preference
(destructive: it force-stops the app), then android_launch_app and re-read both the
storage and the screen.android_get_debug_context. A crash or ANR ranks first in likelyProblems, attributed even
when the process has already died.more.logs reference — typically android_get_logcat with minLevel: "E" — for
the full stack trace or ANR block. Quote the first frame in the app's own package.android_get_processes with the package as filter: is the process gone, or restarted with
a new pid?android_restart_app, repeat the steps with element actions,
then android_get_debug_context again to confirm the same problem, not a new one.android_clear_app_data (destructive).Force-stopping is not process death: android_stop_app and android_restart_app also
discard the saved instance state that process death keeps. Use them for cold starts only.
android_assert_text on the values that must survive.android_simulate_process_death. It backgrounds the app, kills the process, relaunches it
from the launcher so Android restores the task, and reports the old and new pid. It fails,
and relaunches nothing, if the process would not die (a foreground service keeps it alive).android_assert_text on the same values as step 1. Whatever changed is what the screen does
not save.android_launch_app: it starts the launcher activity on top of the
restored task instead of showing the screen that was recreated.android_get_scheduled_jobs — each job's constraints and which are unsatisfied right now,
its backoff and failure count. android_get_pending_alarms for alarms.android_get_device_conditions — Doze, the app's standby bucket, battery and charging.android_set_charger, android_set_battery_level, android_set_standby_bucket. Re-read
with android_get_scheduled_jobs after each.android_run_job_now with the jobId to run it regardless of constraints, then
android_get_logcat for what the worker did. For WorkManager, "started" means JobScheduler
started it; periodic or backed-off work may be re-deferred without running the Worker —
confirm from the log.android_force_doze (destructive) only when the lighter
conditions did not.android_reset_device_conditions, then android_get_device_conditions to
confirm changedBySpock is empty.android_get_package_info — confirm the app is installed and which version.android_open_deep_link with the uri (and packageName to rule out another app claiming
it).android_get_current_activity — did the expected activity open? For a navigation-graph app,
android_get_current_fragments too.android_assert_text or android_find_ui_element on content that proves the arguments
arrived (the item id in the URI, for example).android_get_logcat with minLevel: "W" for the intent
resolution. Check one link that should match nothing, to confirm it fails cleanly.android_accessibility_audit — each finding with its element and a fix.android_get_ui_tree with interactiveOnly: true — what a screen reader can reach, and what
each element announces (text, content description, role, state). meaningfulOnly: true adds
the labels beside each control, for telling what an unlabelled one is for.android_find_ui_element to identify the element in source terms (its
test tag) so the developer can fix the right composable or view.android_accessibility_audit and compare the counts. A
finding that moved to another element is not fixed.android_get_recomposition_counts with
durationSeconds long enough to cover the interaction; drive the interaction (taps, scrolls)
while it records. Record an idle screen to find recompositions that should not happen at all.Sample app screen: UI Inspector — Recomposition counts.
End with what you observed, from which call, and what is still unverified. Name any state you changed and did not restore (a preference, a proxy, a device condition). Quote log lines and selectors exactly; do not paraphrase a stack trace.
© WahdanZ, 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
SKILL.md and 1 other file in skills/spock-adb of WahdanZ/SpockAdb.
Open the folder on GitHubat commit f719f37
Spock Adb 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 |
|---|---|---|---|---|---|---|
| Spock Adb this skillWahdanZ/SpockAdb | 116 | — | ~3.3k | Automated safety check: Pass | Apache-2.0 | |
| AppfunctionsMartinStyk/apk-analyzer | 370 | — | ~1.4k | Automated safety check: Pass | GPL-3.0 | |
| Compose Multiplatform Patternsmonta-app/ocpp-emulator | 180 | 5 repos | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Android Developmentdpconde/claude-android-skill | 336 | — | ~1.7k | Automated safety check: Pass | MIT | |
| Run Jetpack Android Appwordpress-mobile/WordPress-Android | 3.2k | — | ~886 | Automated safety check: Pass | GPL-2.0 | |
| Orca Android Emulator Controlstablyai/orca | 89k | — | ~558 | Automated safety check: Pass | Apache-2.0 |
MartinStyk/apk-analyzer
A skill your agent uses when discovering, implementing, documenting, or testing Android App Functions (androidx.appfunctions) that expose app capabilities to on-device AI agents like Gemini.
monta-app/ocpp-emulator
Compose Multiplatform and Jetpack Compose patterns for KMP projects — state management, navigation, theming, performance, and platform-specific UI.
dpconde/claude-android-skill
Create production-quality Android applications following Google's official architecture guidance and NowInAndroid best practices.
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…
Categories
Debug Android apps on a connected device or emulator through the Spock ADB MCP server (tools named android). Spock Adb is an agent skill from WahdanZ/SpockAdb. Debug Android apps on a connected device or emulator through the Spock ADB MCP server (tools named android).
Spock Adb fits situations like: asked to investigate a UI bug; process-death survival; background work (WorkManager; an accessibility problem in an Android app —.
Run `npx skills add WahdanZ/SpockAdb --skill spock-adb -a claude-code`. Or copy the skill folder (skills/spock-adb in WahdanZ/SpockAdb) into .claude/skills/spock-adb in your project. Claude Code loads it when a task matches its description.
Run `npx skills add WahdanZ/SpockAdb --skill spock-adb -a codex`. Or copy the skill folder (skills/spock-adb in WahdanZ/SpockAdb) into .agents/skills/spock-adb 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 WahdanZ/SpockAdb --skill spock-adb -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/spock-adb, .gemini/skills/spock-adb, .github/skills/spock-adb and .opencode/skills/spock-adb in your project.
SKILL.md names no scripts, command-line tools or credentials: Spock Adb is instructions for the agent only.
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.
Spock Adb 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 3.3k tokens (SKILL.md is roughly 13k 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 Spock Adb: Appfunctions (MartinStyk/apk-analyzer, 370 stars), Compose Multiplatform Patterns (monta-app/ocpp-emulator, 180 stars), Android Development (dpconde/claude-android-skill, 336 stars) and Run Jetpack Android App (wordpress-mobile/WordPress-Android, 3.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
WahdanZ (a GitHub user) maintains it in WahdanZ/SpockAdb, which has 116 GitHub stars. The repository was last updated on October 5, 2026.
Source: WahdanZ/SpockAdb on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.