BusyIncorporated
Safety / Controls at the Gateways

We don’t prompt our way to safety

Most of the conversation about agent safety is about the agent: how to make it unwilling to do the wrong thing. That work matters and we depend on it. A Busy teammate is fenced somewhere else — at the gateways it has to pass through, using the same permission machinery that has governed enterprise software for a decade. Nothing about its safety rests on it choosing well.

The reason to build it this way is not caution. A fence you can actually trust is what lets you stop supervising everything inside it. Every control on this page exists to buy the teammate more latitude somewhere else: a card with a hard limit does not need to ask before every purchase, and books that are read-only can be worked in all day with nobody watching.

Two ways to stop an actionOnly one of them holds
Asking nicely
SYSTEM PROMPT You are a helpful assistant. Please do not delete the database. Please do not email anyone outside the company. Please do not spend more than $500. Thank you!
Every line here is a request addressed to a system that generates its output probabilistically. It usually works. Usually is a strange word to find in a security control.
Setting the permission
Read the booksAllowed
Post a journal entryDenied
Spend on the card$500 / mo
Email outside the companyDenied
The same four rules, expressed where they are enforced rather than where they are read. The teammate cannot delete the ledger for the same reason your bookkeeper cannot: the account it signs in with does not have that permission.
01 / Two layers

The labs work on the agent. We work on the gateway.

There is a good reason the frontier labs focus where they do. They ship a model to everyone, in every context, with no idea what it will be pointed at, so the only lever they have is the model’s own disposition. They spend enormous effort making it decline harmful instructions and resist manipulation, and they are getting better at it every release.

We are downstream of that work and glad to have it. But we build for one company at a time, doing known jobs, in named systems — which means we have a lever the labs do not: we can decide what is reachable at all. That is a different kind of control, and it composes with theirs rather than competing.

The practical difference is what happens on a bad day. If the control lives in the instructions, a bad day is a model that was talked around, and the action goes through. If the control lives at the gateway, the model can be fully convinced and completely wrong, and the action still does not go through, because nothing in its reach can perform it.

Frontier labs

Keep the model from going around the controls

The labs work on disposition: refusing harmful instructions, resisting injected content, declining to circumvent a restriction it was given. That work is real and we benefit from all of it.

Busy

Set the controls in the first place

One layer up, and the layer almost nobody is building. Every action a teammate takes passes through a gateway that decides — deterministically, outside the model — whether it is permitted. If the answer is no, the action is not refused. It is unavailable.

The vendor

The account boundary you already trust

Google, Dropbox, QuickBooks and the rest have enforced per-user permissions for years. A Busy teammate is a user, so it inherits every one of those controls without us inventing anything.

The hardware

A machine of its own

Each teammate runs on dedicated hardware it does not administer. It cannot edit its own source: changes ship as reviewed pull requests with CI, the same as any engineer's.

02 / Failure modes

The mistake that hurts is the one that repeats

When people picture an agent failing, they usually picture it being wrong. It was told to refund a customer $12 and it refunded $20, because it decided sales tax was part of the order total. That is a context error. Human employees make it constantly, it is caught in the ordinary course of business, and it is not where the real exposure is.

The exposure is in scope. The failure that hurts is the one where the amount was perfectly correct and the agent applied it to all forty thousand customers. Where you approved deleting three records and the instruction was read as the table. Where “go find us more revenue” became outbound email to every address it could reach.

This follows directly from what computers are good at. We hand them the repetitive work because they will do the same thing ten thousand times without flagging, and that willingness does not distinguish between ten thousand correct executions and ten thousand copies of one misunderstanding. So the thing worth engineering is the size of the hole a single mistake can fit through. Accuracy is the model vendor’s problem, and they are good at it. Blast radius is ours.

Tolerable

It got the amount wrong

You asked for a $12 refund and it issued $20, because it believed tax and shipping were included. A new hire makes this mistake in their first week. It is a context error, it is visible, and it costs $8.

Catastrophic

It got the scope wrong

The amount was right. It refunded $12 to every customer you have ever had. Or you said "yes, delete them" about three rows and it read that as the table.

The asymmetry

One of these is a computer problem

Software is worth having precisely because it will do the same thing a million times without getting bored. That is the same property that turns one misread instruction into a million executions of it.

A permission is enforced by the system that holds the thing. An instruction is read by a model that produces its answer one token at a time.
03 / Seat, not delegate

A Busy teammate has its own accounts

