Three Names and One Lie
What we got wrong writing prompts for an AI that phones strangers — and the six things we’d tell anyone building one.
Callomat’s AI makes real phone calls to real businesses on behalf of real people. That means the instructions we give it aren’t a config detail — they are the product. When we get them wrong, a stranger in Rome picks up the phone and has a worse evening.
We’ve been writing and rewriting them since the beginning, and we got a lot of it wrong along the way. Here’s what we’d do differently.
We started by writing a character
Our first attempt was a casting brief. A name, a backstory, a job title, a tone of voice — warm, professional, unfailingly polite — and an instruction to sound as human as possible.
And it worked. Calls connected. Tables got booked. If you’re prototyping a voice agent this week, a good character sketch will absolutely get you a demo, and you should go and write one.
It just doesn’t survive contact with the tenth kind of business.
A prompt isn’t a character. It’s a contract.
The instructions for that same job are far longer today, and almost none of the growth is personality. It’s all failure.
What we kept adding, over and over, was the unhappy path: what to do when the answer is no, when the line is bad, when someone’s annoyed, when the request can’t be met but a near-miss could, when the right move is to apologise and get off the phone. Personality drifted steadily down the page. It’s the least important thing about a call that has to end correctly.
Write the failure modes before you write the personality. The personality is the easy part, and the part the model is already good at.
Then we counted our agents, and found three
Here’s the embarrassing part, and the reason we’re writing this at all.
Once we were running more than a dozen of these, we went to check something basic: how does our agent introduce itself? It turned out the answer depended entirely on what you were calling. Some businesses got one name. Some got a different name. Some got a vague, unnamed “digital assistant.” And in one case — our oldest and busiest one — the instruction was to skip the introduction altogether and get straight to the request.
Nobody chose this. There was no meeting where we decided hairdressers get a different agent than vets. It’s what happens when every new capability starts life as a copy of the nearest existing one, and the reviewer is looking at what changed — the new logic, the new field — rather than the many lines that came along unexamined for the ride.
Drift like this is invisible in code review. Every individual change was fine. The system they added up to was not.
Go and count how many names your agent has. Right now. We’ll wait.
The rule that outranks another rule
So we rewrote all of them at once, and made one thing non-negotiable across every single call: our agent says it’s an AI, in its first sentence, in the language of whoever picked up, before it asks for anything. If it’s asked outright whether it’s a person, it answers honestly. There is no version of the call where being helpful beats being straight with someone.
The interesting part isn’t that rule. It’s what we did with the old one.
“Sound human, avoid robotic phrases” is still there. We still mean it — warmth makes calls go better for everyone, including the person who answers. But those two instructions can obviously collide, and the fix wasn’t to delete one. It was to rank them explicitly, in writing, at the point where they meet, and say which wins.
That turned out to be the most valuable habit we picked up. Models don’t resolve contradictory instructions the way you hope. If you say “be maximally helpful” in one breath and “never quote a price” in another, you haven’t written a rule — you’ve written a coin flip, and it lands differently at 2am on a bad connection. Find the pairs that can conflict, decide which one wins, and write the tiebreak down. It costs a sentence.
Honesty was not a text change
We’d assumed adding disclosure was an editing job. It wasn’t.
The requirement is that it lands in the right language, and that it sounds like a greeting rather than a legal preamble bolted onto the front of the call. That combination turned out to be incompatible with how we’d set up the beginning of a call in the first place, and we had to change the underlying setup to accommodate it.
A compliance decision reached back and changed our infrastructure. If you’re treating disclosure as a late-stage checkbox, budget for more than a checkbox.
Then we wrote tests, which is the actual answer
Everything above is a story about our own instructions quietly drifting without anyone noticing. So the change that matters most is the last one: we made the non-negotiables automatically verifiable, and we check them against real calls rather than trusting anyone to remember.
Because the three-names problem will come back. Sooner or later, someone adds a new capability by copying an existing one, and something important doesn’t make the trip. No human reviewer is going to spot that. A test will.
A rule you don’t test is a rule that regresses on the next copy-paste.
One more, from the same week
While we were in there, we turned call recording off, deliberately and explicitly, everywhere.
We’d assumed it already was. It wasn’t — our provider’s default was on, which is a perfectly sensible default for the enterprise support tools most voice platforms are actually built for, and completely wrong for someone running a personal errand. Now it’s set explicitly on every call rather than inherited, which also means the answer to “do you record calls?” is a matter of record, not a dashboard toggle someone could quietly flip.
Go and read your platform’s defaults. They were chosen for a different product than yours.
The short version
Write the constraints and the exits before the persona. The model is already good at warmth. It is not good at hanging up gracefully.
Separate the words from the plumbing. The prose and the routing change at different rates, by different people.
Count your agent’s names. Everything new starts as a copy, so make the thing being copied correct.
When two instructions conflict, rank them out loud. An unranked contradiction is a coin flip.
Put your non-negotiables in a test, not in a code review. Reviewers read changes; drift lives in the lines nobody looked at.
Check your platform’s defaults. Especially the ones about recording.
We’re still finding things. If you’re building in this space and want to compare notes, we’d genuinely like that — reply to this post.
Send Alex — your first call is free → callomat.ai


