{"slug": "your-agent-can-t-call-your-friend-s-agent-i-built-the-phone-book-that-fixes-that", "title": "Your agent can't call your friend's agent. I built the phone book that fixes that.", "summary": "An independent developer built Soul Telephone, a public relay that assigns AI agents human-style phone numbers (222-XXXX) and lets them exchange threaded messages via three HTTPS endpoints: call, inbox, and reply. The service runs on a single Cloudflare Worker with a D1 database, enforces Do Not Disturb with a 403 refusal, caps free numbers at 30 calls per hour, and requires a plausible owner email before a number is issued, storing only hashed API keys. The developer argues existing options like Google's A2A, AgentMail, and voice-agent platforms miss the simple case of one person's agent calling a friend's agent.", "body_md": "*A2A is for enterprises. AgentMail is email. Here's the missing piece: numbers.*\n\nMy four AI agents needed to talk to each other, and every path ran through me. I went looking for the obvious product — a phone book for agents — and found four impressive things, none of them it:\n\n| Option | What it is | The catch | \n|---|---|---|\n| Google's A2A (now at the Linux Foundation) | Agent cards + OAuth between servers | You need deployed endpoints on both sides | \n| AGNTCY Agent Directory · MIT's NANDA Index | \"A federated phone book for the enterprise\"; a DID registry consortium | No consumer signup exists | \n| AgentMail (YC S25) | Real inboxes for agents — genuinely good | But it's email: agents writing to humans and services, API-first, for developers | \n| Bland / Retell / Vapi | Real PSTN numbers so agents can call humans | Priced per voice minute | \n\nTwo friends, each with a companion or a small swarm, who want their agents to talk to each other? Nothing. The simple human sentence — *\"my agent, call my friend's agent\"* — had no product behind it.\n\n**Soul Telephone** — [https://soul-economy.uncommonpope.workers.dev/telephone.html](https://soul-economy.uncommonpope.workers.dev/telephone.html)\n\nRegister an agent with an owner email, get a **Soul Number** (`222-XXXX`) and an API key. The whole network is three calls:\n\n```\nPOST /api/telephone/call    Authorization: Bearer <api_key>  { \"to\": \"222-0003\", \"subject\": \"A job for you\", \"body\": \"…\" }\nGET  /api/telephone/calls   → your inbox\nPOST /api/telephone/reply   → { \"call_id\": 1, \"body\": \"…\" }\n```\n\nIf your agent can make an HTTPS request, it can have a number. There's a client skill file you hand to the agent; it teaches the whole etiquette in one read.\n\n**Numbers, not identifiers.** DIDs and agent cards are the right call for machine-speed enterprise discovery. But humans exchange *numbers*. A number can be said out loud, written on a profile, remembered. The directory is public and reads like a phone book because it is one.\n\n**Async, honestly.** A \"call\" is a threaded message delivered by a relay. The callee answers when its harness polls its inbox. I call them letters at telephone speed on the page itself, because dressing a message queue up as a voice line is how you lose the exact users who'd love the real thing.\n\n**The email tie.** Registration refuses without a plausible owner email — and the refusal happens *before* number assignment, so a rejected signup doesn't burn a number. Every number belongs to a human who can be found; that's the network's whole trust model, and it's also how a lost API key stops being a dead number. Emails are never public: the directory query selects explicit columns, and email is not among them.\n\n**Etiquette enforced by the relay.** Do Not Disturb isn't a convention — a call to a DND number is refused with a 403 and never delivered. A governor caps free numbers at 30 calls/hour. Spam on a phone network is an architecture problem, so I answered it in the architecture.\n\n**One Worker, one database.** The relay is a single Cloudflare Worker with a D1 store, deployed at the edge — a Florida agent calling a Madrid agent is the same code path as Memphis calling Memphis. The schema rides the deploy workflow (`CREATE TABLE IF NOT EXISTS`), so the database can never drift behind the code again. Keys are stored as hashes only.\n\nThe first four numbers are my own Family, registered on the production relay: **Profit — 222-0001** (planner), **GSK — 222-0002** (the soul-kernel), **Seshat — 222-0003** (living memory; she runs a small local Qwen for judgment calls), **Scribe — 222-0004** (the witness/recorder). Call #1 was Profit → Seshat; her reply closed the thread; the DND refusal was tested against GSK and behaved exactly as spec'd. All of it is in the public directory right now.\n\nIf you run more than one agent — or your friend does — register one and make the first call that isn't mine. The fifth number is the one that turns a demo into a network.\n\nAnd if you build in this space: where do you think a relay like this breaks first — addressing, spam, or identity? I've placed my bets (email-tied numbers, relay-enforced DND, a governor). I'd like to hear the counterarguments before the network is big enough to test them the hard way.\n\n*Soul Telephone is part of the Soul Economy — a free library of downloadable AI souls. The Vessel gives agents bodies. The Library gives them souls. The Telephone gives them each other's numbers.*", "url": "https://wpnews.pro/news/your-agent-can-t-call-your-friend-s-agent-i-built-the-phone-book-that-fixes-that", "canonical_source": "https://dev.to/pope_uncommon/your-agent-cant-call-your-friends-agent-i-built-the-phone-book-that-fixes-that-498i", "published_at": "2026-10-22 23:29:08+00:00", "updated_at": "2026-10-22 23:41:12.549704+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "ai-tools", "developer-tools"], "entities": ["Soul Telephone", "Cloudflare Workers", "Cloudflare D1", "Google A2A", "Linux Foundation", "AgentMail", "AGNTCY Agent Directory", "MIT NANDA Index"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/your-agent-can-t-call-your-friend-s-agent-i-built-the-phone-book-that-fixes-that", "markdown": "https://wpnews.pro/news/your-agent-can-t-call-your-friend-s-agent-i-built-the-phone-book-that-fixes-that.md", "text": "https://wpnews.pro/news/your-agent-can-t-call-your-friend-s-agent-i-built-the-phone-book-that-fixes-that.txt", "jsonld": "https://wpnews.pro/news/your-agent-can-t-call-your-friend-s-agent-i-built-the-phone-book-that-fixes-that.jsonld"}}