BATON, Bounded Authority for Traceable Orchestrated Networks, is a vendor-neutral standard for teams of AI agents. Every unit of work is scoped, every interaction between agents is recorded, and every action that touches the outside world is authorised and metered. So that question always has an answer.
Rules the runtime guarantees, not guidance in a doc.
No database, HTTP client or model provider baked in.
Agents can't reach each other, so every exchange is a trace.
A protocol plus a reference implementation. Public release is planned.
Most agent frameworks let agents call each other directly. That works until someone asks why the system did something. Direct calls leave nothing behind, so the answer has to be rebuilt from logs, if it can be rebuilt at all.
Baton makes the trace structural rather than optional. Specialists can't reach one another, so every piece of data that moves between them is a durable, attributed, ordered blackboard entry, and every request for another capability is a recorded delegation. Auditability is a consequence of the architecture, not a logging habit someone has to keep up.
One orchestrator owns all authority. Specialists each see only their slice of the task, write to a shared blackboard, and anything with a side effect waits for a person.
Versioned and persistent: the intent, how it was broken down, known gaps, shared facts and spend.
The bounded view a single specialist receives. An analyst sees the quotes, not your HR records.
An append-only, visibility-controlled fact store. It belongs to exactly one task and one tenant.
The only constructor of specialists. It owns authority and the order in which work depends on other work.
A tool-calling loop that can pause for human approval and resume from storage, even after a restart.
Token, tool-call, spawn and depth ceilings shared across the whole task tree, so a team can't run away with your spend.
These aren't best practices. The reference implementation refuses to run anything that breaks them.
An approval can take hours, far longer than any request or worker lives. So Baton never holds the loop's position in memory: the paused run is saved with the task and picked up exactly where it stopped once a person decides.
Baton has no built-in dependency on any database, HTTP client, model provider or cloud. Everything external is an interface you implement against your own systems, so the same guarantees hold in Verkko Cloud, your own cloud or an air-gapped install.
# Reference implementation (Python)
registry = {
"analyst": SpecialistConfig(
capability="analyst",
tools=("quote_parse",),
can_delegate_to=("researcher",),
context_keys=("category", "budget"),
),
}
orch = Orchestrator(registry, deps)
outcome = orch.run_task(envelope)
if outcome.suspended:
store.save(envelope) # waits for a person
...
orch.resume_task(envelope, sub_id,
approved=True)
Baton is the governance layer underneath every action Verkko Nexus takes. See it running on your own workflows.