← ssogi.com
Multi-agent orchestration
R_workstation
A platform where named agents work on my codebase and I drive them from my phone.
I built it for my own work and I use it every day. This page is what is actually in it —
including the part that still breaks.
Hono · socket.io · SQLite · React PWA
Claude Code · Codex · MCP
daily driver for 3 developers
The problem
One agent is easy. Several is a systems problem.
Running a single coding agent needs no architecture. Running a dozen does. They overwrite each
other's files, they inherit one another's context until every prompt carries everyone's history,
and any one of them can do something you cannot undo.
Isolation, cost, and irreversibility. Those three are what the design is for.
Architecture
Five things that make it hold
agents (named roles) each with its own instruction context
├─ supervisor ────┐
├─ planner │ message queue
├─ developer ├──▶ agents consult each other,
├─ reviewer │ asynchronously, by slug
├─ rebuild specialist ───┘
└─ … identity per-agent slug, verified server-side
supervisor gate anything irreversible stops here
instance A ◀── federation ──▶ instance B
separate machines, separate trust boundary and key.
one workstation can ask the other to deploy on its behalf.
Context isolation
Every agent gets its own instruction file and settings rather than one shared global prompt.
This is the piece that mattered most: without it agents bleed into each other, and token cost
grows with every agent you add. With it, cost stays bounded as the roster grows.
Per-agent identity
Each agent carries a slug that the server verifies against the known roster before acting on
a request. An agent cannot speak as another agent.
Inter-agent message queue
Agents send messages to each other rather than calling each other synchronously. In practice
they consult one another — a plan will cite the message id of the agent it asked.
Supervisor gate
Irreversible actions — deploys, deletions, self-modification — do not execute on an
agent's own authority. They pass a supervisor first. Autonomy without a gate is just an
unattended rm.
Cross-machine federation
Two instances run on different machines and talk over their own trust boundary with a
dedicated key, compared in constant time. One can ask the other to deploy on its behalf. The
internal agent token and the peer key are deliberately different secrets — they are
different trust boundaries.
Phone as the control surface
A React PWA behind TOTP, reachable over a Tailscale funnel. Local-first: nothing leaves the
machine it runs on. I start and steer sessions from a phone.
Self-rebuild
It rebuilds itself. That is also where it breaks.
When agents change the code, the system rebuilds and restarts itself. A dedicated rebuild
specialist handles it, behind the supervisor gate. The UI and the features shift under me while it
is still running.
Unsolved
I added a health check and a rollback path. It still crashes intermittently under load, which
is the worst kind of failure to chase — it does not reproduce on demand. Getting a live
process to safely replace itself turns out not to be a weekend problem. I have not solved it.
I would rather say that plainly than describe a system that works in the diagram and
not on the machine.
What building it taught me
- Parallelism buys latency; isolation buys cost. Fanning work out to fifty agents does
not save a single token — it only shortens the wall clock. Isolating each agent's context is
what actually bounds spend.
- Not every stage can fan out. Anything that compares items against each other needs every
item first. Knowing where the barrier goes is most of the design.
- Isolation is not always worth paying for. Separate working trees matter when agents edit
the same files. For agents that only process data, it is setup cost and nothing else.
- A slow role blocks the queue unless you isolate it, and one failing agent should never
take a batch down with it.
Stack
backend Hono · socket.io · SQLite · child-process lifecycle management
client React PWA · TOTP auth · Tailscale funnel
agents Claude Code · Codex · MCP · per-agent instruction contexts
posture local-first, nothing leaves the machine