.github
rebrand: codegent → rvmp everywhere (bare npm name, rvmp binary/service/data-dir, rv|mp wordmark, v1.0.1); domain flips to rvmp.ai separately
apps
test: add showcase screenshot QA script
docs
assets: rebrand demo gif + heroes + og to rvmp (take-08, full review-loop world)
packages
fix foundational project workflows
scripts
rebrand: codegent → rvmp everywhere (bare npm name, rvmp binary/service/data-dir, rv|mp wordmark, v1.0.1); domain flips to rvmp.ai separately
vendor
feat: vendor ghostty-web from source (pinned main) + spike findings
.gitignore
rebrand: codegent → rvmp everywhere (bare npm name, rvmp binary/service/data-dir, rv|mp wordmark, v1.0.1); domain flips to rvmp.ai separately
.gitmodules
feat: vendor ghostty-web from source (pinned main) + spike findings
bun.lock
fix foundational project workflows
bunfig.toml
chore: make bare bun test skip vendored ghostty-web tests
CLA.md
rebrand: codegent → rvmp everywhere (bare npm name, rvmp binary/service/data-dir, rv|mp wordmark, v1.0.1); domain flips to rvmp.ai separately
CONTRIBUTING.md
chore: v1.0.0 — license, CLA, contributing, multi-target release packaging
LICENSE
chore: v1.0.0 — license, CLA, contributing, multi-target release packaging
package.json
rebrand: codegent → rvmp everywhere (bare npm name, rvmp binary/service/data-dir, rv|mp wordmark, v1.0.1); domain flips to rvmp.ai separately
README.md
fix foundational project workflows
tsconfig.base.json
chore: wire per-package typecheck

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 | sh

One 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| B

So 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

AgentTierHow
Claude Codepremiumnative hooks + MCP task tools — deepest integration
Codexpremiumofficial hooks + MCP task tools
Gemini CLIuniversalcontent-free detection + MCP where supported
Goose · OpenCode · Aider · Ampuniversalcontent-free detection
anything else recognizableuniversaldetection manifests — add agents without core PRs

How it compares

rvmpVibe KanbanConductor / Orcatmux + discipline
Browser UI — use from any device✅✅❌ (native app)❌
Any agent CLI✅ universal tierpartialsingle-vendor focus✅ (by hand)
Real PTY terminals✅❌ (protocol-rendered chat)✅✅
Waiting-for-input detection✅ content-freepartial✅❌
Review: diff + comments + stale tracking✅basicpartial❌
LicenseAGPL-3.0Apache-2.0proprietary—

(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.1 with 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 snapshot

Roadmap

  • 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