Written by Cyprian Aarons, founder and principal engineer at Topiax.
Reviewed September 14, 2026 by Cyprian Aarons
About the authorThe conversation I keep having with teams building agents:
βCanβt we just let it handle the whole workflow?β
I hear a version of this 3 times a week from developers in my network.
And honestly⦠I get it.
The demo is irresistible:
Goal β Agent β ??? β Success
You describe the outcome β the agent plans β tools run β the screen lights up. π
Full autonomy makes a great demo.
Controlled autonomy makes a great product.
The goal is not to build an agent that can do everything.
It is to build one that reliably does the right thing.
The Compound Mistake Problem π
Here is the part a happy-path demo hides:
Every dependent step is another chance to drift.
If each step succeeds 95% of the time, 10 dependent steps produce:
0.95 Γ 0.95 Γ 0.95 Γ 0.95 Γ 0.95
Γ 0.95 Γ 0.95 Γ 0.95 Γ 0.95 Γ 0.95
β 59.9% end-to-end success
That is not a prediction for every workflow β it is the compound-error shape when the steps are roughly independent.
Correlated failures can be worse.
One bad classification β wrong branch β wrong tool β invalid state β confused retry.
The agent did not need to be βbadβ at every step.
It only needed enough small misses to make the full chain unreliable.
Long autonomy chains turn ordinary uncertainty into product behaviour.
What is the production question?
Not βCan the agent finish this once?β
How often does it finish correctly β with the right state, side effects, and recovery record?
9 Ways to Build Controlled Autonomy π§
1οΈβ£ Stop Building God Agents π©οΈ
The fastest way to create an unreliable system is to give one model every tool, every credential, and every workflow.
Then ask it to figure out the architecture dynamically.
That is not a product strategy.
That is unfinished architecture wearing an agent costume.
If the business process is already known, encode it.
| God agent | Bounded workflow |
|---|---|
| Every tool is available | Only task-specific tools are visible |
| The model invents the process | The workflow owns the state transitions |
| One broad credential | Separate, scoped capabilities |
| βTry againβ is the recovery plan | Stop, inspect, and escalate are explicit |
TopiaX mascot separating a powerful god agent from a bounded workflow
You can still use a strong model.
Just give it a smaller world to reason inside.
2οΈβ£ Agents Should Decide Where Decisions Exist π§
AI is useful when the input is ambiguous.
Business rules are useful when the outcome must be consistent.
Use the agent for:
- Classification β what kind of request is this?
- Matching β which record or option is the best fit?
- Summarization β what changed across these documents?
- Planning β which allowed path should happen next?
Keep these decisions deterministic:
- Validation β does the amount, schema, and target pass?
- Approval β does this exceed the threshold?
- Ordering β did we read before we write?
- Eligibility β is this user allowed to perform this action?
The reliable shape is:
Agent interprets
β Application validates
β Policy checks
β Human approves when needed
β Tool executes
The model can choose among permitted options.
It should not be allowed to redefine what βpermittedβ means.
AI handles ambiguity. Code handles consequences.
3οΈβ£ Graphs Beat Wandering π
An agent that can invent a workflow at every turn is difficult to evaluate.
You do not know which branch it will take.
You do not know which state it will leave behind.
You do not know whether the next run can safely resume.
Use predefined states and branches instead:
RECEIVED
β CLASSIFIED
β VALIDATED
β APPROVAL_REQUIRED
β EXECUTED
β VERIFIED
The model reasons inside a safe state space.
It can select the next allowed branch, produce structured data, or explain why the workflow should pause.
It cannot silently invent a new side effect between VALIDATED and EXECUTED.
State graph that keeps agent reasoning inside bounded branches
Whether the implementation uses LangGraph, a queue, or plain TypeScript matters less than the invariant:
State transitions belong to the application.
4οΈβ£ Hard Limits Are a Feature π
Every production run needs ceilings.
Not because the model is malicious.
Because every system eventually meets a weird input, a slow dependency, or a loop it cannot explain.
Set limits for:
| Limit | What it protects |
|---|---|
| Steps | Prevents a workflow from wandering forever |
| Tool calls | Caps retries and repeated side effects |
| Runtime | Stops a stuck dependency from holding the run open |
| Cost | Keeps one unusual request from becoming a billing event |
| Output size | Keeps downstream state bounded and inspectable |
When a limit is hit:
Stop
β Return partial results
β Record the exact boundary
β Verify current state
β Escalate or resume safely
A timeout is not success.
A timeout is not always failure either.
It is UNKNOWN until the system checks what actually happened.
Deterministic hard-limit stop path and recovery flow
TopiaX mascot stopping a runaway agent at a hard execution limit
The stop path is part of the product.
5οΈβ£ Humans Are Not Failed Automation π€
Human review is not an embarrassing fallback.
It is a control for moments where probability of error Γ cost of error becomes unacceptable.
Put a human at high-impact nodes:
- Money moves.
- Access is granted.
- Legal or customer-facing language is sent.
- Records are deleted.
- A production deployment changes real behaviour.
Good approval UX shows:
- The action β what will happen?
- The impact β who or what changes?
- The evidence β why does the system recommend it?
- The reversibility β what can be undone?
- The owner β who is accountable for the decision?
TopiaX mascot reviewing a consequential action before the agent executes it
βHuman in the loopβ is not a magic phrase.
If the reviewer only sees a green button and a paragraph, the gate is theatre.
The reviewer needs enough context to make a decision in 30 seconds, not enough mystery to rubber-stamp one.
6οΈβ£ Think of Autonomy as a Slider ποΈ
Autonomy is not a binary setting.
Manual and agent are not the only 2 modes.
Manual β Assist β Ask β Agent
| Level | Model role | Human role |
|---|---|---|
| Manual | Explains or retrieves | Executes and owns the decision |
| Assist | Drafts a recommendation | Reviews and acts |
| Ask | Proposes the next action | Approves policy-sensitive steps |
| Agent | Executes bounded low-risk work | Handles exceptions and high-impact gates |
Different tasks deserve different autonomy levels.
Let a model automate a low-risk ticket label while keeping account deletion at Assist or Ask.
Let it draft a release note while keeping the actual deploy behind validation, approval, and a rollback path.
Autonomy slider that expands only when evidence can carry the risk
The right setting is not the most autonomous one.
It is the least autonomy that reliably produces the outcome.
7οΈβ£ Scoped Tools Beat Powerful Tools π
Tool design is autonomy design.
Prefer:
get_customer(id)
over:
execute_sql(query)
Prefer:
run_tests()
over:
run_shell(command)
The narrow tool gives the model less room to improvise and gives the application more room to validate.
Review each tool with 4 questions:
- What is the smallest capability that completes the task?
- Which arguments can change the blast radius?
- Which permissions are resolved at runtime?
- What receipt and rollback path does the action produce?
The future is not every agent with a bigger toolbox.
It is agents with better boundaries around smaller tools.
8οΈβ£ Static Workflows Are Underrated ποΈ
Known business processes do not need to become probabilistic just because LLMs exist.
If the workflow is:
Read order
β Validate stock
β Calculate total
β Request approval above threshold
β Place order
β Send confirmation
Keep that shape.
Use the model where the request is messy, the match is ambiguous, or the explanation needs to be human-friendly.
Do not ask the model to rediscover a process your team already understands.
Static does not mean rigid.
It means the important transitions are visible enough to test.
9οΈβ£ Autonomy Should Expand With Evidence π
Do not grant more autonomy because the demo looked smooth.
Grant it because the evidence survived contact with real inputs and real side effects.
| Stage | Agent role | Evidence required |
|---|---|---|
| Crawl | AI recommends; human acts | Representative cases, clear explanations, no hidden side effects |
| Walk | Low-risk tasks automate | Evals pass, limits fire, failures escalate, receipts exist |
| Run | Bounded workflows execute | Reliability holds in prod, operators can stop it, recovery is rehearsed |
That is the operating sequence:
Constrain
β Observe
β Evaluate
β Approve
β Automate a little more
The bar moves with the consequence.
Confidence is not a feeling. It is a record of tested behaviour.
Production Autonomy Checklist β
Before moving a workflow one step to the right on the autonomy slider:
- Step limits β Does every run have a ceiling?
- Cost limits β Can one weird request exhaust the budget?
- Workflow boundaries β Are states and branches explicit?
- Tool scope β Does every tool expose the minimum capability?
- Permission boundaries β Are user, agent, service, and resource scopes resolved?
- HITL gates β Are high-impact actions reviewable before execution?
- Durable state β Can the workflow resume without guessing?
- Evaluations β Have representative pass, fail, escalate, and stop cases run?
- Observability β Can an operator see retrieval, generation, tools, state, and handoffs?
- Rollback β Can the team stop, verify, reconcile, and recover?
A checklist does not make a workflow reliable by itself.
It makes the missing conversations visible before the incident does.
The Real Bottom Line β‘
Full autonomy optimizes for the wow moment.
Controlled autonomy optimizes for the repeatable outcome.
The production shape is:
Goal
β Bounded state space
β Scoped tools
β Deterministic rules
β Human gate where consequence demands it
β Receipt
β Recovery path
Unbounded autonomy is often just architecture we have not finished yet.
The future is not AI that acts everywhere.
It is AI that acts exactly where the system can absorb its mistakes.
Your Turn π
What is the first guardrail you would add to an agent in prod?
Step limit?
Human approval?
Scoped tools?
Durable state?
Drop it below π
Let's compare the autonomy sliders π
Choose your next move
Keep learning or check one workflow before release.
Production Agent Dispatch turns each week's field note into one failure pattern, one practical control, and one next move. Four minutes or less.
Use the gap profile when this article describes a real workflow your team expects to release.
Get your production AI gap profile