GitHub - elliotgao2/handsets: A high-performance Android control CLI, built for agents and humans · GitHub
/" data-turbo-transient="true" />
Skip to content
Search or jump to...
Search code, repositories, users, issues, pull requests...
-->
Search
Clear
Search syntax tips
Provide feedback
--><br>We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel
Submit feedback
Saved searches
Use saved searches to filter your results more quickly
-->
Name
Query
To see all available qualifiers, see our documentation.
Cancel
Create saved search
Sign in
/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up
Appearance settings
Resetting focus
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
elliotgao2
handsets
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star
main
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>6 Commits<br>6 Commits
.github/workflows
.github/workflows
docs
docs
handsets-cli
handsets-cli
handsets-viewer
handsets-viewer
src/dev/handsets/daemon
src/dev/handsets/daemon
.gitignore
.gitignore
README.md
README.md
build.sh
build.sh
install.sh
install.sh
logo.svg
logo.svg
View all files
Repository files navigation
The device control plane you wished adb was.
$ hs # list devices<br>$ hs use # connect, start daemon, mirror state<br>$ hs info # neofetch-style snapshot (2 ms)<br>$ hs see x.jpg # screenshot — 100× faster than adb<br>$ hs find 'TextView[text~=Login]' # CSS-like selector over the live tree<br>$ hs open com.foo/.MainActivity && hs wait com.foo<br>$ hs type "EditText" "user@example.com" # ACTION_SET_TEXT, no virtual keyboard<br>$ hs do 'EOF' # persistent shell — many cmds, one socket<br>tap_and_dump x=540 y=1500 idle_ms=200<br>EOF
Install
curl -fsSL https://raw.githubusercontent.com/elliotgao2/handsets/main/install.sh | bash
macOS and Linux. Pin a version with HANDSETS_VERSION=v0.1.0 …. Then<br>hs use against a connected device.
Build from source<br>git clone https://github.com/elliotgao2/handsets && cd handsets<br>./build.sh # daemon jar<br>cargo build --release --manifest-path handsets-cli/Cargo.toml # `hs`<br>cargo build --release --manifest-path handsets-viewer/Cargo.toml # `hs see` GUI (macOS)<br>ln -s "$PWD/handsets-cli/target/release/hs" /usr/local/bin/hs
Verbs
Devices
hs list attached devices<br>hs use [SERIAL] connect; auto-spawns the state mirror<br>hs drop [SERIAL] [--keep-jar] disconnect
Inspect
hs info neofetch-style snapshot (2 ms, from local cache)<br>hs see live viewer (Metal + VideoToolbox H.264)<br>hs see foo.{jpg,png,xml,json} capture, format by extension<br>hs ui [-i|--json|--xml] [--all] UI tree dump — `-i` filters to readable<br>interactive elements only (flat columnar)<br>hs find SELECTOR CSS-like: Tag[attr=val]:flag, comma = OR<br>hs show [top | PKG] device state | top activity | package info<br>hs apps [--3rd] installed packages
Activity
hs open COMPONENT start activity<br>hs close PKG force-stop<br>hs install APK [APK …] streamed PackageInstaller, multi-APK<br>hs uninstall PKG
Input
hs tap "Login" | X Y text-lookup or coords<br>hs type TEXT KeyEvents to the focused field<br>hs type SELECTOR TEXT ACTION_SET_TEXT — atomic, bypasses the IME<br>hs go back | home | recents | … key events<br>hs swipe left|right|up|down [DUR_MS] 80% screen swipe (daemon picks coords)<br>hs swipe X1 Y1 X2 Y2 [DUR_MS]
Sync
hs wait idle [Nms] | TEXT | PKG | Nms event-driven, no polling<br>hs cp device:src dst | src device:dst scp-style file transfer
System
hs prop [KEY [VAL]] bare = list all; KEY = get; KEY VAL = set<br>hs settings [NS [KEY [VAL]]] bare = list all 3; NS = list one;<br>NS KEY = get; NS KEY VAL = set
Diagnostics
hs logs [--tail N | --follow] logcat (default last 100)<br>hs events lifecycle stream (am monitor)
Shell
hs shell interactive REPL (history, built-ins,<br>unknown verbs fall through to /system/bin/sh)<br>hs do [WIRE] same REPL, or one-shot raw wire
Docs
Architecture
Benchmark
Sharp edges
About
A high-performance Android control CLI, built for agents and humans
Resources
Readme
Uh oh!
There was an error while loading. Please reload this page.
Activity
Stars
star
Watchers
watching
Forks
forks
Report repository
Releases
v0.1.2
Latest
May 21, 2026
Packages
Uh oh!
There was an error while loading. Please reload this page.
Contributors
Uh oh!
There was an error while loading. Please reload this page.
Languages
Java<br>49.8%
Rust<br>48.8%
Shell<br>1.4%
You can’t perform that action at this time.