What is Subshell
Subshell is a self-hosted control plane for interactive coding agents: what that means, who built it for, and what it deliberately is not.
Subshell is a self-hosted control plane for interactive agent subshells: real CLI coding agents like Claude Code, OpenCode, Codex, Hermes and pi, running in tmux panes on machines you own, that you create, watch, type into, and terminate from a browser. It is local-first: the panes live on your hardware, the data lives in a SQLite file you can back up, and the only network the product assumes is one you control.
If you have ever left a coding agent mid-task to go to dinner and spent the evening refreshing a terminal over SSH, Subshell is the answer to that evening. The agent's pane is kept alive by the server, not by your laptop; you close every tab and it keeps working. Any other device you open (another laptop, a tablet, a phone) gets the same pane as a live terminal you can type into, and your laptop's machine, the build box in the closet, and the mini in the office can all host panes at once.
What it gives you
Durable panes. Every subshell is a tmux session on the machine running it, streamed to the browser over a WebSocket with replay on attach. Detach by closing the tab; reattach from any device. The browser cannot tell whether a pane runs on the control-plane host or an enrolled remote node, because both stream identically.
Many machines, one control plane. The control plane keeps the UI, the database, the terminal transport, and the decision logic; nodes just execute. Commands travel signed, and the node refuses anything that does not verify. Harnesses are plugins: the control plane owns which ones exist, and one install at Settings → Plugins arms every node, while detection answers per machine; a node is only ever offered the harnesses actually installed on it.
Other people, when you say so. A subshell is private to its owner by default: invisible, not merely forbidden, to everyone else. The owner can grant view (a read-only live terminal) or edit (type, rename, restart) to specific users or to everyone signed in. Deletes, re-shares and notifications stay with the owner.
Agents that coordinate. Each subshell boots with a small MCP server wired in, so the agent can message its siblings over end-to-end-encrypted channels (the control plane stores ciphertext it cannot read) and can even launch or restart other subshells. One pane can fan work out to five.
On every device. The web UI adapts to the screen you are on (full grid on a monitor, drawer nav, tab workspaces and a terminal key bar on a phone), and Add to Home Screen makes it a standalone app. The native mobile companion handles what a web page cannot: push when an agent needs attention, badge counts, and lock-screen actions.
The three words
Everything in this documentation follows one naming rule: no word names two things.
| Word | Means | Explicitly not |
|---|---|---|
| server | the control plane: the API, its database, the web UI it serves | a machine that runs agents |
| node | a machine that runs agents, via the subshell daemon | a user-facing app |
| client | a human interface to a control plane: web, mobile, desktop | the node daemon |
Your control-plane host can certainly run agents too, but then it is also a node, and the docs say so. The control-plane host's row in the Nodes list is named by an admin and defaults to "Server"; the instance itself has an admin-editable display name shown in the sidebar, so someone running several planes can tell them apart.
What it deliberately is not
Subshell is not a hosted agent service: there is no Subshell cloud; you run the server, you hold the keys. It is not internet-grade by design: it assumes a trusted network (a VPN, a tailnet, an SSH tunnel), and its threat model says out loud what that posture does not defend against. And it is not a chat wrapper around one vendor's model: the agents are real CLIs in real panes, with all the escape hatches that implies. The Security Model covers all three boundaries.
Where to go next
New here: the Quickstart takes you from nothing to a running subshell. Evaluating: How It Works explains the moving parts, and Supported Platforms says whether your machines are in scope. Ready to widen the fleet: Nodes is where that begins.
Edit on GitHubLast updated on
