A process per event.
Stdin hooks publish lifecycle changes. A session daemon reads the conversation the hooks cannot see.
Your agents are already everywhere.
You don't have to be.You delegated the work.
Not the watching.
Every coding agent.
Any interface on top.
Let the work keep moving.
Take your attention back.
Less checking. More living.
One live stream for every agent. A clear view from whatever screen is nearest. And a way back in when the next move is yours.
Take the deck for a spinUserPromptSubmitUserPromptSubmitBeforeAgentchat.messagebefore_agent_startturn.startedPreToolUsePreToolUseBeforeTooltool.execute.beforetool_execution_startitem.startedPostToolUsePostToolUseAfterTooltool.execute.aftertool_execution_enditem.completedPreToolUse · policyPreToolUse · policyBeforeTool · policypermission.asktool_call · policyrequest.openedStopStopAfterAgentsession.idleagent_settledturn.completedFive runtimes. Five protocols.
Five different ideas of “working.”
Different runtimes.
One language.
The cache directory is generated, so removing it is safe. It sits inside the repo, though, so I should ask before deleting recursively rather than assume.
I can clear it. That's a recursive delete inside the repo, so I'd rather you approve it.
Bash
rm -rf .cache/buildEverything becomes state.
State every surface
can trust.
Sorted by who needs a person, not by recency. A question or approval rises above the work that can carry on without you.
Six agents working. Nothing needs a decision.
Error → blocked → done, unseen → running → idle, seen → offline
Demo bridge · 6 running
Quiet work stays quiet.
Attention, not activity.
Your agents can work without
becoming your notification feed.
CH 05 · Understand the work
You stepped away. Now see what changed, why it changed, and what comes next. The conversation, the reasoning, the diff. All in one session.
Recreated from the native clients. Seeded demo activity.
$ claude › Clear the stale build cache and rerun. Bash(rm -rf .cache/build) Waiting for approval. Command not run.
Blocked until the decision returns
Generated build cache inside orbital-api. The recursive delete needs a decision.
Bash
rm -rf .cache/buildrm -rf .cache/buildRuntime · Bash is waiting for permission.
Most of the time,
your agents don’t need you.
Until they do.
An approval on your wrist.
A terminal unblocked
seconds later.
CH 08 · Stay in control
Change your mind without going back to your desk. Answer a question. Redirect the work. Stop a turn. You're controlling the agent, not squinting at its terminal.
Send your first instructionAvailable controls depend on the runtime's reported capabilities.
2 need you · one bridge projection
Installs, starts, stops and inspects the host service. Not a deck; no agent list or attention count.
atlas-docs is working. The two blocked sessions lead every surface.
Phones read the bridge. The watch can read directly or via its phone. The widget and tile render the latest saved summary; offline views may be stale.
One source of truth.
Every surface agrees.
CH 10 · The live connection
A runtime speaks. The adapter translates. The bridge updates the session. Every subscribed surface gets the change—not another copy of everything.
GET /bridge/v1/eventsTwo new connections omit Last-Event-ID. Each receives its own full snapshot.
agents: [ orbital-api, checkout-flow, atlas-docs ] sequence: current bridge revision
snapshot · entire deck
snapshot · entire deck
A fresh connection receives a snapshot. Then patch frames carry changed agents and removed IDs. Keepalive ping frames arrive every 15 seconds. Each connection has its own diff; a late subscriber never depends on another client's place in the stream.
CH 11 · Keep your tools
One bridge doesn't mean one adapter. Agent Deck meets each runtime where it is. Keep the tools you chose. Lose the constant switching between them.
Stdin hooks publish lifecycle changes. A session daemon reads the conversation the hooks cannot see.
In-process extensions stream activity and can hold a tool call open while you decide.
A bridge-hosted session. No terminal required. The host owns the lifecycle and resolves requests directly.
Herdr observes terminal state and delivers instructions into panes without another route in.
Build your own surfaceConceptual clients, not shipping integrations. Build from the same wire contract.
The apps are clients.
The bridge is the product.
CH 13 · Build beyond the apps
The best interface might be one we haven't imagined. Build a client from the wire contract alone. Same sessions. Same requests. Your way in.
Read the Bridge APIPublished JSON Schema. Generated from the schemas the routes actually decode.
/bridge/v1THE WIRE CONTRACT| Method | Route | Purpose |
|---|---|---|
| GET | /events | snapshot, then per-connection patches |
| GET | /snapshot | the same shape, one-shot |
| GET | /agents/:id/history | the retained event log |
| GET | /agents/:id/changes | every file change, with diffs |
| POST | /agents/:id/control | approve · reject · prompt · steer · stop |
| GET | /commands/:id/receipt | delivery, observable |
CH 14 · Your network. Your bridge.
Your bridge listens on localhost. Reach it over your tailnet, with paired devices and explicit access scopes. The control plane stays on infrastructure you own.
Device tokens are stored as SHA-256 hashes and compared in constant time. Reading and control are separate scopes. Authentication is enforced when BRIDGE_REQUIRE_AUTH=true; the bridge warns when enforcement is off. Pairing codes are short-lived and single-use.
This describes the Agent Deck bridge. Your coding runtime's connections to model providers are separate.
CH 15 · Know what the work costs
Across runtimes. Across projects. See the spend, the trend, and the limits before you decide what to run next.
$6.99
16.2M
16.2M tokens in one seeded day. No invented activity fills the earlier days.
Illustrative runtime reports, not a quota shared across these projects. A connected bridge shows only windows its providers report, including reset times when supplied.
Historical usage is separate from a live card’s context pressure. These fixture totals come from the demo seed’s explicit processed-token values; they are not a conversion rule for real sessions. Cost is priced usage, not a provider invoice.
CH 16 · Start with what is possible
Start another agent in a known project. Models come from what the runtime reports—not a marketing list. No learned catalog? Let the runtime choose its default.
The production route currently hosts Claude. Other runtimes can appear on the deck without being startable here.
GET /managed/runtimes{
"runtimes": [
{
"runtime": "claude",
"managed": true,
"capabilities": {
"interrupt": true,
"approvals": true,
"userInput": true,
"modelSwitch": true
}
}
]
}GET /models{
"catalog": []
}Choose a known project and start. The result and exact request will appear here.
Your turn
Six sessions. Two need you. Open one, inspect the work, then make the decision. Watch the deck get quieter. This is a local simulation; no commands leave your browser.
Demo bridge · 2 need you · 2 running
The cache directory is generated, so removing it is safe. It sits inside the repo, though, so I should ask before deleting recursively rather than assume.
I can clear it. That's a recursive delete inside the repo, so I'd rather you approve it.
Bash
rm -rf .cache/buildChoose a session. Review its activity, then decide what happens next.
Run them anywhere. See them anywhere. Step in only when they need you.
The interface can change. The control plane stays.