ompdesk

Browser workspace for omp

The agent runs in the terminal. You watch from a browser.

ompdesk reads the sessions the omp CLI already writes and runs omp's own SDK in the same process. Start a run at the terminal, pick it up in a tab, or follow a long job from your phone over a private network.

$ bunx ompdesk@latest
Source on GitHub

Then open 127.0.0.1:30141. The launcher opens the tab once the server is ready.

terminal · omp
$ omp
> refactor the session loader into a hook
· read components/SessionList.tsx
· edit hooks/useSessions.ts
> keep the fork tree working
· run tests
browser · ompdesk
refactor the session loader into a hook
✓ read components/SessionList.tsx
✓ edit hooks/useSessions.ts
keep the fork tree working
· run tests
The same session in two clients. The browser reads and drives the one omp already has; nothing is copied.

What changes when the tab is open

01 / why
Sessions

The same session

A conversation started at the terminal continues in the browser, and the reverse. Settings, model roles, credentials, skills, plugins and MCP configuration come from the same ~/.omp/agent directory omp already uses.

Chat

A run you can leave

Text, thinking, tool calls and results stream over server-sent events. Queue a follow-up, steer the run, stop it, compact the context or rewind the last turn. Background runs notify you when they finish.

Boundary

Loopback by default

The server binds 127.0.0.1 and ships a password lock. Remote access is meant to go through a private network such as Tailscale, not an open port.

What is in the workspace

02 / features

Sessions and projects

Browse every project omp has a session for, pin and sort them, follow forks as a tree, and rename, archive or delete sessions. Archived sessions stay on disk.

Model roles

default, smol, slow, vision, plan, commit, tiny, memory, task and advisor. Assign a model to each role; the CLI reads the same record.

Files and Git

An explorer with diffs, Markdown including Mermaid and KaTeX, images, PDF and DOCX. Git lists working tree changes against HEAD and opens a per-file diff.

Subagents and map

Watch running and finished subagents with their live transcript, then open the conversation map for a per-turn view and fork from any turn.

Chat controls

Slash commands, @ file mentions, image drops, plan approvals, goal mode with a token budget, prompt history and a reasoning level per session.

On a phone

Install the interface as a PWA. The layout and hit targets adapt to small screens, so a long run is readable from a phone over a tailnet.

Run it

03 / install

Latest published version

$ bunx ompdesk@latest

Opens http://127.0.0.1:30141. Requires Bun 1.3.14 or newer.

Global install

$ bun add -g ompdesk
$ ompdesk

The launcher locates a Bun runtime and runs the server there. npm works too.

Docker

$ OMPDESK_PASSWORD='…' docker compose up --build

The port is published on loopback only; the omp home is mounted so terminal sessions stay visible.

Remote, without opening a port

$ tailscale serve --bg --tcp=30141 tcp://localhost:30141

Then open the tailnet address from the phone and sign in as omp.

The port is the trust boundary

Whatever can connect to the port can read files, run commands and spend model credits. ompdesk refuses a non-loopback listen address unless a container sets the override.

Basic Auth is available for every page and API route. The password is stored as a scrypt digest with mode 0600; the plaintext is never written.