What should an agent have before it can act in production?

It needs hard limits the model can't talk its way past. Anything risky waits for a person or a judging model. Each step can only touch what you handed it, a cap stops runaway spend, and the record outlives the chat. Get that right and the agent goes from demo to a process your business can rely on.

What can it reach?

Before approval even matters, credentials decide what the agent can attempt. Check three things: each step gets only the permissions it needs, it holds them only while the step runs, and text the model reads can never reach a reusable credential. One shape that meets that bar looks like this:

The model never holds a long-lived secret, so a poisoned input can’t walk off with a key. It can still ask for any tool call the step is allowed, which is why the gates on risky actions matter. And the sandbox holds whatever context you gave the step, so treat that as exposed. Where the connected tool supports it, the grant belongs to the person who asked, and a question about production errors runs with that person’s read scopes.

Who approves an action?

The question is whether approval is a property of the action or a habit of the integration. If confirmation is a prompt an integration author remembered to add, the safety of any given action depends on whoever wired that action up, and the next integration starts from zero. The alternative is a gate attached to the action itself and enforced outside the agent asking. Filing a ticket passes a model-judged check automatically, rolling back production waits for a person, and moving one action to automatic touches nothing else.

What does the record keep, and for how long?

Months after an incident, someone asks who approved the rollback. If approval happened only in a chat thread, the scrollback is the record. Check which parts survive, and whether the acting agent can edit them. A dashboard of token counts is not the record; the record is the action, the analysis behind it, the approver and the cost, together under one ID:

what the record should hold · one run, one ID · illustrative values
context · error groups + deploy diff$0.11
analysis · what broke, and when$0.52
judged gate · ticket criteriapass$0.03
held gate · rollbackapproved · on-call$0.00
rollback · confirmed landed$0.02
total$0.68

With that, “who approved the March rollback” is a lookup. Without it, someone pieces the decision together from chat scrollback.

What can a run spend?

There are two answers that sound the same and aren’t: cost that is reported, and cost that is enforced. A dashboard tells you what a run spent after it spent it. A budget is only a boundary if something stops at it. On a playbook run, where the work is staged before anything executes, the cap halts the run and holds it, so an agent stuck in a loop pauses for a person instead of running up a bill.

What happens when it dies mid-action?

Once an action lands in an external system, there may be no clean way to reverse it. That’s true of anything that acts, including anything you build, and it’s the question demos never answer. One workable shape: runs checkpoint at stage boundaries and resume from the last completed one. A stage that was mid-action when it died checks what landed before it fires again, either by reading the target system back or by making the action safe to repeat. If it can’t prove what landed, it stops and holds for a person in an agent inbox.

Can you stop all of it, right now?

One run pausing at a gate is routine. The day something is wrong, a leaked key or a bad deploy, you need new actions stopped immediately and every active run brought to its next safe boundary without losing state. Ask what happens to external calls already in flight, because no stop can unsend those. A stop should freeze rather than kill: held runs keep their work and their record, so resuming after the all-clear is a decision instead of a rebuild. If the only stop you have is revoking keys, the work in flight is lost and nobody can say when it’s safe to resume.

What happens when the input is hostile?

An agent that acts on what it reads will eventually read something written to manipulate it: an error message, or a ticket filed by a stranger. A smarter model can’t close this, because reading instructions is the job. The protection is structural, and it’s the first two questions doing their work: the stage that reads untrusted text carries as little authority as its job allows, and the actions that matter sit behind gates on the way out. Ask what a poisoned input can reach and what it can trigger. If the answer depends on the model being careful, there is no enforced boundary.

How does it earn more autonomy?

Nothing should launch with the rollback button on automatic. The workable path is per-action: start with every consequential action held, let the record accumulate, and promote one action at a time. Before removing the hold, decide what would restore it: which failure classes the automatic checks must catch, and what error rate sends the action back behind the gate. This is where the record question pays for itself, because those thresholds only mean something against real run history.

How do you know it’s drifting?

Agents fail quietly: a prompt edit makes a judged gate lenient, a model update changes behavior, cost creeps run by run. The signals live in the record, if the record is real: gate rejection rates, held-action rates, cost per run over time. Baseline them by playbook and model version. Run the same fixed cases across a change before it ships, and decide in advance which shifts put an action back behind human approval. Watch the trends the way you watch error rates on a service.

Where the answers live

Five of the nine belong to each run:

The other four sit above any single run: the fleet-wide stop, the trust boundary around untrusted text, the per-action autonomy dial, and the trends in the run history. For what a receipt looks like on a real run, the seven-models review post shows one end to end.

Does a person have to approve every agent action?
No, and requiring that would bury your team. The workable shape is a gate per action: low-stakes actions pass an automatic check against criteria you wrote, consequential ones wait for a person, and you move each action between those modes independently as trust builds.
Can you retry an agent action that failed halfway?
Only after checking what landed. If the system can't prove whether the action completed, the safe behavior is to stop and hold the run for a person.
How do you protect an agent from prompt injection?
Structurally, not with instructions. Keep the step that reads untrusted text away from credentials that matter, and put consequential actions behind gates the model can't cross on its own.
Do these questions apply to open-source agents?
They apply to everything. Source access makes some answers directly checkable, though the deployed configuration and anything hosted still need their own look.

Watch a playbook run live

A live run on the homepage. No signup.