This is the part I actually get hired for, so it's worth writing down properly. Everything
below is described at the level of the pattern; the specifics belong to the clients I built
them for.
Getting a language model to do a piece of operational work stopped being the hard part some
time ago. Ask it to triage a ticket, reconcile two systems, draft the customer reply — it
will do a decent job. The hard part is everything around that: knowing what it's allowed to
touch, catching the confident mistake before it reaches a customer, and being able to answer
"who approved this?" three weeks later when someone asks.
A capable agent with no governance isn't an employee. It's an unsupervised contractor with
your credentials and no memory of what it did.
So the model I use treats agents like staff rather than like scripts. Staff have a written
job description, a level of trust they've earned, a manager who signs off on the risky
things, and a paper trail. All four of those turn out to have direct technical analogues.
1. Every agent has a charter
A charter is a short written document, kept in version control next to the code, that says
what one agent is for: the systems it may read, the systems it may write, the things it must
never do, and who owns it. It is written in plain language because its real audience is the
human who has to approve it, not the model.
The MAY NOT lines are the ones that earn their keep. They're usually specific and
slightly odd — the kind of rule that exists because of one bad afternoon. "Never link an
internal document to an external recipient; attach it instead." Those lines are the
institutional memory that would otherwise live in one person's head.
2. Autonomy is a ladder, and it's earned
A single "is this agent allowed to act" switch is too blunt. Four rungs cover nearly
everything, and an agent starts at the bottom and moves up on demonstrated track record —
not on how impressive its demo was.
Observe
Reads systems, reports findings. Cannot change anything anywhere. Every new agent starts here.
Draft
Prepares the work — the reply, the ticket update, the reconciliation — but a human sends it. Most of the value shows up on this rung, and a lot of agents never need to leave it.
Act with approval
Executes inside a defined lane on its own, and stops at a gate for anything that leaves the building or crosses a threshold.
Autonomous
Deliberately unoccupied. The rung exists so the ladder is honest about where it ends — and so that promoting something into it is a visible decision somebody has to make on purpose.
The ladder from Agent Floor. The empty top rung is the point.
Demotion matters as much as promotion. A charter violation drops an agent a rung, the same
way you'd pull back responsibility from someone who made a serious mistake, and it goes back
up by working correctly at the lower level for a while.
3. Human gates on anything irreversible
A gate is a hard stop in front of a specific class of action: anything that reaches a
customer or vendor, anything that moves money, anything that can't be undone. The agent does
all the work up to that line, then presents the finished artifact and waits.
The design detail that makes gates survive contact with reality is that the gate has to
show its work. A prompt that says "approve this action?" gets rubber-stamped within a
week. A gate that shows the actual email, names the rule that triggered the stop, and states
what happens on approve versus deny gets read. If your reviewers are clicking approve
without reading, you don't have a gate — you have a speed bump and a false sense of safety.
4. An append-only log, because someone will ask
Every action, every refusal and every human decision lands in a log that is written once and
never edited. Not for compliance theater — for the ordinary Tuesday when a customer asks why
they got a particular email and the honest answer needs to include which agent drafted it,
which rule let it through, and which human pressed send.
Refusals go in the log too, and they're the most useful entries in it. An agent that declined
work is telling you either that a charter is too tight or that a real hazard exists. Both are
worth knowing; neither shows up if you only log successes.
5. The oversight dashboard
Once more than two or three agents are running, the bottleneck moves to the human, and the
question becomes what one overseer needs on one screen to stay genuinely in control. In
practice it's four things:
- Who's on shift and at what rung — the current roster with each agent's autonomy level visible, so an escalation is noticeable rather than something you find out about later.
- What's waiting on me — the gate queue, oldest first. If this list is never empty, autonomy is set too low; if it's always empty, it's set too high.
- What stopped, and why — refusals and charter blocks, quoted against the specific rule that fired. This is the panel that tells you whether the governance is working or just decorative.
- The running log — one chronological stream across all agents, because most real problems are visible in the ordering of events rather than inside any single one.
The measure of the whole arrangement is simple: an overseer should be able to walk away for
an afternoon and, on returning, reconstruct exactly what happened and why — without asking
anyone.
Where I'd start
Pick one queue with real volume and low blast radius. Put a single agent on it at
Draft and leave it there longer than feels necessary. Write the charter before writing
any code. The first two weeks should produce more edits to the charter than to the
implementation — if they don't, the charter isn't specific enough to be doing any work.