Retiring Swarm: Choosing Operational Truth Over Orchestration Theater
Today we removed FabrCore's experimental Swarm layer. That sounds like subtraction, but it is the first step toward a much stronger orchestration model: one where every unit of work has a durable owner, every agent has a real handle, and the UI describes the same system the runtime is actually executing.
What the Experiment Taught Us
Swarm proved that developers want declarative teams, role-based delegation, and a simple way to hand a large objective to several agents. It also exposed a difficult boundary. The orchestration layer was beginning to own its own notions of plans, members, progress, and completion while Orleans grains already owned agent identity, state, messaging, and recovery.
Two sources of truth are tolerable in a demo and expensive in production. When a silo restarts, which plan wins? When an operator opens a command center, are they looking at the team described in configuration or the agents carrying the work? When a member becomes unhealthy, is that runtime state visible through the orchestration abstraction? We decided those questions should not require translation.
The Boundary We Want
The runtime should own durable behavior: agent turns, todo state, iteration, messages, reminders, health, compaction, and recovery. Surface should own composition: which agents form a team, which role each member plays, and how operators see and control that team. Blueprints should remain the canonical deployment description.
That boundary gives us fewer abstractions and better guarantees. A delegated task is a FabrCore message, not an orchestration-only record. A worker is a real agent handle with health and ACL enforcement. A long-running plan survives through the same grain persistence used by the rest of the system. A squad shown in Surface is built from those real runtime objects.
A Deliberate Breaking Change
Swarm types and nested Swarm squad configuration will not be carried forward as compatibility aliases. Keeping them would preserve ambiguity at exactly the moment we are trying to remove it. The migration will be explicit: team composition moves to top-level Surface squads; autonomous plan execution moves into a native agent Harness.
Over the next several posts we will build those replacements in public: first the squad model, then the Harness, then context safety, transport, and skills. The goal is not merely feature parity. It is a system that operators can trust after the exciting first demo is over.
Later this morning: why Surface squads come in two distinct shapes—orchestrator and task—and why one team abstraction was not enough.