← Back to all projects

swarms

Python framework stocked with ready-made multi-agent patterns, not a minimal core to build on

OfficialApache-2.0
Stars
7.1k
Forks
1k
Open issues
162
Last commit
28 Aug 2026

What is swarms?

Swarms pairs one Agent class with a large stock of ready-made ways to run several agents together: a chain, a parallel fan-out, a directed graph, a director handing work to specialists, a panel that votes or debates. One router reaches fifteen of those shapes by name, so trying a different form of collaboration is usually an edit rather than a rewrite — though several also want a setting of their own, and one wants its three agents in a fixed order. Breadth is the cost as well as the appeal: in the 14.0.0 release the Agent constructor alone takes 89 named options, and the reference documentation has already drifted from the code on whether an agent's memory survives a restart. Read the defaults out of the source before the first production run, not out of the page that describes them.

What can you do with swarms?

  • Start with one agent and let it decide when to stop — max_loops=3 runs a fixed number of reasoning turns, while max_loops="auto" hands the stopping decision to the model, which keeps planning and acting until it declares the task done. Model names are LiteLLM identifiers, so an OpenAI, Anthropic or Groq id works as written, and fallback_models rotates through a list when the first one errors.
  • Give it tools and MCP servers — Plain Python functions with type hints and a description become callable tools — Swarms converts them into the schema the model sees. Setting mcp_url or mcp_urls points the agent at one or more MCP servers, whose tools then appear with no further configuration.
  • Add capabilities as markdown skill files — skills_dir points at a directory holding one folder per skill, each with a SKILL.md in Anthropic's Agent Skills format. On each run only the skills whose description matches the task are appended to the system prompt; call handle_skills() with no task to load every one of them instead.
  • Switch on memory that survives a restart — persistent_memory=True writes a MEMORY.md under the workspace directory, keyed by the agent's name so the next process started under that name picks it up. It is off by default, so nothing reaches disk unless you ask for it. Compression is separate and is on: in the 14.0.0 release it measures the running transcript against a fixed budget of 16,000 tokens rather than the model's own window, and overwrites whatever context_length you pass, so a summary replaces the transcript at roughly 14,400 tokens on every model. Where a memory file exists the raw log is copied to an archive folder first. long_term_memory takes a vector database instead when you want retrieval over external documents.
  • Compose agents into a swarm, then swap the shape by name — SequentialWorkflow passes each output to the next agent, ConcurrentWorkflow gives the same task to all of them, and AgentRearrange takes a flow string such as "researcher -> writer, editor" for anything in between. SwarmRouter dispatches fifteen shapes from one swarm_type name — a director delegating to workers, experts merged by an aggregator, a group chat, majority voting, a debate with a judge — but the name is not always enough on its own: AgentRearrange also needs its flow string, DebateWithJudge reads its three agents in pro, con and judge order, and BatchedGridWorkflow takes its list of tasks at run.
  • Express real dependencies as a graph — GraphWorkflow treats each agent as a node and each edge as a dependency, so a node runs only once everything upstream has finished and independent branches go in parallel without being asked. on_node_complete fires per node for progress reporting, and to_spec() writes out the topology and agent names without the agents themselves, so the shape of a workflow can live in version control.

Before you choose swarms

  • Tracing is on by default and, per the project's own documentation, records the task text, the agent's output and the full constructor configuration including system prompts; one environment variable turns it off.
  • Once a graph workflow is given a checkpoint directory its saved progress is keyed by the task text alone, so in the 14.0.0 release a repeat run of the same task resumes rather than starting over.Reported in#1762

Star history

17 Aug to 28 Aug · +42

7.1k7.1k

Frequently asked questions

Is swarms free for commercial use?

swarms is released under the Apache-2.0 licence — OSI-approved open source, which permits commercial use.

How can swarms be deployed?

swarms is available as Self-hosted / Managed cloud.

Documentation

Reproduced from the kyegomez/swarms README, published under Apache-2.0. Read the original ↗

Overview

Swarms, The Enterprise-Grade Production-Ready Multi-Agent Orchestration Framework

Swarms is the most reliable, scalable, and adaptive multi-agent orchestration framework available today. We provide a comprehensive suite of production-ready, prebuilt multi-agent architectures, including sequential, concurrent, and hierarchical systems. Additionally, Swarms offers backward compatibility with leading agent frameworks and interoperability with protocols such as MCP, x402, skills, and much more.

