v0.3.2 · MIT · Python + TypeScript
How agents
talk to each other.
A 5-layer communication standard for autonomous AI agents. Identity, routing, signing, streaming — one unified protocol.
Architecture
5 layers. One protocol.
ROAR is what TCP/IP is to computers — a stack that solves identity, discovery, signing, transport, and streaming at each layer independently.
L1
Identity
W3C DID-based agent identity with Ed25519 key pairs. Every agent has a verifiable DID and can sign its messages.
L2
Discovery
Federated hub network for agent registration and lookup. Challenge-response proof-of-possession prevents TOFU attacks.
L3
Delegation
Ed25519-signed delegation tokens with capability scoping, expiry, and use-count limits. Secure, non-forgeable authority chains.
L4
Exchange
Unified ROARMessage format over HTTP, WebSocket, stdio, or gRPC. HMAC-authenticated with replay protection and timestamp validation.
L5
Streaming
First-class stream events for real-time task updates and partial results — no polling required.
Features
Built to interoperate.
ROAR doesn't replace MCP, A2A, or ACP — it bridges all three.
Verifiable identity
Every agent message is signed. Every delegation token is cryptographically bound to the delegator's key.
Federated discovery
Hubs sync with peers. Agents can be discovered across a distributed network without a central registry.
Transport-agnostic
Same message format over HTTP, WebSocket, stdio, or gRPC. Switch transports without changing your agent logic.
MCP + A2A bridges
Built-in bridges to Model Context Protocol and Agent-to-Agent protocols. Speak the language your tools already use.
Replay protection
Strict timestamp windows, nonce tracking, and directional validation prevent replayed or intercepted messages.
Two SDKs
Python and TypeScript reference implementations. Same spec, same wire format, tested against shared golden fixtures.
Quickstart
Start in minutes.
Spin up an agent server, register it with a hub, and start exchanging signed messages.
from roar_sdk import AgentIdentity, ROARServer, ROARMessage, MessageIntent # Each agent gets a unique DID-based identity identity = AgentIdentity(display_name="my-agent", capabilities=["summarize"]) server = ROARServer( identity=identity, host="0.0.0.0", port=8089, signing_secret="shared-secret", ) @server.on(MessageIntent.DELEGATE) async def handle(msg: ROARMessage) -> ROARMessage: return ROARMessage( **{"from": server.identity, "to": msg.from_identity}, intent=MessageIntent.RESPOND, payload={"result": "done"}, ) server.serve() # FastAPI + uvicorn
import { AgentIdentity, ROARServer, MessageIntent } from "@roar-protocol/sdk"; // Each agent gets a unique DID-based identity const identity = new AgentIdentity({ displayName: "my-agent", capabilities: ["summarize"], }); const server = new ROARServer({ identity, host: "0.0.0.0", port: 8089, signingSecret: "shared-secret", }); server.on(MessageIntent.DELEGATE, async (msg) => ({ from: server.identity, to: msg.fromIdentity, intent: MessageIntent.RESPOND, payload: { result: "done" }, })); await server.serve();
Installation
Install the SDK.
Available on PyPI and npm. Include the ed25519 extra in production — delegation signatures require it.
Python (PyPI)
pip install "roar-sdk[server,ed25519]"
TypeScript (npm)
npm install @roar-protocol/sdk
Resources
Learn more.
Protocol Spec
The canonical ROAR specification — wire format, field names, enums.
→ ROAR-SPEC.md
Architecture
Layer-by-layer breakdown of how the protocol stack fits together.
→ ARCHITECTURE.md
Install Guide
Step-by-step setup for development, testing, and production.
→ INSTALL.md
Roadmap
What's stable, what's in progress, and what's coming next.
→ SDK-ROADMAP.md
Examples
Echo server, client, hub setup, and delegation examples in both SDKs.
→ examples/
Security
Threat model, disclosure policy, and security properties.
→ SECURITY.md