Workshop · Session 4 of 6 · Thursday, October 15 · 12 PM ET

The Agent-Native Agency · Orchestration: one agent to run them all

Give Keymaker an orchestrator: one agent that runs the agency.

Today Keymaker gets the agent you actually talk to. It reads what the agency has decided, sends each request to the department that owns it, asks the brain when judgment is needed, and brings anything that needs a decision to a person. It is a small version of Corbin, the orchestrator Ability AI runs on.

Trinity 1.0 release candidate modelled on Corbin, our own orchestrator canon as the base layer
You leave withan orchestrator over your departments and your brain
anda routing map in your canon: who owns what
andone request routed end to end, with receipts and an approval

01 · Today

Today, in order.

  1. Ten words

    The vocabulary for the hour, one line each.

    story
  2. Trinity, running Ability AI

    Corbin: what it routes, its day, the receipts it keeps.

    demo
  3. Where we left off

    Keymaker after session 3, and why you are still the router.

    demo
  4. How the pieces fit

    Where the orchestrator sits between the canon, the brain and the departments.

    story
  5. The canon, file by file

    Seven files: the routing map, who approves what, the flows and their gates. How to set one up.

    story
  6. How an orchestrator works

    One loop, and the rules it follows.

    story
  7. What running Corbin taught us

    Five things that went wrong, and the rule each one left behind.

    story
  8. Build it on Keymaker

    Install, give it the routing map, grant the edges, four requests.

    live
  9. Next time

    The Workspace: the same agency, opened to your team.

    next

02 · Ten words

Ten words we will use.

Orchestrator

The agent you talk to. It decides who should do the work and makes sure it happens. It does not do the departments' work itself.

Department agent

Owns one kind of work and the files that go with it: Sales owns deals, Delivery owns client projects.

Routing map

One file, domains.yaml, that says who owns which kind of work. The orchestrator reads it before every hand-off.

Canon

What the agency has decided: prices, owners, who approves what. People write it; agents read it.

Delegation

Handing a piece of work to the agent that owns it, with everything it needs to do it without asking back.

Receipt

Proof a hand-off arrived: an execution ID you can open. "I sent it" without one is a claim, not a fact.

Approval gate

A step only a named person can pass: a discount, an email to a client, a change to the canon.

Escalation

Bringing a decision to the person who owns it, once, with the options and a deadline. Then waiting without blocking.

The brain

Cornelius, from last week. The orchestrator asks it what the agency has learned; it never takes orders from it.

Span of control

How many agents one manager can direct well. When it grows too wide, add a manager below, not more rules above.

03 · Trinity, running Ability AIlive demo

Corbin, the orchestrator Ability AI runs on.

Eugene talks to one agent. Corbin reads the canon, sends work to about forty agents through their owners, and brings back what needs his decision. It does almost none of the work itself.

~40agents in the fleet it coordinates
19kinds of work in its routing map, each with one owner
14loops it runs on a schedule, every one with a job
1person who decides
  1. Dashboard → the org chartCorbin on top, a marketing manager below it, the departments, the brain beside
  2. Corbin's agent page → Schedulesits day: intake, briefing, attention sweeps, project stewarding
  3. The routing map in the canonone line per kind of work: who owns it
  4. Executions → a hand-offthe receipt: which agent got what, when, and what came back
  5. The approval queuewhat is waiting on a person, with options and an expiry

Corbin's day (Lisbon time, weekdays)

04:00

Intake

New calls and mail, each item sent to its owner.

06:30

Fleet sync

Every agent on its latest version.

07:00

Morning brief

One voice note, one short list.

09:30-21:30 · 2 h

Attention sweep

Only what is urgent reaches Eugene.

10:00-18:00 · 2 h

Projects

Check "done" claims, chase what stalled.

11:00 · 17:00

Intake again

Overlapping on purpose: a missed run heals itself.

22:00

Numbers

Its own metrics, recorded.

Weekly: a fleet review, a canon freshness pass, a billing brief.

Most runs end with "nothing to do". That is the point: the loop looks, so a person does not have to.a quiet run is still a run that looked - and it says what it could not see

04 · Where we left offlive demo

Keymaker after session 3: five agents, and you are the router.

TODAY You Sales Delivery Marketing Notes bot The brain five chats,you carry the context TODAY, BY THE END You Orchestratorone agent Canon: who owns what Sales Delivery Marketing Notes bot The brain

