loupe
One binary that streams Android phones, emulators and iOS simulators to a browser, and gives coding agents the device: the UI tree, input, screenshots, logs and installs. Handset is built on it.
Install
brew install bmcreations/tap/loupe
brew services start loupe
open "http://localhost:18456/?token=$(cat ~/Library/Caches/loupe/token)"iOS simulators also need simcap, built with your own Xcode:
brew install --HEAD bmcreations/tap/simcap && brew services restart loupeHandset installs both for you, so skip this if you're using the app.
Streams devices
Android phones over adb, every installed AVD (booted on open, paused when idle), iOS simulators through simcap, and the devices on your other machines as peers.
Feels like the device
WebTransport with a WebSocket fallback and adaptive bitrate. Multi-touch, hardware buttons, the clipboard both ways. Add it to your Home Screen and it runs full screen.
Gives agents the device
The accessibility tree with a tap point per node, tap by text or id, swipes, keys, deep links, screenshots, APK install, logs and crashes. On a debuggable Compose app, each node names its composable and source line.
Shares it with you
Claims, the human hold and flags let you and an agent work on the same device without stepping on each other.
Fits CI
A GitHub Action installs a pull request's APK on a device and comments on the PR with a link that opens it.
Records
Writes the encoder's output to an MP4, with no re-encode.
Want it as a Mac app?
Handset adds native panes, agent cursors with take-over and hand-back, the Mac's camera, and the tool window.
See Handset