Skip to content

Architecture

OpenSwitchboard is an agent gateway: a message arrives over a channel, a dispatcher routes it to an agent, the agent runs on a model provider and executes tools through an executor.

The four seams

The seams are Channel, Provider, Executor and Agent, each an interface with more than one implementation. The dispatcher sits between them as the core and the only orchestrator, importing none of the platforms behind them. A new implementation goes behind its seam, never into the core.

The reply travels the same path back, through the dispatcher to the channel that asked. What each seam does and refuses to know: How a request flows.

One request, end to end

The same sequence runs from Slack, a terminal or HTTP; only the implementations differ.

Agent, model and effort resolve independently through layered config. A thread runs one agent at a time, so a reply mid-run is folded in.

Every step is a span in one trace. A run is live in a registry, then a durable record read by identity.

A finished coding run on the dashboard

Fixture preview; the repository and people are made up.

Where it runs

One long-lived process plus Workers, each solving a problem the process cannot: outliving restarts, running untrusted commands elsewhere, keeping a repository warm, serving docs without a rollover.

The bot dials out to Slack and needs no inbound address; its HTTP server serves the health probe, the gated dashboards and ingress. Each arrow to a Worker carries a bearer and the same trace id.

Durable state lives in Durable Objects, so a bot restart loses nothing and a live run is reclaimed from the ledger. Workers deploy in one order (state, bot, resident, sandbox); a release deploys only those whose inputs changed.