Repository navigation
Android phones: see and control real phones over adb - #143
Merged
Merged
Conversation
A new machine type next to VMs and SSH servers. Godmode finds phones and emulators connected by USB or Wi-Fi (adb), keeps them as records with a name and description, and lets the human assign them to agents and chats. - Core: adb discovery (only while an adb server runs or someone looks), pinned platform-tools install, one record per phone across USB and Wi-Fi, migration 83 (android_devices, android_device_ids on agents and chats). - Agents: android MCP server with screenshot, tap, swipe, scroll, type_text, press_key, ui_elements (tap targets from uiautomator), open_app, list_apps, shell, install_apk, push/pull files, and fill_login / fill_totp when the human allows logins on phones (password fields only, masked afterwards). Manager tools android_devices_list and android_assign; prompt section. - Live view: screenrecord H.264 cut into frames on the host and decoded with WebCodecs (still pictures as fallback); keyframe on join and after drops. - Desktop: Android phones page, full-size remote control (tap, swipe, long press, scroll, keys, typing, hardware buttons, shell), phone panel in chats, phone picker in the composer and the agent form, settings section.
Owners and operators watch and control phones like VMs; phone screenshots stay hidden from viewers, and the Android settings stay on the computer.
danielehrhardt
added a commit
that referenced
this pull request
Oct 11, 2026
Android phones: review fixes that missed #143
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A new machine type next to VMs and SSH servers: Android phones. Godmode finds real phones (and emulators) connected to this computer over adb, by USB cable or Wi-Fi, and agents can fully control the ones they are given. The human watches every phone live and can take over at any time.
What's in it
Phones page (Machines → Android phones,
/android)Remote control (
/android/:id)screenrecordon the phone, cut into frames on the host, decoded with WebCodecs in the app (works in WebKit, so in the Tauri webview). Still pictures as a fallback. A new viewer, a dropped frame or a rotation restarts the stream for a keyframe.adb shellbox, assignments.Agents
androidMCP server for runs with phones (the chat's and the agent's):screenshot,tap,long_press,swipe,scroll,type_text,press_key,ui_elements(texts, buttons and fields with the coordinates to tap, from uiautomator),open_app,list_apps,shell,install_apk,push_file,pull_file,list_devices. Coordinates are pixels of the run's latest screenshot.fill_login/fill_totpwhen the human turns on "Logins and 2FA codes" for phones (vault passphrase, off by default), and only for runs that may reveal secrets: whatever is typed on a phone can be read through its shell, so a fill there is as good as showing the value. Fill-only agents ask the human to sign in on the phone instead. Passwords only go into fields the phone reports as password fields, values go to adb on stdin (not in process arguments on the computer), and anything Godmode typed is masked in later tool output.android_devices_listandandroid_assign(gives a phone to another agent; never to the caller or its own chat). Agents can't set phones through the normal agent API either.Settings → Android phones: on/off, logins and 2FA codes, adb status and install, custom adb path. Android settings and agents' phone assignments are local to each computer (not synced to runners).
Tested
test/android.test.ts(19 tests, fake adb): parsing, discovery and identity across USB/Wi-Fi, assignments, the human's command, every tool path incl. coordinate mapping, gesture-safe scrolling,open_app, fills on password vs. normal fields and masking, prompt, reveal-only fills via stdin, manager self-assignment refused, letterboxed input mapping, folder pulls.pnpm -r typecheckclean.monkeyaborts on devices without hardware keys (now the launcher activity is resolved and started witham start), and full-length scrolls started in the gesture zone and sent the phone home (swipes now stay clear of the edges).Not in this PR
input textcan't type ä/é/emoji; tools and UI say so).