Vectrum
Sign In
61 lines · 3.4 KB

Vectrum Code for Android

A companion app for Vectrum Code: the desktop's projects and threads on a phone, in the desktop's look and themes. It's a remote client like another desktop: threads run on the computer, with its agents, files, terminals and devices.

Pairing

On the computer, open Settings → Connections and turn on Allow remote connections. Then, on the phone, scan the QR code shown under Pairing code, or paste the code (192.168.2.10:47823/<key>). A vectrum://… link pairs too. Several computers can be paired; their threads share the sidebar, tagged with each one's name. The connection isn't encrypted, so pair on networks you trust or over a VPN such as Tailscale or WireGuard.

What it has

  • The sidebar's inbox: pinned and active threads, the Working, Snoozed and Settled shelves, search, the project filter, and the thread menu on a long press (pin, settle, snooze, wake, rename, copy, delete) with the desktop's undo notices.
  • The transcript: Markdown, tool calls folded into Worked for rows, subagents, plans, questions, the changed-files card and the diff view.
  • The composer: model, reasoning and access pickers from the computer's agents, attachments, the / menu, steering and queueing, and the dock for approvals, questions, plans, queued messages, background tasks, usage limits and the task list.
  • New threads on any paired computer's projects, in the current checkout or a new worktree, and adding projects (a folder there, a new one, or a clone).
  • Settings: the computer's environment settings (with project overrides), Appearance with every theme family, Providers, Source Control, Connections, Archive and About.
  • The right panel: subagents, terminals (shells on the computer, in the thread's folder, with an extra-keys row) and the Device panel (the computer's emulators and simulators, streamed and controlled from the phone).

Left out because the remote connection doesn't carry them: the browser panel, usage reports, @ file mentions, editing providers and starring models.

Build

./gradlew :app:assembleDebug        # app/build/outputs/apk/debug/app-debug.apk
./gradlew :app:testDebugUnitTest

JDK 21 and the Android SDK (platform 37) are needed; point local.properties at the SDK (sdk.dir=…) or set ANDROID_HOME.

Layout

  • net/: the desktop's remote protocol (Protocol.kt, mirroring src/remote/mod.rs) and the WebSocket that keeps a host connected (Connection.kt).
  • data/: the app's state as Compose state: paired hosts, their projects, threads and open transcripts (AppState.kt), and this phone's own preferences (DevicePrefs.kt).
  • theme/: MetalUI. Palette.kt reads assets/themes.json, which the desktop exports (cargo test export_android_themes -- --ignored), so every theme matches it exactly; Metal.kt has the surfaces (raised, well, plate, with the desktop's layered shadows), caps, switches, LEDs, keycaps and engraved labels.
  • ui/: sidebar/, chat/ (header, transcript, Markdown), composer/ (composer, pickers, dock, start screen), diff/, settings/, pair/ (pairing, adding projects), panels/ (right panel, subagents, command palette), terminal/ and device/.
  • term/: the terminal emulator the terminal panel draws.
  • scripts/lucide.py: turns the desktop's Lucide icons into vector drawables (icons.txt lists the ones in use).