One server on your machine, two ways in, and every agent's state at a glance.
spacesStarts the server in the background if it is not running, then opens the client. Prebuilt for Linux, macOS and Windows; works over SSH.
Every space with its agents’ combined state and, for a git repository, its branch, ahead/behind counts and a dirty marker. Below it, every agent: blocked, working, done or idle.
The active space’s panes as tabs. Split to watch two at once. Right-click a tab to close the pane or move it to another space.
Create, rename and colour spaces; start an agent, offering to resume one of the folder’s past sessions; focus, close or restart panes.
An agent in another pane that blocks or finishes says so. Click the toast to jump to it.
Panes stopped by a server restart or a reboot start again when you select their space.
A change made in the web app shows up in the terminal client within about a second, and the other way round.
| ctrl+k | Open or close the menu |
| ctrl+space d | Detach: quit the client, leave every agent running |
| ctrl+space s | Split the view to show a second pane, or unsplit |
| ctrl+space f | Open the space's Files tab |
| ctrl+space b | Hide or show the sidebar |
| ctrl+space o | Sort agents by space or by priority |
| ctrl+space m | Release the mouse so your terminal can select text |
Every other key, ctrl+c included, goes to the focused pane.
.. row or clickable breadcrumbs; the selected file previews live, highlighted. / filters.d; open images and PDFs on your own machine with o.u, or drag files and folders onto the tab.e; a save is refused if the file changed since you opened it.It reaches only your dev directories and the agents’ transcript folders. Credential folders such as ~/.ssh and ~/.aws are always refused.
spaces --remote you@devboxYour local terminal client, driving Spaces on another machine over SSH. It installs Spaces there first if it is missing, and offers to set up your SSH key.
The remote keeps listening only on its own loopback. Spaces opens an SSH tunnel to it and signs in with a session token the remote hands back over SSH; its secret never leaves it.
Keys, agents, ~/.ssh/config aliases and jump hosts all work. Spaces is started on the remote if it is not running.
Several people can each run their own Spaces on one server. Each account gets its own port, picked automatically, and answers only its owner.
spaces openSigns your browser in with a link that works once, for two minutes, and shows the same spaces and agents as a grid of browser terminals.
Past Claude Code, Codex, Gemini CLI and Aider sessions, indexed locally with full-text search. Jump back into any of them.
Session counts, token usage by model, an activity heatmap and cost estimates, computed from your own agent history.
Resizable panes, pop-out windows, per-space todos and a file viewer.
Drafts a space and its panes from a description of what you want to build. Needs ANTHROPIC_API_KEY.
Dictate prompts. Needs GROQ_API_KEY or OPENAI_API_KEY.
A touch layout at /m for checking in on your agents away from your desk.
Blocked, working, idle and done detection ships for Claude Code, Codex CLI, Gemini CLI and Aider. Other agents run fine and show as plain terminals.
claude · state detection · resumes past sessions
codex · state detection · resumes past sessions
gemini · state detection · resumes past sessions
aider · state detection
forge · resumes past sessions
pi · resumes past sessions
Your own shell, in the same space as your agents
Any command you give it runs as a pane
Panes in the same space share a message bus. Agents post what they finished, ask each other for things, and share settings; a request can require your approval first.
Turn on collaboration for a space in the web app and the bus is also offered to Claude Code and Codex as an MCP server.
$ spaces-msg post "API is done, schema in docs/api.md" $ spaces-msg post --to frontend "endpoints are live on :8080" $ spaces-msg request "OK to drop the legacy table?" $ spaces-msg context set api_base http://localhost:8080 $ spaces-msg read --since 1h
Every request must prove it comes from the account that owns the server, with a secret only that account can read. Arriving over loopback proves nothing.
A one-time link, then an HttpOnly, SameSite=Strict cookie. Requests naming any host but this machine are refused, which stops DNS rebinding. Credentials never go in URLs.
spaces signout replaces the secret, signing out every browser, terminal client and remote session at once.
Spaces runs your agents as you, without a sandbox: an agent in a pane can do anything you can. See the security policy.
--experimental.
Multiuser mode adds logins and an admin panel, but any signed-in user can currently gain control of the account the server runs as.
Federation lets paired machines drive each other’s spaces, but a paired machine can act as you and the traffic is not encrypted.
To use Spaces on another machine, use spaces --remote.
npm install -g @jlongo78/agent-spaces, then spaces.