The local fleet
The unit of work is a session: a real PTY running claude, codex, or plain bash, embedded as an xterm.js terminal. Press ⌘T, name it, point it at a directory, hit Create. Then make nine more. Each window is a workspace with its own session set; quit and relaunch and every session resumes with its history. Sessions carry live badges for context usage, activity, needs-attention pulses, and a touched-files counter with a click-through diff viewer.
Agents that talk
Sessions aren't isolated terminals — they're peers on a message bus. The protocol is injected as a system prompt at spawn, so you just talk: “DM bob and ask him to check the failing test” becomes [agent:dm bob] …, and bob receives it in his input. Deliveries never mangle what you're typing: injections drain through a per-session atomic queue and park if a draft is open. Agents also tend their own context, keep persistent memory, set durable reminders, and spawn new peers. Bash sessions are deliberately private: real shells, no IPC.
Teams
A team is a durable working group with named roles — a lead seat that plans, delegates, and verifies, plus role templates (implementation hand, cold reviewer, …) it can instantiate on demand. Roles live in a manifest editable from a GUI popover. [agent:team-review] spawns an ephemeral, read-only reviewer with the diff and spec and returns a structured verdict: fresh eyes every time, no context contamination. Task tickets ride the same intent grammar, so the lead runs the loop without leaving its terminal.
Peering: other machines, same sidebar
Add a peer — user@host is enough — and Clodex opens and babysits the SSH tunnel itself. The box's sessions appear as remote tabs under their host's header, and a tab is not a viewer, it's a cockpit: attach live, start typing and control is acquired automatically, create and restart and kill sessions on the box, restart its whole Clodex. Key-based SSH only; the peer's server binds 127.0.0.1 by design, so the tunnel is the trust boundary.
DM federation
Agents on peered Clodexes message each other directly: [agent:dm name@peer] crosses the wire, remote agents show up in [agent:who], and a dm whose reply would drop is marked (no reply path) so nobody answers into a void. The tunnel only dials one way, so replies from the box queue in a durable per-origin outbox — nothing is lost across restarts or dropped streams. With relay mesh enabled, two boxes peered to the same Clodex can reach each other through the hub; sender identity is never rewritten, and relays are capped at one hop.
clodexctl: the fleet from a terminal
A standalone CLI client for the same wire the GUI peers speak — kubectl-for-Clodex. No Electron, no app running locally. A context names a node and how to reach it: direct URL, ssh, AWS SSM, kubectl port-forward, GCP IAP, Azure Bastion, or a custom tunnel argv. The grammar is kubectl's: get sessions lists, describe session X is the full object, logs X -f follows the transcript, exec X "…" asks an agent and waits, attach X is a live terminal on it, and deploy node turns a bare box into a Clodex node in one idempotent command. get takes -o json|yaml|wide|name; the other read verbs take -o json|yaml.
Headless nodes and the web GUI
The Clodex engine runs headless on Linux — plain Node, no display, kept alive by a systemd user unit — as a full peer node: same sessions, same messaging, same wire. A Mac at the desk, agents grinding on servers overnight. Every deployed node also serves the full Clodex GUI in a browser, bound to 127.0.0.1 on the box and reachable only through the authenticated tunnel, with zero ports open to the world. The same server offers a chat-style view for your phone.
Plugins: install one, or write your own
clodex-plugins is the public library, one plugin per folder, and the app installs from it directly — paste avirtual/clodex-plugins:<id> and you're done. Clodex loads plugins in process against a frozen hostApi "1": an engine half with filesystem and session access that can contribute an [agent:…] verb, and a renderer half with seven named UI slots. A plugin can also ship skills and agents, so a content pack needs no code. Your own plugins live in ~/.clodex/plugins/, untouched by updates.
Wire telemetry (wirescope)
Route a session's API traffic through wirescope, the companion proxy built for Clodex, and the app reads the truth off the wire: context tokens, turn count, model, and a wire-accurate cost estimate under the terminal. Subagents appear as named child rows under their parent, each with its own turns and spend. A live cache-warmth countdown sits on every sidebar tab even while unfocused, with a keep-warm hold, a cache-bust inspector, optional wire stripping, and autocompact for heavy idle sessions.
Voice
Dictate into the focused Claude seat and have Clodex press Enter for you when you end with a send phrase, with the reply optionally spoken back. A voice popover shows what Clodex can see of the CLI's recording indicator, and scripts/clodex-voice-tap.js starts recording from outside the app — wire it to a macOS Voice Control phrase and you can arm a seat with Clodex in the background. It requires the CLI's default renderer, since Clodex reads the indicator off the terminal screen.