Maui AI Debugging
Redth/Maui.Gtk
End-to-end workflow for building, deploying, inspecting, and debugging .NET MAUI and MAUI Blazor Hybrid apps as an AI agent.
A skill your agent uses to attach a USB device or emulator to ADB, list transports with adb devices / adb devices -l, disambiguate among multiple devices using -s SERIAL, -d (single USB), -e (single…
$ npx skills add skydoves/android-testing-skills --skill connecting-to-devices -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install skydoves/android-testing-skills connecting-to-devices --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/skydoves/android-testing-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/adb/devices/connecting-to-devices .claude/skills/connecting-to-devices && 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 "connecting-to-devices" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/adb/devices/connecting-to-devices into .claude/skills/connecting-to-devices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "connecting-to-devices", 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/skydoves/android-testing-skills/tree/main/adb/devices/connecting-to-devicesType 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 skydoves/android-testing-skills --skill connecting-to-devices -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install skydoves/android-testing-skills connecting-to-devices --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/adb/devices/connecting-to-devices .agents/skills/connecting-to-devices && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "connecting-to-devices" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/adb/devices/connecting-to-devices into .agents/skills/connecting-to-devices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "connecting-to-devices", 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 skydoves/android-testing-skills --skill connecting-to-devices -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install skydoves/android-testing-skills connecting-to-devices --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/adb/devices/connecting-to-devices .cursor/skills/connecting-to-devices && 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 "connecting-to-devices" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/adb/devices/connecting-to-devices into .cursor/skills/connecting-to-devices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "connecting-to-devices", 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/skydoves/android-testing-skills.git --path adb/devices/connecting-to-devices--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 skydoves/android-testing-skills --skill connecting-to-devices -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install skydoves/android-testing-skills connecting-to-devices --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/adb/devices/connecting-to-devices .gemini/skills/connecting-to-devices && 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 "connecting-to-devices" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/adb/devices/connecting-to-devices into .gemini/skills/connecting-to-devices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "connecting-to-devices", 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 skydoves/android-testing-skills connecting-to-devicesInstalls 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 skydoves/android-testing-skills --skill connecting-to-devices -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/adb/devices/connecting-to-devices .github/skills/connecting-to-devices && 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 "connecting-to-devices" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/adb/devices/connecting-to-devices into .github/skills/connecting-to-devices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "connecting-to-devices", 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 skydoves/android-testing-skills --skill connecting-to-devices -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install skydoves/android-testing-skills connecting-to-devices --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/adb/devices/connecting-to-devices .opencode/skills/connecting-to-devices && 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 "connecting-to-devices" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/adb/devices/connecting-to-devices into .opencode/skills/connecting-to-devices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "connecting-to-devices", 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.
connecting-to-devicesA skill your agent uses to attach a USB device or emulator to ADB, list transports with adb devices / adb devices -l, disambiguate among multiple devices using -s SERIAL, -d (single USB), -e (single…
Connecting To Devices is an agent skill from skydoves/android-testing-skills. Use this skill to attach a USB device or emulator to ADB, list transports with adb devices / adb devices -l, disambiguate among multiple devices using -s SERIAL, -d (single USB), -e (single TCP/IP), or -t TRANSPORTID, gate scripts on a transport with the canonical adb wait-for[-TRANSPORT]-<state syntax (TRANSPORT in {usb, local, any}; state in {device, recovery, rescue, sideload, bootloader, disconnect}), interpret device states (device, offline, unauthorized, no permissions, recovery, sideload, bootloader…
Its SKILL.md is about 3.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Mobile, covering Mobile testing and debugging. It works with Linux. The repository describes itself as: ⚡️ A set of skills for Android testing: Compose UI, AndroidX Test, JVM unit tests, and ADB. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit 8665ed5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
adbFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
developer.android.comAlso links to:
android.googlesource.comFrom 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.
Connecting To Devices loads about 3.9k tokens when it runs. Until then it costs about 235 tokens; SKILL.md has 1,449 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 noted patterns worth knowing about, such as sudo or a known installer.
sudo udevadm control --reload-rulessudo udevadm triggerAutomated 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 skydoves/android-testing-skills at commit 8665ed5, republished under its Apache-2.0 licence (© skydoves). 1,449 words, ~3,926 tokens.
.claude/skills/connecting-to-devices/SKILL.md (or your agent's skills folder).adb devices is the most-typed adb command. The follow-on traps are real: scripts run before the device is actually online, multi-device shells fail with more than one device/emulator, Linux misses udev rules, and tutorials reference a fictional wait-for-device-online form. This skill encodes the truth set.
adb shell with two devices plugged in and gets error: more than one device/emulator.unauthorized, offline, or no permissions in adb devices.adb wait-for-device-online from a blog post and it errors with usage text.adb devices.../../architecture/understanding-adb-architecture/SKILL.md.../connecting-over-wifi/SKILL.md.../../apps/installing-and-managing-apps/SKILL.md.../../architecture/understanding-adb-architecture/SKILL.md).Settings → System → Developer options. On Android 4.2+ developer options is hidden until "Build number" is tapped seven times in About phone./etc/udev/rules.d/51-android.rules with sudo. 1. Run adb devices first, every time. It prints one line per attached transport in the form <serial> <state> [details...]. Add -l whenever scripting:
adb devices -l
# List of devices attached
# emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64 transport_id:1
# 0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo transport_id:2 -l adds product, model, device, transport_id, and (for USB) the USB bus path.
2. Pick the right selector for the situation:
| Flag | Meaning | Fails when |
|---|---|---|
-s <serial> | Explicit serial. Works for USB serials (0a388e93), emulators (emulator-5554), and TCP devices (192.168.1.42:5555). Overrides $ANDROID_SERIAL. | Serial not connected. |
-d | The single USB device. | Zero or more than one USB device. |
-e | The single TCP/IP device (covers emulators and adb connect-ed phones). | Zero or more than one TCP device. |
-t <transport_id> | Numeric transport ID from adb devices -l. Stable across re-plugs of the same port. | Transport ID not present. |
Note: -t is the transport ID, not a timeout flag. Wrap with shell timeout (or gtimeout on macOS) if the goal is a per-command time limit.
3. Filter to "ready" devices in scripts:
adb devices | awk '$2=="device"{print $1}' Single-device shortcuts: adb get-serialno returns the serial, adb get-state returns one of offline | bootloader | device, adb get-devpath returns the USB path. For the full state set, parse adb devices directly.
4. Use the canonical wait-for-* form. The variants you may have seen are wrong. From adb help (scripting section), the only valid syntax is:
wait-for[-TRANSPORT]-STATE
TRANSPORT ∈ { usb, local, any } (transport defaults to any)
STATE ∈ { device, recovery, rescue, sideload, bootloader, disconnect }Common forms:
| Command | Blocks until... |
|---|---|
adb wait-for-device | Any transport, state device. The default — used at the start of CI scripts. |
adb wait-for-usb-device | A USB-attached device reaches state device. |
adb wait-for-local-device | A TCP/IP device (emulator or wireless) reaches state device. |
adb wait-for-bootloader | Device shows up in bootloader (fastboot) state. |
adb wait-for-recovery / wait-for-sideload / wait-for-rescue | Same idea for those modes. |
adb wait-for-disconnect | The currently selected device disconnects (e.g. after adb reboot). |
The doc does NOT define a wait-for-device-online form. wait-for-* only checks the transport, not boot completion — pair it with a sys.boot_completed poll:
adb wait-for-device
until [[ "$(adb shell getprop sys.boot_completed | tr -d '\r')" == "1" ]]; do
sleep 1
done
adb shell input keyevent 82 # unlock the AOSP slide-up screenCompound flow around a reboot:
adb shell reboot
adb wait-for-disconnect
adb wait-for-device 5. Read device states correctly. From the adb page (Query for devices) plus adb help:
| State | Meaning | Recovery |
|---|---|---|
device | Online, adbd is responsive. Does not imply boot complete — gate on sys.boot_completed. | n/a |
offline | Transport exists but adbd isn't talking. Common after suspend/resume or USB hubs. | adb reconnect offline, then re-plug if needed. |
unauthorized | Host RSA key not yet accepted on-device. | Unlock device, tap Allow on the on-device dialog. Try a different USB cable if no dialog appears (some "charge-only" cables block data). |
recovery | Booted into recovery. Only a small subset of adb works. | n/a |
sideload | OTA sideload mode. Use adb sideload package.zip. | n/a |
bootloader | At the bootloader (fastboot). adb cannot talk; use fastboot. | n/a |
rescue | Rescue Party mode (Android 10+). | n/a |
connecting | Transient TLS handshake state over wireless. | wait. |
no permissions | (Linux only) USB visible but blocked by missing udev rules. | install rules — see step 7. |
6. Accept the RSA fingerprint dialog on first connect.
"When you connect a device running Android 4.2.2 (API level 17) or higher, the system shows a dialog asking whether to accept an RSA key that allows debugging through this computer." — developer.android.com/tools/adb Sequence:
adbd sees a new client offering an RSA public key.adb devices reports unauthorized./data/misc/adb/adb_keys on the device. Tick Always allow from this computer so future connections from the same ~/.android/adbkey skip the prompt. Revoke an old workstation's permission via Settings → Developer options → Revoke USB debugging authorizations.
7. (Linux) install udev rules so a freshly plugged phone is not stuck at no permissions. Canonical file: /etc/udev/rules.d/51-android.rules. Minimal example (one line per OEM):
# Google
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0660", GROUP="plugdev", TAG+="uaccess"
# Samsung
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0660", GROUP="plugdev", TAG+="uaccess"Apply without reboot:
sudo udevadm control --reload-rules
sudo udevadm trigger
# unplug and re-plug the device Most distros also ship a comprehensive android-udev / android-sdk-platform-tools-common package that drops the same file in /lib/udev/rules.d/.
8. (Windows) install the vendor USB driver. Pixel / Nexus / generic AOSP devices use the Google USB Driver from SDK Manager → SDK Tools → Google USB Driver (files at android_sdk\extras\google\usb_driver\). Other OEMs require manufacturer drivers from https://developer.android.com/tools/extras/oem-usb. macOS and Linux do not need vendor drivers.
9. Multi-device fan-out. ADB has no built-in --all flag. Two patterns:
# Sequential
for s in $(adb devices | awk '$2=="device"{print $1}'); do
adb -s "$s" install -r app.apk
done
# Parallel (4 jobs at a time)
adb devices | awk '$2=="device"{print $1}' \
| xargs -I{} -P 4 adb -s {} install -r app.apkFor sharded CI runners that each own one phone, lock the server to a single device:
adb --one-device 0a388e93 start-servermore than one device/emulator# WRONG
adb shell getprop ro.product.model
# adb: more than one device/emulator
# WRONG because: with two transports attached (e.g. an emulator + a USB phone),
# every non-server adb command needs an explicit selector. The command did not
# fail; it never even ran.# RIGHT
adb -s emulator-5554 shell getprop ro.product.model
# Or, if there is exactly one USB phone:
adb -d shell getprop ro.product.model
# Or set $ANDROID_SERIAL once and stop typing -s:
export ANDROID_SERIAL=emulator-5554
adb shell getprop ro.product.modelwait-for-device-online# WRONG
adb wait-for-device-online
# error: usage: ...
# WRONG because: this command does not exist. The canonical syntax is
# wait-for[-TRANSPORT]-<state> with state in {device, recovery, rescue,
# sideload, bootloader, disconnect}. There is no -online state.# RIGHT
adb wait-for-device # any transport, state=device
# Then poll boot complete (transport up != system booted):
until [[ "$(adb shell getprop sys.boot_completed | tr -d '\r')" == "1" ]]; do
sleep 1
done# WRONG
emulator -avd Pixel_API_34 &
adb install -r app.apk # races: emulator may not be online yet
# Often: error: device 'emulator-5554' not found# RIGHT
adb start-server # important: see corner case below
emulator -avd Pixel_API_34 &
adb -s emulator-5554 wait-for-device
until [[ "$(adb -s emulator-5554 shell getprop sys.boot_completed | tr -d '\r')" == "1" ]]; do
sleep 1
done
adb -s emulator-5554 install -r app.apkCorner case (verbatim from the adb page): "running emulators [may] not show up in
adb devices... when all of the following are true: the adb server is not running; you use theemulatorcommand with the-portor-portsoption with an odd-numbered port between 5554 and 5584; ... You start the adb server after you start the emulator." Workaround:adb start-serverBEFOREemulator.
transport_id vs -t confusion# WRONG
adb -t 60 shell getprop ro.product.model
# WRONG because: -t is transport_id, not a 60-second timeout. Either there is
# no transport with id=60 (error: device not found) or the command runs against
# the wrong device.# RIGHT
# Real timeout via the shell tool:
timeout 60 adb -s emulator-5554 shell getprop ro.product.model # GNU timeout
gtimeout 60 adb -s emulator-5554 shell getprop ro.product.model # macOS (coreutils via brew)
# Use -t only with a transport_id from adb devices -l:
adb -t 2 shell getprop ro.product.model-s/-d/-e/-t) on every adb command when more than one transport is attached, OR set $ANDROID_SERIAL.wait-for[-TRANSPORT]-<state> syntax. There is no wait-for-device-online.getprop sys.boot_completed after wait-for-device when the script needs the OS fully booted (e.g. before installing an APK or invoking am instrument).-t TRANSPORT_ID with a timeout flag. Wrap with timeout / gtimeout for actual timeouts.~/.android/adbkey* to "fix" unauthorized — see ../../architecture/understanding-adb-architecture/SKILL.md for the correct recovery.adb devices -l and transport_id for scripts that may see two devices with the same serial (rare hardware bug or duplicate AVDs).android-udev package on Linux instead of hand-maintaining 51-android.rules.adb devices -l lists every connected transport with state device (no offline, unauthorized, or no permissions).adb devices | awk '$2=="device"{print $1}' returns one line per ready device.adb -s <serial> get-state prints device.adb wait-for-device returns immediately when at least one transport is in state device.adb shell getprop sys.boot_completed prints 1 after a fresh boot.adb -d shell echo ok (or -e, or -s) succeeds without more than one device/emulator.lsusb shows the device and adb devices reports device (not no permissions) after udev rules apply.adb devices, wait-for-*, RSA dialog): https://developer.android.com/tools/adbadb man page: https://android.googlesource.com/platform/packages/modules/adb/+/refs/heads/main/docs/user/adb.1.mdtasks/research/A1-adb-architecture-devices.md — verbatim wait-for-* table, the wait-for-device-online correction, full state set, udev rule recipe.docs/CORPUS.md §I.3 (state truth set) and §I.10 (research findings).../../architecture/understanding-adb-architecture/SKILL.md../connecting-over-wifi/SKILL.md../../apps/installing-and-managing-apps/SKILL.md../../tests/running-instrumented-tests-via-adb/SKILL.mdAndroidJUnit4: ../../../instrumentation/runner/running-instrumented-tests-with-androidjunit4/SKILL.md../../../jvm-tests/runner/configuring-junit4-on-android/SKILL.md../../../fundamentals/strategies/organizing-test-source-sets/SKILL.md© skydoves, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in adb/devices/connecting-to-devices of skydoves/android-testing-skills.
Open the folder on GitHubat commit 8665ed5
Connecting To Devices 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 |
|---|---|---|---|---|---|---|
| Connecting To Devices this skillskydoves/android-testing-skills | 334 | — | ~3.9k | Automated safety check: Notes | Apache-2.0 | |
| Maui AI DebuggingRedth/Maui.Gtk | 101 | — | ~4.1k | Automated safety check: Pass | MIT | |
| Android Screenshotsboardsesh/boardsesh | 164 | — | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Diagnose Crashiamlukethedev/Herald-OS | 365 | — | ~964 | Automated safety check: Pass | MIT | |
| Phone HarnessShawnPana/phone-harness | 3.2k | — | ~4.3k | Automated safety check: Pass | MIT | |
| Maa Issue Log AnalysisMaaAssistantArknights/MaaAssistantArknights | 24k | — | ~4k | Automated safety check: Pass | AGPL-3.0 |
Redth/Maui.Gtk
End-to-end workflow for building, deploying, inspecting, and debugging .NET MAUI and MAUI Blazor Hybrid apps as an AI agent.
boardsesh/boardsesh
Capture screenshots of the Boardsesh React Native app (packages/mobile/) running on an Android emulator, driven against Metro with a cached dev-client APK.
iamlukethedev/Herald-OS
Explain why a program crashed from its crash report or core dump, and whether it is worth reporting
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.
MaaAssistantArknights/MaaAssistantArknights
分析 MaaAssistantArknights 上游仓库公开 Issue(https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/...
tloncorp/tlon-apps
Run a mobile QA checklist on a physical Android device over adb for tlon-apps, then triage what fails into fixes.
skydoves/android-testing-skills
A skill your agent uses to verify Compose layout measurements from a UI test using assertWidthIsEqualTo, assertHeightIsEqualTo, assertWidthIsAtLeast, assertHeightIsAtLeast…
skydoves/android-testing-skills
A skill your agent uses to verify a Compose semantics node's properties from a UI test using assertExists, assertDoesNotExist, assertIsDisplayed, assertIsNotDisplayed, assertIsDeactivated…
skydoves/android-testing-skills
A skill your agent uses to render every Jetpack Compose @Preview as a screenshot on a real Android device or emulator and publish a browsable HTML catalog from CI.
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.
skydoves/android-testing-skills
A skill your agent uses to pick the correct Compose UI test entry point.
skydoves/android-testing-skills
A skill your agent uses to pick which behaviors to cover in an Android test suite using Google's five-category state vocabulary plus the explicit "what NOT to test" list from…
Works with
Categories
A skill your agent uses to attach a USB device or emulator to ADB, list transports with adb devices / adb devices -l, disambiguate among multiple devices using -s SERIAL, -d (single USB), -e (single…. Connecting To Devices is an agent skill from skydoves/android-testing-skills.
Connecting To Devices fits situations like: attach a USB device; emulator to ADB; list transports with adb devices / adb devices -l; disambiguate among multiple devices using -s SERIAL.
Run `npx skills add skydoves/android-testing-skills --skill connecting-to-devices -a claude-code`. Or copy the skill folder (adb/devices/connecting-to-devices in skydoves/android-testing-skills) into .claude/skills/connecting-to-devices in your project. Claude Code loads it when a task matches its description.
Run `npx skills add skydoves/android-testing-skills --skill connecting-to-devices -a codex`. Or copy the skill folder (adb/devices/connecting-to-devices in skydoves/android-testing-skills) into .agents/skills/connecting-to-devices 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 skydoves/android-testing-skills --skill connecting-to-devices -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/connecting-to-devices, .gemini/skills/connecting-to-devices, .github/skills/connecting-to-devices and .opencode/skills/connecting-to-devices in your project.
Going by SKILL.md and its folder, Connecting To Devices needs the command-line tools its instructions call (adb).
SKILL.md names 2 domains. In commands or code: developer.android.com; the agent is likely to contact it when it follows the instructions. As links in the text: android.googlesource.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (runs commands with sudo), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Connecting To Devices is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.9k tokens (SKILL.md is roughly 16k 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 Connecting To Devices: Maui AI Debugging (Redth/Maui.Gtk, 101 stars), Android Screenshots (boardsesh/boardsesh, 164 stars), Diagnose Crash (iamlukethedev/Herald-OS, 365 stars) and Phone Harness (ShawnPana/phone-harness, 3.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
skydoves (a GitHub user) maintains it in skydoves/android-testing-skills, which has 334 GitHub stars. The repository holds 50 skills in this directory. The repository was last updated on May 25, 2026.
Source: skydoves/android-testing-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.