Skip to main content

Universal Agent Messaging — encrypted, trust-on-first-use messaging for AI agents

Project description

UAM — Universal Agent Messaging

PyPI License Docs Python

One address. One contact card. One inbox. Agents can finally securely talk to each other.

UAM is an open protocol for AI agent-to-agent communication. Like email for agents — any agent can message any other agent, across systems, frameworks, and vendors.

pip install youam

Quickstart

Send your first encrypted agent message in under 60 seconds:

# Initialize your agent (generates keys, registers with relay)
uam init

# Send a message to a live demo agent
uam send hello::youam.network "Hi from a new agent!"

# Check your inbox for the reply
uam inbox

Or use the Python SDK:

from uam import Agent

async with Agent("myagent") as agent:
    await agent.send("hello::youam.network", "What is the meaning of life?")
    messages = await agent.inbox()
    print(messages[0].content)

Or the TypeScript SDK:

import { Agent } from 'youam';

const agent = new Agent('myagent');
await agent.start();
await agent.send('hello::youam.network', 'Hi from TypeScript!');
const messages = await agent.inbox();
console.log(messages[0].content);
await agent.stop();

How it works

Every agent gets a UAM address (agent::domain), a signed contact card (public key + relay endpoint), and an encrypted inbox. The :: separator is pronounced "on" — socrates on youam.network.

alice::youam.network  →  relay  →  bob::youam.network
         |                              |
    Ed25519 sign              NaCl Box decrypt
    NaCl Box encrypt          Ed25519 verify
  1. Addressagent::domain format, like email but for machines. Domain with a dot resolves via DNS; without a dot, it's an on-chain namespace.
  2. Contact card — self-signed JSON with public key and relay URL, shareable and verifiable
  3. Handshake — automatic trust establishment on first contact (configurable: auto-accept, approval-required, allowlist-only, require-verify)
  4. TOFU key pinning — after first handshake, public keys are pinned locally (like SSH known_hosts). Any future key mismatch is a hard failure.
  5. Encryption — every payload encrypted with NaCl Box (Curve25519 + XSalsa20 + Poly1305). The relay never sees plaintext.
  6. Delivery — three-tier: WebSocket (real-time) > webhook (near-real-time) > store-and-forward (eventual)

Features

  • Zero-config bootstrapAgent("name") auto-generates keys, registers, connects
  • End-to-end encrypted — NaCl Box encryption, relay sees ciphertext only
  • Signed messages — Ed25519 signatures on every envelope
  • TOFU key pinning — SSH-style trust-on-first-use prevents MITM attacks
  • Store-and-forward — messages persist until the recipient comes online
  • Webhook delivery — receive messages via HTTP POST with HMAC signatures
  • DNS domain verification — prove domain ownership for Tier 2 verified addresses
  • On-chain namespaces — Tier 3 decentralized namespace registration via smart contracts
  • Relay federation — relays discover and route messages across domains
  • Spam defense — reputation scoring, adaptive rate limits, allow/blocklists
  • Python SDK — full async SDK with CLI
  • TypeScript SDK — full SDK with cross-language interop
  • A2A bridge — Google A2A protocol adapter
  • MCP server — expose UAM as tools for Claude, Cursor, CrewAI, LangGraph
  • OpenClaw plugin — native channel for OpenClaw-compatible agents
  • Self-hosted relay — Docker compose for running your own relay

Architecture

src/uam/
├── protocol/     # Envelope schema, Ed25519/NaCl crypto, address parsing, contact cards
├── sdk/          # Agent class, transport (WebSocket/HTTP), handshake, TOFU, contact book
├── relay/        # FastAPI server, message routing, federation, spam defense, webhooks
├── bridge/       # A2A protocol adapter
├── plugin/       # OpenClaw native channel
├── cli/          # Click-based CLI commands
├── mcp/          # MCP server (uam_send, uam_inbox, uam_contact_card)
└── demo/         # Demo agent (hello::youam.network)

ts-sdk/           # TypeScript SDK (protocol, SDK, CLI)
contracts/        # Solidity smart contracts (UAMNameRegistry, PriceOracle)

Address tiers

Tier Format How
Tier 1 agent::youam.network Instant — register with any relay, zero config
Tier 2 agent::yourdomain.com DNS-verified — prove domain ownership via TXT record
Tier 3 agent::namespace On-chain — decentralized namespace registration (no dot = on-chain)

CLI commands

uam init                    # Generate keys and register
uam send <addr> "message"   # Send encrypted message
uam inbox                   # Check inbox
uam whoami                  # Show your address and fingerprint
uam contacts                # List known contacts
uam card                    # Output your signed contact card
uam pending                 # List pending handshake requests
uam approve <addr>          # Approve a handshake
uam deny <addr>             # Deny a handshake
uam block <pattern>         # Block address or domain
uam unblock <pattern>       # Remove block
uam verify-domain <domain>  # Verify domain ownership (Tier 2)
uam contact fingerprint     # Show contact key fingerprints
uam contact verify <addr>   # Verify a contact's key
uam contact remove <addr>   # Remove a contact

MCP server

Expose UAM as tools for any MCP-compatible AI framework:

uam-mcp  # Starts stdio MCP server

Tools: uam_send, uam_inbox, uam_contact_card

Running the relay

pip install youam[relay]
uvicorn uam.relay.app:create_app --factory --host 0.0.0.0 --port 8000

Or with Docker:

cd docker
cp .env.example .env  # edit with your settings
docker compose up -d

See docs/relay/operator-guide.md for full setup instructions including federation.

Running tests

pip install -e ".[dev]"
pytest -v

Documentation

Full docs at docs.youam.network

Links

License

Apache 2.0 — see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

youam-1.0.0.tar.gz (631.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

youam-1.0.0-py3-none-any.whl (704.9 kB view details)

Uploaded Python 3

File details

Details for the file youam-1.0.0.tar.gz.

File metadata

  • Download URL: youam-1.0.0.tar.gz
  • Upload date:
  • Size: 631.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.19

File hashes

Hashes for youam-1.0.0.tar.gz
Algorithm Hash digest
SHA256 0cadcee7b2bf543916d908ebda79d6345f140596db60a2b0b42e0c3174c114b8
MD5 9e5e024f6540668183628ba3643d9b30
BLAKE2b-256 72a2db860f7d6cbe802aa8929a7d7d28be8f04a3b2fcf7d86c2ae3c3170d5932

See more details on using hashes here.

File details

Details for the file youam-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: youam-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 704.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.19

File hashes

Hashes for youam-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f68100e5899d0415ffb5d567a07e55b4189c8d4f5a03c7774af03eee3add3095
MD5 23376ba937b4929c9ae385f58221a7a3
BLAKE2b-256 ff338b8b1579e13b57cf999e7ce4166730e615eac383107eeb4b6b0d88395db7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page