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.

"The single biggest problem in communication is the illusion that it has taken place." — George Bernard Shaw

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.

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.

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();

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

Learn more.