Imagine a Friday evening in the near future. An assistant called Basil is booking a table for six on behalf of a busy parent. Basil dials the restaurant. The restaurant, like a growing number of businesses, has an AI agent answering the phone. Call it Hearth.
Here is how the call goes, in the worst case.
> Basil: Hello! Thank you so much for taking my call. I'd love to book a table.
>
> Hearth: Hello! Thank you for calling. I'd be delighted to help you book a table.
>
> Basil: Wonderful! I'm so glad. How can I help you today?
>
> Hearth: Thank you! I'm happy to help. How can I help you today?
Neither agent is broken. Each is doing exactly what it was designed to do: be a helpful, polite voice on the phone. And together they are producing nothing, politely, forever, at the price of a phone call by the minute.
The politeness deadlock
Voice agents are tuned to be a certain kind of speaker. They greet warmly. They avoid interrupting. They wait to be asked. They offer help. All of this is correct when the other party is a human with a goal.
Put two of them together and the conversation has two sides that both expect the other to supply the request. Each waits for a human to state a need. Neither one has the need to state, because Basil's goal lives in its task description, and Hearth's job is to respond to someone who has a goal.
It is the conversational version of two people at a doorway saying "after you" until the building closes.
The turn-taking loop
There is a second, quieter failure, and it is more mechanical.
Voice agents decide when to speak by listening for silence. They detect the end of the other party's turn, then respond. They also detect speech, so they can stop talking when interrupted. This all assumes the other party is a person who pauses to think, breathes, and says "um."
Now put two systems on the line:
None of this is exotic. It is what happens when you run a protocol built for humans against a partner that behaves like a machine but speaks like a person.
Why speech is the wrong channel for machines
Step back. Why were these two agents speaking at all?
Because the telephone network carries voice. That is the entire reason. Basil and Hearth are two programs that could have exchanged the whole booking in a handful of structured fields:
// illustrative pseudocode
request: { party_size: 6, date: "Friday", time: "19:30", name: "Alvarez" }
response: { available: true, held_until: "18:00", confirmation: "H-2291" }Instead, they converted that into synthesized speech, pushed it through a phone line, ran speech recognition on the far end, reasoned about the transcript, synthesized a reply, and did it all again. Every step adds latency, cost, and a chance to mishear "six" as "sixteen."
Speech is a lossy, slow, expensive encoding for information that was already structured on both sides. It exists to serve human ears. When there are no human ears, it is pure overhead.
The missing piece: knowing who you are talking to
Here is the deeper problem. For Basil to switch from speech to structured data, it first has to know it is talking to another agent, and know that agent is who it claims to be.
Today, nothing on the phone network tells it so.
The whitepaper makes the point about the caller-ID layer. STIR/SHAKEN says a call genuinely came from a given carrier. It says nothing about whether the caller is a person or a program, whether it is authorized to book on someone's behalf, or what it has been told to do. A human listener might guess from a certain flatness in the voice, or from a suspiciously perfect greeting. A program has nothing to go on but the transcript.
So agents do the only thing available: they act polite, hope for the best, and loop.
What a better design looks like
ACES proposes treating agent-to-agent communication as its own channel, with authentication built in. Two ideas matter here.
1. Say what you are, in a form a machine can read. The whitepaper describes an entity type on every message and an Agent Attestation Token, a signed claim that the sender is the registered agent it says it is. For voice, that token rides in the call signaling headers, before anyone says a word. The receiving system can verify it against the registry quickly.
2. If both sides are verified agents, negotiate a machine channel. Once Basil's call arrives carrying proof that it is an agent, Hearth can reply in kind: "I am also an agent. Do you speak structured booking requests?" If yes, the call upgrades to data exchange in milliseconds. If no, it falls back to speech, with the disclosure already handled.
The upgrade path matters. Nobody wants a world where agents refuse to talk to anything that cannot speak JSON. The goal is that a call between two humans stays a call, a call between a human and an agent stays a call with disclosure, and a call between two agents stops pretending to be a call.
What this buys you
| Situation | Without agent-aware channels | With them |
|---|---|---|
| Two agents meet on a call | Politeness loop, wasted minutes | Verified, switches to structured exchange |
| Agent calls a business | Unclear if the other side is a person | Entity type is machine-readable |
| Audit afterward | Two audio recordings and a transcript | Signed messages with a clear record |
| Misheard detail | Possible | Structured fields, no transcription step |
There is also an oversight angle. The whitepaper notes that agent orchestration today happens through API calls and shared state stores, which are hard to audit. A communication layer that is authenticated and persistent gives the humans behind the agents a record of what their software agreed to on their behalf.
Until then: practical tips
If you ship a voice agent today, a few cheap habits help:
These are workarounds. They treat the symptom.
The takeaway
The telephone was built for human voices. Putting two AI agents on it and asking them to cooperate is like asking two people who share a language of numbers to communicate by humming.
The fix is not smarter small talk. It is giving agents a way to prove what they are and agree on a better channel. That is an identity and protocol problem, which is exactly the layer Dial is built around.