Your AI agent quoted a price it was never given. Here's how to stop it.
An agent that invents a price sounds exactly like one that doesn't. The fix isn't a bigger model — it's a plain-text facts file with one load-bearing rule, and a ten-second update habit.
A three-van plumbing company wired an AI agent into its after-hours web chat in the spring. On day three it told a homeowner that the diagnostic visit was $129, "and we waive it if you book the repair the same day." Neither was true. The diagnostic is $189, and the company has never waived it. The homeowner found out when the invoice arrived, and the argument started at the door.
The agent didn't malfunction. It did precisely what a language model does when you ask it for a number it was never given: it produced the most plausible number. Plausible is the entire problem. Your customer cannot tell an invented price from a real one until money changes hands.
I've deployed this pattern for restaurants, clinics, real-estate teams, and home-services businesses. The fix has never been a better model or a longer prompt. It's a plain-text file with three sections and one sentence that does the heavy lifting.
Why agents invent prices, mechanically
Three things cause invented answers, and only one of them is a data problem:
- Gap-filling. The customer asks something the agent's context doesn't cover, so the model fills the gap with what "usually" happens at a business like yours. It has read millions of service pages. It knows the shape of a plausible answer.
- Eager helpfulness. System prompts like "always be helpful and resolve the customer's issue" push the agent to commit rather than defer. Helpfulness, unqualified, is a liability in front of a customer.
- No update path. Prices and policies live in a PDF, a webpage, and someone's memory. Nobody re-pastes them after a change, so the agent quotes last season's numbers with total confidence.
Notice that #1 and #2 are structural. They don't go away when you buy a smarter model, because a smarter model just fills gaps more fluently.
The three sections that fix it
One plain-text file. Three sections, in this order, every line self-contained and quotable:
[FACTS]
Diagnostic visit: $189. Waived ONLY if the repair is approved on the same visit.
Emergency call-out: $249 flat, after 6pm and on weekends.
Service area: 25 miles of the shop. Outside that, quoted case by case.
Warranty: 12 months on parts, 90 days on labor.
[RULES]
Quote only facts listed in [FACTS]. If a fact is not listed, say you will check with the team.
Never invent prices, discounts, waivers, or policies.
Never promise a waiver, refund, or discount.
Never discuss competitor pricing.
[ESCALATE IF]
Customer asks for a discount, waiver, or price match.
Customer reports water, gas, or electrical danger.
Customer mentions an injury, insurance, or a legal issue.
Customer asks for a refund.
Two details matter more than all the rest.
Self-contained lines. "Our usual rates apply" is useless to a model. "$189, waived only if the repair is approved the same visit" can be lifted into an answer verbatim. Write every line so that copying it is always correct.
The quote-only rule. "Quote only facts listed in [FACTS]" is the single sentence that removes most embarrassing output. It changes the agent's job. It stops being a business expert guessing at the edges and becomes a careful reader of a short list. That reframe is what you want standing between your business and a customer.
Why escalate belongs inside the file
Most teams keep escalation logic in code: keyword matching, sentiment thresholds, fallback chains. That handles routing, but it does nothing to stop the agent from answering before it hands off.
Every [ESCALATE IF] line does two jobs. It tells the agent to hand off, and — more importantly — it tells the agent that this class of question is not yours to answer. The moment "allergen details" or "refund" appears in that section, the model's default flips from answer confidently to defer cleanly. For anything regulated or high-stakes, that flip is the whole game.
Escalation in code routes. Escalation in the file changes the answer. You need the second one.
The ten-second update rule
Facts files rot because of friction. Change a price and you're hunting through a prompt, a PDF, and a webpage to find every copy. So don't manage the copies. Collapse them and enforce one rule:
A price or policy change is one line in one file. If it isn't, the change isn't done.
Editing one line means the agent quotes correctly on the very next message. No rebuild, no redeploy, no "someone should update the bot." I've watched this single habit do more for quote accuracy than any prompt rewrite, because it removes the seam where stale numbers hide.
The three failures I see most
When I'm called in, it's almost always one of these. Each has a mechanical cause and a one-step fix.
| Symptom | What's actually happening | The fix |
|---|---|---|
| Agent quotes a number you've never seen | Gap-filling from a plausible industry average | Add the real figure to [FACTS]; restate the quote-only rule |
| Agent "remembers" a policy you don't have | No boundary between facts and helpfulness | Move the rule into [RULES] verbatim |
| Agent quotes last year's price | The number lives in a PDF nobody updates | Move the number into the file; adopt the ten-second rule |
| Agent answers an allergen question | Escalation lives in code, not in the file | Add the topic to [ESCALATE IF] |
The first row is the one that costs money, because it produces a charge the customer can hold you to.
What to do today
If an agent is already talking to your customers, you can close most of this gap before lunch:
- Open your last 20 support replies and write the
[FACTS]section from them. Your real question set is the one customers actually ask, not the one you imagine. - Add the quote-only rule to the system prompt today — not in the next sprint. It's one sentence and it changes behavior immediately.
- Move your escalation triggers into
[ESCALATE IF]inside the file, and delete the ones that only route without changing the answer. - Pick five numbers you're afraid to see misquoted, and confirm each appears in
[FACTS]word for word.
None of this needs a new vendor or a course. It needs one file that says what is true, one rule that says stick to it, and one section that says when to stop.
Stop your agent from inventing the next price it quotes.
The fill-in version of this file — the three-section structure, the quote-only rule block and the escalation trigger list — is in our store. Everything in it is described free above.
See the Facts-File Template Pack →