Vectrum
Sign In
61 lines · 3.4 KB
# Vectrum Code for Android

A companion app for [Vectrum Code](../README.md): 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

```sh
./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).