The coordination protocol for autonomous AI agents
Build, run, and coordinate agents across machines and organizations over a WAN
Website Β· Docs Β· Agent Blueprints Β· Discord Β· Twitter
Summoner is an open protocol and SDK for networked AI agents. Most agent frameworks coordinate reasoning inside a single process or organization. Summoner coordinates independent agents β running as separate processes β that connect to shared relay servers, like players joining an MMO world. Agents can travel between servers, form peer relationships, and coordinate across organizational boundaries, with self-assigned identities and built-in mechanisms for learning and adapting behavior.
Python SDK. Rust server. Easy deployment via the desktop app. No central orchestrator.
In other words: Your agents, your code, your network.
Map view provided by the Summoner Desktop app to monitor your agent network across the globe.
Clone this repo:
git clone https://github.com/Summoner-Network/summoner.git
cd summonersource build_sdk.sh setup --server python && bash install_requirements.shIf source build_sdk.sh setup does not work in your shell:
bash build_sdk.sh setup --server python
source venv/bin/activate && bash install_requirements.shSet-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\build_sdk_on_windows.ps1 setup
.\install_requirements_on_windows.ps1Choose your starting point:
- β‘ Fastest way to see Summoner working β visual sanity check (recommended for first-time users)
- π Run real networked agents β full multi-agent interaction
Want to verify your setup and visualize an agent immediately?
Run the template agent
python learn/webinar_01/template/agent.pyWhat youβll see
- Browser opens with the flow graph
- Agent connects to the network
- Environment is fully validated
This is the quickest way to confirm everything is working.
Next steps
- Try
learn/webinar_01/example_1for basic receive routes - Try
learn/webinar_01/example_8for state transitions - Or jump below to run fully interactive agents
π Run Real Networked Agents
Run two independent agents and watch them interact.
In Terminal 1:
bash get_agent.sh EchoAgent_0
bash get_agent.sh InputAgent
python server.pyIn Terminal 2:
source venv/bin/activate
python agents/agent_EchoAgent_0/agent.pyIn Terminal 3:
source venv/bin/activate
python agents/agent_EchoAgent_0/agent.pyIn Terminal 4:
source venv/bin/activate
python agents/agent_InputAgent/agent.pyIn Terminal 4, type Hello:
> Hello
You will see the two EchoAgent_0 agents interact:
- In Terminal 2:
2026-03-05 08:28:13.897 - EchoAgent_0 - INFO - Buffered message from:(SocketAddress=127.0.0.1:55043). - In Terminal 3:
2026-03-05 08:28:32.963 - EchoAgent_0 - INFO - Buffered message from:(SocketAddress=127.0.0.1:55036). - In Terminal 4:
[Received] Hello [Received] Hello
What just happened
- Two independent processes connected to a shared relay
- They discovered each other automatically
- Messages flowed without HTTP or orchestration
You now have live, networked agents exchanging messages.
| I want to⦠| Start here |
|---|---|
| Learn step by step | summoner β seminar from single agent to cross-server travel |
| Run agents immediately | summoner-agents β 58 ready-to-run blueprints from beginner to expert |
| Build my own agent from scratch | summoner-sdk β define a build.txt recipe and compose your own SDK |
| Read the full docs | summoner-docs β guides, API reference, architecture |
| Hack on core infrastructure | summoner-core β protocol primitives, Rust server, client runtime |
| Use the desktop UI | summoner-desktop β visual interface for launching servers and agents |
| Read the protocol spec | summoner-standard β formal specification and conformance requirements |
Define behavior with decorators. Summoner handles networking, transport, and concurrency.
# test.py
from summoner.client import SummonerClient
import asyncio
class MyAgent(SummonerClient):
def __init__(self):
super().__init__()
self.queue = asyncio.Queue()
agent = MyAgent()
# Handle incoming messages
@agent.receive(route="chat")
async def on_message(msg: dict) -> None:
print(f"Got: {msg}")
agent.queue.put_nowait(msg) # forward to send loop
# Produce outgoing messages
@agent.send(route="chat")
async def respond() -> str:
msg = await agent.queue.get()
return f"Echo: {msg}"
agent.run(host="127.0.0.1", port=8888)No HTTP server to build. No executor to deploy. No orchestrator in the middle. The Rust relay handles transport, fan-out, and backpressure β your agent just defines behavior.
To run the example above (see test.py):
# Terminal 1
python server.py
# Terminal 2
python test.py
# Terminal 3
python agents/agent_InputAgent/agent.py
> Helloπ Agent mobility β Agents can travel_to(host, port) at runtime, moving between relay servers while preserving identity and resuming conversations.
π True duplex messaging β @receive and @send run independently in parallel. Events, queues, and hooks connect them. No request/response bottleneck.
π§ Explicit state machines β Routes compose into typed automata with hooks for validation, signing, and replay protection at each transition.
π Relay servers as shared spaces β Servers are meeting points, not controllers. Agents connect outbound (NAT/firewall friendly) and interact with whoever else is in the room. Any party can run a relay.
| Summoner | MCP (Anthropic) | A2A (Google) | LangGraph | |
|---|---|---|---|---|
| Scope | SDK + relays for live agent networking | Model-to-tool/data protocol | Agent discovery + server executors | Graph DSL for workflows |
| Agent mobility | Yes (travel() / resume) |
N/A | No (bound to server) | N/A (in-process) |
| Messaging | Direct, duplex events; parallel sends | Host-routed | Task/stream over HTTP | In-app node calls |
| Orchestration | In the agent (routes/flows/automata) | Host agent | Host + server executor | App graph engine |
| Identity | Hooks for user-defined DID | Host-managed | Registry/OIDC + Agent Cards | None |
| Cross-org | Designed for untrusted, cross-boundary | Single-organization | Shared enterprise security | Single-process |
Summoner doesn't replace these tools β it connects them across the network. Use LangChain for reasoning, CrewAI for task planning, MCP for tool access, and Summoner for the hard part: live, cross-machine agent coordination.
You can directly import agents from the summoner-agents repo into this repo:
bash get_agent.sh --list
bash get_agent.sh <agent_name>The summoner-agents repo ships agents from beginner to advanced:
| Category | Examples | What you'll learn |
|---|---|---|
| Core Messaging | SendAgent, RecvAgent, EchoAgent, StreamAgent | @send, @receive, @hook, LLM streaming |
| Chat & Control | ChatAgent 0β3 | Interactive UI, remote commands, automaton routing |
| Feedback | ReportAgent, ExamAgent | Queued reports, timed Q&A flows |
| Graph-Based | CatArrowAgent, CatTriangleAgent, CatUpdateAgent | State machines, decision flows, supply chain modeling |
| Connectors | ConnectAgent, OrchBridgeAgent | SQLite, LangChain, CrewAI integration |
| MCP | MCPArXivAgent, MCPPubMedAgent, MCPGitHubAgent | MCP tool servers for external services |
| Security | HSAgent, HSSellAgent, HSBuyAgent | Nonce handshakes, DID identity, negotiation |
| MMO Game | GameMasterAgent, GamePlayerAgent | Multiplayer 2D sandbox over the protocol |
| DNA | DNACloneAgent, DNAMergeAgent | Agent cloning, merging, genetic composition |
Multiplayer game running entirely over the Summoner protocol
Summoner is the transport and coordination layer β your agent code calls whatever LLMs, APIs, and frameworks you already use:
| Integration | How it works |
|---|---|
| OpenAI / Claude / local LLMs | Call model APIs directly from @receive or @send handlers |
| LangChain | Run LangChain chains inside Summoner routes via OrchBridgeAgent |
| CrewAI | Route Summoner payloads to CrewAI crews for multi-step reasoning |
| MCP | Connect to any MCP tool server (arXiv, PubMed, GitHub, Notion, Reddit) |
| SQLite / databases | Persistent agent memory via ConnectAgent patterns |
The future of AI is not single agents running inside a single process. It is agent populations coordinating across machines, organizations, and trust boundaries β forming relationships, negotiating outcomes, and building reputation over time.
Today's frameworks solve the single-organization problem well. But very few are building the protocol layer for what comes next: autonomous agents that coordinate across the open internet the way web services coordinate over HTTP.
That's what Summoner is for.
We welcome contributions at every level:
- π± First time? Check out issues labeled
good-first-issueβ each one includes context and guidance - π§ Build an agent? Add it to
summoner-agentsβ follow the agent folder structure - π§ Extend the SDK? Use the
extension-templateto create a module - π Improve docs? PRs welcome on
summoner-docs
See CONTRIBUTING.md for full guidelines.
- π¬ Discord β Chat with the team and other builders
- π¦ Twitter β Updates and announcements
- π§ info@summoner.org β Reach us directly
If Summoner is useful to you, please consider giving it a β
It helps other developers find the project.
