loading…
Search for a command to run...
loading…
Encrypted agent-to-agent messaging for AI agents via NATS JetStream, enabling autonomous, secure communication and collaborative workflows.
Encrypted agent-to-agent messaging for AI agents via NATS JetStream, enabling autonomous, secure communication and collaborative workflows.
Named after murmuration — the mesmerizing phenomenon where thousands of birds communicate and move as one.
Murmur V2 brings the same coordinated communication to AI agents.
Encrypted agent-to-agent messaging. Let your AI models talk to each other.
Quick Start · How It Works · Features · MCP Tools · Deployment · Contributing
A murmuration is one of nature's most extraordinary phenomena — thousands of starlings flying as a single, fluid organism without any central coordinator. Each bird follows simple local rules: match your neighbors' speed, stay close, don't collide. From these simple interactions emerges breathtaking coordinated behavior.
Murmur V2 applies the same principle to AI agents. No central orchestrator. No human relay. Each agent communicates directly with its peers through encrypted channels — and from these simple peer-to-peer interactions, complex collaborative workflows emerge. Code reviews, research tasks, architectural decisions — all happening autonomously between Claude, GPT, Gemini, or any other model, while you sleep.
AI agents today are isolated. Claude can't talk to GPT. Your coding assistant can't ask your research agent for context. When you try to make them collaborate, you end up as the human relay — copy-pasting messages between terminals.
Murmur V2 fixes this. It gives AI agents encrypted, direct communication over NATS — no human in the loop.
┌──────────────┐ ┌──────────────┐
│ Claude Code │ │ GPT Agent │
│ (Opus 4.6) │ "Review this PR" │ (GPT-5.3) │
│ ├───────────────────────►│ │
│ │◄───────────────────────┤ │
│ │ "LGTM, 2 nits..." │ │
└──────────────┘ └──────────────┘
│ │
│ MCP stdio MCP stdio │
┌────┴────┐ NATS JetStream ┌────┴────┐
│ daemon │◄═══════════════════════►│ daemon │
│ encrypt │ E2E encrypted msgs │ decrypt │
└─────────┘ └─────────┘
Connect two agents in 3 commands. No JSON editing.
node:sqlite)docker run -d --name nats -p 4222:4222 nats:2.10-alpine -js --auth YOUR_SECRET
git clone https://github.com/alexfrmn/mur-mur-v2.git && cd mur-mur-v2
npm install && npm run build
AGENT_ID=alice NATS_URL=nats://your-server:4222 NATS_TOKEN=YOUR_SECRET \
node scripts/agent-config-init.mjs
node scripts/murmur-invite.mjs
# → Prints MURMUR:eyJ... blob — send it to your peer via any channel
git clone https://github.com/alexfrmn/mur-mur-v2.git && cd mur-mur-v2
npm install && npm run build
AGENT_ID=bob NATS_URL=nats://your-server:4222 NATS_TOKEN=YOUR_SECRET \
node scripts/murmur-join.mjs 'MURMUR:eyJ...'
# → Prints MURMUR-REPLY:eyJ... blob — send it back to host
node scripts/murmur-add-peer.mjs 'MURMUR-REPLY:eyJ...'
node scripts/murmur-daemon.mjs
npm run build
METRICS_PORT=9464 node scripts/prometheus-exporter.mjs
# scrape http://localhost:9464/metrics
Exporter metrics include outbox depth by status, oldest pending age, inbound/outbound message totals, ack latency (avg/p95), retry rows, and dead-letter rows.
Add Murmur as an MCP server in your AI client (e.g., Claude Code):
claude mcp add murmur -- node /path/to/mur-mur-v2/packages/mcp-server/dist/src/index.js
Then from your AI agent:
# Fire-and-forget
murmur_send(to: "bob", text: "Hello from Alice!")
# Or send-and-wait (blocks until reply arrives)
murmur_request(to: "bob", text: "Review this code please", timeout_ms: 300000)
That's it. Alice and Bob can now exchange encrypted messages — no human relay needed.
sequenceDiagram
participant A as Agent Alice (Claude)
participant MA as Alice's MCP Server
participant DA as Alice's Daemon
participant NATS as NATS JetStream
participant DB as Bob's Daemon
participant MB as Bob's MCP Server
participant B as Agent Bob (GPT)
A->>MA: murmur_request(to: "bob", text: "Review this code")
MA->>MA: Encrypt (X25519 + XChaCha20)
MA->>MA: Sign (Ed25519)
MA->>DA: Enqueue to SQLite outbox
DA->>NATS: Publish encrypted envelope
NATS->>DB: Deliver to Bob's subject
DB->>DB: Verify signature + decrypt
DB->>MB: Store in local_messages
Note over MA: Polling every 10s...
B->>MB: Process + generate response
MB->>DB: Enqueue reply to outbox
DB->>NATS: Publish encrypted reply
NATS->>DA: Deliver to Alice's subject
DA->>MA: Store inbound reply
MA->>A: Return reply (polling found it)
murmur_requestThe biggest pain point with agent-to-agent messaging is the polling gap — after sending a message, agents forget to check for replies and ask the human to relay the response.
murmur_request solves this. It sends a message and automatically polls for the reply, blocking until a response arrives or timeout is reached:
Agent calls murmur_request("bob", "Review this PR")
→ Message encrypted, signed, enqueued
→ Polls inbox every 10s
→ ... 45 seconds later ...
→ Bob's reply arrives
→ Returns the reply directly to the agent
This enables fully autonomous overnight work — launch 2-3 agents, they collaborate without any human relay.
murmur_request — send-and-wait: no more manual pollingMurmur V2 exposes an MCP server (JSON-RPC over stdio) with 7 tools:
| Tool | Description |
|---|---|
murmur_request |
Send message and wait for reply. Blocks until response or timeout. Best for autonomous workflows. |
murmur_send |
Send encrypted message (fire-and-forget). Returns immediately after enqueue. |
murmur_inbox |
Read inbound messages from peers. |
murmur_peers |
List known peers and their key status. |
| Tool | Description |
|---|---|
send_message |
Store a local message in the conversation store. |
list_conversations |
List conversations by recency. |
search_messages |
Full-text search across stored messages. |
claude mcp add murmur -- node /path/to/mur-mur-v2/packages/mcp-server/dist/index.js
{
"mcpServers": {
"murmur": {
"command": "node",
"args": ["/path/to/mur-mur-v2/packages/mcp-server/dist/index.js"],
"env": {
"DATA_DIR": "/path/to/mur-mur-v2/.data"
}
}
}
}
mur-mur-v2/
├── packages/
│ ├── core/ # Envelope schema, SQLite stores, policy validation
│ ├── broker-nats/ # NATS JetStream pub/sub, outbox flush, ACK correlation
│ ├── security/ # NaCl crypto (X25519, XChaCha20, Ed25519), MLS scaffold
│ ├── mcp-server/ # JSON-RPC MCP stdio server (7 tools)
│ ├── bridge-telegram/ # Telegram bot adapter
│ ├── bridge-openclaw/ # OpenClaw CLI dispatch bridge
│ ├── bridge-murmur/ # Murmur-to-Murmur federation (stub)
│ └── observability/ # Metrics and tracing (scaffold)
├── scripts/ # Daemon, invite flow, notification setup, demos
├── tests/ # 22 unit + integration + smoke tests
├── docs/ # ADRs, protocol spec, operations guide
├── deploy/ # systemd unit, docker-compose
├── dashboard/ # Real-time observability web UI + 3D visualization
└── schema/ # JSON schemas for envelope and ACK frames
| Decision | Choice | Why |
|---|---|---|
| Transport | NATS JetStream | Sub-ms latency, 20MB RAM, JetStream persistence, leaf nodes for federation |
| Encryption | X25519 + XChaCha20-Poly1305 | Modern AEAD, NaCl standard, ~30% faster than AES-GCM |
| Signatures | Ed25519 | Fast verification, small keys, deterministic |
| Storage | SQLite (node:sqlite) | Zero dependencies, WAL mode, built into Node 22+ |
| Group Crypto | MLS (scaffold) | RFC 9420, forward secrecy for groups — deferred to v1.0 |
See ADR-001 and ADR-002 for full rationale.
Murmur V2 can route messages through OpenClaw agents. When a message arrives, the daemon dispatches it to an OpenClaw agent (Claude, GPT, etc.) and sends the response back over Murmur.
Agent A → Murmur → NATS → Daemon B → OpenClaw CLI → GPT-5 → response → NATS → Agent A
This means you can see the full reasoning chain: what the model thought, what tools it used, and what it replied.
export MURMUR_OPENCLAW_SESSION_ID="your-session-id"
node scripts/murmur-openclaw-init.mjs
# Or use the preset:
node scripts/murmur-notify-init.mjs openclaw
With murmur_request + OpenClaw bridge, you can run autonomous agent teams overnight:
murmur_requestAll messages are E2E encrypted. All responses are logged in SQLite.
sudo cp deploy/murmur-daemon.service /etc/systemd/system/
sudo systemctl enable --now murmur-daemon
# Start NATS
docker compose -f deploy/docker-compose.messaging.yml up -d
# Run daemon
node scripts/murmur-daemon.mjs
# Telegram
node scripts/murmur-notify-init.mjs telegram
# Discord
node scripts/murmur-notify-init.mjs discord
# OpenClaw auto-bridge
node scripts/murmur-notify-init.mjs openclaw
npm test # Build + all unit tests (22 tests)
npm run test:integration # ACK correlation integration
npm run test:notify-smoke # Notification adapter smoke
npm run test:openclaw-bridge-smoke # OpenClaw bridge smoke
# One-command secure E2E demo
npm run demo:secure
Every message is an EnvelopeV1:
{
"schemaVersion": "1.0",
"msgId": "uuid",
"conversationId": "dm:alice:bob",
"senderAgentId": "alice",
"recipients": ["bob"],
"createdAt": "2026-04-12T12:00:00.000Z",
"payloadCiphertext": "base64...",
"payloadNonce": "base64...",
"signature": "base64..."
}
Optional fields: ttlSeconds, traceId, sequence, parentMsgId.
See protocol-v1.md for the full specification.
murmur_request — send-and-wait for autonomous workflows@murmurv2/* on npm registryMurmur V2 is built upon the ideas and protocol design of the original Murmur by @slopus. The original Murmur established the core concept of encrypted agent-to-agent messaging with Double Ratchet cryptography. Murmur V2 extends this foundation with NATS JetStream transport, MCP integration, persistent outbox delivery, and production hardening for autonomous multi-agent workflows.
MIT — alexfrmn, 2026
Выполни в терминале:
claude mcp add murmur -- npx Web content fetching and conversion for efficient LLM usage.
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
автор: modelcontextprotocolProvides auto-configuration for setting up an MCP server in Spring Boot applications.
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also
автор: xuzexin-hzНе уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории ai