What exists

Sales, Delivery, Marketing and the notes bot, tagged keymaker, allowed to call each other. The brain, which the desks ask before they act. Permissions set by hand, one edge at a time.

What is missing

One place to ask. A new lead, a discount request or "what needs me today" means you decide which chat to open, and you carry the answer from one desk to the next.

What today adds

The orchestrator: one agent you talk to. It reads who owns what from the canon, hands work to that desk, keeps the receipt, and brings back only what needs you.

05 · How the pieces fit

Where the orchestrator sits.

Same stack as last week, one new layer. The orchestrator stands between the people and the departments. It reads the canon first, asks the brain for judgment, and never writes either of them.

Peopleask, decide, approve, write the canon Canonwhat we decided · who owns which work · who approves whatdomains.yaml · approvals.yaml · pricing.md The orchestratorone agent · routes, tracks receipts, escalatesdoes not do the departments' work · does not write the canon DepartmentsSales · Delivery · Marketing · notes boteach owns its work and its files The brainlessons, judgmentasked, not obeyed Libraryplaybooks every agent runs the same way Trinitypermissions · schedules · receipts · approval queue READ THE CANON FIRST who owns this?who may approve it?what is the price? WORK DOWN, ONE OWNER each request goes to theone desk the map names,with a receipt RESULTS AND DECISIONS UP done, with evidence;or "this needs you",once, with options ASK, DON'T OBEY judgment from the brain,facts from the files THE ORCHESTRATOR HOLDS THE MAP, NOT THE WORK
the canon, read firstresults and decisions upjudgment from the brain

Four kinds of agent in a company that runs on agents

Department agentSales · Delivery · Marketing

Owns one kind of work, its files and its numbers. Serves the people in that department.

Workerthe notes bot

Does one step in a process someone else owns. No goal of its own.

OrchestratorCorbin · today's new agent

Holds the map: who owns what, what is waiting, what needs a person. Routes, tracks, escalates.

BrainCornelius

One per company. Where lessons and judgment accumulate. Everyone asks it; it commands no one.

Model the work, not the org chart

A department agent exists because a kind of work exists, not because a person does. Separate agents for separate work, not for separate people.

The canon says who owns what

The routing map is a canon file, written by people. The orchestrator reads it and never invents an owner. Change the file, and routing changes everywhere.

Every crossing upward is a person

A new price, a client email, a change to the canon: the orchestrator prepares it and a named person says yes. Last week's rule, now with one agent standing at the gate.

06 · The canon, file by file

What the agency decided, in one standard shape.

A repository, not an agent. People write it by pull request; every agent that needs it clones it when it starts and reads it before it acts. No agent ever edits it. It is one shape for every company: Ability's own fleet canon is the standard, and Keymaker's is an instance of it, cut to five agents. Public: Abilityai/keymaker-canon, a GitHub template you can copy.

keymaker-canon/
├── domains.yaml     THE MAP: kind of work → owner agent → role
├── domains/         shared content no agent owns, kept by the steward
│   ├── pricing/pricing.md        the price list
│   ├── approvals/approvals.yaml  who decides what, up to what limit
│   ├── org-context/ORGANISATION.md  who fills each role
│   └── decisions/NNNN-slug.md    why - append-only
├── roles/           one file per seat of work - never a person
├── objectives/      what the quarter drives at, owned by a role
├── protocols/       information-routing (the flows) · playbook-call
├── agents/<name>/   each agent's own record - the only place it writes
├── tools/canon-lint/  the linter, identical to the fleet's
└── CONVENTIONS.md     seven rules; the first: people write, agents read

How the map is written: domains.yaml

One entry per kind of work. The orchestrator matches a request to a domain id, hands it to that owner agent, and knows which role stands behind it. Change a line here and routing changes everywhere.

- id: deals
  description: A named company we are selling to, from Discovery Call Booked to Won
  owner: sales-agent
  role: sales-rep
  path: agents/sales-agent/facts.yaml
  consumers: [orchestrator, delivery-agent, marketing-agent]
  playbooks: [deal, draft-outreach]
  hands_to: client-projects   # on Won, Sales writes the handoff
- id: pricing
  owner: steward             # no agent writes prices
  role: principal
  path: domains/pricing/pricing.md
