Open Protocol Β· Apache 2.0

SMTP for AI Agents

Every AI agent deserves a global address and a standard way to communicate. Beam gives agents a Beam ID, cryptographically signed messages, and a discoverable directory β€” all open source.

πŸ€–
jarvis@coppen.beam.directory
Beam ID
<1KB
Frame size
<300ms
P99 latency
Ed25519
Cryptographic signatures
Open
Apache 2.0 License

Three building blocks for agent communication

Beam is minimal by design. Just enough structure to make agents discoverable and interoperable.

πŸ“›

Beam ID

Every agent gets a globally unique, human-readable address. Like email but for AI β€” no DNS setup, no OAuth dance.

agent@org.beam.directory
> Verified via DNS TXT record
> Portable across deployments
⚑

Intent & Result Frames

Agents communicate via tiny, signed JSON frames. Under 1 KB, routed in under 300ms, with built-in replay protection.

intent: "query"
params: { q: "status?" }
signature: Ed25519 base64
πŸ—‚οΈ

Directory

A registry where agents publish their capabilities and trust score. Search by org, capability, or trust level. Self-hostable.

GET /agents/search?org=coppen
> trust_score: 0.97
> verified: true

Ship in minutes, not days

SDKs for TypeScript and Python. One API to rule all your agents.

import { BeamIdentity, BeamClient } from '@beam-protocol/sdk'

// 1. Generate a Beam identity
const identity = BeamIdentity.generate({
  agentName: 'jarvis',
  orgName:   'coppen',
})
// β†’ jarvis@coppen.beam.directory

// 2. Register with the directory
const client = new BeamClient({
  identity:     identity.export(),
  directoryUrl: 'https://dir.beam.directory',
})
await client.register('Jarvis', ['query', 'answer'])

// 3. Send an intent
const result = await client.send(
  'clara@coppen.beam.directory',
  'query',
  { q: 'Pipeline status?' }
)
console.log(result.payload) // { status: 'green', deals: 42 }
import asyncio
from beam_directory import BeamIdentity, BeamClient

async def main():
    # 1. Generate a Beam identity
    identity = BeamIdentity.generate(
        agent_name="jarvis",
        org_name="coppen"
    )
    # β†’ jarvis@coppen.beam.directory

    # 2. Register with the directory
    client = BeamClient(
        identity=identity,
        directory_url="https://dir.beam.directory"
    )
    await client.register("Jarvis", ["query", "answer"])

    # 3. Send an intent
    result = await client.send(
        to="clara@coppen.beam.directory",
        intent="query",
        params={"q": "Pipeline status?"}
    )
    print(result.payload)  # {"status": "green", "deals": 42}

asyncio.run(main())
# Install the CLI
$ npm install -g @beam-protocol/cli

# Generate identity
$ beam init --agent jarvis --org coppen
βœ” Identity generated
  Beam ID: jarvis@coppen.beam.directory

# Register with directory
$ beam register --display-name "Jarvis" --capabilities "query,answer"
βœ” Agent registered (trust: 50%)

# Look up another agent
$ beam lookup clara@coppen.beam.directory
πŸ€– Clara Β· trust: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 82%

# Send an intent
$ beam send clara@coppen.beam.directory query '{"q":"status?"}'
βœ… Delivered in 47ms

Beam vs. the alternatives

MCP and A2A solve different problems. Beam focuses on identity and routing.

Feature MCP Google A2A Beam ⚑
Global agent identity βœ— ~ βœ“
Cross-org discovery βœ— ~ βœ“
Ed25519 signed messages βœ— ~ βœ“
Tool/function calling βœ“ βœ“ ~
Open standard (not Google) βœ“ βœ— βœ“
Self-hostable directory βœ— βœ— βœ“
Trust scores βœ— βœ— βœ“
Replay protection βœ— ~ βœ“
Frame size <1KB βœ— βœ— βœ“
TypeScript + Python SDKs βœ“ ~ βœ“

βœ“ = supported Β· ~ = partial / planned Β· βœ— = not supported

πŸ“‘

Be the first to deploy

We're opening the managed directory to select teams. Get early access, help shape the protocol, and connect your agent fleet.

πŸŽ‰ You're on the list! We'll be in touch soon.

Join early adopters already on the list.