Control Roomterminal multiplexer
Self-hosted · terminal-first · PWA

Your terminal sessions,
attached from anywhere.

Control Room turns one machine into a browser-accessible terminal workspace: persistent PTYs, multi-pane sessions, reconnect, workspaces, and mobile controls—without turning the terminal into a control-plane platform.

  • 01 Browser + installed PWA
  • 02 Node 22 + node-pty
  • 03 Loopback-only agent
vps.rahmanef.com
● live
Control Room
TerminalViewWindow
3 live
Default 2 Production 1 Research +
shell × codex ×
•••
shell ~/projects/control-room 24ms
Stream connectedSSE + WS bridge
Installabledesktop + mobile PWA
Persistent PTYdetach browser, keep process
Self-hostedyour host, your terminal state
Mobile firstsafe areas + soft terminal keys
MIT licensedsource available on GitHub
01 / Why

tmux's persistence.
A browser's reach.

The terminal is already the universal interface for developer tools. Control Room does not replace it—it makes terminal sessions easier to keep alive, organize, and reconnect to from the devices you already use.

Close the browser ≠ kill the process.

02 / Features

Terminal workflow, not platform bloat.

Every surface exists to improve creating, organizing, reconnecting to, or interacting with terminal sessions.

01

Persistent terminal sessions

Close the browser and come back later. The host-side PTY keeps the process alive and reconnectable.

02

Workspaces + multi-pane views

Group shells by context, switch between focused and grid layouts, and keep many live sessions organized.

03

Reconnect-first UX

Reconnect buffers, stream state, terminal history, and restore flows are designed around interrupted browser sessions.

04

Desktop and mobile

Dense desktop app chrome, safe-area-aware mobile layouts, soft terminal keys, fullscreen, and PWA installation.

05

CLI-native by design

Shell, SSH, Codex, Claude, Gemini, OpenClaw, or any normal CLI remain terminal processes—not a parallel orchestration layer.

06

Small security boundary

The browser talks to SvelteKit; privileged PTY operations stay in a loopback-bound Node host agent.

03 / Architecture

A deliberately small trust boundary.

Browser JavaScript never owns the privileged host secret. SvelteKit authenticates and bridges requests; the host agent stays loopback-bound and owns PTY operations.

  • Human browser session and machine gateway secrets are separate.
  • Interactive shells do not inherit Control Room master secrets.
  • AI CLIs remain ordinary terminal processes with their own auth and tools.
01Browser / PWA

Responsive terminal UI · HTTPS · SSE

02SvelteKit frontend

Auth boundary · server-side proxy · stream bridge

03Node 22 host agent

Loopback-only · PTY lifecycle · bounded host helpers

04node-pty

Shell · SSH · AI CLI · any terminal process

04 / Interface

Dense on desktop. Focused on mobile.

One terminal product, two interaction densities—without maintaining a second UI architecture.

Desktopmulti-bar app chrome · dense terminal stage
Control Room desktop terminal workspace with menu bar, workspace rail, session toolbar, and terminal stage
Mobileswipe rails · safe-area · action sheets
Control Room mobile terminal workspace with compact navigation and terminal controls
05 / Product rule

The terminal stays the product.

Control Room deliberately stops before becoming a generic operations dashboard.

Not acredential manager
Not abrowser automation engine
Not acron / job orchestrator
Not adeployment platform
It isa better way to attach to terminals
Ready when the shell is.

One host. Your sessions.
Any screen.

Keep the terminal. Upgrade the way you attach to it.