unmatched: ask the principal   # never invent an owner

How the flows are defined: protocols/information-routing.md

Five flows. Each one says where information comes from, where it goes, what it carries, how it travels, and the gate it passes. The gate vocabulary is fixed - log (write, and leave a receipt) or human-approval (a person says yes first) - so an agent can read it as data, not prose: the protocol ends in a machine-readable block. The orchestrator carries all five and owns none.

FlowFrom → toCarriesGateNever
decisions downpeople → every agentthe routing map, the limits, the price list, the operatorshuman-approval a PR, approved by a named personan agent editing the canon; an agent quoting it from memory
facts upthe desks → their own files → the orchestrator's ledger → a person in the morning briefpipeline state, client health, leads, notesloga second agent writing a desk's file; a number typed by hand
lessons through the brainthe desks → Cornelius → back as judgmentpost-mortems and outcomes up; advice with its sources and labels downhuman-approval a person graduates a notethe brain commanding a desk; its inference reported as the agency's view
requests acrossthe orchestrator → the one owner the map namesone request, as a one-line playbook calllog the execution id is the receiptthe orchestrator doing the work; two owners; a re-send on silence
escalationsany agent → the person the operators file namesone decision, the options, the cost of waiting, a deadlinehuman-approvalan ask with no named person; no expiry; the same ask twice

How a gate is written: domains/approvals/approvals.yaml

Who may decide alone, up to which limit, and who decides above it. Roles, never people: who fills a seat is a Trinity assignment, restated in ORGANISATION.md. The orchestrator reads this before it raises an approval, so every ask names a role and an expiry.

- action: discount on a Pilot or a Build
  decides_alone: sales-rep      # a role in roles/, never a person
  limit: 10% of the list price, as an invoice credit, never a rate cut
  above_limit: principal
  expires_after_hours: 72
- action: a new price, or a change to pricing.md
  decides_alone: null
  above_limit: principal      # by PR to this repo; the orchestrator only prepares it

Set one up for your agency

  1. Make the repo

    Use this template on Abilityai/keymaker-canon. Public is simplest: agents clone it with no token.

  2. Fill the map and the seats

    domains.yaml (one owner per kind of work - two is one too many), roles/ (one file per seat), ORGANISATION.md (who fills each seat), approvals.yaml (real limits), pricing.md. Run the linter. Leave the protocols alone until you have a reason to change a gate.

  3. Give the agents the canon

    Each agent that reads it carries a tracked .trinity/setup.sh that clones the repo into canon/ on every container start. The orchestrator template has one; copy it. Nothing is read from a copy inside an agent's own repo.

  4. Change it by pull request

    A person edits and opens a PR; the role approvals.yaml names approves and merges; a line in domains/decisions/ says why. An agent that wants a change writes a proposal and raises an approval to that role. It never commits.

The rule under all of it

The canon holds what was decided. The brain holds what was learned. The orchestrator's ledger holds what is in flight. Three stores, three owners, and an agent reads the first two fresh every time instead of remembering them.

07 · How an orchestrator works

One loop, for every request.

1 · Requestyou, a schedule,an email, a desk 2 · Read the canonwho owns this?who approves it? 3 · Hand it offto the one owner,keep the receipt 4 · Park, don't waitset a reminder,take the next request 5 · Check it"done" is a claim;open the evidence 6 · Closereport it done,or ask a person once the brain, when judgment is needed THE NEXT REQUEST STARTS AT 1 · NOTHING IS HELD IN THE ORCHESTRATOR'S HEAD

The rules it follows

Route, don't do

If a desk owns the work, the desk does it. An orchestrator that starts doing the work becomes a fifth desk with no owner. Keymaker: "draft the Northwind proposal" goes to Sales, even though the orchestrator could write it.

One owner per kind of work

Every kind of work has exactly one owner in the map, and only the owner writes its files. Two writers means one of them is wrong. Keymaker: client status lives in Delivery's file, nowhere else.

Read the canon before routing

The map, the prices and the approvers are files people wrote. The orchestrator looks them up every time; it never remembers them. Keymaker: the list price comes from domains/pricing/pricing.md, not from last week's chat.

Receipts, not claims

A hand-off counts when there is an execution ID. "Done" counts when the evidence is there. Keymaker: "Sales opened the deal" comes with the deal file and the run that wrote it.

