Autonomy levels and guardrails
The four levels, what the code actually enforces at each, and the guardrails.
An agent's autonomy level says how much it may do without a human. It is enforced in Python before anything is published, not just shown on a dashboard.
The four levels#
Ordered from least to most independent. The order is load-bearing: enforcement compares positions in this list.
| Level | Meaning |
|---|---|
| Approval Required | Drafts everything. A manager must approve before anything leaves Odoo. |
| Assisted | Drafts and prepares work, but a human sends it. May update Odoo records on its own. |
| Semi-Autonomous | Acts on its own within its limits. Anything above its limits needs approval. |
| Autonomous | Acts on its own for everything inside its responsibilities. |
What the publishing gate does with them#
Today the gate makes one distinction:
| Level | May publish an unapproved post on its own? |
|---|---|
| Approval Required | No. |
| Assisted | No. |
| Semi-Autonomous | Yes, if it passes the guardrails. |
| Autonomous | Yes, if it passes the guardrails. |
Note
Semi-Autonomous and Autonomous are treated the same by the publishing gate: both may publish within the guardrails. The levels below Semi-Autonomous differ in what the agent is described as doing, not in what the gate allows. Choose the level that honestly describes the agent, and use the guardrails to bound it.
Guardrails#
The guardrails are what make "semi-autonomous" mean something. When an agent tries to publish without prior approval, the checks run in this order and the first failure refuses the publish:
- The agent must be Active. "Agent 'X' is not active (currently: Paused)."
- Autonomy must reach Semi-Autonomous. "Agent 'X' runs at 'Assisted' autonomy, so a human must approve before publishing."
- Media needs a human, if Approval Required for Media is on and the post has attachments. "Agent 'X' requires human approval for posts containing media."
- The daily cap. If Max Posts / Day is not
0and the agent has already published that many today. "Agent 'X' has reached its daily limit of N posts (M today)."
Today's count is the number of publish entries the agent has in the activity log since the start of the day (server time, UTC). So the cap counts what was actually logged as published, not attempts.
A refusal raises an error to the person or job that tried, and is logged as Publish Blocked with the reason. It never silently skips.
What autonomy does not do#
- It does not restrict which Odoo models an agent may read. See the warning in The agent registry.
- It does not stop a Manager publishing by hand. A manager's click is the approval. See Publishing gate.
- It does not apply to posts a human has already approved: an Approved or Scheduled post may be published regardless of agent.
Choosing a level#
| If the agent… | Choose |
|---|---|
| writes drafts and you review everything | Approval Required |
| triages and drafts replies that a person sends | Assisted |
| publishes routine, low-risk text within a daily cap | Semi-Autonomous |
| only reads, reports or blocks, and never publishes | Autonomous is safe, because there is nothing to publish |
Tip
Raise autonomy gradually. Filter the activity log by Blocked by Policy to see where an agent is being stopped, then decide whether the limit is right or the agent is.