Orbis
The console I run my studio from. It answers one question, which agent needs me, so I can delegate work to coding agents instead of watching terminals.
Context
VerifiedI build with Claude Code every day, often with many sessions running in parallel across client and studio projects. Each one is a terminal. Answering “what is the state of everything?” meant opening all of them.
The design principle came out of that: delegate, don't monitor. Work should be requested and received as outcomes, not watched scrolling past. The terminals become plumbing.
Approach
Verified
One loop runs the whole thing: an intent goes in, an agent is summoned with the context it needs, it does the work, and an outcome comes back into the view. The orb in the middle is the summary of the whole fleet. Its colour is computed from aggregate state: calm when everything is nominal, amber when a session is blocked and needs me, red when three or more are blocked or infrastructure is critical.
Everything that is mocked today sits behind a single function, so it can be swapped for the real source without a rewrite: files for a database, polling for realtime, terminal parsing for structured events.
Architecture
Five layers, built from the bottom up. Building toward the layer, not just the checkbox.
Verified layers Inferred state of each- Built
Surface
The orb and module pages, voice, web and phone.
- Partly built
Brain
Intent routing, the pulse that sums up state, memory, standing orders.
- Built in a sandbox, then switched off
Delegation
Summon an agent with context, let it work, receive an outcome card.
- Built: live fleet and terminal control
Runtime
Real Claude Code sessions in tmux. The hands.
- Files
Data spine
Files today, a self-hosted database with realtime later.
Every action goes through gates
A console that can end an agent's session can do damage. Pick a request to see where it is let through or stopped.
Verified stages Illustrative requestsClear a session
Refused by the server with needsConfirm. A browser confirm() dialog alone is not enough; the server has to see the confirmation.
The hole I found in my own tool
VerifiedIn September, during an audit of my studio systems, I found that the switch allowing Orbis to spawn new agents had been left on for two months. On its own that sounds fine: the console sits behind a reverse proxy that only lets my devices in, and the control routes check that requests come from the console's own page.
Neither held. The app process was reachable on the private network without going through the proxy, and a same-origin check trusts headers that any non-browser client can set. Put together, a device on that network could have started a real coding agent with its permission prompts skipped.
I switched spawning off the next day and confirmed it on the running app: the route now reports that it is disabled. Everything else in the console still works. Spawning stays off until agents run in a sandboxed, low-privilege runtime with real authentication in front of it.
Three things I took from it, now written into the project's decision log:
- A same-origin check is a defence against cross-site requests. It is not authentication.
- A feature flag is a switch, not a safety mechanism. If the dangerous path exists, assume it will be on.
- Anything that can act on the world needs a real perimeter before it gets a button.
Result
VerifiedIn daily use for the fleet view, the agent feed, infrastructure and studio modules, from desktop and phone. Destructive controls are gated on the server and audited. The orb answers “which one needs me” at a glance.
Not done
- A sandboxed agent runtime, and with it, spawning agents from the console again.
- Moving state from files to a database with realtime updates.
- Replacing the remaining mocked modules with their real sources.
What I would do differently
InferredBuild the perimeter before the power. I built the ability to start agents early because it was the exciting part. It should have waited until the runtime it launches into was sandboxed.
Audit my own tools on a schedule, not by accident. The hole was found during an unrelated audit. The same review, run monthly against anything that can act on the world, would have found it in weeks rather than months.