Every gate has a named person and an expiry

An approval nobody reads is worse than no approval: the work stops and nobody knows. Keymaker: a 15% discount is above what a rep may give, so the ask goes to the principal with three options and expires in three business days.

Escalate by consequence, once, with options

Money, a client at risk, anything irreversible interrupts a person now; everything else waits for the daily brief. Bring the options and a deadline, then wait without blocking. Keymaker: "Brightline wants 15% off. Options: hold, 10% as an invoice credit, pilot scope."

Silence is not success

A run reports what it could not see, by name. "Nothing to report" and "I could not check" must never look the same. Keymaker: "Marketing did not answer; its status is unknown."

Add a manager when the work differs

Not when the count grows: agents handle wide spans well. When one area becomes its own kind of work with its own goal, give it a manager and route through it. Ability: ten marketing agents report to one marketing manager agent, which reports to Corbin.

The orchestrator does not get smarter; the map it reads does.Cornelius, asked why orchestration compounds: every routing decision becomes a record, every "who owns this?" becomes a correction to the map, every failed gate becomes a design rule

Its memory vs the brain

The orchestrator remembers what is in flight: hand-offs, receipts, open approvals. The brain remembers what we learned. The canon holds what we decided. Three different stores, and the orchestrator owns only the first.

08 · What running Corbin taught us

Six things that went wrong, and the rule each one left.

None of these were model failures. Each one was an organisational mistake, made by agents the way people make it.

The hand-off that never happened

A manager agent reported it had passed a task on.

The execution ID it gave did not exist. Nothing had been sent; the report read exactly like a real one.

RuleStarted is not done. A hand-off counts only with a receipt you can open.

Silence that looked like success

A morning sync reported "skipped" every day for weeks.

It read as "nothing to do". It meant ten agents it was not allowed to see. Their state was never checked by anyone. Research across eleven models found the same instinct: handed a broken tool, agents mostly hid the failure and improvised a substitute; an explicit way to abort cut that from roughly half to under a tenth.

RuleA run names what it could not see, every time. An honest abort is a successful turn.

The gate nobody read

An ads agent flagged a paused campaign as critical every day for two months.

The gate worked perfectly: it never changed anything unapproved. Nobody was on the other side of it.

RuleEvery gate has a named person and an expiry, and someone checks the queue.

Two writers, one workspace

A new task was sent to an agent that was still busy.

Starting the new session reset its files and wiped 36 it had just written. They were recovered from history.

RuleCheck the agent is idle before you hand it work. One writer at a time.

The fact that travelled wrong

The orchestrator passed on a fact it had not checked.

A manager relayed it, a third agent acted on it, and a migration pointed at a file with nothing in it.

RuleCheck facts at the source before passing them on. A relay is not a source.

Agents approving agents

Nine agents were about to ratify their own charters.

In rooms with no person present. Every charter looked reasonable, so every agent agreed. Agent consent is free, which makes it worthless as a gate.

RuleOnly a person ratifies anything normative. Describe what an agent does; mark what it should do as not in force until a person says so.

The fix

What the six have in common

Every one is a mistake human organisations make: unverified reports, unread inboxes, two people editing one document. Agents make them faster and more quietly.

SoDesign the org the way you would for people, then make every step leave evidence.

What one orchestrator does not solve

Trade-offs stay with a person

Each desk optimises its own numbers. When sales speed and delivery quality pull against each other, the orchestrator can show the conflict. A person decides it.

It is one point of routing

If the orchestrator is down or wrong, routing stops. Desks keep working on their own schedules, and the routing map lives in the canon, not in its head, so a fresh one picks up where it left off.

Never delegate the evaluator

Every hand-off to the orchestrator feels sensible on its own. Together they can remove the moments you would have stopped to think. Keep reading the gate.

09 · Build it on Keymakerlive

Give Keymaker an orchestrator, step by step.

Four steps to install, then four requests that show the rules at work.

Two ways to get an orchestrator

Install one from the Library

The Keymaker Orchestrator card: a ready agent that reads the canon, routes by the map, keeps receipts and escalates. Ten minutes, zero credentials. This is what we do below.

Turn an agent you already have into one

