Multi-Agent Orchestration Framework for Python
3 orchestration modes Β· 100+ LLM providers Β· Built-in tool calling & MCP
Most agent frameworks force you to choose: simple API (Swarm) or powerful workflows (LangGraph). Nexus gives you both β start with 5 lines of code, scale to complex DAG workflows, LLM-based routing, and self-organizing agent teams.
import asyncio
from nexus import Team
async def main():
async with Team(model="gpt-4o", api_key="sk-...") as team:
team.add_agent("coder", instructions="You write clean Python code.")
team.add_agent("writer", instructions="You write engaging articles.")
result = await team.run("Implement a binary search in Python")
print(result) # β Automatically routed to 'coder'
asyncio.run(main())| Feature | Description | |
|---|---|---|
| π | 3 Orchestration Modes | Static Graph (DAG) Β· Dynamic Router (LLM triage) Β· Adaptive (embedding matching) |
| π | 100+ LLM Providers | OpenAI, Anthropic, Groq, Deepseek, Mistral, Qwen, Ollama, Azure, Bedrock, Vertex AIβ¦ via LiteLLM |
| π§ | Tool Calling | ReAct loop (Think β Act β Observe β Repeat) with auto schema extraction from Python type hints |
| π | Protocol-Native | MCP for tool servers Β· A2A for agent discovery |
| π¬ | Multi-turn & Streaming | Conversation memory with chat() and real-time token streaming with stream() |
| π‘οΈ | Production-Grade | Token budgets Β· Checkpoint/resume Β· Retry/fallback policies Β· Tracing Β· Metrics |
# Recommended β unlocks 100+ LLM providers
pip install nexus-agents[litellm]
# Or pick a specific provider
pip install nexus-agents[openai] # OpenAI only
pip install nexus-agents[anthropic] # Anthropic only
# Everything (all providers + MCP + observability)
pip install nexus-agents[all]import asyncio
from nexus import Team
async def main():
async with Team(model="gpt-4o", api_key="sk-...") as team:
team.add_agent("coder", instructions="You write Python code.")
team.add_agent("writer", instructions="You write articles.")
team.add_agent("analyst", instructions="You analyze data.")
# The router examines each task and picks the best agent
await team.run("Implement quicksort in Python") # β coder
await team.run("Write a blog post about AI agents") # β writer
asyncio.run(main())Define tools as plain Python functions β Nexus extracts the JSON schema automatically:
def calculate(expression: str) -> str:
"""Evaluate a math expression. Example: '2**32 - 1'"""
return str(eval(expression))
def get_current_time() -> str:
"""Get the current UTC time."""
from datetime import datetime, timezone
return datetime.now(timezone.utc).isoformat()
async with Team(model="gpt-4o", api_key="sk-...") as team:
team.add_agent(
"assistant",
instructions="Use tools to answer questions accurately.",
tools=[calculate, get_current_time],
)
result = await team.run("What is 2^32 - 1?")
# π§ Agent calls calculate("2**32 - 1") β "4294967295"
# β¨ Agent responds: "2Β³Β² - 1 = 4,294,967,295"async with Team(model="gpt-4o", api_key="sk-...") as team:
team.add_agent("assistant", instructions="You are helpful.")
r1 = await team.chat("What is the Fibonacci sequence?")
r2 = await team.chat("Show me the first 10 numbers") # Remembers context
team.reset_conversation() # Clear historyasync with Team(model="gpt-4o", api_key="sk-...") as team:
team.add_agent("storyteller", instructions="You tell captivating stories.")
async for chunk in team.stream("Tell me a story about a time-traveling robot"):
print(chunk, end="", flush=True)π More examples β See the
examples/directory for runnable demos: tool calling, MCP integration, Graph/Router/Adaptive orchestration modes, and more.# Clone and run git clone https://github.com/sontianye/nexus.git && cd nexus pip install -e '.[all]' cp examples/.env.example examples/.env # Add your API key python examples/demo_tools.py simple # Try tool calling python examples/demo_modes.py graph # Try graph orchestration
For deterministic pipelines where you know the exact steps:
from nexus.orchestration.graph import GraphOrchestrator, START, END
graph = GraphOrchestrator()
graph.add_node("research", research_fn)
graph.add_node("write", write_fn)
graph.add_node("review", review_fn)
graph.add_edge(START, "research")
graph.add_edge("research", "write")
graph.add_edge("write", "review")
graph.add_conditional_edge(
"review",
lambda state: "write" if state.get("needs_revision") else END
)
result = await graph.execute({"topic": "AI Agents"})A triage agent examines each request and picks the best specialist:
from nexus.orchestration.topology import TopologyMode
async with Team(model="gpt-4o", mode=TopologyMode.ROUTER) as team:
team.add_agent("coder", instructions="You write code.")
team.add_agent("writer", instructions="You write prose.")
await team.run("Implement quicksort in Python") # β routes to coderAgents are matched to tasks via cosine similarity on capability vectors β unique to Nexus:
from nexus import AgentCapability
from nexus.orchestration.topology import TopologyMode
async with Team(
model="gpt-4o",
mode=TopologyMode.ADAPTIVE,
embedding_model="text-embedding-3-small",
) as team:
team.add_agent("coder", capabilities=AgentCapability(coding=1.0, reasoning=0.8))
team.add_agent("writer", capabilities=AgentCapability(creativity=1.0, language=0.9))
await team.run("Write a poem about recursion") # β capability match β writerSwitch models by changing one string. Zero code changes:
Team(model="gpt-4o") # OpenAI
Team(model="anthropic/claude-sonnet-4-20250514") # Anthropic
Team(model="groq/llama-3.1-70b-versatile") # Groq (ultra-fast)
Team(model="deepseek/deepseek-chat") # Deepseek
Team(model="vertex_ai/gemini-1.5-pro") # Google Vertex AI
Team(model="bedrock/anthropic.claude-3-sonnet") # AWS Bedrock
Team(model="ollama/llama3.1") # Local (Ollama)
# Any OpenAI-compatible endpoint
Team(model="openai/my-model", api_base="https://my-api.com/v1", api_key="sk-...")
# Mix models per agent
async with Team(model="gpt-4o") as team:
team.add_agent("fast", model="groq/llama-3.1-70b-versatile") # Speed
team.add_agent("smart", model="anthropic/claude-sonnet-4-20250514") # QualityFull list β LiteLLM Providers
Connect agents to any MCP tool server:
from nexus.protocol.mcp import MCPToolProvider
# Local MCP server via stdio
async with MCPToolProvider("npx", ["-y", "@modelcontextprotocol/server-filesystem", "."]) as mcp:
tools = await mcp.get_tools()
team.add_agent("file_agent", tools=tools)
# Remote MCP server via HTTP/SSE
async with MCPToolProvider(url="https://mcp-server.example.com/sse") as mcp:
tools = await mcp.get_tools()
team.add_agent("web_agent", tools=tools)βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Developer API β
β Team Β· CLI Β· @tool decorator Β· YAML config β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Observability β
β Distributed Tracing Β· Metrics Β· Token Accounting β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Orchestration β
β π· Graph Β· πΆ Router Β· π΄ Adaptive β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Runtime β
β Execution Engine Β· Checkpoint Β· Retry / Fallback β
β Token Budget Β· Auto-Degradation Strategies β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Protocol + Core β
β Agent Β· Task Β· Handoff Β· Message β
β A2A Protocol Β· MCP Protocol Β· Discovery Service β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Model Providers β
β OpenAI Β· Anthropic Β· Ollama Β· LiteLLM (100+) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
nexus/
βββ api.py # Team β high-level API
βββ cli.py # CLI: init / run / chat / inspect
βββ core/ # Agent, Task, Handoff, Message, State
βββ models/ # OpenAI, Anthropic, Ollama, LiteLLM providers
βββ orchestration/ # Graph, Router, Adaptive, TopologyEngine
βββ protocol/ # A2A, MCP, MessageBus, Discovery
βββ runtime/ # Engine, Checkpoint, Budget, Policies
βββ observability/ # Tracing, Metrics
| Feature | Nexus | LangGraph | CrewAI | Swarm |
|---|---|---|---|---|
| Graph Workflows | β | β | β | β |
| Dynamic LLM Routing | β | β | β | |
| Adaptive Matching | β | β | β | β |
| 100+ Providers (LiteLLM) | β | β | β | β |
| MCP Protocol | β | β | β | β |
| A2A Protocol | β | β | β | β |
| Tool Calling | β | β | β | β |
| Streaming | β | β | β | β |
| Token Budgets | β | β | β | β |
| Checkpoint / Resume | β | β | β | β |
| Minimal API (5 lines) | β | β | β | β |
Note: "β" means not built-in. Some features may be available via plugins or custom code.
- Core primitives (Agent + Task + Handoff)
- 3 orchestration modes (Graph / Router / Adaptive)
- LiteLLM integration (100+ providers)
- Tool calling with ReAct loop
- MCP protocol integration
- A2A protocol support
- Streaming responses
- Multi-turn conversation
- Token budget management
- Checkpoint / resume
- Observability (tracing + metrics)
- CLI (init / run / chat / inspect)
- Agent memory (long-term RAG)
- OpenTelemetry export
- Web UI dashboard
- Multi-modal (vision, audio)
- Distributed execution
Contributions are welcome! See CONTRIBUTING.md for guidelines.
git clone https://github.com/sontianye/nexus.git
cd nexus
uv venv --python 3.12 .venv && uv pip install --python .venv/bin/python -e ".[all,dev]"
.venv/bin/python tests/test_smoke.py # Verify everything worksMIT Β© 2025β2026 Nexus Contributors
β If Nexus is useful to you, please star this repo β it helps others discover it!
Examples Β· Issues Β· Discussions