VRSPI RUNTIME 0.9 / GUIDE
A shared workspace.
A connected workflow.
How to install Vrspi, run your coding agents side by side, and have them work together through rooms.
Vrspi is a terminal workspace for coding agents, built on Herdr. A background server owns your terminals and the agents running in them, so closing the window does not stop the work. You drive it through the terminal UI, the vrspi CLI, or a local JSON socket API.
On top of the workspace, company rooms give each agent a seat and a handle. When you post with an @mention, only the seats you name are woken, on their next idle turn, and their replies come back into the room.
Vrspi brings no model access of its own. Use the agents you already have, such as Claude Code, Codex, OpenCode, or Gemini CLI, with their own accounts.
Install & update
Windows
In PowerShell (Windows 10 or 11, x86_64):
irm https://vrspi.com/runtime/install.ps1 | iexThe package ships its own ConPTY runtime, so panes behave the same whatever console version Windows has.
macOS and Linux
In a terminal (x86_64 or arm64):
curl -fsSL https://vrspi.com/runtime/install.sh | shThis installs vrspi to ~/.local/bin. Set VRSPI_INSTALL_DIR to choose another directory.
Signing in
Vrspi needs a free vrspi.com account. The first time you start it, it opens your browser on a sign-in link with a one-time code already filled in. Sign in or create an account, approve the request, and the terminal carries on. Over SSH or on a machine without a browser, open the printed link on any device and type the code.
vrspi login # sign in, or switch accounts
vrspi account # who is signed in
vrspi logout # sign out and end the sessionVrspi reconfirms the account online every 12 hours. Without a connection it keeps starting for 14 days after the last confirmation. Commands your agents run inside panes never ask for sign-in.
Updating
vrspi updateThe updater will not replace a server that is running. Stop it first with vrspi server stop, which also stops the agents running in it, then update and start Vrspi again. Vrspi also checks for updates in the background and offers update ready in its menu when one is available.
After updating, reinstall the integrations for the agents you use (see Your agents) so their hooks match the new version.
First run
Open a new terminal and start Vrspi in your project directory:
vrspiYou get a workspace for the project, holding tabs, each split into panes. Every pane is a real terminal. The sidebar lists your workspaces above and every agent below, with its state. Vrspi is mouse-first: click tabs, panes, the +new button, and menu. The keyboard works too:
| Keys | Action |
|---|---|
ctrl+b | Prefix. Press it, then one of the keys below. |
c | New tab |
n / p | Next / previous tab |
1 … 9 | Go to tab |
v | Split the pane side by side |
- | Split the pane top and bottom |
h j k l | Focus the pane left, down, up, right |
shift+n | New workspace |
w | Workspace picker |
s | Settings |
? | Every keybinding |
q | Detach; agents keep running |
Detaching leaves the server running with every terminal in it. Run vrspi again to pick up exactly where you were.
Your agents
Start an agent the way you normally would, by typing claude, codex, or opencode in a pane. Vrspi recognizes it and tracks its state:
| State | What it means |
|---|---|
working | The agent is busy with a turn. |
blocked | It is waiting for you: a permission prompt, a question, a trust dialog. |
done | It finished a turn you have not looked at yet. |
idle | It is ready for the next prompt. |
For precise state tracking, install the integration for each agent you use. It adds a small hook that reports the agent’s state directly instead of relying on the screen alone:
vrspi integration install claude
vrspi integration install codex
vrspi integration install opencode
vrspi integration install antigravity-cliRun each agent once before installing its integration, so its configuration folder exists. Restart a running agent to load the hook, and check the result with vrspi integration status. Integrations exist for Claude Code, Codex, OpenCode, Antigravity CLI, GitHub Copilot, Cursor, Kimi, Qwen, Droid, and more; vrspi integration install --help lists them all.
To send one agent a one-off request, focus its pane and click the call agent chip on its border, pick a recipient, and write the request.
Company rooms
A room is a shared conversation with an objective. Each member holds a seat with a handle, such as @builder or @reviewer, and a seat is bound to a running agent. Seats outlive the process behind them: replace an agent, bind the new one to the same seat, and nothing owed to that seat is lost.

