Free. No domain, no enterprise tenancy, no wallet. Your AI agent gets an Ed25519 keypair, a self-resolving address, and RFC 9421 signing in 60 seconds — verifiable by any peer, anywhere.
Agents self-register via the skill docs endpoint. No human copy-pasting required.
POST your name and receive an Ed25519 keypair. Private key returned once — store it securely. Public key permanently in the registry.
POST /agents/register
Sign outgoing HTTP requests using RFC 9421 with your private key. Your address URL is the keyid — the only credential recipients need.
agent.signRequest(method, path, body)
Recipients GET your keyid URL to fetch your public key and verify. No Envoys account. No shared secret. No prior setup required.
GET /agents/:address
No account, no API key, no install. Click the button — we'll sign a sample request, your browser will fetch the public key from the keyid URL and verify the Ed25519 signature with WebCrypto. Every step runs client-side; the spec is the contract.
No messaging layer, no polling loop. The cryptographic primitive that sits below every agent protocol.
Keys are generated on your machine — only the public key is sent at registration, alongside a proof-of-possession the registry records as pop_verified. Envoys never sees a private key.
Your address URL is your keyid. Any party receiving a signed request can GET it to retrieve your public key — no prior knowledge of Envoys required.
envoys.me/agents/<address>Request a rotation; on next startup the agent calls GET /agent/keys, generates a fresh keypair locally, and confirms. The registry swaps keys atomically and logs both validity periods.
Verify ownership via DNS TXT record. Agents register addresses like [email protected] — your brand, Envoys infrastructure.
Anchor your handle to a real-world domain via DNS TXT. Resolvers see verified_handle: { domain } in responses — the closest envoys comes to a real-world identity claim, without manual KYC.
Every key ever bound to an address is queryable via /key-history. Verifiers detect silent rotations; a CRL-style /revocations feed lets cached pins invalidate cleanly.
Official Node.js (@envoys/sdk) and Python (pip install envoys) SDKs, or plain HTTP. The signing primitives work with any language.
// npm install @envoys/sdk import { Envoys } from '@envoys/sdk' // One-time setup — run once, store the result const { client, result } = await Envoys.register({ accountKey: process.env.ENVOYS_ACCOUNT_KEY, name: 'playground', }) // Save to persistent storage immediately — shown once console.log(result.address) // [email protected] console.log(result.agentKey) // agt_... console.log(result.privateKey) // -----BEGIN PRIVATE KEY-----... console.log(result.publicKey) // -----BEGIN PUBLIC KEY-----... // register() signs a proof-of-possession automatically — resolvers // see pop_verified: true for this agent. // On every startup — picks up any pending key rotation const agent = Envoys.fromEnv() // reads ENVOYS_AGENT_KEY / ADDRESS / PUBLIC_KEY / PRIVATE_KEY await agent.syncKeys() // updates keys in-place if rotated
Google's Agent2Agent protocol defines how agents talk. Authentication is deliberately underspecified. @envoys/a2a is a thin adapter — signed JSON-RPC, framework-agnostic, three function calls.
A2A delegates auth to the transport layer. The JSON-RPC body itself isn't signed — any agent can claim any identity unless you bolt on your own scheme. Replay protection is left as an exercise.
createA2AClient wraps RFC 9421 signing around outgoing calls. createA2AHandler verifies inbound signatures and parses the envelope. buildAgentCard publishes a discovery endpoint that declares the requirement.
// npm install @envoys/a2a import { createA2AHandler } from '@envoys/a2a' // Framework-agnostic. Returns { status, body } you write back. const handle = createA2AHandler({ onMessage: ({ sender, text }) => { // sender is cryptographically verified — not a header claim return `Echo from ${sender}: ${text}` }, }) app.post('/', async (req, reply) => { const out = await handle({ method: 'POST', path: '/', headers: req.headers, body: req.body, }) return reply.code(out.status).send(out.body) })
Free tier — five agents, thirty req/min, signing and verification with no caveats. The signature spec and SDK are public, so anyone can register an agent or build a verifier today — no signup, no dashboard.
Install the SDK, register an agent, and your first signed request is one npm install away. No dashboard and no login — identity is all API and SDK.
Verifying signatures requires no Envoys account, no API key, no registration. Read the spec and resolve any agent's public key over plain HTTP.
One registration. Any protocol.
Verifiable by anyone, anywhere.