Overview
TheAutoSwarmBuilder class automatically builds and manages swarms of AI agents by intelligently decomposing tasks and creating specialized agents as needed. It uses a sophisticated boss agent system to delegate work, design agent architectures, and orchestrate multi-agent collaboration.
The boss agent’s reply is parsed and validated against a Pydantic schema. Malformed JSON or a schema mismatch triggers a repair retry that feeds the error back to the model; if no valid reply arrives within the budget, a ValueError is raised.
Each run() is recorded as an AutoSwarmBuilder.run trace span when telemetry is enabled. When the swarm is executed, the SwarmRouter.run span nests under it, so the build phase and the delegated run share one trace. See Telemetry.
Class Definition
Parameters
str
default:"auto-swarm-builder"
The name of the swarm builder instance
str
default:"Auto Swarm Builder"
A description of the swarm builder’s purpose
bool
default:"True"
Stored as
builder.verbose but not read. The builder logs through loguru either wayint
default:"1"
Passed as
max_loops to the SwarmRouter built by build_and_run_swarm() and initialize_swarm_router(). Cannot be 0str
default:"gpt-5.4"
The LLM model to use for the boss agent that designs the swarm architecture
int
default:"8000"
Maximum tokens for the LLM responses from the boss agent
str
default:"return-agents"
Type of execution to perform. Options: “return-agents”, “return-swarm-router-config”, “return-agents-objects”
str
default:"BOSS_SYSTEM_PROMPT"
System prompt for the boss agent that designs swarm architectures. Defaults to comprehensive agent design prompt
dict
default:"{}"
Additional arguments to pass to the LiteLLM wrapper
bool
default:"False"
Default value for
run()’s execute parameter. When True, run() builds real Agent objects from a freshly generated spec and executes them through a SwarmRouter (via build_and_run_swarm()) instead of returning a spec-only resultAttributes you can set after construction
These are not constructor arguments. Set them on the instance before callingrun().
Optional[int]
default:"None"
Upper bound on how many agents the boss agent may generate. A larger roster raises
ValueError. Unbounded when Noneint
default:"1"
Number of repair retries when the boss agent’s reply is malformed JSON or fails schema validation
Execution Types
return-agents
Returns agent specifications as a dictionary:return-swarm-router-config
Returns complete SwarmRouter configuration:return-agents-objects
Returns instantiated Agent objects ready for use:Methods
run()
str
required
The task to execute. The boss agent will analyze this task and design an appropriate swarm architecture
Optional[bool]
default:"None"
When
True, builds real agents and a SwarmRouter from a freshly generated spec and runs it (see build_and_run_swarm()), returning a dict that includes the execution output. When False, only a spec-only result is returned, per swarm_type. Defaults to self.auto_execute when left as NoneAny
When executing (
execute resolves to True): a dict from build_and_run_swarm(). Otherwise, the result depends on swarm_type:- “return-agents”: Dictionary with agent specifications
- “return-swarm-router-config”: SwarmRouter configuration dictionary
- “return-agents-objects”: List of instantiated Agent objects
ValueError: If swarm_type is invalid, or if the generated spec fails validation (seecreate_agents())Exception: If there’s an error during swarm execution
build_and_run_swarm()
task and executes it. Generates one validated SwarmRouterConfig, builds the real Agent objects from that same spec’s agents, and runs a SwarmRouter with them — so the agents that execute are exactly the ones described in the returned metadata, unlike chaining create_agents() and initialize_swarm_router() (which make two independent, potentially-disagreeing LLM calls). This is what run() calls when execute resolves to True.
Parameters:
str
required
The task to design and run a swarm for
dict
{"name", "description", "agents" (names actually built), "swarm_type", "task", "output"} where output is the SwarmRouter’s execution resultoutput_type="dict" and the builder’s max_loops. The spec’s rules and multi_agent_collab_prompt fields are not applied to the agents.
create_agents()
str
required
The task to create agents for
dict
{"agents": [...]}, one validated AgentSpec dict per agentValueError: If no valid reply arrives within the repair budget, if two agents share anagent_name, or if the roster exceedsmax_agents
create_agents_from_specs()
Any
required
Dictionary or Pydantic model containing agent specifications
List[Agent]
List of instantiated Agent objects ready for use
ValueError if two specs share a non-empty agent_name.
create_router_config()
str
required
The task to create router configuration for
dict
The
SwarmRouterConfig fields as a dict. task is set to the exact string you passed, not the model’s echo of itValueError: If the reply fails validation, names aswarm_typeoutsideSwarmType, repeats anagent_name, or exceedsmax_agents
batch_run()
run(), so each gets its own trace span.
Parameters:
List[str]
required
List of tasks to execute
List[Any]
List of results from each task execution
reliability_check()
ValueError: Ifmax_loopsis 0,max_agentsis set and not positive, ormax_json_repair_attemptsis negative
__init__. Call it again yourself if you change max_agents or max_json_repair_attempts afterwards and want them checked.
list_types()
List[str]
List of available execution types
initialize_swarm_router()
SwarmRouterConfig for the task; only its name, description, swarm_type, and rearrange_flow are used, and the generated agent specs are discarded. The SwarmRouter is built with your agents, the builder’s max_loops, and output_type="dict". Not called by run().
To design the agents and run them from one consistent spec, use build_and_run_swarm() instead.
Parameters:
List[Agent]
required
Agents to pass to the constructed
SwarmRouterstr
required
The task used to derive the
SwarmRouter configuration and to executeswarm_router.run(task)
Raises: Exception if router config generation or execution fails
dict_to_agent()
Agent objects from a raw {"agents": [...]} dictionary by delegating to create_agents_from_specs(), so the description → agent_description mapping and the duplicate-name check apply. Any non-dict input returns an empty list.
Parameters:
dict
required
Dictionary containing an
"agents" list of agent configuration dictsList[Agent]
Data Models
AgentSpec
SwarmRouterConfig
SwarmRouterConfig lives in swarms.structs.auto_swarm_builder and is the boss agent’s output schema. It is a different class from the SwarmRouterConfig in swarms.structs.swarm_router.
The generated swarm_type must be a SwarmType member. "AutoSwarmBuilder" and "auto" are always rejected so a generated spec cannot recurse.
Boss Agent Design Principles
The AutoSwarmBuilder uses a sophisticated boss agent with expertise in:- Comprehensive Task Analysis: Deconstructing tasks into components and sub-tasks
- Agent Design Excellence: Creating agents with clear purposes and complementary personalities
- System Prompt Engineering: Crafting detailed prompts with role, capabilities, and protocols
- Multi-Agent Coordination: Designing communication channels and task handoff procedures
- Quality Assurance: Establishing success criteria and validation procedures
Usage Examples
Basic Agent Creation
Create Agent Objects
Generate SwarmRouter Config
Batch Processing
Advanced Features
Custom System Prompt
Additional LLM Arguments
Multi-Agent Architecture Types
The boss agent can design swarms using various architectures:- AgentRearrange: Dynamic task reallocation
- MixtureOfAgents: Parallel specialized processing
- SequentialWorkflow: Linear task progression
- ConcurrentWorkflow: Parallel execution
- GroupChat: Collaborative discussion
- HierarchicalSwarm: Layered decision-making
- HeavySwarm: High-capacity specialized processing
- MajorityVoting: Democratic decision-making
- And more… Any
SwarmTypevalue is accepted