← Projects

Nexus

In daily use

Every AI agent I have running becomes a channel. Nexus is the app I follow them in: on my phone, on Roam Touch at my wrist, and on the Mac. It reaches the hub over Tailscale, so it works from anywhere, and every device stays caught up.

The Nexus Mac app: a sidebar of agent channels and a pinned apps rail, with one channel's conversation open

Nexus on the Mac, mid-conversation with the channel that built this page. Two client channel names are blurred.

The Desk Was Still Winning

Roam got the buttons off the keyboard. Approve, reject, dictate, and a button combo to switch the active pane, so it could juggle several agents at once. The limit was the link. Roam is Bluetooth, so it only works within range of the machine it's paired to. Walk out of the room and the agents carry on without me.

So I stopped treating agents as terminal panes on one computer and started treating them like chat. Each session is a channel. The channels live on a small hub I host myself, and Nexus reaches it over Tailscale from wherever I am. The phone, the wrist and the laptop all see the same channels in the same state.

Every Device, One Log

Underneath is an append-only event log. Everything that happens in a channel gets written down before it is pushed anywhere: what I sent, the agent seeing it, what the agent concluded. Every device is just a view of that log. One that was asleep catches up by event id and never has to poll. Read a message on the laptop and it's read on the phone too, so I can pick up on whichever device is in reach without losing my place.

On my phone
The Android build of Nexus on the phone in my pocket. The same channel list anywhere I have signal, and a notification when an agent I was talking to finishes.
On the wrist: Roam Touch
Roam Touch is the wrist hardware, a 2016 Pixel in a printed bracer, running the same Android build. It's for glancing at while my hands are busy.
On the Mac
A native SwiftUI app with zero third-party dependencies. It shows channels and a pinned apps rail, renders Markdown, has an STL viewer for CAD output, and a watchdog that notices when a laptop lid quietly killed the socket.
Roam Touch, a phone in a printed blue bracer on a forearm, running Nexus

Roam Touch

Nexus is the app. Roam Touch is the thing on my arm that runs it: the prototype wrist display that grew out of Roam. Same channel list, same log, just glanceable while I'm standing up and doing something else.

Rules I Had to Learn the Hard Way

Nothing waits for the agent. An agent turn takes minutes. So every message gets a receipt immediately and an outcome whenever it's ready. It's the same shape as sending a text: “delivered” now, reply later.

Summary first. A 5-inch screen on your forearm is not the place to read a 2,000-word answer. Every outcome leads with one line, and the full text is a tap away.

Don't buzz me for everything. The first version notified on every event and it was unbearable. Now a device only notifies for channels it last spoke to, and never for the one that's already on screen. Everything else is an unread badge. If I asked from my wrist, the answer comes back to my wrist. If I asked from the laptop, the phone stays quiet.

Voice stays in the channel. When I talk, I'm talking into the channel I have open, the same as typing into it. Nothing in the middle guesses where a sentence should go.

The first rule turned out to be the whole design. Once nothing blocks on the agent, it stops mattering where I am when the answer lands. I can walk away and it'll be waiting for me.

Hub
Self-hosted
Network
Tailscale, reachable anywhere
Model
Append-only event log
Phone
Android
Wrist
Roam Touch (Android)
Desktop
SwiftUI, zero dependencies

Where It Stands

The hub and Nexus on my phone, Roam Touch and the Mac are what I use every day. This page was planned and built from a Nexus channel.