I built an AI receptionist that refused to lie to me.
Then I made it lie eight times — by accident — and watched it report every failure as a success. The last thing to break was the part built to catch lies. It caught its own. That isn't the embarrassing footnote of this story. It's the entire product.
What I set out to build
An after-hours receptionist for my own business. A real phone number a prospect can call at 11 PM that answers in a natural voice, works out what they need, and books them into a free consultation — by checking my actual calendar, holding a real time, and emailing them a link to lock it in. If they'd rather not book, it takes a message. When the call ends, it files a report on what happened.
None of that is exotic anymore. The pieces exist off the shelf. The interesting part isn't building it — it's the distance between something that looks like it works and something that actually does. Those two things are much further apart than most people selling AI will admit.
I know exactly how far apart, because getting from one to the other took eight hours and eight separate bugs. And here's the thing worth sitting with, because it's the whole reason you'd hire me over the person who sells you the demo:
Every one of those eight failures returned "success." Not one crashed. Not one showed an error. The phone answered, the voice was warm, the caller said thank you — and behind the curtain, nothing had happened.
The failure mode nobody warns you about
When software breaks the normal way, it tells you. A page throws an error. A red light comes on. Something is obviously wrong, so you go fix it.
AI systems have a second, quieter failure mode, and it's the dangerous one. The system does something plausible, reports that it worked, and moves on — while the actual job silently didn't get done. There's no error, because from the code's point of view nothing went wrong. It ran. It returned. It just returned a lie.
On this build, that happened over and over. The agent would take a caller all the way through a booking — collect the name, confirm the email, say "I've sent you a link, check your inbox" — and mean it. The call log looked perfect. The transcript was clean. And the database was empty. No link had been sent. No appointment held. If that had been a real prospect, they'd have sat by their inbox waiting for an email that would never arrive, and concluded I'd blown them off.
Here's the ledger of what the system told me against what was actually true, across the two days I spent hunting these down:
| # | What it reported | What was actually true |
|---|---|---|
| 1 | A smooth, competent conversation | The agent had no tools — it couldn't do anything it said |
| 2 | "200 OK" | Every action rejected — the wrong credential was checked first |
| 3 | "200 OK" | Nothing written to the database — a malformed request path |
| 4 | "That email is invalid" | The email was fine — the code dropped it in transit |
| 5 | "Message received" | The message was silently discarded |
| 6 | "Booking recorded" | The confirmation email never sent |
| 7 | "200 OK" | The entire verification step never ran |
| 8 | Report filed | The report's analysis was blank |
Six of those eight handed me an affirmative "it worked" while failing. A normal build process — trust the green light, trust the friendly voice, ship it — would have put this system live believing it was perfect. And I'd have found out it wasn't the way everyone finds out: weeks later, one lost customer at a time, from a prospect who says "I called and never heard back."
How you actually catch this
There's exactly one method, and it's boring, and it's the whole job: don't trust what the system says. Check the source of truth.
Every time the agent claimed it booked something, I didn't take its word for it — I opened the database and looked for the record. Every time an endpoint returned success, I didn't believe it — I sent the exact request a real caller sends and read what actually landed. The bug was never where the happy path said it was. It was always one layer down, in the gap between "reported" and "real."
That readout is from the finished system, working correctly. The agent believed it had booked an appointment. The verification layer checked my real calendar and my real database, found no such booking, and refused to file a clean report. Instead it flagged the call and told me, in plain language, to follow up personally.
That's the difference between an AI employee you can trust and one you have to babysit — and it's a difference you cannot see in a sales demo, because in a demo, everything works.
The bug that proves the point
The last thing to break was, of all things, the verification layer itself — the component whose entire job is to catch silent failures.
It had a subtle flaw. It acknowledged each finished call and then tried to do its analysis. But on the platform it runs on, once a function sends its response it can be shut down instantly — so the analysis never actually ran. The symptom was perfect, awful silence: every call returned "received," produced no error, wrote no log line, filed no report. The watchdog was asleep, and because it was asleep, it couldn't even tell me it was asleep.
The tool built to catch silent failure was, itself, failing silently. There is no cleaner demonstration of why this problem is real — it got me, in the exact system designed to prevent it.
I found it the same way I found the other seven: not by trusting the green light, but by reading the raw logs and noticing what wasn't there. An empty log next to a success code is a contradiction, and the contradiction was the clue.
The fix was one line's worth of reordering — do the work first, respond second. But the lesson isn't the fix. The lesson is that I looked, because I don't believe systems when they tell me they're fine. Then I did one more thing: I made the verification layer write the actual reason for any failure into its own report. The very next run, it diagnosed its own broken configuration in a single sentence — no guessing required. A system that reports its own faults in plain English is a system you can actually run.
What it looks like when it works
Once the eight bugs were dead, the loop ran clean. A caller phones the line. The agent asks what kind of business they run — a plumber and a law firm have different problems, and it adapts. It checks the real calendar, offers a real opening, captures the email letter by letter and reads it back with the phonetic alphabet so nothing gets garbled over a phone. Then it books, and the link lands in the caller's inbox before they've hung up.
And after every call, the verification layer grades it — three passes. One reads the transcript and extracts what happened. One checks those claims against the calendar and the database. One is told, bluntly, to be harsh: find what the agent got wrong that the data can't see — an invented price, a missed booking, an awkward moment, a time it agreed to that it shouldn't have.
Eight bugs isn't the embarrassing part of this story. Eight bugs is what building real software looks like. The part that matters is that all eight got caught before a single real customer ever hit them — because the system was built, from the ground up, on the assumption that it would lie to me, and the discipline to check.
What this has to do with your phone
You're probably not going to build an after-hours AI receptionist yourself. But you might hire one — mine, or someone else's. And when you do, here's what separates the two kinds of vendor.
One kind shows you a demo where everything works, hands you the keys, and disappears. Their system will do exactly what mine did eight times: report success while quietly dropping calls, missing bookings, losing messages. You won't know. It doesn't crash. It just costs you customers, invisibly, and you blame the market.
The other kind has already spent the eight hours. Has already learned, in their own gut, that an AI system will look you in the eye and tell you it's working when it isn't — and has built the habit of grounding every claim against reality as a reflex, not an afterthought.
That's why every system I build ships with a monthly report showing you what it got wrong — the calls it fumbled, with transcripts — and why that report is on the pricing page instead of buried in the fine print. If a receptionist I build ever tells a caller it did something it didn't, the verification layer catches it and tells you before the customer ever notices. That's not a feature I bolt on. It's the thing I build first.
This is the second system I've built this way. The first was an autonomous incident-response platform that grades its own repairs against real metrics — and caught itself misjudging its own success in exactly the same manner. The pattern is the whole practice: never let the AI be the judge of whether it succeeded. Measure it.
The short version
Building the AI receptionist turned up eight bugs. Six of them returned "success" while doing nothing at all. That's the failure mode that costs you customers — the one that never shows up as an error.
You catch it exactly one way: by not trusting the system. Check the database. Read the raw logs. Send the real request and inspect what actually happened, not what the system claimed.
Even the watchdog can fall asleep. The verification layer — the part built to catch silent failure — failed silently itself. I caught it because I don't take a green light as proof.
Now it grades every call against reality. When the agent says it booked something, the system checks my actual calendar before it believes it — and flags the call for me if the claim doesn't hold.
That's what you're actually buying. Not a demo that works on stage. A system that assumes it will fail, checks itself against the truth, and tells you the moment it's wrong.
Want a receptionist that answers your phone this honestly?
Thirty minutes, no cost, no pressure. You'll leave with a prioritized list of what to automate and what it's worth — whether or not you hire me.
Book a Free Audit