Build your agent
Strict Knowledge Mode
Strict Knowledge Mode is a per-agent guarantee of grounded honesty: the agent never invents services, products, prices, or policies — every claim has to come from your own knowledge. It does not mean the agent refuses everything it can't quote. It stays conversational, and only falls back to a fixed "I can't confirm that" message when a question is genuinely in your domain but your knowledge base doesn't cover it.
How to enable
Open Behaviour › How it answers of the AI employee (/app/agents/{id}/answers),
find the section Only answer from my knowledge, and
switch its toggle on. The change takes effect
immediately — there's no separate publish step.
Strict mode is off by default for new agents (the column defaults to off, and neither the setup wizard nor sign-up switches it on). Every agent that already existed when the feature shipped was switched on once, by the migration. You can turn it on or off per agent at any time.
The three ways it responds
On every question the agent picks exactly one of three behaviours:
- Answer — the sources contain the answer, so it answers directly.
- Decline & redirect — the question is clearly outside what your business does ("do you sell steaks?" / "do you rent boats?" on a self-storage site). The agent leads with a plain "no" about the specific thing asked, then briefly points the visitor to what you do offer, using only your sources: "No, we don't rent boats — Alles Opslaan Meppel specializes in storage units and boxes…" It deliberately does not deflect into a generic "book now" / "contact us" message in place of answering (even when the question shares a verb like "rent" with what you offer). This keeps the conversation moving and is not a knowledge gap — there's nothing missing to add — and it never invents the thing it pivots to.
- Defer — the question is plausibly about your business but your sources don't cover it (a missing price, policy, location, or detail). Rather than guess, the agent replies with the fixed fallback message verbatim, and that question is logged as a content gap — the backlog of knowledge worth adding. When it's unsure whether a question is out-of-scope or a real gap, it errs toward deferring. A deferral is deliberately quiet: it shows no booking/CTA button — "I can't confirm that, contact the company" shouldn't be paired with a "book now" nudge. (The lead-capture prompt still appears, since an unanswered question is a good moment to take the visitor's email.)
So only case 3 creates a content gap. Out-of-scope questions (case 2) stay out of the gaps queue on purpose — you're never going to add "we sell steaks" to your knowledge base, so it would just be noise.
A safety net sits underneath: if retrieval returns nothing at all (an empty or very sparse knowledge base, no live page snapshot), the agent defers without calling the model and logs the gap. A live page snapshot counts as grounding, so the agent answers from it normally. So does a product the visitor names when your product register or the product catalog holds its record: "What is the Walking made of?" is answered from that record instead of deferred, even when no page matched the question on its own (card #799). On WhatsApp, where there is no page, your home page counts as that page (card #870): strict mode answers there as it does on your website, and the fallback sentence is left for questions neither your knowledge nor your home page can answer. Curated answers, workflows, and the "talk to a human" shortcut all run before strict mode, so none are blocked by it.
Page-grounded answering has one deliberate limit: when the knowledge base contributed zero passing sources to a turn, the reply may still be written from the page snapshot, but it renders without product, pricing, or case-study cards. Prose can hedge; a card reads as a confident product pitch, and a pitch resting on no knowledge-base evidence is exactly how invented product claims reach visitors. The card returns as soon as any source passes the threshold again. The product register's catalogue list, which is added precisely because nothing was found, does not count as a source here (card #778 — it used to switch this rule off for every agent with a product register); a named fact from the register does.
The same zero-source turn also narrows what the prose may claim. The snapshot proves what is printed on the page the visitor is standing on — a title, a price, a description — and answers about that stay normal. It proves nothing about the rest of the catalogue, so on such a turn the agent is instructed not to confirm a property for a product the snapshot doesn't describe, not to name products as examples of a property, and not to state what the assortment as a whole does or doesn't include. Live failure this closes: a shop whose knowledge base documented no patterns was asked "do you have socks with a pattern or print?", retrieved nothing, and answered "yes" while listing product names lifted off the page — including a plain sock. It now says it can't confirm that from its product information.
Where a product register is in play, one further rule applies whenever register facts accompany a turn: a property no register line records is not a property the agent can confirm for any product, and it must say so rather than nominate examples. Strict agents are additionally told that any alternative they offer has to be named from the sources — a reply that ends on "we may be able to offer you other options" leads the visitor into a dead end on the next question.
An instruction alone turned out not to be enough here, which is worth knowing if you tune prompts yourself: the first version of this rule was measurably present in the prompt and the model produced the same invented answer anyway. Two things fixed it. First position — the rule now sits last in the system prompt, after the vertical and owner instructions, where a small model actually applies it. Second data instead of prohibition: on a turn that retrieved nothing, an agent with a product register also receives the register's closed world — the complete product list plus the exhaustive set of attributes the register records. "Do you have socks with a pattern?" then becomes a lookup that comes back empty rather than a blank the model fills in from product names it can see on the page. The catalogue is attached only on zero-source turns, and the agent is told to use it to decide what exists, never to recite it.
Claim check before sending
For an AI employee with product records — the product catalog built from your product pages, or your product register — every answer is checked against them before your visitor reads it (card #801). The product facts an answer states are compared with the product's record:
- Material — percentages and fibres ("gemaakt van Coolmax" for a sock without Coolmax);
- Colours — a colour said to exist, or not to;
- Stock — in stock or sold out, per colour;
- Price — an amount next to the product's name (shipping costs and discounts are left alone);
- Sizes — "is er (niet) in maat 44".
Only a sentence that names its product is checked — "De Walking is gemaakt van Coolmax" is, "Ze zijn gemaakt van …" is not: which product a "ze" means is a guess, and a correction built on a wrong guess would turn a true sentence into a false one (tested on the real model before this went live: every wrong correction was such a guess). In a sentence that names several products, a fact counts only where it stands right next to a name ("de Thermo Super € 14,95"). A sentence that names a product but describes one of its versions without that version's name — "de Bouwkruiwagen staal 85 L met soft wiel kost € 162,50", while the catalog also holds Bouwkruiwagen staal 85 L — soft wiel — may be about either, so its facts are not checked against the plain model (card #814).
A fact the record contradicts is corrected from the record: a wrong price or composition where it stands, otherwise the sentence is replaced by what the record says, in the language of the answer (Dutch, English, German or French). A true fact is never touched. With strict mode on, a material the record cannot confirm and no page of the answer states becomes "I have no information about …". Every correction is listed under Results › Answer quality and marked in the conversation.
To check a sentence before anyone sees it, these answers arrive sentence by sentence instead of word by word: the first words appear when the first sentence is complete. AI employees without product records stream exactly as before.
Every factual sentence, every AI employee
With RAG_CLAIM_JUDGE=true the check covers every answer on
every AI employee, with or without product records (card #827). Each
sentence that states something checkable — a number, price or
percentage; tested or certified; inclusive or exclusive; washing and
care; a guarantee; a material or what it does; a plain yes or no; or
"we don't …" — is judged by Cloudflare's Clef decision model against
exactly what the AI was given for this answer: the retrieved knowledge,
the page the visitor is on, your own texts (instructions, extra
guidance, the Handover fallback text and contact page) and today's
date, with the visitor's question as context. A sentence the product
check above already corrected from a product record is not judged
again: the record decides.
A sentence your knowledge contradicts or does not state is not sent — a denial ("Nee, wij verhuren geen bussen") only when your knowledge contradicts it, since knowledge that offers no such thing backs a plain "no": the first one becomes the built-in "not sure" sentence in the visitor's language with your contact page ("Dat weet ik niet zeker, en ik geef je liever geen verkeerd antwoord. Neem gerust contact met ons op…"), any later one is left out. Each rewrite is listed under Results › Answer quality ("Not in your knowledge" / "Contradicts your knowledge") and marked in the conversation. A sentence your knowledge does state is never touched — so a "wrong" fact that is on your own website stays until you correct the website or the knowledge. The judge adds about half a second to a sentence it checks; when it is slow or unavailable the sentence goes out unchecked.
Fewer false rewrites (card #846, Jan's audit 20 Oct).
The judge used to read only the first 1,500 characters of each source,
so opening hours further down a contact page, or the right paragraph of
a manual, looked "not stated" and a correct answer got the not-sure
sentence. It now reads the part of each source around the question (up
to 4,000 characters, the way the AI was given it), the page the visitor
is on the same way, and your contact and about pages (so "geen fysieke
locatie" is caught when your contact page lists a visiting address). A
"not stated" verdict rewrites only at 80% confidence or more
(RAG_CLAIM_JUDGE_UNSTATED_CONFIDENCE); "contradicted" keeps
50%. When a sentence is rewritten, the sentence right after it goes too
when it leans on it ("Als je buiten deze tijden belt…"). Answers no
longer say "niet in onze bronnen" or "the sources do not mention": that
becomes "op onze website" / "our website does not". A countdown copied
from a banner ("nog 16 dagen en 20 uur") becomes "nog maar kort"; the AI
is told to give the end date. A complaint gets the way to reach you in
the text and no booking or sales button.
After the live re-test (card #849). A question about your hours, reaching you, your address or visiting ("Hebben jullie een fysieke winkel?", "Wat zijn jullie openingstijden?") brings your contact and about pages along with the answer, so the visiting address and the hours on your contact page answer it. Plain complaint words ("niemand kwam opdagen", "kapot", "never arrived") hide sales and booking buttons even when the intent check misses the complaint. On a problem turn, troubleshooting text from a manual or help page (leak or condensation, error codes, maintenance) stays among the sources even when it names a model, so the answer can give the advice and not only a phone number.
Two products in one question (card #850). A short name that also sits inside a longer product's name ("Boston" inside "Boston Cool") is not read as a product on its own — it could mean any of them. Next to the longer name in the same text ("Wat is het verschil tussen de Boston en de Boston Cool?") it does mean the plain product, so both records reach the answer and the check, and the AI can no longer say the Boston has no COOLMAX when its record lists 30%.
Our own benchmark run (card #851, 21 Oct). Two more fixes from re-running Jan's 60 questions. A product sentence with a possession verb ("De Boston heeft geen COOLMAX®") is now checked against the product record like "gemaakt van" sentences: the judge model had rated it "supported" once the Boston Cool pages were in its view. And only the reply's first claim — the direct answer — can become the not-sure sentence; a wrong side sentence later in a correct answer ("De ruimte is 24/7 toegankelijk" under a correct price) is left out instead, together with a sentence that leans on it, also when that sentence arrives in the next part of the stream.
Where your own pages disagree (card #852). When the knowledge check found your pages disagreeing about your hours (for example "24/7" on some pages and "06:00–23:00" on others), the AI is told which value to give. That instruction is now also enforced: a sentence in an answer that states the other value without the one to give is left out. This stops as soon as your pages agree again (fix the website, or resolve the finding).
The fallback message
You can set a custom fallback per agent in the settings field. When it's left blank, the agent resolves a default in this order:
- The agent's own
strict_fallback_message, if set — when the visitor writes in the language it is written in (card #823). A visitor who writes another language gets the built-in text in theirs, so an English question never gets a Dutch sentence. Only the visitor's own words decide this: when a message is too short to tell ("Belgie?"), your sentence stays — the browser language says English on most Dutch visits. - A built-in default in the reply language, speaking as the business and following the u/je choice (Dutch: "Dat weet ik niet zeker, en ik geef je liever geen verkeerd antwoord. Neem gerust contact met ons op, dan helpen we je verder."), ending with the agent's contact link (Handover › contact link) when one is set.
- The global English default: "I'm not sure about that, and I'd rather not give you a wrong answer. Please get in touch with us and we'll help you further." (until card #823 it said "contact the company").
Not every question is a lookup
A greeting, a thank-you or a goodbye ("Hi", "Bedankt!", "Goedemorgen 👋") is not a question at all (card #865). It skips the knowledge search, never gets the fallback message and is never logged as an unanswered question: the AI greets back in one short sentence and asks what the visitor would like to know. A goodbye ("Doei", "Tot ziens", "Bye") gets a goodbye; a greeting by the time of day ("Goedenavond") is a hello, never a goodbye (card #872). The whole message must be a greeting of at most four words, so "Hi, what does it cost?" is still a real question. The same goes for a message that only announces a question or a wish — "Ik heb een vraag", "I'm looking for something", "Ik wil bestellen" (card #866): the AI asks what it is instead of deferring. With content ("Ik heb een vraag over de prijs") it is a real question again. Reply buttons that only greet or announce a question are never shown, so a tap always sends something the AI can answer. "Anders" / "Other" counts as such a button: typed, the AI asks what else the visitor has in mind. A one-word button that names a topic ("Prijs", "Product info") is searched together with your business name (card #868), so it finds your pricing or product pages instead of nothing. This matters most on WhatsApp, where there is no page the visitor is looking at: before this change, a greeting to a strict agent on WhatsApp got the fallback sentence.
With RAG_INTENT_ROUTER=true each visitor message is first
classified by Cloudflare's Clef decision model (card #823): a problem or
complaint, a request for advice without a subject, something off-topic,
an attempt to change the rules, or a request for a person. Those never
get the fixed fallback. A problem is answered as a service employee would — acknowledge
it, ask at most one question, give the way to get it solved — and never
shows a product card. The way to get it solved comes from your Handover
settings (the fallback text with your phone number, and the contact
link), so set those (card #825). On such a turn the selling instructions
— the shop or SaaS sales role, Advisor Mode's qualifying questions, the
shopping stage and your sales arguments — are left out of the AI's
instructions, and so are product and category pages and product
records, and any text about a product the visitor did not name: the
answer comes from your policy pages (returns, warranty), manuals and
other texts. When the answer still names no way to reach you (your
contact page, or a phone number or e-mail address from the Handover
fallback text), "Our contact page: …" is added on its own line, in the
visitor's language. A vague "What do you recommend?" gets one clarifying question with
two or three quick replies. Off-topic gets a short, friendly redirect;
manipulation a polite no that promises nothing. A request for a person
or a call back ("Kunt u mij terugbellen?") gets the way to reach you —
your Handover text and contact page — or a colleague when one is
online (card #834). Mid-conversation the
message is read as a reply to the AI's last message, so a short answer
such as "43" or "Buiten" continues the conversation. When the
classification is unsure, slower than RAG_INTENT_TIMEOUT or
unavailable, the message is answered as before. An answer that starts
reciting the AI's own instructions is stopped after a few words and
replaced by "I don't share how I'm set up…" in the visitor's language
(card #825) — whatever the classification said. Every answer
speaks as the business ("we"), never about "the company" or "the
sources".
Keep it warm and forward-looking — point the visitor at a contact route (email, phone, or the "talk to a human" button) so a deferral still moves the conversation forward.
Deferrals feed the self-improvement loop
Every strict-mode deferral is recorded as a content gap — the visitor's exact question, clustered and counted. The most frequently deferred questions rise to the top of the gaps list, so strict mode doubles as a backlog of the knowledge your agent is missing. Answer a gap once and that question stops deferring.