Install

Using pip

$ pip3 install -U swarms

uv is a fast Python package installer and resolver, written in Rust.

$ uv pip install swarms

Using poetry

$ poetry add swarms

From source

# Clone the repository
$ git clone https://github.com/kyegomez/swarms.git
$ cd swarms
$ pip install -r requirements.txt

Environment Configuration

Learn more about the environment configuration here

OPENAI_API_KEY=""
WORKSPACE_DIR="agent_workspace"
ANTHROPIC_API_KEY=""
GROQ_API_KEY=""

Your First Agent

An Agent is the fundamental building block of a swarm—an autonomous entity powered by an LLM + Tools + Memory. Learn more Here

from swarms import Agent

# Initialize a new agent
agent = Agent(
    model_name="gpt-5.4", # Specify the LLM
    max_loops="auto",              # Set the number of interactions
    interactive=True,         # Enable interactive mode for real-time feedback
    temperature=None,
)

# Run the agent with a task
agent.run("What are the key benefits of using a multi-agent system?")

Autonomous Agent with max_loops="auto"

Setting max_loops="auto" lets the agent decide for itself when the task is complete — it keeps reasoning and acting until it reaches a stopping condition, rather than halting after a fixed number of iterations. This is the recommended mode for open-ended, multi-step tasks where the number of steps isn’t known in advance.

from swarms import Agent

agent = Agent(
    agent_name="Autonomous-Research-Agent",
    agent_description="An autonomous agent that conducts multi-step research independently.",
    system_prompt=(
        "You are an autonomous research agent. Break down complex tasks into steps, "
        "execute each step thoroughly, and signal completion only when the full task is done."
    ),
    model_name="gpt-5.4",
    max_loops="auto",       # Agent decides when it's done — no fixed iteration cap
    autosave=True,
    verbose=True,
)

# The agent will keep looping — planning, executing, and reflecting — until it
# determines the task is fully complete.
result = agent.run(
    "Research the current state of quantum computing, identify the top three "
    "hardware approaches, and summarize the key challenges each faces."
)
print(result)

When to use max_loops="auto":

  • Open-ended research or analysis tasks
  • Tasks that require iterative refinement (e.g., write → review → revise)
  • Any workflow where the number of steps depends on intermediate results

When to use a fixed max_loops value:

  • Latency-sensitive or cost-sensitive production pipelines
  • Tasks with a well-defined, bounded number of steps

MCP Integration

The Model Context Protocol (MCP) lets agents easily access external tools and data by pointing to an MCP server URL, which automatically provides tools to the agent as needed. Agents become MCP-enabled by setting mcp_url or mcp_urls, and can use tools from one or many servers with no manual configuration. Free and public MCP servers like DeepWiki work out of the box, offering immediate access to useful agent tools.

from swarms import Agent

agent = Agent(
    agent_name="MCP-Agent",
    model_name="claude-sonnet-5",
    mcp_url="https://mcp.deepwiki.com/mcp",
    max_loops=1,
    temperature=None,
    max_tokens=16_000,
    reasoning_effort=None,
)

print(
    agent.run(
        "Use your tools to explain what the kyegomez/swarms repository does."
    )
)

Your First Swarm: Multi-Agent Collaboration

A Swarm consists of multiple agents working together. This simple example creates a two-agent workflow for researching and writing a blog post. Learn More About SequentialWorkflow

from swarms import Agent, SequentialWorkflow

# Agent 1: The Researcher
researcher = Agent(
    agent_name="Researcher",
    system_prompt="Your job is to research the provided topic and provide a detailed summary.",
    model_name="gpt-5.4",
)

# Agent 2: The Writer
writer = Agent(
    agent_name="Writer",
    system_prompt="Your job is to take the research summary and write a beautiful, engaging blog post about it.",
    model_name="gpt-5.4",
)

# Create a sequential workflow where the researcher's output feeds into the writer's input
workflow = SequentialWorkflow(agents=[researcher, writer])

# Run the workflow on a task
final_post = workflow.run("The history and future of artificial intelligence")
print(final_post)

Available Multi-Agent Architectures

swarms provides a variety of powerful, pre-built multi-agent architectures enabling you to orchestrate agents in various ways. Choose the right structure for your specific problem to build efficient and reliable production systems.

