roamcode.ai

sessions · automations · agents

Run the real Claude Code or Codex TUI on your machines and control every persistent Session from any browser. Your files, hardware, and CLI login stay on the Node — direct, self-hosted, or through an optional end-to-end encrypted relay.

You started a 40-minute refactor. Now you have to leave. Your agent shouldn't notice.

one control plane

Three places. No dashboard scavenger hunt.

The product follows the way the work actually runs: Sessions are the work, Automations repeat it, and Agents shows which runtime on which Node can execute it.

01

Sessions

Every live provider TUI, its machine, working directory, safety posture, and status. “Needs input” opens the real prompt.

02

Automations

Pin a task to one exact Node and runtime. Every Run creates a new persistent Session you can inspect or continue.

03

Agents

See each Node and its concrete Claude Code or Codex runtime, authentication, availability, version, and active work.

playground

This is what your pocket sees.

A Claude Code replay — same renderer the app ships (xterm.js), same key bar. Codex uses its own real TUI too.

roamcode — ~/dev/api — claude

Replay, not a sandbox — this demo is Claude Code; the real app attaches to your selected provider on your machine. Sessions run in tmux: close the tab, land at your desk, pick up mid-thought.

ergonomics

A terminal you can drive by thumb.

Termux-style key bar — Esc, Tab, arrows, a sticky Ctrl that turns your next tap into a chord. Two fingers scroll the transcript. Tap-to-select copies.

Full-screen TUIs are miserable on glass. This is the part everyone else skipped.

✳ Welcome to Claude Code!
────────────────────────
make the auth flow not suck
⏺ Reading src/auth/…
⏺ Edit(login.ts) +22 -9
Simmering… (↓ 3.2k tokens)
esctabctrl

splits

iTerm2 splits, in a browser tab.

On desktop, drag Claude or Codex sessions into panes. Three agents on three repos, one glance. Each pane is a live session — not a screenshot of one.

roamcode — workspace
api · working
migrate the webhook queue
⏺ Write(queue.ts)
Churning… ↓ 8.1k
web · needs you
Do you want to proceed?
1. Yes 2. No
infra · idle
✓ 34 tests passed

presence

Know when an agent needs you.

The rail reads each session's screen: working, blocked on you, done. Push notifications deep-link straight into the session that asked.

Walk away. The phone buzzes only when your hands are actually required.

ROAMCODE

Codex is waiting

api — “Do you want to proceed?”

sessions
api ↓ 8.1k tokens
web waiting 2m
infra done 14:32
blog done 11:05

trust

A local-first control plane.

Execution, source code, provider credentials, and terminal state stay on your Nodes. Connect directly, operate the relay yourself, or use an optional hosted blind relay without handing it terminal plaintext. Provider CLIs continue to use their normal provider services.

Your existing CLI login

Drives Claude Code or Codex on your host. RoamCode never asks you to upload an API key.

Token auth + origin guard

32-byte access token, CSWSH-safe WebSockets, rate limiting. Public exposure is your explicit choice.

Blind relay, when you need it

Outbound-only routing carries bounded end-to-end encrypted frames; the relay cannot read terminal content.

MIT, readable in an afternoon

Small TypeScript monorepo. The security-relevant paths are documented and tested.

install

Sixty seconds to your first remote session.

needs macOS or Linux · Node ≥ 24 · tmux · Claude Code or Codex — prints a connect link for your phone. Manual path →