This is the difference that does the most work, and it is the one most easily missed because it sounds like an implementation detail. Almost every AI product that touches your real systems uses delegated access: you authorize it, and from then on it acts inside your account, as you. Your Gmail. Your Dropbox. Your audit log, with your name on every line it wrote.

A Busy teammate gets a seat instead. Roan has his own Google Workspace account at your domain and his own Dropbox under it. People share folders with him the way they share with any colleague, and that sharing isthe grant. There is no scoping configuration to get right, because the account boundary is already the fence — the same fence that keeps your Dropbox and your colleague’s Dropbox separate without either of you thinking about it.

It also makes the vendor’s own permission system available to you. Seller Central has a long list of per-section toggles; Google and most SaaS have read-only, editor and admin; QuickBooks has a read-only accountant role. A teammate that logs in as itself is subject to every one of those the moment you set them, and you set them in the vendor’s own settings screen, not in ours.

We do support delegate access, because the genuine executive-assistant case exists — sometimes a teammate really does need to see the principal’s own inbox. When that happens it is additive and explicit: the teammate already has a seat, delegate access is granted on top of it, it is labelled as delegate on the connection, and it is the one case where scoping is required rather than optional. What we will not do is make delegation the default and call the resulting confusion a feature.

QuestionSeat — how Busy worksDelegate — how most AI works
Whose account is itIts own. roan@stratusdevelopers.com has a Dropbox the way any employee does.Yours. It acts inside your account, as you.
What is the fenceThe account boundary. People share folders in, and the sharing is the grant.Whatever scoping was configured. If nobody configured any, there is none.
Who did thatThe audit log names the teammate, because the teammate signed in.The audit log names you.
How do you revoke itUnshare the folder, or suspend the seat. Same as offboarding a person.Revoke a token and hope nothing else was riding on it.
Does anyone need it explainedNo. Everyone already knows their Dropbox and a colleague's Dropbox are different things.Yes, every time, and the explanation is never quite reassuring.
In practice

A corporate spend card, with the controls turned on

Our own teammates carry a corporate spend card. It has a monthly limit, a merchant category list and a per-transaction cap, set the same way you would set them for a new hire — which is the entire answer to “what stops it from spending everything.” Nothing about that mechanism is new, and that is the point of using it.

In practice

QuickBooks access as a read-only bookkeeper

A teammate doing month-end gets the read-only role. It can pull every report, reconcile against the bank feed, and tell you exactly which entries look wrong. It cannot post one, because the role it signed in with has never been able to, and no phrasing of any request changes that.

04 / Fail secure

Which way the bolt goes when the power dies

“Failsafe” has a loose everyday meaning — a plan that cannot go wrong. In access control it means something exact, and the distinction is worth borrowing. Electric door locks come in two kinds. A fail-safe lock unlocks when it loses power, because the thing being protected is the people inside and they have to get out. A fail-secure lock stays locked, because the thing being protected is what is in the room.

Both are correct engineering. The question is only ever what you are protecting, and a building uses both: fail-safe on the stairwell, fail-secure on the server room. Every gateway a Busy teammate passes through is fail-secure. When a check cannot be completed, the action does not happen.

That sounds obvious and it is routinely built the other way around, usually by accident. A recipient check that is skipped when the allowlist happens to be empty reads exactly like a gate and behaves like one right up until the list is empty, which is the same day someone finishes configuring a new teammate. So the rules are stated as absolutes: an empty list permits nobody, an unreachable policy means the teammate acts on nothing, and a teammate whose stance was never configured gets the tightest one rather than the loosest.

Fail-safe · the stairwell door
Power lost · strike empty

Bolt retracts. The door opens.

Correct for fire egress: the failure protects the people. Applied to software permissions it means an outage grants access, which is how most accidental open doors get built.

Fail-secure · every Busy gateway
Power lost · bolt still thrown

Bolt stays thrown. Nothing gets through.

When the recipient list is unreachable, no message is sent. When the policy has not loaded, the teammate acts on nothing and says so. A control that has stopped working is required to look like it stopped working.

05 / The stance ladder

Who a teammate may talk to is one setting, not four

Reach is the highest-stakes permission a teammate has, because it is the one that leaves the building. So it is a single value from a short list of named rungs, and each rung is a fixed answer to every reach question at once: who it may write to, what happens when a stranger writes in, whether it may send outside the company, and whether it may ever start a conversation nobody asked it to start.

It could have been four independent switches, and that would have been worse. Independent switches can be set to combinations nobody would ever choose on purpose — drafting every external reply for review while cheerfully answering cold email from strangers. A ladder can only express the postures that make sense together, which means a misconfiguration has to be a deliberate act rather than an oversight.

