The local Android runtime for coding agents. Prepare one Android target, run your project, operate the app, and return verified evidence—for developers, agents, and CI.
See the code
ADB Ready
The local Android runtime for coding agents.
Prepare one Android target, run your project, operate the app, and return verified evidence—for developers, agents, and CI.
Quick start · What it does · AI agents · CI · Documentation
Install ADB Ready in the Android project your team wants to run:
npm · default
npm install --save-dev adb-ready
npx adb-ready dev
pnpm add --save-dev adb-ready
pnpm exec adb-ready dev
yarn add --dev adb-ready
yarn adb-ready dev
bun add --dev adb-ready
bunx adb-ready dev
ADB Ready handles the state around ADB that a person, script, or coding agent should not guess: which device belongs to the run, whether the app is ready, which ports and processes the session owns, and what evidence survives a failure. It orchestrates your real ADB and framework tools; it does not replace them or require an ADB Ready account, hosted service, or model API key.
Running adb-ready without a command opens the interactive workflow home.
adbr is the shorter alias for the same CLI.
New to Android device setup? Open Start → Set up first device for a guided
USB, Wireless debugging, or emulator path.
The home and its focused menus adapt to the detected terminal width and height,
including narrow split panes and short terminals, without relying on scrolling
to reveal an action.
Connect the current project to Codex, Claude Code, Cursor, VS Code/Copilot, Windsurf, or another MCP client:
npx adb-ready agent setup codex
Setup writes the project MCP bridge and a version-matched Agent Skill. Use
--mcp-profile debug, session, or ui to expose only the tools needed for
that job; full remains the default.
Then ask for the outcome you want:
Start this Expo app on my Android phone, wait until the login screen is actually ready, verify my change, and keep the failure evidence.
The local MCP server gives agents typed tools for target readiness, durable development sessions, app lifecycle, semantic UI, correlated failure evidence, screenshots, and saved diagnostics. Every result is schema-validated, annotated for safety, and checked against fresh device state. Agents do not receive a generic shell, unrestricted raw ADB, or app removal.
Connect an AI agent in minutes →
Check the host, inspect visible targets, and start the complete development loop:
npx adb-ready doctor
npx adb-ready devices
npx adb-ready dev
Expo, React Native, Flutter, Capacitor, Gradle, and custom commands all receive
the same selected target through ANDROID_SERIAL. Expo sessions go further:
ADB Ready starts Metro without Expo's all-device auto-open path, resolves the
project deep link from the verified server, and opens it only on the selected
ADB transport. Add local services with repeated --port flags or replace the
detected command after --:
adb-ready dev --port 8081 --port 8000
adb-ready dev -- pnpm run android:local
adb-ready dev --dry-run --json
For Expo projects, explicit localhost URLs in EXPO_PUBLIC_* environment
variables are discovered with Expo's own development environment resolution.
ADB Ready safely adds their ports to the selected target and verifies the host
services before calling the session ready. Explicit port configuration always
wins, and --no-auto-reverse-localhost disables discovery when required.
IPv4 and IPv6 loopback listeners are supported; when ADB cannot reach an
IPv6-only service directly, ADB Ready creates and cleans a local session bridge.
In an interactive Expo session that ADB Ready owns, the ready state activates
verified r reload, m developer-menu, ? help, and Ctrl+C cleanup controls.
ADB Ready advertises only actions it can execute; attached Metro servers keep
their controls in the original terminal, while automation and redirected output
stay prompt-free. See live-session behavior →
If Expo or React Native Metro is already running, ADB Ready verifies its standard status endpoint and project identity before attaching the Android session without restarting or owning that server. A Metro server from another project—or an unrelated process on the same port—is reported as a clear conflict instead of being reused.
Reach your first ready session →
Wait for declared readiness, execute one bounded verification command, preserve its exit code, and clean only resources created by the run:
npx adb-ready run -- npm run test:e2e
Or make the target and deployment part of the same bounded job:
npx adb-ready run --avd Pixel_9_API_36 --deploy --variant debug -- \
maestro test .maestro/smoke.yaml
Each executed run retains a redacted evidence bundle with its result, timeline, problems, focused logcat, native verifier output and artifacts, AI context, JUnit XML, and GitHub step summary. Maestro and Android CLI primitives are pinned to the leased target automatically. Existing matching emulators are reused; only an emulator started by that run is stopped. Scripts also get deterministic JSON and NDJSON contracts:
adb-ready devices --json --non-interactive
adb-ready logs --package com.example.app --format ndjson
adb-ready sessions list --status failed --since 24h --limit 5
Build a readiness-gated device job →
Need a hosted target first? Start from the maintained GitHub Actions emulator workflow, which runs one bounded target-locked job and preserves evidence even when verification fails. For a dedicated real device, use the manual-only self-hosted physical-device recipe.
find or recover one Android target
↓
bind the complete run to that target
↓
prepare only the ports the project needs
↓
start the framework and wait for declared readiness
↓
watch target · ports · logs · child process
↓
recover safely or return bounded failure evidence
ready means the selected target, required services, configured checks, and
framework launch have all succeeded while the owned development process is
not already failing; a passed port check alone never produces a ready
session.| Projects | Package managers | CLI runtimes | Hosts |
|---|---|---|---|
| Expo · React Native · Flutter · Capacitor · Gradle · custom | npm · pnpm · Yarn · Bun | Node.js · Bun · Deno | macOS · Linux · Windows |
The standard npm entrypoint requires Android SDK Platform-Tools and Node.js 22 or newer. The published package is architecture-neutral JavaScript with no native addon or artificial OS/CPU block. A working ADB executable remains the Android transport backend.
See tested and upstream-capable support tiers →
stdout; human diagnostics stay on stderr.Review the complete threat model →
| Guide | Start here when you want to… |
|---|---|
| Getting started | Reach the first ready development session. |
| Shell completion | Enable command discovery in Bash, zsh, fish, PowerShell, or Nushell. |
| Development sessions | Configure frameworks, commands, ports, readiness, and cleanup. |
| Targets and Wireless debugging | Pair, connect, recover, or explicitly select a target. |
| Apps and evidence | Control the app and capture screenshots or recordings. |
| Safe UI automation | Find, act on, and verify the current Android UI. |
| Logs and AI context | Diagnose a failure with bounded, redacted evidence. |
| AI agent integration | Connect an MCP-capable coding agent. |
| Automation | Use readiness, exit codes, JSON, NDJSON, JUnit, and CI artifacts. |
| Stability and versioning | Understand the 1.x API, schema, deprecation, and migration guarantees. |
| Gradle Managed Devices | Run build-owned virtual-device and group tests with normalized evidence. |
| Firebase Test Lab | Run explicit remote instrumentation or Robo matrices with bounded evidence. |
| Target pools and fan-out | Bound parallel verification across an explicit target set. |
| Configuration | Share project presets, hooks, aliases, and policies. |
| Troubleshooting | Resolve a known setup, target, UI, or session problem. |
| Compatibility | Check hosts, runtimes, package managers, and support tiers. |
| Example configs | Copy a framework or custom-project configuration. |
Run adb-ready --help for the complete command list or
adb-ready help COMMAND for focused options.
ADB Ready is independently developed and maintained. Sponsorship helps fund compatibility testing, real-device validation, CI, documentation, and reliable releases.
Sponsor ADB Ready and my open-source work →
Changelog · Contributing · Security · MIT License
ADB Ready is Android-only. It exposes target-bound workflows rather than a generic remote shell.
The local Android runtime for coding agents. Prepare one Android target, run your project, operate the app, and return verified evidence—for developers, agents, and CI.
See the code
ADB Ready
The local Android runtime for coding agents.
Prepare one Android target, run your project, operate the app, and return verified evidence—for developers, agents, and CI.
Quick start · What it does · AI agents · CI · Documentation
Install ADB Ready in the Android project your team wants to run:
npm · default
npm install --save-dev adb-ready
npx adb-ready dev
pnpm add --save-dev adb-ready
pnpm exec adb-ready dev
yarn add --dev adb-ready
yarn adb-ready dev
bun add --dev adb-ready
bunx adb-ready dev
ADB Ready handles the state around ADB that a person, script, or coding agent should not guess: which device belongs to the run, whether the app is ready, which ports and processes the session owns, and what evidence survives a failure. It orchestrates your real ADB and framework tools; it does not replace them or require an ADB Ready account, hosted service, or model API key.
Running adb-ready without a command opens the interactive workflow home.
adbr is the shorter alias for the same CLI.
New to Android device setup? Open Start → Set up first device for a guided
USB, Wireless debugging, or emulator path.
The home and its focused menus adapt to the detected terminal width and height,
including narrow split panes and short terminals, without relying on scrolling
to reveal an action.
Connect the current project to Codex, Claude Code, Cursor, VS Code/Copilot, Windsurf, or another MCP client:
npx adb-ready agent setup codex
Setup writes the project MCP bridge and a version-matched Agent Skill. Use
--mcp-profile debug, session, or ui to expose only the tools needed for
that job; full remains the default.
Then ask for the outcome you want:
Start this Expo app on my Android phone, wait until the login screen is actually ready, verify my change, and keep the failure evidence.
The local MCP server gives agents typed tools for target readiness, durable development sessions, app lifecycle, semantic UI, correlated failure evidence, screenshots, and saved diagnostics. Every result is schema-validated, annotated for safety, and checked against fresh device state. Agents do not receive a generic shell, unrestricted raw ADB, or app removal.
Connect an AI agent in minutes →
Check the host, inspect visible targets, and start the complete development loop:
npx adb-ready doctor
npx adb-ready devices
npx adb-ready dev
Expo, React Native, Flutter, Capacitor, Gradle, and custom commands all receive
the same selected target through ANDROID_SERIAL. Expo sessions go further:
ADB Ready starts Metro without Expo's all-device auto-open path, resolves the
project deep link from the verified server, and opens it only on the selected
ADB transport. Add local services with repeated --port flags or replace the
detected command after --:
adb-ready dev --port 8081 --port 8000
adb-ready dev -- pnpm run android:local
adb-ready dev --dry-run --json
For Expo projects, explicit localhost URLs in EXPO_PUBLIC_* environment
variables are discovered with Expo's own development environment resolution.
ADB Ready safely adds their ports to the selected target and verifies the host
services before calling the session ready. Explicit port configuration always
wins, and --no-auto-reverse-localhost disables discovery when required.
IPv4 and IPv6 loopback listeners are supported; when ADB cannot reach an
IPv6-only service directly, ADB Ready creates and cleans a local session bridge.
In an interactive Expo session that ADB Ready owns, the ready state activates
verified r reload, m developer-menu, ? help, and Ctrl+C cleanup controls.
ADB Ready advertises only actions it can execute; attached Metro servers keep
their controls in the original terminal, while automation and redirected output
stay prompt-free. See live-session behavior →
If Expo or React Native Metro is already running, ADB Ready verifies its standard status endpoint and project identity before attaching the Android session without restarting or owning that server. A Metro server from another project—or an unrelated process on the same port—is reported as a clear conflict instead of being reused.
Reach your first ready session →
Wait for declared readiness, execute one bounded verification command, preserve its exit code, and clean only resources created by the run:
npx adb-ready run -- npm run test:e2e
Or make the target and deployment part of the same bounded job:
npx adb-ready run --avd Pixel_9_API_36 --deploy --variant debug -- \
maestro test .maestro/smoke.yaml
Each executed run retains a redacted evidence bundle with its result, timeline, problems, focused logcat, native verifier output and artifacts, AI context, JUnit XML, and GitHub step summary. Maestro and Android CLI primitives are pinned to the leased target automatically. Existing matching emulators are reused; only an emulator started by that run is stopped. Scripts also get deterministic JSON and NDJSON contracts:
adb-ready devices --json --non-interactive
adb-ready logs --package com.example.app --format ndjson
adb-ready sessions list --status failed --since 24h --limit 5
Build a readiness-gated device job →
Need a hosted target first? Start from the maintained GitHub Actions emulator workflow, which runs one bounded target-locked job and preserves evidence even when verification fails. For a dedicated real device, use the manual-only self-hosted physical-device recipe.
find or recover one Android target
↓
bind the complete run to that target
↓
prepare only the ports the project needs
↓
start the framework and wait for declared readiness
↓
watch target · ports · logs · child process
↓
recover safely or return bounded failure evidence
ready means the selected target, required services, configured checks, and
framework launch have all succeeded while the owned development process is
not already failing; a passed port check alone never produces a ready
session.| Projects | Package managers | CLI runtimes | Hosts |
|---|---|---|---|
| Expo · React Native · Flutter · Capacitor · Gradle · custom | npm · pnpm · Yarn · Bun | Node.js · Bun · Deno | macOS · Linux · Windows |
The standard npm entrypoint requires Android SDK Platform-Tools and Node.js 22 or newer. The published package is architecture-neutral JavaScript with no native addon or artificial OS/CPU block. A working ADB executable remains the Android transport backend.
See tested and upstream-capable support tiers →
stdout; human diagnostics stay on stderr.Review the complete threat model →
| Guide | Start here when you want to… |
|---|---|
| Getting started | Reach the first ready development session. |
| Shell completion | Enable command discovery in Bash, zsh, fish, PowerShell, or Nushell. |
| Development sessions | Configure frameworks, commands, ports, readiness, and cleanup. |
| Targets and Wireless debugging | Pair, connect, recover, or explicitly select a target. |
| Apps and evidence | Control the app and capture screenshots or recordings. |
| Safe UI automation | Find, act on, and verify the current Android UI. |
| Logs and AI context | Diagnose a failure with bounded, redacted evidence. |
| AI agent integration | Connect an MCP-capable coding agent. |
| Automation | Use readiness, exit codes, JSON, NDJSON, JUnit, and CI artifacts. |
| Stability and versioning | Understand the 1.x API, schema, deprecation, and migration guarantees. |
| Gradle Managed Devices | Run build-owned virtual-device and group tests with normalized evidence. |
| Firebase Test Lab | Run explicit remote instrumentation or Robo matrices with bounded evidence. |
| Target pools and fan-out | Bound parallel verification across an explicit target set. |
| Configuration | Share project presets, hooks, aliases, and policies. |
| Troubleshooting | Resolve a known setup, target, UI, or session problem. |
| Compatibility | Check hosts, runtimes, package managers, and support tiers. |
| Example configs | Copy a framework or custom-project configuration. |
Run adb-ready --help for the complete command list or
adb-ready help COMMAND for focused options.
ADB Ready is independently developed and maintained. Sponsorship helps fund compatibility testing, real-device validation, CI, documentation, and reliable releases.
Sponsor ADB Ready and my open-source work →
Changelog · Contributing · Security · MIT License
ADB Ready is Android-only. It exposes target-bound workflows rather than a generic remote shell.