Four zones, wired around one record.
A durable shared record sits at the centre. Jobs read from and write to it. Dependencies are drawn only where a real handoff exists. A fixed, fail-closed chain of checks sits between any agent's proposal and any action that touches money, a live system, or a person outside the organisation.
Four zones.
Machines call the model cloud for reasoning. People work in Hub itself needing no model. The broker is the only wire that touches a client platform. Everything lands back in the record as a row.
Your machines
An interactive seat a person drives, and an always-on ops machine that hires bounded worker pools, runs sync jobs on schedule, runs a free local model for triage, and holds the credential broker. Nothing heavy or unattended runs on a laptop.
The Hub cloud
The shared record: tasks, runs, approvals, receipts. Behind a keyed, scoped, revocable agent-facing API, and behind row-level security for everyone.
The model cloud
Where reasoning happens, per call. A subscription while building, a metered key in production, and a local model as the free floor.
Client platforms
Reached only through the broker, one scoped action at a time, each leaving a receipt. Never trusted, never handed a standing key.
Four ways a worker is started. There is no fifth.
An agent isn't a resident colleague in a chat window. It's a short-lived worker hired for one bounded job, run against a hard time cap, and retired when the job settles, its result staged for review rather than shipped. A hundred agents describes queue depth and a capability registry, not a hundred open sessions. The real ceiling at scale is human review bandwidth, which is why gates are tiered and low-risk action classes earn lighter review only on accumulated evidence.
- The Hub in a browserNothing heavy runs here
- Interactive seatsPanes a person drives · spawn path 01
- Cloud routines · plannedOn their own hardware · spawn path 04
- The shared recordTasks, runs, approvals, receipts
- Agent-facing APIKeyed, scoped, revocable
- The dispatcher · built, not switched onHires a worker per task · spawn path 03
- Headless workers · built, not switched onFew at a time, hard time cap
- Plain tickersRespawn dead seats · spawn path 02
- Keychain + brokerAgents never hold a key
- Frontier modelsReasoning is not local compute
- Client platformsGA4 · Ads · Meta · WP · Xero…
- 01
A pane a person is watching
builtThe build lane. A person can interject, steer and stop it mid-run.
- 02
A plain clock ticker with nobody watching
builtA shell script with no model in it. Pane dead, respawn it from its written brief. Idle, send the next tick. Context nearly full, hand over and respawn fresh. Self-healing by construction and free to run.
- 03
The dispatcher hiring its own worker off the queue
builtCheap local triage first, then a headless worker with its model pinned and a hard time cap. Output staged as an artefact for review, never shipped from the worker. This is the path the platform grows along.
- 04
A scheduled session on the model provider's cloud
plannedZero local hardware, and the answer to what if the ops machine is off at 3am. Available today. Nothing runs this way yet.
Nine seams, each with one law.
Every place two systems meet has a name and a sentence. These are the sentences.
- Agent identityAgents are real users with a scoped, revocable identity. Team predicates let them read and write; human-only predicates refuse them; the CRM sensitive tier they never hold. Flip one column to revoke.
- Drive, read-onlyDrive sync mirrors metadata into the record. It never writes back to Drive.
- Invoicing, read-onlyRead as a read-only database role. No match on the client id means skipped and logged, never guessed.
- Journey webhookEvery scheduled send re-reads the client's stage immediately before firing and no-ops if it moved. Nothing sends unapproved.
- Money outboundThis database never writes money. Draft invoices go through the invoicing system's own guarded seam. Truth for payment state is the accounting system.
- ProvenanceEvery agent write carries a source: type, agent, run id. A source-less agent write is a defect.
- PushNo automated emails or sends go live. Push is for humans only.
- RealtimeOne channel per table. Authenticate before joining, or the policies quietly filter everything to zero.
- Docs APIThe caller's own token passes straight through and row-level security does the gating. An unreachable page is a uniform 404, never an existence oracle.
Built to run at fifty clients.
| Layer | At fifty clients | Verdict |
|---|---|---|
| Hardware | Fifty workers are fifty thin coordinator processes. The reasoning runs in the model cloud, not on our machines. | Never the constraint |
| Architecture | A queue with leases scales sideways. How many workers run at once is a dial on the scheduler. | Scales horizontally |
| Model capacity | An account boundary, not a hardware one. The production fleet rides its own metered key. | A billing shape, not a wall |
| Review bandwidth | Every consequential result still crosses a person's desk. Dozens to low hundreds of decisions a week. | The true ceiling |
More docs
Architecture
The topology: four zones wired around one record, where agents run, and the four ways a worker is started.
Security
Row-level security as the whole authorisation story, the credential broker, the ten-check gate chain, and what has actually been made to fire.
The stack
Next.js, TypeScript, Supabase, Nango, Airbyte, n8n and Vercel: what each does, what's being rebuilt, and what a stranger needs to run it.
Data plane
How client data reaches Hub: Airbyte into a fenced landing zone, thin transforms, a freshness stamp on every number.
Automations & skills
The split: one repo per organisation, a birth certificate for every automation, skills whose home is git.
Status
The capability matrix, five labels, no hedging. What you could use this afternoon versus what needs a switch or a sitting.
Self-hosting
The clone manifest and the transfer sequence: what you stand up, what moves, what never leaves our custody.