An agent with a phone in its hand.
sNuse drives a real Android phone over adb. The agent reads the screen as text, taps a control by the words on it, types, then takes a fresh snapshot to prove the step landed. About 600 lines of Python. No emulator, no phone farm, no account.
22 commands · Android 11+ · MIT
$ adbdrv status device Pixel 7 (Android 14, sdk 34) screen 1080x2400 awake unlocked app com.facebook.orca $ adbdrv ui --text Marketplace folder · 2 unread Sam R. is the lamp still available? Priya N. can you do 40? $ adbdrv tap "Sam R." $ adbdrv type "Yes - Saturday 10am works." $ adbdrv ui --text you, Yes - Saturday 10am works. $ adbdrv wait "Yes - Saturday" 10 found after 1.2s
Three moves, on a loop.
An accessibility tree is just text, so an agent can read it. Every element comes back indexed, with its label, its class and the point to tap. The whole method is three moves repeated — and the third one is why it holds up.
-
01
Snapshot
Read every visible control as text. No coordinates guessed from a picture, no image matching that breaks when the theme changes.
-
02
Act
Tap by the label a person would read. Send finds the real Send button, and an exact match beats a substring.
-
03
Verify
Read the screen again and wait for the text you expect. A message that never landed looks exactly like one that did until you check.
[ 12] Marketplace TextView C [ 13] Selling TextView C [ 14] Create new listing TextView C [ 15] Your listings TextView C [ 16] Search ImageButton C $ adbdrv tap "Create new listing" tapped 540,1180 (TextView 'Create new listing')
Your phone, your machines.
Nothing to buy from anyone else and nothing to sign up for. You bring the phone and a computer; both are already yours.
Android 11 or newer
Developer options, USB debugging, and one command to make adb listen on your network. Same device, same account, same apps afterwards.
A Mac or Linux host
The installer brings adb and scrcpy; the driver is one Python file. One host owns the phone, other machines borrow it over an ssh tunnel.
ADBKeyboard
For emoji and accents. adb's own text input is ASCII-only and drops the rest silently. The driver switches this keyboard in, and yours straight back out.
A VPN mesh
A tailnet address is the same at home and on cellular, so the phone stays reachable without putting adb on a public network.
| Android phone, 11+ | 1× |
| Mac or Linux host | 1× |
| ADBKeyboard | optional |
| VPN mesh | optional |
| Second machine | optional |
No phone is included and nothing is hosted. Everything runs on your machines, which is the point.
What it will not do.
Worth reading before you buy, because these do not change with effort — they are how Android and the platforms work.
- Secure windows stay invisibleBanking apps, password managers and payment sheets have no accessibility tree, by design. Those tasks stay manual, and that is the feature.
- The phone has to be awakeA sleeping screen has nothing to read. The agent can wake and unlock it, but a locked phone shows it nothing.
- Driving the phone uses itUnless you use the hidden virtual display — Android 14 or newer with scrcpy 3 or newer — the phone's own screen shows exactly what the agent is doing.
- No app stays automatable foreverIt reads whatever is on screen, so when an app moves its buttons the recipes need updating. The mechanics are the durable part, not the button positions.
- Platforms watch for automationThe bundled skill's caps, human pacing, varied wording and approval gate exist for that reason. They are not optional extras.
- It is not a bypassSame app, same account, same IP, doing what a person would do — which is why it is the safe way round.
Source access, $4.99 once.
- The 22-command driver, one Python file over adb
- Two agent skills: phone mechanics, and Marketplace and Messenger
- An approval gate and volume caps written into the skill
- A reconnect daemon, so a working setup survives a reboot
- Setup, recipes, and a plain account of what touches the network
MIT licensed. Fork it, ship your own variant. Updates arrive by git pull.
One payment. Private repo invite, every update after it.
Buy the sourceNo phone, no hosting, no subscription. The driver talks to your phone over adb and nothing else.