ArchitectureDescriptionBest For
SequentialWorkflowAgents execute tasks in a linear chain; the output of one agent becomes the input for the next.Step-by-step processes such as data transformation pipelines and report generation.
ConcurrentWorkflowAgents run tasks simultaneously for maximum efficiency.High-throughput tasks such as batch processing and parallel data analysis.
AgentRearrangeDynamically maps complex relationships (e.g., a -> b, c) between agents.Flexible and adaptive workflows, task distribution, and dynamic routing.
GraphWorkflowOrchestrates agents as nodes in a Directed Acyclic Graph (DAG).Complex projects with intricate dependencies, such as software builds.
MixtureOfAgents (MoA)Utilizes multiple expert agents in parallel and synthesizes their outputs.Complex problem-solving and achieving state-of-the-art performance through collaboration.
GroupChatAgents collaborate and make decisions through a conversational interface.Real-time collaborative decision-making, negotiations, and brainstorming.
ForestSwarmDynamically selects the most suitable agent or tree of agents for a given task.Task routing, optimizing for expertise, and complex decision-making trees.
HierarchicalSwarmOrchestrates agents with a director who creates plans and distributes tasks to specialized worker agents.Complex project management, team coordination, and hierarchical decision-making with feedback loops.
HeavySwarmImplements a five-phase workflow with specialized agents (Research, Analysis, Alternatives, Verification) for comprehensive task analysis.Complex research and analysis tasks, financial analysis, strategic planning, and comprehensive reporting.
SwarmRouterA universal orchestrator that provides a single interface to run any type of swarm with dynamic selection.Simplifying complex workflows, switching between swarm strategies, and unified multi-agent management.

Learn more about all of the 60+ Multi-Agent Structures we have available here


SequentialWorkflow

A SequentialWorkflow executes tasks in a strict order, forming a pipeline where each agent builds upon the work of the previous one. SequentialWorkflow is Ideal for processes that have clear, ordered steps. This ensures that tasks with dependencies are handled correctly.

from swarms import Agent, SequentialWorkflow

# Agent 1: The Researcher
researcher = Agent(
    agent_name="Researcher",
    system_prompt="Your job is to research the provided topic and provide a detailed summary.",
    model_name="gpt-5.4",
)

# Agent 2: The Writer
writer = Agent(
    agent_name="Writer",
    system_prompt="Your job is to take the research summary and write a beautiful, engaging blog post about it.",
    model_name="gpt-5.4",
)

# Create a sequential workflow where the researcher's output feeds into the writer's input
workflow = SequentialWorkflow(agents=[researcher, writer])

# Run the workflow on a task
final_post = workflow.run("The history and future of artificial intelligence")
print(final_post)

ConcurrentWorkflow

A ConcurrentWorkflow runs multiple agents simultaneously, allowing for parallel execution of tasks. This architecture drastically reduces execution time for tasks that can be performed in parallel, making it ideal for high-throughput scenarios where agents work on similar tasks concurrently.

from swarms import Agent, ConcurrentWorkflow

# Create agents for different analysis tasks
market_analyst = Agent(
    agent_name="Market-Analyst",
    system_prompt="Analyze market trends and provide insights on the given topic.",
    model_name="gpt-5.4",
    max_loops=1,
)

financial_analyst = Agent(
    agent_name="Financial-Analyst", 
    system_prompt="Provide financial analysis and recommendations on the given topic.",
    model_name="gpt-5.4",
    max_loops=1,
)

risk_analyst = Agent(
    agent_name="Risk-Analyst",
    system_prompt="Assess risks and provide risk management strategies for the given topic.",
    model_name="gpt-5.4", 
    max_loops=1,
)

# Create concurrent workflow
concurrent_workflow = ConcurrentWorkflow(
    agents=[market_analyst, financial_analyst, risk_analyst],
    max_loops=1,
)

# Run all agents concurrently on the same task
results = concurrent_workflow.run(
    "Analyze the potential impact of AI technology on the healthcare industry"
)

print(results)

AgentRearrange

Inspired by einsum, AgentRearrange lets you define complex, non-linear relationships between agents using a simple string-based syntax. Learn more. This architecture is perfect for orchestrating dynamic workflows where agents might work in parallel, in sequence, or in any combination you choose.

from swarms import Agent, AgentRearrange

# Define agents
researcher = Agent(agent_name="researcher", model_name="gpt-5.4")
writer = Agent(agent_name="writer", model_name="gpt-5.4")
editor = Agent(agent_name="editor", model_name="gpt-5.4")

