Governance

Human-in-the-loop

Risky actions can pause and wait for a person. A paused agent surfaces in the approval inbox, where one click resumes it — with the action re-evaluated against policy.

Pausing an action

Any rule or soft budget can pause instead of allow/deny:

policy.yaml
rules:
- trigger: "action:wire_transfer"
checks: ["amount > 1000"]
enforce: pause
message: "Large transfer needs approval"
Note
When paused, the runtime records pending_approvalon the agent's context and waits. On resume, the action is re-evaluated — approval is a one-time override, not a blanket bypass.

Approval inbox

Run the control plane and open the inbox to review and approve paused actions:

shell
antraft serve
# then open:
# http://localhost:8000/inbox (web inbox, one-click approve)
# http://localhost:8000/observability (live runs + decisions)

Approve via API

shell
GET /agents # list active agents
GET /agents/{id} # status (paused? pending action?)
POST /agents/{id}/approve # approve the pending action and resume
POST /agents/{id}/signal # PAUSE | RESUME | STOP

Fleet / swarm control

The same control plane manages remote agents: they heartbeat in and receive pending signals, so you can pause, resume, or update policy across a fleet from one place.

swarm.py
Antraft.agent(model, tools, task="...")
.connect_swarm("http://localhost:8000")
.build()