Skip to content
Development
Command

/devtool

Drive the Zedra Android UI from the agent via the in-app GPUI devtool HTTP server.

From plugin
zedra
1738 skills8 commands
Install
$ npx -y skills add tanlethanh/zedra --agent claude-code

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/devtool

Context preview

What this command does when you run it.

Drive the Zedra Android UI from the agent via the in-app GPUI devtool HTTP server.

Command definition

devtool.md

Drive the Zedra Android UI from the agent via the in-app GPUI devtool HTTP server.

Use this when you need to reproduce a tap-driven flow (drawer open/close, navigation, button activation) without asking the user to operate the phone. Pairs well with `/perf-debug` and `/android-log` for end-to-end capture.

One-time per session

./scripts/devtool.sh bridge

`adb forward tcp:9777 tcp:9777` + a `/ping` check. Re-run if the device reconnects. Requires the app built with `--devtool` (debug only):

./scripts/run-android.sh --debug --target arm64-v8a --devtool

Driving the UI

./scripts/devtool.sh list                 # leaf-only element table for the current frame
./scripts/devtool.sh tap <leaf>           # synthetic tap by ElementId (bare leaf or full path)
./scripts/devtool.sh tap-xy <x> <y>       # raw logical-pixel coords
./scripts/devtool.sh elements             # raw JSON if you need instance ids or full paths
./scripts/devtool.sh ping                 # liveness only

After each tap, wait ~0.5–1 s before re-querying so the next frame reflects the new state.

Typical loop

1. `scripts/devtool.sh bridge` 2. `scripts/devtool.sh list` — discover targets. 3. `scripts/devtool.sh tap ws-card-0` — navigate. 4. Wait, list again, tap the next target. 5. While iterating, grab logs (`adb logcat`, `scripts/android-perf-debug.py`) to confirm behaviour.

Notes

  • Only elements with `.id("…")` are tappable by name; untagged regions need `tap-xy`.
  • If multiple entries share a leaf, the smallest-area (topmost) wins. Pass the full path to disambiguate.
  • Single-window assumption; first registered window receives all taps.
  • Full surface in `docs/DEVTOOL.md`.
Read more
Ships withzedra

An experimental remote code editor on mobile with GPU-accelerated rendering powered by Zed's GPUI, P2P tunnel over QUIC/UDP by Iroh.

Get the whole plugin
Stats
174
Stars
19
Forks
Active
Maintenance
Rust
Language
MIT
License
7h ago
Last commit
7mo ago
Created

Repo: tanlethanh/zedra