{"repo":"elliotgao2/handsets","free":true,"listed":false,"github":"https://github.com/elliotgao2/handsets","clone":"git clone https://github.com/elliotgao2/handsets.git","description":"A high-performance Android automation CLI, built for agents and humans","language":"Rust","stars":106,"topics":["ai-agents","android","cli","rust"],"license":"MIT","category":"mobile-apps","readme_excerpt":"Drive Android from the shell, in milliseconds. One jar; no app, no root. --- ui → label → tap → wait . Pipe hs ui into a model, take the label, hand it back. Raw screenshot defaults to 768px-long-edge JPEG, the fast agent path; hs see out.jpg saves a native-resolution export unless you pass --size 768 . Use WebP for compact lossy exports and PNG only for debug/lossless files. Handsets adb shell uiautomator2 Appium --- --- --- --- --- Single-call latency 2–7 ms 40–700 ms 30–100 ms 100–500 ms Find by label, not coords yes no yes yes On-device install 1 jar ( few hundred KB) none 2 APKs + atx-agent driver APK + Node server Wire TCP, length-prefixed binary ADB protocol HTTP/JSON WebDriver Driven from any language via subprocess shell / subprocess Python only multi-lang via WebDriver Reproduce with hs bench -n 50 ; methodology in docs/benchmark.md. uiautomator2 and Appium ship things Handsets doesn't — recorders, pytest plugins, HTML reports, iOS support. Handsets is the lean CLI for tap-heavy work where per-call cost matters. hs tui — drive any Android app from your keyboard A live, video-stream terminal UI of the device's interactive elements. A background watcher polls the accessibility tree at 10 fps, so the list on screen is the live state of the device — no manual refresh, no waiting for idle, no race between tap and re-dump. - One screen for the whole flow. ↑↓ / jk to move, Enter to tap a Button or open an input modal for an EditText, PgDn/PgUp or Shift+J/K to swipe, ← / Es","default_branch":null,"files":null,"tree":[],"storefront":"/r/elliotgao2","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/elliotgao2/handsets/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}