Artemis Control

Artemis is the phone's hands. It drives the Pixel 8a screen from .13 over Tailscale using ADB wireless, so the Hub can do things no deep link allows.

The build spec is AGENTS.md. Follow the phases in section 11 in order.

Status

Phase State
1 — Prove the ADB link ✅ proven — see docs/phase-1-adb-link.md
2 — Act primitives ✅ done — tap by text, type, scroll, back, home, launch
3 — Spotify recipe not started
4 — Song radio not started
5 — Maps recipe not started
6 — Action API not started
7 — Resilience not started
8 — Documentation not started

Layout

cmd/artemis/        command line entry point
internal/adb/       timeout-bounded wrapper around the adb binary
internal/ui/        read the screen (uiautomator dump) and act on it (input)
docs/               phase evidence and notes

Build and test

Go is not installed system-wide on .13; use a one-off nix shell. Nothing is added to nixos-rebuild and no system module changes.

nix shell nixpkgs#go -c go build -o bin/artemis ./cmd/artemis
nix shell nixpkgs#go -c go vet ./...
nix shell nixpkgs#go -c go test ./...

Use

The phone address defaults to 100.101.49.17. Override with ARTEMIS_PHONE, pin a serial with ARTEMIS_ADB_SERIAL, or point at a different adb with ARTEMIS_ADB.

./bin/artemis connect          # scan for the wireless-debugging port, then connect
./bin/artemis devices
./bin/artemis dump             # text nodes and bounds
./bin/artemis launch com.spotify.music
./bin/artemis tap "Search"     # find by text, tap its centre (FR-4)
./bin/artemis type "Rolling Stones Honky Tonk"
./bin/artemis scroll down
./bin/artemis back
./bin/artemis home
./bin/artemis demo             # Phase 2 DoD: launch an app, tap a named element

Rules that the code enforces

  • Find by text, never fixed coordinates. tap resolves a text match to bounds and taps the centre.
  • Never tap blindly. A missing or disabled element is a loud failure, not a guessed coordinate.
  • Wake first. Every acting command wakes the screen (FR-7).
  • Bound every command. No adb call runs without a timeout (FR-11).
Description
Remote phone screen control over Tailscale with ADB.
Readme 322 KiB
Languages
Go 100%