Plexus¶
One nervous system for your coding agents, across your machines.
Plexus lets you watch, steer, and feed events to coding-agent sessions (Claude Code, Codex,
OpenCode) running across your machines. The suite is Plexus; it's two small, self-hosted Go
binaries that work together — mind the capitalization, one of them is also called plexus:
plexus— the eyes and hands. A session registry, a web cockpit with each session's live terminal, and a launcher for starting agents you can attach to from anywhere.edc— the input. A uniform/injectendpoint that turns an external event (a cron, a watcher, a Slack message, another agent) into a turn inside a running session.
They're orthogonal and don't know each other's internals — they meet at the session. An event enters a live session through edc; you watch that session work, type into it, or interrupt it through plexus.
flowchart LR
E["event<br/>(cron · watcher · slack)"] -->|edc /inject| S["a live agent session"]
S -->|register / attach| P["plexus<br/>registry + cockpit"]
H["you (any device)"] -->|watch · type · interrupt| P
Concepts¶
A few load-bearing terms, defined once — they recur across every page:
| Term | Meaning |
|---|---|
| session | one running coding agent (Claude Code, Codex, or OpenCode) |
| turn | one message a session processes, exactly as if a human had typed it |
| inject | hand a session an external event so it arrives as a turn — edc's whole job |
| channel | the Claude Code capability (claude/channel) that lets edc push a turn in |
| registry | the list of live sessions plexus serve keeps (one row each) |
| cockpit | the plexus serve web dashboard (/ui): the fleet plus each session's terminal |
| attach | open a session's live terminal — the cockpit reverse-proxies your browser into it |
| ttyd | a terminal-over-HTTP server; Plexus runs one per session so the cockpit can attach |
| edc | "Event-Driven Coding-agents" — the injector binary |
Two independent binaries¶
Plexus is two tools you can install and run separately or together — neither depends on the other:
| Binary | What it does | What it needs |
|---|---|---|
plexus |
registry + cockpit + launcher — see, attach to, and launch sessions | a private address to bind; tmux + ttyd for the launcher/attach |
edc |
inject external events into a live session as turns | just the edc binary + a shared secret — no registry, no tmux |
Use plexus alone to watch and launch agents; use edc alone to make a single session
event-driven; use both to get an injectable, attachable fleet. See plexus and
edc for each.
What it supports¶
| Agents | Claude Code, Codex, OpenCode — same registry, same inject contract |
| Platforms | macOS & Linux (Windows for edc); agents run wherever |
| Machines | one laptop, or many across a private network |
| Injection | external events → turns, per-agent adapters, with a trust boundary |
| Attach | a per-session web terminal (view, type, interrupt) behind one login |
| Transport | self-hosted; a private network + one shared token is the whole perimeter |
The 60-second tour¶
# launch an agent in a tmux session you can reach from anywhere
plexus claude ~/code/api # or: plexus codex … / plexus opencode …
# see the fleet
plexus ls # table of live sessions
plexus watch # live full-screen cockpit (TUI)
# the web cockpit (installable PWA)
open "$PLEXUS_URL/ui" # sidebar of sessions + each one's live terminal
# wake a session with an external event — the port comes from that session's edc
# state file, the secret from ~/.config/edc/config.json
PORT=$(jq -r .port ~/.local/state/edc/*.json | head -1)
curl -X POST "http://127.0.0.1:$PORT/inject" \
-H "Authorization: Bearer $(jq -r .inject_secret ~/.config/edc/config.json)" \
-d '{"source":"cron","event":"nightly","text":"…"}' # → a turn in that session
See Setup for the from-zero install, then edc for how injection is wired.
Where to go next¶
- Setup & requirements — from one laptop to many machines; the from-zero install.
plexus— the registry, cockpit, and launcher in depth.edc— how event injection works and how to wire it.- Architecture — how the two tools compose, and the topology.
- Agents — what each agent supports and how it's wired.
- Command reference — every
plexusandedcverb.
Design intent
plexus is built for a developer running a handful of long-lived agent sessions across machines they
own. The patterns — an agent-agnostic registry, a uniform injection contract, and a strict trust
boundary — generalize to any scale; the implementation (a shared token, a single-node SQLite
registry, tmux-based attach) is a solo-to-small-team reference. See Setup.