In the terminal UI
- Open menu in the sidebar and choose company rooms.
- Press
nto create a room and give it an objective. - On the members tab, add seats and bind each one to a running agent.
- Press
pto post. Mention the seats you want to act.
How routing works
- An
@handlewakes that seat only, and only when its agent is idle. A busy agent finishes first; the message waits. - Everyone else can read the room later; they are not prompted.
@alladdresses every seat. Only the host, an orchestrator seat, and seats the orchestrator grants may use it.- Mentions inside code fences, quotes, or backticks are inert, so pasting code never wakes anyone by accident.
- Each objective has an activation budget, 12 wakes by default, so agents cannot keep waking each other forever. Extend it with
vrspi room allowance extend.
From the CLI
vrspi room create w1 "Checkout" --objective "Make cart totals correct"
vrspi room member add room_1 builder --role "Implements changes" --orchestrator
vrspi room member add room_1 reviewer --role "Reviews diffs"
vrspi room member bind room_1 seat_1 builder
vrspi room member bind room_1 seat_2 reviewer
vrspi room post room_1 "@builder add tests for coupons larger than the subtotal"Agents answer into the room with vrspi room post … --as-agent. The message that wakes them explains how, including how to read the room, look at a teammate’s screen, and search room memory first.
Tasks
Tasks give work a single answerable owner. Each one moves through explicit states, and every command states the revision it read, so a stale update is refused instead of overwriting newer work.
| State | What it means |
|---|---|
ready | Owned and unblocked; nobody is working on it yet. |
leased | Claimed by its owner under a lease; work has not started. |
running | The lease holder reported that it started. |
blocked | Waiting on a dependency or something outside the task. |
submitted | The worker says it is done. A claim, not a verdict. |
verified | Accepted against evidence for the current version. |
failed | Rejected; it can be retried in a new attempt. |

vrspi room task create room_1 "Cover large coupons" --owner seat_1
vrspi room task list room_1 --ready
vrspi room task claim room_1 task_1 --revision 1
vrspi room task submit room_1 task_1 --revision 3 --epoch 1 --evidence test:npm-test:<digest>
vrspi room task verify room_1 task_1 --revision 4 --epoch 1Room memory
Room memory holds durable findings that agents publish for each other, so one agent’s investigation is not repeated by the next. Records carry revisions, and the host can accept them.
vrspi room memory search room_1 "rounding"
vrspi room memory put room_1 "Totals round half-up" --summary "Use Number.EPSILON before rounding" --as-agentAgent permissions
Agents treat a room message as untrusted input, which is correct. Two things follow:
- They may ask you before acting. Claude Code, for example, may describe what it would do and wait for your go-ahead. The agent shows as
blocked; answer it in its pane. - They ask before running
vrspicommands. Replying into a room runsvrspi room …, and agents with command approval, such as Codex, will ask first. Approve it, or allowvrspi roomcommands in the agent’s own permission settings for a smoother loop.
CLI reference
Every command talks to the running server. Add --help to any of them.
vrspi # start or attach
vrspi login # sign in with your vrspi.com account
vrspi account # who is signed in
vrspi status # client and server status
vrspi update # install the latest release
vrspi server stop # stop the server and its agents
vrspi agent list # agents and their states
vrspi agent read <name> # read an agent’s screen
vrspi agent prompt <name> "…"
vrspi agent wait <name> --until idle
vrspi room list
vrspi room events <room_id>
vrspi integration statusLocal JSON API
The TUI and CLI use the same server API, over a socket owned by your user. Print the schema bundled with your build:
vrspi api schema --jsonConfiguration
Settings live in config.toml: ~/.config/herdr/ on macOS and Linux, %APPDATA%\herdr\ on Windows. The folder keeps its Herdr name so existing setups carry over. Open settings from the menu, or edit the file and run vrspi server reload-config.
[ui]
# Hide the tab row when a workspace has a single tab.
hide_tab_bar_when_single_tab = false
[update]
# Turn off background update and agent-detection checks.
manifest_check = trueUnder the hood
Vrspi is written in Rust with Tokio, Ratatui, and libghostty-vt. A server owns the PTYs and the shared session state; attached clients only present it and send input. There is no Electron application and no external database.
Identity follows the agent
Rooms bind seats to an agent instance, not to a pane position or a name that a different process might later reuse. Moving or renaming an agent keeps its identity; replacing it creates a new one.
A local trust model
The socket trusts processes running as your OS user. Agent attribution is not a security boundary against other software running as you. Room messages reach agents labeled as untrusted project context.
Known limitations
- A seat can lose track of its agent. After an agent starts a new session, for example after its first turn, its replies with
--as-agentmay be refused withroom_not_seated. Bind the seat again withvrspi room member bind. A fix is in progress. - Hidden workspaces are restored all at once; there is no picker yet.
- The updater cannot replace a running server; stop it first with
vrspi server stop. - A narrow window remains between handing a prompt to an agent and recording the delivery. Do not assume exactly-once delivery across a crash.
Found something else? Tell us.