Your AI agent can't see your Android phone: adb 'unauthorized', 'offline' and 5 other causes
Every tool that lets an AI agent drive an Android phone over USB sits on the same thing: adb . When the agent says "no device found", the agent is almost never the problem. The phone and the computer have not agreed to talk yet. Run this first: adb devices -l Whatever it prints tells you which of t

Every tool that lets an AI agent drive an Android phone over USB sits on the same thing: adb. When the agent says "no device found", the agent is almost never the problem. The phone and the computer have not agreed to talk yet.
adb devices -l Enter fullscreen mode Exit fullscreen mode Whatever it prints tells you which of the causes below you have.
The phone lists the computer's RSA key as untrusted. Usually the "Allow USB debugging?" prompt was dismissed, or it appeared while the screen was locked and you never saw it.
The agent-specific version of this one: adb keeps its key in ~/.android/adbkey. If your agent or MCP client runs adb under a different user or a different HOME (a service, a sandbox, a container), it has a different key, and the phone sees a brand-new computer. It works in your terminal and says unauthorized from the agent. Approve the prompt once more from that context, or point both at the same key.
An empty list means USB itself is not carrying data to adb.
Your user may not open the USB device. Install the community udev rules ( android-sdk-platform-tools-common or android-udev-rules, depending on the distro), make sure your user is in the plugdev group, log out and back in, replug.
You see adb server version (41) doesn't match this client (39); killing... and the device flickers between online and gone.
Android Studio, Homebrew, scrcpy builds and some agent tools each ship their own adb. Whichever starts the server first wins, the next one kills it. An agent started from an app often has a different PATH than your shell, so it picks a different adb than the one you tested with.
Fix: keep one platform-tools install, put it first on PATH, and give tools the absolute path where they let you.
The device is connected but adb cannot complete the handshake. Usually an old adb against a newer Android, or a server stuck from an earlier session.
Fix: update platform-tools, adb kill-server, replug, unlock the phone.
A running emulator counts as a device, and so does a second phone on the same machine. adb refuses to guess.
Fix: pick one with adb -s <serial>... or set ANDROID_SERIAL=<serial> in the environment the agent runs in.
adb itself works, the phone blocks what the agent wants to do with it.
On Android 11 and later, the phone drops a computer's authorization if it has not connected for about seven days. Everything worked last week, today it is unauthorized again. Developer options has "Disable adb authorization timeout" if that keeps happening.
We build Auten, an MCP server that gives Claude Code, Codex, Cursor or any MCP client hands on a real screen: your computer, and your Android phone over USB (beta). The phone side goes through the same adb authorization as every other tool, so these are the failures we see first. They apply to any adb-based setup, not just ours. Setup notes: https://auten.ai/mcp?utm_source=devto&utm_medium=social
Hit a cause that is not on the list? Put it in the comments with the phone model and we will add it.