User guideUpdated 2026-07-02
The org-wide Knowledge base page with five chunks loaded

Knowledge base

The knowledge base is what your business is — pricing, service area, opening hours, terms, the things your AI is allowed to say. If it isn't in here, your agent will refuse to commit and offer to ring the office back.

Live at /knowledge in the sidebar.

Three places knowledge can live

The split matters because they belong to different things in your head:

SurfaceWhat goes hereWhy
/knowledge (org-wide)Pricing. Service area. Out-of-hours policy. T&Cs. What you don't do. Current promo. Parking instructions for your shop.These belong to the business. If you hire a second agent ("Bryn for nights") both should quote the same callout fee without you re-typing it.
/agents/[id] → Behaviour tabGreeting wording. Sign-off. Name pronunciations ("Caerphilly" is "car-FILL-ee"). "Always ask for the postcode before booking." How this specific agent talks.Per-agent tone, not facts.
/knowledge chunk with a Playbook scope setInstall-only objection handling that only fires on the install-sales playbook. Tenant-exit deposit rules that only fire on the tenant-exit playbook. Anything situation-specific that would pollute Sarah's regular calls if shown everywhere.Lets Sarah keep one shared persona but have playbook-specific knowledge that doesn't muddy unrelated calls. See Playbooks.

All three flow into the same prompt at call time. The split is for you (so you know where to put things), not for the AI.

Adding a chunk

Open /knowledge and click + Add chunk. A drawer slides in from the right:

The New chunk drawerThe New chunk drawer — Title, Body, and a live 'Sarah will see' preview, with Category / Priority / Playbook scope / Source below.

FieldWhat it does
TitleShort heading, e.g. "Boiler service pricing". Shown in the prompt as the heading for this block — the AI uses it to know what the chunk covers.
BodyThe actual text. Plain English. Aim for under 400 chars per chunk — short and specific beats long and waffly. Numbers are king (£80, 60 minutes, 30 mile radius).
CategoryOptional grouping label (Pricing, Policy, Promo…) for keeping the list scannable as it grows.
PriorityFour tiers: Low / Normal / High / Critical. Higher tiers are loaded first — the top 20 chunks make it into every call's prompt. Pricing should be Critical. Promos and policies High. Background colour Normal or Low.
Playbook scope"Every playbook (default)" or a specific playbook. When set, this chunk only fires on calls running the chosen playbook. The picker only appears once you have at least one playbook in /intents.
SourceWhere this came from — a label only, shown in the list. Imports fill it in automatically; manual chunks default to "Manual".

Under the Body field, a live "Sarah will see" preview shows exactly how the chunk reads once it lands in the prompt — title, colon, body. If it reads oddly there, it'll read oddly on the call.

Save, and the next call your agent answers will see it.

The four priority tiers replace the old 0–100 number on this page. The numeric 0–100 editor survives only on the agent Behaviour tab — see Agents & services.

Setting a Playbook scope on a chunk

  • "Every playbook (default)" — the chunk fires regardless of which playbook the call is running. This is what you want for most facts.
  • Pick a playbook — the chunk only fires when that exact playbook is active. Other calls don't see it.

Three-axis scoping: a chunk fires when (agent matches OR no agent scope) AND (playbook matches OR no playbook scope). So you can target "Sarah running install-sales" specifically, or "any agent on the install-sales playbook", or stay org-wide.

Import from doc or URL

Instead of typing chunks one by one, click Import from doc or URL (the sparkles button next to + Add chunk). The dialog has three tabs:

Import from doc or URLThe import dialog — File, Paste text, and From URL tabs. The AI extracts chunks for you to review before anything is saved.

TabWhat it takes
FileA .docx, .md, or .txt file, up to ~1 MB. Word documents work directly — no converting first.
Paste textYour policy, pricing notes, T&Cs — anything Sarah should quote. Paste and go.
From URLA link to a page on your site (https:// only). We crawl the linked pages too — FAQ, About, policy pages live under sub-paths more often than on the homepage.

Whichever route you pick, the AI reads the content and proposes a set of chunks — each with a title, body, category, and priority already filled in. Nothing is saved until you review and apply, and each apply takes up to 30 chunks. Review the proposals, drop what you don't want, then apply.

PDF isn't supported — export to Word or Markdown first, or paste the text.

Knowledge vs Services — which goes where

Two surfaces, two jobs. The split:

If you're writing…Put it in
A bookable thing with a duration and price ("Boiler service", "Tap replacement")Services
A fact you want quoted on demand ("our callout fee is £80", "we cover Cardiff and Penarth")Knowledge

The matching is different too: services are looked up via get_price_estimate (word-level match on name + description); knowledge is injected wholesale into the prompt so Sarah quotes it verbatim. If you're not sure, the rule is: discrete priceable thing → service, fuzzy business fact → knowledge.

Editing and deleting

The listing is a sortable table — click any row to open its drawer and edit the title, body, category, priority tier, playbook scope, or source. Delete asks you to confirm first ("Delete "…"? This permanently removes the chunk.").

For a clear-out, tick the checkboxes on multiple rows and use the bulk Delete action — it confirms the count before anything goes.

What good chunks look like

Pull these from a real plumber's seed:

Title: Pricing        Priority: Critical
Body:  Callout fee £80 (Mon-Fri 9-5). Emergency callout £140.
       Trap replacement £60. Boiler service £120. Parts at cost + 20%.

Title: Service area   Priority: High
Body:  Cardiff, Penarth, Barry, Caerphilly. Outside this area,
       refer to office.

Title: Out-of-hours policy   Priority: High
Body:  Out of hours we take a message. Real emergencies (gas leak,
       water leak in winter) get the on-call number.

Three rules of thumb:

  1. Lead with the number. "£80 Mon-Fri 9-5" beats "Our callout fee is £80 during regular hours which are Monday through Friday from 9 to 5".
  2. Be willing to refuse. "We don't do drain unblocking — refer to RotoBrum" is gold. It saves you from a job you'd lose money on.
  3. Update when prices move. The agent quotes what's in the KB. If you raise your callout fee, change it here first.

How it reaches the call

When a call starts, the API queries agent_knowledge:

  • WHERE (agent_id IS NULL OR agent_id = <this agent>) AND (intent_id IS NULL OR intent_id = <this playbook>) — org-wide facts, this agent's behaviour chunks, and any chunks scoped to the call's playbook
  • ORDER BY priority DESC LIMIT 20

…and pastes the result into the system prompt under ## Knowledge base. The agent quotes from this list and is instructed not to invent prices that aren't in it.

If you've got more than 20 chunks total: only the top 20 by priority make it. Lower-priority chunks aren't lost, but they aren't visible to the agent until you bump them to a higher tier.

What's next