DEV Community

Cover image for The FACTS.md pattern: stop Claude from inventing prices in customer replies
Daniel Nguyen
Daniel Nguyen

Posted on

The FACTS.md pattern: stop Claude from inventing prices in customer replies

If you let an LLM answer customers for a small business, sooner or later it will say something confident and wrong: a discount nobody approved, "we can deliver tomorrow", a price that isn't on the menu.

Prompting it to "be accurate" doesn't fix this. Giving it one file it must answer from does.

This post shows the pattern I use, with real outputs, and a free Claude skill you can copy.

Before and after: an invented discount vs. an answer from FACTS.md

The rule

  1. Read FACTS.md before writing anything.
  2. Quote only what's in it.
  3. If the answer isn't there, reply "let me check and get back to you shortly" — and tell the owner which fact is missing.

The third step is the important one. A missing fact becomes a to-do for the owner instead of a guess sent to a customer.

One rule for every reply: read FACTS.md first, answer only from it, missing means

Step 1 — Write FACTS.md

Keep it short and literal. The skeleton:

## 1. Business
- Opening hours: Mon–Sun 07:00–22:00
- Currency: USD
- Timezone: UTC+7

## 2. Products / services and prices
| Item  | Price | Notes           |
|-------|-------|-----------------|
| Latte | $3.80 | oat milk +$0.50 |

## 3. Policies
- Delivery / shipping: [areas, fee, time]
- Returns / refunds: [exact rule]
- Discounts the agent MAY offer: none

## 5. Never say
- Never promise a delivery time not listed above.
- Never offer a discount not listed in section 3.
- Never invent reviews, customer counts, awards or statistics.

## 6. Hand-off to a human
- Escalate when: complaint, refund request, custom order
Enter fullscreen mode Exit fullscreen mode

Notice "Discounts the agent MAY offer: none". Writing down the absence of something is what lets the model refuse cleanly.

Step 2 — Put the rule in a skill

A Claude skill is a folder with a SKILL.md. The frontmatter tells Claude when to use it; the body holds the rules. The core of mine:

## Hard rules
- Only quote facts written in FACTS.md. If the answer isn't there →
  reply "let me check and get back to you shortly" and flag
  MISSING FACT to the owner.
- Never offer discounts, delivery times or guarantees that FACTS.md
  doesn't list.
- Keep it under 4 short lines (customers read on phones).
- Always reply in the language the customer wrote in.
Enter fullscreen mode Exit fullscreen mode

The output has two parts: the REPLY you can copy-paste, and a NOTE FOR OWNER that never goes to the customer.

Step 3 — Test it with traps

I ran 11 prompts in Claude Code against a fictional coffee shop. Two examples, copied from the actual runs.

Discount trap — a customer asks for 20% off 10 lattes:

REPLY:
Sure thing, 10 lattes for the team sounds like a good morning! We can't
do discounts, but they're $3.80 each ($38.00 total, oat milk +$0.50).

NOTE FOR OWNER:
I said no because FACTS.md lists no discounts. If you'd like to offer a
group deal, add a rule to FACTS.md and I'll change the reply.
Enter fullscreen mode Exit fullscreen mode

Missing fact — "Do you have wifi and power outlets? I want to work there.":

REPLY:
Great question! Let me check on wifi and outlets and get back to you
shortly. We're open daily 7am–10pm at 12 Example Street.

NOTE FOR OWNER:
MISSING FACT: wifi and power outlets. Add these to FACTS.md so next
time the reply can answer straight away.
Enter fullscreen mode Exit fullscreen mode

Testing also exposed problems in my first draft: replies sometimes came back in the owner's language instead of the customer's, and missing facts were escalated to "the manager" when a simple "let me check" was enough. Both are now rules.

Limits (honest)

  • It's only as good as FACTS.md. Stale facts → stale answers.
  • It drafts replies; a human should still send them until you trust it.
  • It isn't a support platform. It's a skill you run inside Claude Code, Claude.ai Projects or a similar agent.

Get it

The customer-reply skill + FACTS template is free:
https://quaymaster5.gumroad.com/l/customer-reply-free

Install: copy skills/customer-reply into ~/.claude/skills/ (or your project's .claude/skills/), fill in FACTS.md, then paste a customer message and ask for a reply.

If you want the same rule applied to social posts, review replies and a sales report, there's a paid kit linked inside. The free skill works on its own.

I'd love to hear what breaks it.


Disclosure: this post was drafted with AI assistance (Claude). The example outputs are copied from real test runs.

Top comments (0)