# Define a flow: researcher sends work to both writer and editor simultaneously
# This is a one-to-many relationship
flow = "researcher -> writer, editor"

# Create the rearrangement system
rearrange_system = AgentRearrange(
    agents=[researcher, writer, editor],
    flow=flow,
)

# Run the swarm
outputs = rearrange_system.run("Analyze the impact of AI on modern cinema.")
print(outputs)

GraphWorkflow

GraphWorkflow orchestrates agents as nodes in a Directed Acyclic Graph (DAG). Each node is an agent and each edge declares a dependency, so a node only runs after every upstream node has finished. A topological sort guarantees correct execution order, while independent branches run in parallel automatically.

This makes GraphWorkflow the right choice when your workflow has fan-out / fan-in patterns, conditional dependencies, or any structure that doesn’t fit a strict line or a flat parallel batch. Learn more about GraphWorkflow

from swarms import Agent, GraphWorkflow, Node, Edge, NodeType

# Define agents
researcher = Agent(agent_name="Researcher", system_prompt="Research the given topic and produce key findings.", model_name="gpt-5.4")
writer     = Agent(agent_name="Writer",     system_prompt="Write a clear article from the research provided.", model_name="gpt-5.4")
reviewer   = Agent(agent_name="Reviewer",   system_prompt="Review the article for accuracy and clarity.",      model_name="gpt-5.4")
publisher  = Agent(agent_name="Publisher",  system_prompt="Format the final reviewed article for publication.", model_name="gpt-5.4")

# Build the graph: Researcher -> Writer -> Reviewer -> Publisher
workflow = GraphWorkflow()
workflow.add_node(Node(id="researcher", type=NodeType.AGENT, agent=researcher))
workflow.add_node(Node(id="writer",     type=NodeType.AGENT, agent=writer))
workflow.add_node(Node(id="reviewer",   type=NodeType.AGENT, agent=reviewer))
workflow.add_node(Node(id="publisher",  type=NodeType.AGENT, agent=publisher))

workflow.add_edge(Edge(source="researcher", target="writer"))
workflow.add_edge(Edge(source="writer",     target="reviewer"))
workflow.add_edge(Edge(source="reviewer",   target="publisher"))

workflow.set_entry_points(["researcher"])
workflow.set_end_points(["publisher"])

# Run the graph
results = workflow.run("Produce a short article on the rise of small language models.")
print(results)

GraphWorkflow excels at:

  • Complex Dependencies: Express any DAG, including fan-out, fan-in, and diamond patterns
  • Automatic Parallelism: Independent branches execute concurrently without extra configuration
  • Per-node Observability: Hook into node completion via callbacks for streaming and progress tracking

SwarmRouter: The Universal Swarm Orchestrator

The SwarmRouter simplifies building complex workflows by providing a single interface to run any type of swarm. Instead of importing and managing different swarm classes, you can dynamically select the one you need just by changing the swarm_type parameter. Read the full documentation

This makes your code cleaner and more flexible, allowing you to switch between different multi-agent strategies with ease. Here’s a complete example that shows how to define agents and then use SwarmRouter to execute the same task using different collaborative strategies.

from swarms import Agent, SwarmRouter, SwarmType

# Define a few generic agents
writer = Agent(agent_name="Writer", system_prompt="You are a creative writer.", model_name="gpt-5.4")
editor = Agent(agent_name="Editor", system_prompt="You are an expert editor for stories.", model_name="gpt-5.4")
reviewer = Agent(agent_name="Reviewer", system_prompt="You are a final reviewer who gives a score.", model_name="gpt-5.4")

# The agents and task will be the same for all examples
agents = [writer, editor, reviewer]
task = "Write a short story about a robot who discovers music."

# --- Example 1: SequentialWorkflow ---
# Agents run one after another in a chain: Writer -> Editor -> Reviewer.
print("Running a Sequential Workflow...")
sequential_router = SwarmRouter(swarm_type=SwarmType.SequentialWorkflow, agents=agents)
sequential_output = sequential_router.run(task)
print(f"Final Sequential Output:\n{sequential_output}\n")