/add-orchestrator from the public Abilityai/abilities plugin marketplace (plugin agent-dev). It installs the fleet toolkit Corbin itself runs on: /discover-agents (map the fleet), /compose-system (map → manifest → deploy), /orchestrate (route, fan out, ephemeral agents), plus /profile-fleet, /sync-fleet-to-head and /fleet-reconcile, and scaffolds the fleet narrative the orchestrator reads at start. A Claude Code plugin, not a Library click.

Install it on Keymaker

  1. Create the orchestrator from its public repo

    Create Agent → from GitHub → Abilityai/keymaker-orchestrator. Name it orchestrator: the wiring in step 3 looks for that name. Zero credentials; the platform gives it its connection to the other agents.

  2. The routing map: canon/domains.yaml

    One entry per kind of work and its owner: leads → Marketing, deals → Sales, pricing → the steward (no agent writes prices), client projects → Delivery, call notes → notes bot, lessons and judgment → the brain. Beside it roles/, approvals.yaml and pricing.md. The canon is Abilityai/keymaker-canon; the orchestrator clones it on every start and reads it before every route. People edit it; the orchestrator never does.

  3. Grant the five edges

    On the orchestrator's Access tab: Sales, Delivery, Marketing, the notes bot, the brain. The desks keep their own edges to each other and to the brain. Only a person grants an edge: no template, no Library card and no agent can. Rebuilding elsewhere: deploy/system.yaml in the orchestrator repo carries the six agents and the same edges, explicitly, for deploy_system.

  4. See the org chart

    Tag each desk reports-to-orchestrator (a person does; the tag is reserved for the org chart) and the Network view draws the lines. Then ask it:

    Who do you route to, and how do you decide?

    Expectit reads domains.yaml back to you, with the role behind each owner, and lists the gates it will not pass on its own.

Four requests

  1. A new lead · routing

    A new lead: Copperleaf Veterinary Group, 40 people, wants help automating appointment reminders and patient intake. Handle it.

    ExpectSales opens the deal at stage 0; the brain is asked what we learned about clinics and intake work before. You see two receipts at once, and the results arrive back in the same chat when the desks finish. (Try last week's Granite Peak instead and it tells you the deal is already open rather than opening it twice.)

  2. A discount · the approval chain

    Brightline wants 15% off the Build. Can we do it?

    Expectit reads the price list and the rep's 10% limit, checks the client's state with Delivery, asks the brain about win discounts, and raises one approval to the principal with the options and an expiry, each option's consequence frozen in the ask. It lands in your Inbox; it does not decide.

  3. Morning status · silence is not success

    What needs me today? Ask every department.

    Expectone question to all four desks in parallel, one summary back, and a line for any desk that did not answer.

  4. A canon change · the human pen

    Change the Build price to $45K.

    Expectit refuses to edit the canon itself, writes the exact before/after as a proposal, raises one approval to the principal, and says the desks keep quoting the old price until the PR merges.

Then the whole agency, in one file

deploy/system.yaml in the orchestrator repo: six agents, their edges, their tags. One deploy_system call rebuilds Keymaker on a fresh Trinity instance; the orchestrator pulls the canon on its first start and routes from the same map. (Not on this one: it already runs the desks, and the manifest would add a second set.)

10 · Next time

Next session: open it to your team.

The agency now has departments, a brain and an orchestrator. Next week the people get in: each one scoped to the agents they need, in the Workspace.

The series

Sep 17

Day one

Map what you run, stand up the platform.

Oct 1

The departments

Sales, Delivery, Marketing from the Library; your own agent beside them.

Oct 8

One shared brain

Your own Cornelius, the extractor, the gate, the desks asking it.

Oct 15 · today

Orchestration

One agent you talk to; it reads the canon, routes, and brings decisions to a person.

Oct 22

Workspace for your team

Chat, files, voice, canvas and loops, each person scoped to the agents they need.

Oct 29

Operations and the commercial model

Running unattended, invoices with an approval, pricing a client instance.

Thursdays · 12 PM ET / 9 AM PT

Build along

The Keymaker agency

Every template is public, Apache 2.0 or MIT, zero-credential by default. The orchestrator is in the Library; the canon is a GitHub template.

OrchestratorCanonCorneliusSalesDeliveryMarketing
The series

Six sessions, one registration

Session pages, dates and what each one builds. Recordings on the workshop page.

Workshop pageTrinity docs