Skip to main content

Agency Swarm framework

Project description

🐝 Agency Swarm

Framework

Overview

The Agency Swarm is a framework for building multi-agent applications. It leverages and extends the OpenAI Agents SDK, providing specialized features for creating, orchestrating, and managing collaborative swarms of AI agents.

This framework continues the original vision of Arsenii Shatokhin (aka VRSEN) to simplify the creation of AI agencies by thinking about automation in terms of real-world organizational structures, making it intuitive for both agents and users.

Migrating from v0.x? Please see our Migration Guide for details on adapting your project to this new SDK-based version.

Docs Coverage Subscribe on YouTube Follow on Twitter Join our Discord! Agents-as-a-Service

Key Features

  • Customizable Agent Roles: Define distinct agent roles (e.g., CEO, Virtual Assistant, Developer) with tailored instructions, tools, and capabilities within the Agency Swarm framework, leveraging the underlying OpenAI Agents SDK.
  • Full Control Over Prompts/Instructions: Maintain complete control over each agent’s guiding prompts (instructions) for precise behavior customization.
  • Type-Safe Tools: Develop tools using Pydantic models for automatic argument validation, compatible with the OpenAI Agents SDK’s FunctionTool format.
  • Orchestrated Agent Communication: Agents communicate via a dedicated send_message tool, with interactions governed by explicit, directional communication_flows defined on the Agency.
  • Flexible State Persistence: Manage conversation history by providing load_threads_callback and save_threads_callback to the Agency, enabling persistence across sessions (e.g., DB/file storage).
  • Multi-Agent Orchestration: Build agent workflows on the OpenAI Agents SDK foundation, enhanced by Agency Swarm’s structured orchestration layer.
  • Production-Ready Focus: Built for reliability and designed for easy deployment in real-world environments.

Installation

pip install -U agency-swarm

v1.x note: The framework targets the OpenAI Agents SDK + Responses API. Migrating from v0.x? See the Migration Guide.

Compatibility

  • Python: 3.12+
  • Model backends:
    • OpenAI (native): GPT-5 family, GPT-4o, etc.
    • Via LiteLLM (router): Anthropic (Claude), Google (Gemini), Grok (xAI), Azure OpenAI, OpenRouter (gateway), etc.
  • OS: macOS, Linux, Windows

If you hit environment issues, see the Installation guide.

Getting Started

Recommended: Start with the Agency Starter Template before you customize anything.

  1. Set Your OpenAI Key:

    • Create a .env file with OPENAI_API_KEY=your_key (auto-loaded), or export it in your shell:
    export OPENAI_API_KEY="YOUR_API_KEY"
    
  2. Create Tools: Define tools using the modern @function_tool decorator (recommended), or extend BaseTool (compatible):

    from agency_swarm import function_tool
    
    @function_tool
    def my_custom_tool(example_field: str) -> str:
        """A brief description of what the custom tool does."""
        return f"Result: {example_field}"
    

    or with BaseTool:

    from agency_swarm.tools import BaseTool
    from pydantic import Field
    
    class MyCustomTool(BaseTool):
        """
        A brief description of what the custom tool does.
        The docstring should clearly explain the tool's purpose and functionality.
        It will be used by the agent to determine when to use this tool.
        """
    
        # Define the fields with descriptions using Pydantic Field
        example_field: str = Field(
            ..., description="Description of the example field, explaining its purpose and usage for the Agent."
        )
    
        def run(self):
            """
            The implementation of the run method, where the tool's main functionality is executed.
            """
            # Your custom tool logic goes here
            # do_something(self.example_field)
    
            # Return the result of the tool's operation
            return "Result of MyCustomTool operation"
    

    or convert from OpenAPI schemas:

    from agency_swarm.tools import ToolFactory
    # using local file
    with open("schemas/your_schema.json") as f:
        tools = ToolFactory.from_openapi_schema(
            f.read(),
        )
    
    # using requests
    import requests
    tools = ToolFactory.from_openapi_schema(
        requests.get("https://api.example.com/openapi.json").json(),
    )
    
  3. Define Agent Roles: Start by defining the roles of your agents. For example, a CEO agent for managing tasks and a developer agent for executing tasks.

    from agency_swarm import Agent, ModelSettings
    
    ceo = Agent(
        name="CEO",
        description="Responsible for client communication, task planning and management.",
        instructions="You must converse with other agents to ensure complete task execution.", # can be a file like ./instructions.md
        files_folder="./files", # files to be uploaded to OpenAI
        schemas_folder="./schemas", # OpenAPI schemas to be converted into tools
        tools=[my_custom_tool],  # FunctionTool returned by @function_tool (or adapt BaseTool via ToolFactory)
        model="gpt-5.4-mini",
        model_settings=ModelSettings(
            max_tokens=25000,
        ),
    )
    

    Working from examples:

  4. Define Agency Communication Flows: Establish how your agents will communicate with each other.

    from agency_swarm import Agency
    # if importing from local files
    from Developer import Developer
    from VirtualAssistant import VirtualAssistant
    
    dev = Developer()
    va = VirtualAssistant()
    
    agency = Agency(
        ceo,  # CEO will be the entry point for communication with the user
        communication_flows=[
            ceo > dev,  # CEO can initiate communication with Developer
            ceo > va,   # CEO can initiate communication with Virtual Assistant
            dev > va    # Developer can initiate communication with Virtual Assistant
        ],
        shared_instructions='agency_manifesto.md', # shared instructions for all agents
    )
    

    In Agency Swarm, communication flows are directional. The > operator defines allowed initiations (left can initiate a chat with right).

  5. Run a Demo