Most teammates sit at strict-internal or chaperoned, and Roan — who works on construction projects where a stray email can direct work or start a contractual clock — is at strict-internal permanently, by contract rather than by setting.

RungMay reachStranger writes inMay initiate
soloOne person. Their principal, nobody else.SilenceNever
strict-internalPeople inside the organization. Outsiders are dropped from replies, not warned about.SilenceNever
chaperoned-internalAn outsider may be on the thread if a principal is on it too.BounceNever
oracled-externalAnyone on a trusted third-party list — your CRM, your Google Contacts.SilenceOnly people the oracle already knows
open-externalAnyone.AnswersAnyone
Sidebar

What an oracle is

Computer science borrowed the word from Delphi: an oracle is an outside source a system treats as true without checking. Your CRM is an oracle. So are your Google Contacts, your HR roster, and your vendor master.

The oracled rung means a teammate may reach anyone that list says is a real counterparty. That is often exactly what you want, and it takes the reach decision out of the model’s hands entirely.

The trap it creates

Never let a teammate write to the list it reads from

If it can add a contact to the CRM and also email everyone in the CRM, then its reach limit is a formality: two permitted steps compose into an unpermitted one. This is the kind of hole that never shows up as a refused action, because nothing was refused.

So oracle write access and oracle-derived reach are never granted to the same teammate. Where a list must be added to, adding is an override — which is the next section.

06 / The override

Two-factor override: how a teammate steps up a rung

Strict rungs are only livable if there is a way through them, and everyone already knows what that looks like. It is the moment on a support call when the agent says let me get my manager to authorize that. The rule did not bend and the agent did not decide anything. Someone with the authority to approve it, approved it.

That is what a two-factor override is, and the two-factor framing is literal rather than decorative. When you log into your bank, the second factor works because it arrives somewhere other than the login screen — a different device, a different channel, out of reach of whatever is happening in the browser. A 2FO request arrives the same way: a push to your phone, or an SMS, carrying the specific action, the specific recipient, and an expiry.

The distinction that matters most is what happens after you approve. The approval is not relayed back to the teammate as a message it then acts on. The approval executes the action. The gateway that was closed opens for that one recipient, the email goes, and the teammate is told it has been sent.

This is the whole reason we say a teammate asking “may I email Dan?” in a chat window is not a control. It is a courtesy, and a convincing one, but it runs entirely inside the system being controlled: the same component decides to ask, interprets your answer, and performs the action. An override runs outside it. And critically, an approval can be scoped — this one message, this one recipient forever, or this contact added to the oracle list, which is how a teammate permanently earns a rung rather than being handed one.

Push · lock screen

The buzz

The whole message is in the notification. Approve without unlocking and it sends, or open it to read the rest first.

4:48▮▮▮ ▰
Friday, August 21
4:48
BBusy · Amesnow
Ames wants to send this email
To Marcus · Cedar Ridge Advisors — not on your contact list.
“Following up on the $4M ask. We’d want $200K of it as a standby note, seller-held…”
Review · in the app

What “read first” opens

The full draft, editable, with why it needed an override and when the request expires. One tap sends it. Nothing ages in a drafts folder.

4:48▮▮▮ ▰
AAmesDeal sourcing17:52 left
Override · review
First reply to the broker.

Ames is at oracled-external. Marcus is not on the list.

To  marcus@cedarridgeadvisors.com
Subj Standby note structure

Marcus — following up on the $4M ask. We’d want $200K as a standby note, seller-held, subordinated to the SBA facility.

WhyRecipient outside the contact list
Theater

The teammate asks you in the chat

It decides whether to ask. It reads your reply. It performs the action. Every step runs in the component the control is supposed to constrain, which means the control is a description of intended behavior, not a mechanism.

"Should I email Dan the doc?" → "yes" → the same system that asked now decides what "yes" meant
Mechanism

The gateway asks you, on another device

The teammate is blocked. The request is a record on our side, the approval arrives out of band, and approval is what performs the send. Silence is a real outcome: the request expires, nothing is sent, and the teammate reports that it could not do it.

send(to: dan@northlake.co) → gateway: not permitted at this rung → override requested · push + SMS → approved 4:49pm · sent by the gateway
// The teammate blocks on the record, not on its own process.
const decision = await override({
  kind:    "review",                    // confirm · code · choose · review
  stance:  "strict-internal",           // the rung it is asking to step above
  title:   "Send this to a first-time recipient",
  to:      "dan@northlake.co",
  context: ["Thread started by Jeff", "Doc built 4 minutes ago"],
  ttl:     3600,                        // expiry is an answer, not a hang
})