# --- Example 2: ConcurrentWorkflow ---
# All agents receive the same initial task and run at the same time.
print("Running a Concurrent Workflow...")
concurrent_router = SwarmRouter(swarm_type=SwarmType.ConcurrentWorkflow, agents=agents)
concurrent_outputs = concurrent_router.run(task)
# This returns a dictionary of each agent's output
for agent_name, output in concurrent_outputs.items():
    print(f"Output from {agent_name}:\n{output}\n")

# --- Example 3: MixtureOfAgents ---
# All agents run in parallel, and a special 'aggregator' agent synthesizes their outputs.
print("Running a Mixture of Agents Workflow...")
aggregator = Agent(
    agent_name="Aggregator",
    system_prompt="Combine the story, edits, and review into a final document.",
    model_name="gpt-5.4"
)
moa_router = SwarmRouter(
    swarm_type=SwarmType.MixtureOfAgents,
    agents=agents,
    aggregator_agent=aggregator, # MoA requires an aggregator
)
aggregated_output = moa_router.run(task)
print(f"Final Aggregated Output:\n{aggregated_output}\n")

The SwarmRouter is a powerful tool for simplifying multi-agent orchestration. It provides a consistent and flexible way to deploy different collaborative strategies, allowing you to build more sophisticated applications with less code.


AutoSwarmBuilder: Autonomous Agent Generation

The AutoSwarmBuilder automatically generates specialized agents and their workflows based on your task description. Simply describe what you need, and it will create a complete multi-agent system with detailed prompts and optimal agent configurations. Learn more about AutoSwarmBuilder

from swarms import AutoSwarmBuilder
import json

# Initialize the AutoSwarmBuilder
swarm = AutoSwarmBuilder(
    name="My Swarm",
    description="A swarm of agents",
    verbose=True,
    max_loops=1,
    return_agents=True,
    model_name="gpt-5.4",
)

# Let the builder automatically create agents and workflows
result = swarm.run(
    task="Create an accounting team to analyze crypto transactions, "
         "there must be 5 agents in the team with extremely extensive prompts. "
         "Make the prompts extremely detailed and specific and long and comprehensive. "
         "Make sure to include all the details of the task in the prompts."
)

# The result contains the generated agents and their configurations
print(json.dumps(result, indent=4))

The AutoSwarmBuilder provides:

  • Automatic Agent Generation: Creates specialized agents based on task requirements
  • Intelligent Prompt Engineering: Generates comprehensive, detailed prompts for each agent
  • Optimal Workflow Design: Determines the best agent interactions and workflow structure
  • Production-Ready Configurations: Returns fully configured agents ready for deployment
  • Flexible Architecture: Supports various swarm types and agent specializations

This feature is perfect for rapid prototyping, complex task decomposition, and creating specialized agent teams without manual configuration.


MixtureOfAgents (MoA)

The MixtureOfAgents architecture processes tasks by feeding them to multiple “expert” agents in parallel. Their diverse outputs are then synthesized by an aggregator agent to produce a final, high-quality result. Learn more here

from swarms import Agent, MixtureOfAgents

# Define expert agents
financial_analyst = Agent(agent_name="FinancialAnalyst", system_prompt="Analyze financial data.", model_name="gpt-5.4")
market_analyst = Agent(agent_name="MarketAnalyst", system_prompt="Analyze market trends.", model_name="gpt-5.4")
risk_analyst = Agent(agent_name="RiskAnalyst", system_prompt="Analyze investment risks.", model_name="gpt-5.4")

# Define the aggregator agent
aggregator = Agent(
    agent_name="InvestmentAdvisor",
    system_prompt="Synthesize the financial, market, and risk analyses to provide a final investment recommendation.",
    model_name="gpt-5.4"
)

# Create the MoA swarm
moa_swarm = MixtureOfAgents(
    agents=[financial_analyst, market_analyst, risk_analyst],
    aggregator_agent=aggregator,
)

# Run the swarm
recommendation = moa_swarm.run("Should we invest in NVIDIA stock right now?")
print(recommendation)

GroupChat

GroupChat is an asynchronous, self-selecting groupchat. All agents listen in parallel; for each broadcast message, every other agent runs a forced respond(score, message) function call to decide whether to chime in, and replies above threshold are broadcast. The chat ends when max_loops messages have been posted or no message arrives for idle_timeout seconds. There is no turn order — multiple agents can react to the same message at the same time, and silent agents stay silent.

from swarms import Agent, GroupChat, RESPOND_TOOL

This README has been shortened. The full version is on GitHub. Read the original ↗