rvmp
Your coding agents, on a board. Access from anywhere.
A self-hosted, browser-based orchestrator for Claude Code, Codex, Gemini CLI and any other agent CLI — real terminals, a kanban board that routes attention, and a review flow with real diffs. Open it from any device. No accounts. No telemetry.
Install
curl -fsSL https://codegent.io/install | shOne command: binary → PATH → user service → the board opens at localhost:4666.
Add a project, drop a task card, watch an agent pick it up in a real terminal,
answer its questions in that terminal, review the diff, merge. macOS + Linux
(WSL: same script).
Why rvmp
Every agent vendor ships a UI for their agent. rvmp is the opposite: every agent, one board, your hardware, your subscriptions — a self-hosted web app, so the same board follows you from desk to laptop to phone.
- A board that routes attention. queue → running → waiting-for-input → review → done. Auto-start with a worker limit; drag to reorder; cards carry state + elapsed time, never chat.
- Real terminals. Every agent runs interactively in its own PTY, streamed to the browser with scrollback that survives restarts. Open up to four resizable row/column panes; layouts persist per project and sessions can be renamed or terminated.
- Explicit execution policy. Keep the native sandbox, use normal approval prompts, or
select YOLO / host for Claude (
--dangerously-skip-permissions) and Codex (--dangerously-bypass-approvals-and-sandbox). Project defaults and queued-task overrides never mutate an already-running attempt. - Safe project lifecycle. A remote-safe directory browser and two-step setup replace raw path guessing. Removing a project detaches rvmp history without deleting the repository, branches, or worktree directories.
- Notifications that survive closed tabs. Opt-in Web Push is delivered by the daemon through a service worker for waiting, error, and review-ready state entries.
- Review like you mean it. File-by-file diff with viewed-marks, queued line comments
sent back to the agent in one batch, stale/conflict tracking when the base moves,
squash/merge/rebase, PR tracking via
gh.
The part nobody else does: content-free agent detection
rvmp knows an agent is working / stuck / waiting for you without ever reading your terminal's content out of the terminal. State comes from deterministic signals only — process-tree identity, OSC title/progress codes, screen-region manifests, and the agent's own done-declaration over MCP:
flowchart LR
B[browser board] <-->|state enums only| D[daemon]
D <--> P[PTY per agent<br/>real terminal]
D --> DET[detection<br/>process tree · OSC · manifests]
A[agent CLI] -->|MCP task_complete| D
DET -.->|never terminal content| BSo the board can tell you "waiting for input · 4m" — and clicking always lands you in the terminal where the actual question lives. Surfaces show state and elapsed time, never scraped text. That's a principle, not a feature flag.
Agents
| Agent | Tier | How |
|---|---|---|
| Claude Code | premium | native hooks + MCP task tools — deepest integration |
| Codex | premium | official hooks + MCP task tools |
| Gemini CLI | universal | content-free detection + MCP where supported |
| Goose · OpenCode · Aider · Amp | universal | content-free detection |
| anything else recognizable | universal | detection manifests — add agents without core PRs |
How it compares
| rvmp | Vibe Kanban | Conductor / Orca | tmux + discipline | |
|---|---|---|---|---|
| Browser UI — use from any device | ✅ | ✅ | ❌ (native app) | ❌ |
| Any agent CLI | ✅ universal tier | partial | single-vendor focus | ✅ (by hand) |
| Real PTY terminals | ✅ | ❌ (protocol-rendered chat) | ✅ | ✅ |
| Waiting-for-input detection | ✅ content-free | partial | ✅ | ❌ |
| Review: diff + comments + stale tracking | ✅ | basic | partial | ❌ |
| License | AGPL-3.0 | Apache-2.0 | proprietary | — |
(Honest table: Vibe Kanban pioneered the kanban framing; Orca's terminal UX is excellent. rvmp exists for the combination: any agent + real terminals + review flow, reachable from any browser.)
Access from anywhere
- Point your own tunnel (Tailscale / cloudflared /
ssh -L) at the daemon and the full board — live terminals included — works from any browser, phone included: docs/expose-safely.md. No third-party relay in the path. - By default it binds
127.0.0.1with a per-install token — nothing listens on your network until you decide it should. - No telemetry. It phones home for nothing.
- Agent worktree bootstrap (copy-globs + setup scripts) is containment-checked; terminal content never crosses to any UI surface.
CLI
rvmp start + open the board
rvmp task add "…" queue a card from your shell
rvmp doctor git, agents, port, service checks
rvmp service enable keep it running (launchd / systemd --user)
rvmp restore <backup> verify and restore an offline database snapshotRoadmap
- v0.4 — plugins: TOML agent-adapter manifests (community agents without core PRs), event hooks/automations, palette commands.
- Installable/offline mobile PWA · richer diff (interdiff, thread resolution) · plugin panes.
Contributing
bun install && bun test — 500+ tests, real-git integration suites included.
See CONTRIBUTING.md; PRs accept the CLA.
Built with Bun, ghostty-web, and TypeScript.
If rvmp is useful to you, a star genuinely helps other people find it. ★
AGPL-3.0 · self-hosted · terminal content never leaves the terminal