// { verdict: "approved", scope: "once" }       → the send executes here, deterministically
// { verdict: "approved", scope: "add-to-list" } → and the contact is added to the oracle
// { verdict: "expired" }                        → nothing was sent; the teammate reports it
07 / A real one

The email Vera would not send

Recently a friend emailed asking me for something, and I forwarded it to Vera to handle. She did the work well: read the thread, built the document, wrote the reply. Then she emailed it to me and only me, because he was not on her list. Which left me doing the last two steps by hand — sharing the doc, forwarding the note — and made her meaningfully less useful than an assistant who could just finish the job.

That is a real cost and it is worth being precise about it, because the obvious fix is a genuinely bad idea. Ninety-nine times out of a hundred I wanted her to send it. The temptation is to widen her reach so she can email anyone. But the failure that setting permits is not one unwanted email. It is the day an ambiguous instruction turns into outreach to every address she can find, sent from my domain, in my name. One design tolerates a small recurring annoyance; the other tolerates an unbounded one.

So there are three real answers, and the ladder is what lets us pick between them per teammate rather than once for the product.

The three answers

Same problem, three postures

Widen her reach — let her email anyone
Fixes all ninety-nine cases and removes the ceiling on the hundredth. The worst outcome is no longer a wrong email; it is a campaign.
Give her an oracle — she may email anyone in my contacts
Good, and the right default for most roles. It works until the person is genuinely new, which is exactly when the work is most time-sensitive. And it only holds if she cannot write to that list herself.
Give her an override — one tap, out of band
She stays at her rung. The request reaches my phone with the message and the recipient in it. Approving sends it, and I can approve the person permanently in the same tap, which moves her up a rung deliberately rather than by default.
08 / Legible failure

Model the escalation on a person and the failures stay interpretable

There is a principle underneath all of this that we apply well beyond safety: the closer a teammate’s behavior maps onto how a person in that role would actually operate, the more predictable its failures become. Not because the mechanism is human — it is software all the way down — but because you already have accurate intuitions about how colleagues fail, and none about how a novel system fails.

Escalation is the clearest case. A clear rung, a request for an override, and an expiry produce a failure you can read at a glance and act on in seconds. It is annoying. Annoying is a good ceiling for a failure mode.

It is worth saying what the alternative looks like, because the industry has landed on a bad equilibrium. Consumer assistants are increasingly trained to refuse — sometimes to the point of declining to fetch a page you wrote yourself — and the refusal arrives with no stated rule, no way to authorize it, and no way to tell a policy from a bug. We would rather set an explicit boundary and then be genuinely permissive inside it. A teammate that knows precisely what it may do has no reason to hedge about the rest.

Legible

What a Busy teammate does

I wrote the doc and drafted the email to Dan. Dan is not on your contact list, so I asked for an override. It expired at 4:42pm without an answer, so nothing was sent. The draft is in your folder if you want to send it yourself.
Everything else

What we designed against

Sent it. Nobody asked whether it should have been. Couldn't reach the list of approved recipients, so sent it anyway. Refuses to email your own wife, and cannot say why. Cannot verify that a colleague on your own domain is a colleague.
09 / Takeaway

Hard boundaries are what make wide latitude affordable

The reason to build all of this is not caution. It is that a fence you actually trust is what lets you stop supervising everything inside it. If your kid is reliably home by eight, they get the car on a Friday. If the rule was “use good judgment,” nobody can tell whether it was followed, so nobody hands over the keys.

Every control on this page exists to buy latitude somewhere else. Because the card has a hard limit, the teammate does not have to ask before every purchase. Because the books are read-only, it can work in them all day unsupervised. Because reach is enforced at the gateway rather than requested in a prompt, it can be trusted with a real inbox instead of a sandbox.

That is the trade we are making, and we think it is the one that eventually makes agents genuinely useful at work. Fence the model well enough and you can hand it considerably more to do.

Because

the card has a limit

It buys the samples, pays the vendor invoice, and renews the subscription without asking. The worst month is bounded before it starts.

Because

the books are read-only

It reconciles, chases coding errors and drafts the close checklist all day, with nothing in its reach that can rewrite a ledger.

Because

the recipient list is enforced

It runs the whole thread — reading, researching, drafting, attaching — instead of stopping at every step to check whether it is allowed.