You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Spawn and manage multiple TUI applications in pseudo-terminals. Interact via terminal passthrough, snapshot capture, HTTP API, or WebSocket for multi-client real-time access.
Quick Start
# Start service manager
pnpm dev -- --serve --port 3000
# In another terminal:
pnpm dev -- --start htop # spawn htop
pnpm dev -- --list # list running apps
pnpm dev -- --connect # connect to first app
pnpm dev -- --kill <id># kill app by ID
Modes
Mode
How
Description
Serve
--serve
Multi-app service manager (HTTP + WebSocket)
Start
--start <cmd>
Spawn new TUI app via service manager
List
--list
List all running apps
Kill
--kill <id>
Kill app by ID (supports short IDs)
Connect
--connect [id]
Connect to app interactively
Interactive
<cmd>
Run command directly (no server)
Snapshot
--snapshot
Capture buffer and exit
Flags
Flag
Default
Description
--serve
—
Start service manager
--start <cmd>
—
Spawn new app (requires running server)
--list
—
List running apps
--kill <id>
—
Kill app by ID
--connect [id]
—
Connect to app (default: first)
--port <n>
3000
Server port
--host <addr>
127.0.0.1
Bind address
--cols <n>
400
Terminal width
--rows <n>
40
Terminal height
--cwd <dir>
current
Working directory
--term <name>
xterm-256color
Terminal type
--snapshot
—
Snapshot mode (direct only)
--color
—
Preserve ANSI codes
Examples
# Service manager workflow
pnpm dev -- --serve --port 3000 # start manager
pnpm dev -- --start htop # spawn htop
pnpm dev -- --start top # spawn top
pnpm dev -- --list # list apps
pnpm dev -- --connect # connect to first app
pnpm dev -- --kill abc123 # kill by short ID# Direct mode (no server)
pnpm dev htop # run htop directly
pnpm dev vim file.txt -- --snapshot # snapshot and exit
Multi-App Workflow
# Terminal 1: start service manager
$ pnpm dev -- --serve --port 3000
PTY service manager listening on http://127.0.0.1:3000
Endpoints:
GET /apps — list all running apps
POST /start — spawn new app
POST /kill — kill app
GET /app/:id/snapshot — get app snapshot
WS ws://127.0.0.1:3000/app/:id — WebSocket for real-time I/O
# Terminal 2: spawn apps
$ pnpm dev -- --start htop --port 3000
Started app: 3b1a8fd4 (pid: 12345)
$ pnpm dev -- --start top --port 3000
Started app: 7c2e9af1 (pid: 12367)
$ pnpm dev -- --list --port 3000
Running applications:
3b1a8fd4 htop pid:12345 400x40 5s
7c2e9af1 top pid:12367 400x40 2s
# Terminal 3: connect to htop
$ pnpm dev -- --connect 3b1a8fd4 --port 3000
Connected to app 3b1a8fd4 at ws://127.0.0.1:3000
# Terminal 4: another client connects to same htop
$ pnpm dev -- --connect 3b1a8fd4 --port 3000
Connected to app 3b1a8fd4 at ws://127.0.0.1:3000
Both Terminal 3 and 4 see the same htop screen. Either can type — all clients see the result.