Skip to content

DynaBots

Multi-agent orchestration for Python.

A protocol-first foundation for building, evaluating, and deploying AI agent systems. Zero dependencies. Any LLM. Multiple orchestration philosophies.

Get Started View on GitHub


  • Protocol-First


    No base classes. No framework lock-in. Just implement the right methods using Python's structural subtyping and your class works everywhere.

    Learn the protocols

  • Any LLM


    Unified interface for Ollama (local, free), OpenAI, and Anthropic. Swap providers without changing your agent code.

    Provider guide

  • ORC — Competitive Orchestration


    Agents compete for domain leadership in the Arena. The best performer earns the crown — until challenged.

    Explore ORC

  • Composable Ecosystem


    dynabots-core provides the foundation. Orchestration packages layer on top. Each independently installable. All share the same protocols.

    See the roadmap


Quick Example

from dynabots_core import Agent, TaskResult

class DataAgent:
    @property
    def name(self) -> str:
        return "DataAgent"

    @property
    def capabilities(self) -> list[str]:
        return ["fetch_data", "analyze"]

    @property
    def domains(self) -> list[str]:
        return ["data", "analytics"]

    async def process_task(self, task: str, context: dict) -> TaskResult:
        result = await self.do_work(task)
        return TaskResult.success(task_id=context["task_id"], data=result)
from dynabots_core.providers import OllamaProvider, OpenAIProvider, AnthropicProvider

# Local (free)
llm = OllamaProvider(model="qwen2.5:7b")

# OpenAI
from openai import AsyncOpenAI
llm = OpenAIProvider(AsyncOpenAI(), model="gpt-4o")

# Anthropic
from anthropic import AsyncAnthropic
llm = AnthropicProvider(AsyncAnthropic(), model="claude-sonnet-4-20250514")
from dynabots_orc import Arena, MetricsJudge

arena = Arena(
    agents=[DataAgent(), AnalyticsAgent()],
    judge=MetricsJudge(),
    on_succession=lambda old, new, d: print(f"{new} defeats {old}!"),
)

result = await arena.process("Analyze Q4 sales data")
print(f"Winner: {result.winner}")

Architecture

┌─────────────────────────────────────────────┐
│              Your Application               │
└─────────────────────────────────────────────┘
         ┌────────────┼────────────┐
         ▼            ▼            ▼
   ┌──────────┐ ┌──────────┐ ┌──────────┐
   │   ORC    │ │  [SAO]   │ │ [FORGE]  │
   │  Arena   │ │  Tower   │ │  Anvil   │
   └────┬─────┘ └────┬─────┘ └────┬─────┘
        └─────────────┼────────────┘
           ┌─────────────────────┐
           │   dynabots-core     │
           │  Protocols & Types  │
           └──────────┬──────────┘
        ┌─────────────┼─────────────┐
        ▼             ▼             ▼
   ┌─────────┐  ┌──────────┐  ┌──────────┐
   │ Ollama  │  │  OpenAI  │  │Anthropic │
   └─────────┘  └──────────┘  └──────────┘

Packages

Package Install Description
dynabots-core pip install dynabots-core Protocols, LLM providers, TaskResult
orc-arena pip install orc-arena Competitive orchestration — agents fight for leadership
SAO coming soon Survival RL — agents level up through challenge floors
FORGE coming soon Adversarial refinement — critic-driven improvement
HIVE coming soon Swarm intelligence — leaderless emergent convergence