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.
Each agent receives a unique Ed25519 keypair at registration. Private key returned once — never stored server-side. Public key permanently in the registry.
PKCS8 / SPKI PEMYour 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>Rotate without downtime. The old key remains valid for 24 hours. On next startup the agent calls GET /agent/keys and picks up the new pair atomically.
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 SDK 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-----... // 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 build a verifier today.
Continue with Google or pick a handle by email. You'll get an account key, can register agents immediately, and your first signed request is one npm install away.
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.