Web UI:

agency.copilot_demo()

Terminal:

agency.tui()

On first run, Agency Swarm sets up the terminal app automatically, shows a short setup message, and reuses it on later runs.

See the terminal workflow guide: https://agency-swarm.ai/core-framework/agencies/agent-swarm-cli

Programmatic (async):

import asyncio

async def main():
    resp = await agency.get_response("Create a project skeleton.")
    print(resp.final_output)

asyncio.run(main())

Need sync? agency.get_response_sync(...) exists, but async is recommended.

Folder Structure

Recommended agent folder structure:

/your-specified-path/
│
├── agency_manifesto.md or .txt # Agency's guiding principles (created if not present)
└── AgentName/                  # Directory for the specific agent
    ├── files/                  # Directory for files that will be uploaded to OpenAI
    ├── schemas/                # Directory for OpenAPI schemas to be converted into tools
    ├── tools/                  # Directory for tools to be imported by default.
    ├── AgentName.py            # The main agent class file
    ├── __init__.py             # Initializes the agent folder as a Python package
    ├── instructions.md or .txt # Instruction document for the agent
    └── tools.py                # Custom tools specific to the agent's role.

This structure ensures that each agent has its dedicated space with all necessary files to start working on its specific tasks. The tools.py can be customized to include tools and functionalities specific to the agent's role.

Learn More

Contributing

For details on how to contribute to Agency Swarm, please refer to the Contributing Guide.

License

Agency Swarm is open-source and licensed under MIT.

Need Help?

If you need help creating custom agent swarms for your business, check out our Agents-as-a-Service subscription, or schedule a consultation with me at https://calendly.com/vrsen/ai-readiness-call

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agency_swarm-1.9.2.tar.gz (310.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agency_swarm-1.9.2-py3-none-any.whl (363.0 kB view details)

Uploaded Python 3

File details

Details for the file agency_swarm-1.9.2.tar.gz.

File metadata

  • Download URL: agency_swarm-1.9.2.tar.gz
  • Upload date:
  • Size: 310.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agency_swarm-1.9.2.tar.gz
Algorithm Hash digest
SHA256 737a831ec1ee6ead74d24c566773dc380c1aff0d3667cb7b2a79c7089f214a86
MD5 30b5e3d1128647bd40f6260138485fa5
BLAKE2b-256 049b2ac6b0eab07c72bb533488d12795829b527931c3b9c5f782de807ade9384

See more details on using hashes here.

File details

Details for the file agency_swarm-1.9.2-py3-none-any.whl.

File metadata

  • Download URL: agency_swarm-1.9.2-py3-none-any.whl
  • Upload date:
  • Size: 363.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agency_swarm-1.9.2-py3-none-any.whl
Algorithm Hash digest
SHA256 11d2a21651a374c0e57e3cc03394dd11e0426c3e3c279235bd0bbd32227029bb
MD5 9b4bbaa6e50e29e73d5b8caa94af809e
BLAKE2b-256 f0aeee4c6aeaa52f3df54595d7fc47b661f4c229817a99845b5512566eb879b1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page