- 40declarative tools in the catalog, beside about twenty Rust built-ins
- 50golden fixtures run through the runtime's own pipeline
- 29personas declared, not coded
Tools declared as data
Every new agent tends to arrive with its own tooling and permissions, and every one of those is a new place for something to go wrong, so in Agent Swarm I decided tools and agent roles would be data. Tools are declared in YAML in four kinds. Composed tools template from inputs and earlier results, with recursion detection and depth caps; HTTP templates use RFC 3986 encoding; and a peer service turns any agent into a tool provider.
A WebAssembly tool kind is declared and the harness rejects it, because a half-finished kind would have meant a partial bypass of the pipeline.
Every tool tested before it ships
A one-line tool still needs golden and attack fixtures, and a test runner pushes every fixture through the same pipeline the runtime uses.
Exceptions are where the holes are.
Catalog hashes and drift detection treat the tool catalog as replicated configuration across hosts.
Who an agent is, apart from what it runs on
Agent classes are declared the same way. A 545-line persona schema carries who the agent is, and a separate execution profile carries what it runs on, so a model change needs no new persona.
A lint on prompt-personas keeps persona voice from carrying tool rules, packet checks or output-shape rules that belong in other layers.
Capabilities by class, frozen at launch
A versioned tool-class manifest maps classes onto MCP tool selectors, so a work order asks for capabilities by class rather than by tool. Resolving once at launch and freezing makes every seat auditable.
The same persona library starts the managed seats of AgentOS. The design is told in Tools are the platform.