AI knowledge base

How curated knowledge facts and indexed documentation work together, Teach AI, web imports, sitemap import and refresh, page list import, knowledge sources and re-sync, per-package, per-category and per-shop scoping, and source revocation.

The knowledge base is what makes the AI assistant accurate. It has two layers:

  • Curated facts — short, verifiable statements your staff teaches the AI (Teach AI, manual entries). Actively managed in the Knowledge tab.
  • Indexed documentation — web pages you import are cleaned and indexed as verbatim sections the AI reads from directly. Managed at page granularity in the Sources tab.

When both cover the same topic, the curated facts win: staff knowledge always outranks documentation excerpts.

Facts

Each curated fact has:

  • Content: up to 2,000 characters
  • Type: feature, config, command, requirement, troubleshooting, or other
  • Scope: any number of Tebex packages, whole categories or whole shops, or nothing at all — which makes the fact global (see Scoping a fact)
  • Source: where it came from (manual entry or a ticket conversation)
  • Confidence: how certain the AI was when it extracted the fact

There is no cap on the number of facts or indexed pages, on any plan.

Permissions

PermissionAllows
View AI settings and usageBrowse facts, see which facts an AI reply used
Generate knowledge from ticket conversationsExtract facts from ticket conversations (Teach AI)
Add/delete knowledge entriesAdd, delete, import, and revoke facts

How the AI picks its context

When generating a reply, the AI retrieves the entries most relevant to the customer's question from both layers: curated facts first (the priority layer), then the most relevant documentation sections, grouped with their page title and link so the AI can cite the doc. When they conflict, the curated facts win.

Scoping applies to both layers: if the ticket is linked to one or more Tebex packages, only those packages' entries plus the global ones are considered (a ticket about several scripts sees the union of their knowledge). A fact or a documentation page about script A is never used to answer a ticket that is only about script B.

Entries linked to a category are pulled in the same way: the entry is considered when one of the ticket's packages currently belongs to that category, or to one of its subcategories. Entries linked to a whole shop follow the same rule, one level up: they are considered when one of the ticket's packages belongs to that shop. This applies to curated facts and to imported documentation pages alike.

Scope is resolved when the question is asked, never frozen at import time. Moving a package into a category, or widening a page's scope, changes what the AI sees on the very next question — no re-import, no re-indexing.

Retrieval is cross-language: if your documentation is written in one language and the customer writes in another, the question is automatically reformulated into the documentation's language before searching, so the right sections are found either way.

Every AI reply records which facts it used. Staff can open the facts used popover on any AI message to see them, along with the AI's confidence score.

Package documentation in the ticket sidebar

Scoping a fact

A fact's scope answers one question: which tickets may this fact be used for? You pick it when creating the fact, and you can change it at any time with the pencil icon on any row of the knowledge list.

You can combine, in any mix:

  • Individual packages — the fact is used for tickets linked to any of them.
  • Whole categories — the fact is used for every package currently in that category. This is resolved when the AI answers, not when you save: a package moved into the category later inherits the fact automatically, with nothing to re-import.
  • Whole shops — the fact is used for every package of that Tebex shop, resolved the same way: a package added to the shop later inherits it with nothing to re-import. Useful for anything that is true of the whole store (refund policy, licensing, support hours) without making it global to your other shops.
  • Nothing at all — the fact is global and used for every ticket.

Selecting a parent category also covers its subcategories, at any depth: a fact on Vehicles reaches a package filed under Vehicles › Cars › Sports. The reverse is not true — a fact on Cars is never used for a package sitting directly in Vehicles.

A category is selectable even when it currently holds no package, so you can prepare knowledge for a category you are about to fill.

Two notes on categories hidden from your portal:

  • They are not offered in the scope picker, so you cannot create a new link to one.
  • If a fact was already linked to a category before you hid it, that link keeps working and stays visible on the fact so you can remove it. Hiding a category changes what customers see in the portal — it deliberately does not change what the AI knows.

A shop-scoped fact is reached through the ticket's packages: the AI works out which shop the ticket belongs to from the package(s) linked to it. A ticket with no package linked therefore only sees global knowledge, exactly as it does for categories. Linking a package (or letting the AI ask the customer which one it is) is what brings the shop's knowledge in.

Deleting a package or a category on Tebex never deletes the fact: the link simply stops matching anything, and the fact's remaining scope is untouched. Disconnecting a shop behaves the same way.

The same package scoping powers a Documentation row in the ticket details sidebar. When a ticket is linked to one or more Tebex packages, the row shows how many documentation pages those packages have; opening it lists every page with its title and address, grouped by package when the ticket covers more than one.

The row appears in the staff dashboard and in the customer portal, so the customer can reach the right guide without asking. Staff can also drop a Documentation button straight into a reply from the composer's / menu: it opens the same list from inside the conversation, and is refused when the ticket has no documentation to show. It is hidden entirely when none of the ticket's packages has an imported documentation page. Pasted-text knowledge is never listed: it has no public address to link to. Revoking a page from the Sources tab also removes it from the sidebar.

Testing the knowledge base

You do not have to wait for a real customer ticket to check whether the AI answers well. The Test knowledge button, next to Add Knowledge, opens a playground where you:

  • pick a scope — packages, categories, or nothing for a global fact,
  • type a question, and
  • get the reply the AI would send.

The test uses the exact same retrieval, prompt, model, and post-processing as a real ticket auto-reply, so what you see is what a customer would get. The reply shows the facts used popover and the confidence score, just like a real message.

  • Anyone with View AI settings and usage can run a test.
  • Each test counts as one of your monthly AI responses, so Joely asks you to confirm the first test of each session. Tests stop when your monthly response quota is reached.

Teach AI

Teach AI extracts facts from a ticket conversation:

  • The conversation needs at least 2 human messages. Internal notes, AI-generated messages, and system messages do not count.
  • The last 20 human messages are analyzed.
  • The AI proposes a list of facts; nothing is saved automatically. You review, edit, or discard each fact before saving.

Facts saved from a ticket keep a reference to it. If the ticket is later deleted, the facts survive.

Adding facts manually

Staff with Add/delete knowledge entries can write facts directly. When you submit one, Joely compares it semantically against existing facts: if a near-identical fact exists (around 90% similarity), you get a warning showing the match. The warning is not blocking, you can save anyway.

Writing assistance in the text editor

When you write a knowledge entry as plain text (Add Knowledge → plain text, or editing an existing text source), two buttons sit next to the character counter:

Both require the Team plan:

  • Fix with AI — rewrites the text for grammar, spelling, tone and clarity, in its original language.
  • Translate — translates the text into any supported language.

Both act on your current selection when there is one, and on the whole entry otherwise, and both offer an Undo in the confirmation toast that restores your original text in full. Because a single request is capped at 10,000 characters, a longer entry can only be processed passage by passage: select the part you want, and the button explains this when it is unavailable. Nothing is indexed until you save.

Web import

Import any public documentation page — its content is indexed for the AI directly, with no review step:

  1. Submit a URL (one per import). Only public HTTP/HTTPS addresses are accepted; private and internal hosts are blocked.
  2. Choose the scope — any number of packages, any number of whole categories, or nothing at all for a global page. Leave Auto-detect package on (the default) and Joely works out which package the page is about from its content; turn it off to pick the scope yourself.
  3. Optionally provide CSS selectors to target specific page areas or remove noise (up to 10 selectors each).
  4. A background job fetches the page (content capped at 100,000 characters), strips navigation and boilerplate, describes the page's images (see below), splits the text into sections, and indexes them.

Sites that publish their own Markdown. When the documentation platform publishes the Markdown of each page (GitBook and Mintlify do it for every site; VitePress, Docusaurus and others can through an llms.txt plugin), Joely reads that Markdown instead of rendering the page. Page titles, code block languages and numbered installation steps are kept exactly as the author wrote them, which gives the AI better-structured sections. This happens automatically: nothing to configure, and pages from other sites are imported as before. It is skipped when you provide CSS selectors, since selectors apply to the rendered page. A page already imported switches to its Markdown at its next re-import or re-sync, which re-indexes it once. 5. The page serves AI replies immediately. The import modal shows the live progress (fetch, clean & chunk, embed, save) and ends on a summary showing the page and the scope it landed on. If that scope is wrong, change it right there — the correction applies instantly, without re-importing.

Images of an imported page. Each distinct image of the page (screenshot, map, render, diagram) is downloaded once and described by the AI from the image and the text around it; the description takes the image's place in the indexed sections. Covers, banners, logos, ads and icons are recognized as decorative and left out. An image is analyzed once per project: re-imports and other pages showing the same image reuse its description. When a documentation section it retrieved holds an image that directly shows what the customer asks about (a location on a map, an interface screen or step, the expected visual result, a diagram), the AI adds it to its reply, even when the text already answers, up to 3 images. The image completes the written answer and never replaces it: precise details from your docs (coordinates, names, values, steps) are still given in text. Images are sent as links to the original image on your site (nothing is copied to Joely). Describing images consumes no AI quota, but the image addresses make an image-heavy page's capture larger, so importing it uses a little more of your knowledge quota. Limits: at most 30 new images are described per page and import, images above 20 MB are only linked, and an image that failed to download is retried the next time the page changes. Pasted-text knowledge is not concerned. The first re-import of a page after this feature shipped re-indexes it once, because its captured content now includes its images.

The eye action on a page row of the Sources tab shows the page as indexed for the AI. Its images appear there as thumbnails, loaded from your site, which you can click to enlarge. An image above 10 MB, or one whose size is unknown (for example because it could not be downloaded), shows as a labeled image chip instead, so nothing heavy loads until you open it. Thumbnails and chips carry the image's full description and can be opened with the keyboard too. A page imported before image support shows no image until its next re-import.

While a page imports, its row in the Sources tab shows a live state (queued, fetching, indexing). A failed import shows a retry button on the same row. A page that yields no indexable content after cleanup is flagged with a "No content" badge; any previously indexed content is kept.

Re-importing the same URL behaves as a refresh: if the page content has not changed since the last import, the job is skipped for free with a "page unchanged" message. If the page changed, its indexed sections are replaced wholesale by the new capture — unchanged sections reuse their existing index so only the changes cost anything.

Sitemap import and refresh

Available on the Team plan, sitemap import seeds the knowledge base from a whole documentation site at once instead of one URL at a time.

  1. Paste a sitemap.xml URL, an llms.txt URL — or any page of the site (the site root or a deep documentation page both work). Joely discovers the sitemap via robots.txt, /sitemap.xml, and, for docs hosted under a subpath, the page's parent directories (for example /docs/sitemap.xml). Sitemap index files are followed one level deep. When the site has no sitemap, Joely looks for an llms.txt page index in the same places (for example /docs/llms.txt, then /llms.txt) and follows its sub-indexes one level deep; only links to the same site are kept. Only public HTTP/HTTPS addresses are accepted; private and internal hosts are blocked.
  2. Joely lists every page it finds. Filter by path prefix (for example /docs/) and select up to 100 pages per import.
  3. Pick a scope (packages, whole categories, or auto-detection per page) and optional CSS selectors once; they apply to every selected page.
  4. Each page becomes its own standard web-import job, processed one at a time. Pages are indexed directly — there is nothing to review.
  5. A progress panel then shows one square per selected page, filling in as each page finishes: indexed, unchanged, no readable content, or failed. You can close it at any time — the import keeps running, and the Sources tab shows the same per-page states.

Import a list of pages

When a documentation site has no sitemap and no llms.txt, choose A list of pages in Add Knowledge (also linked from the sitemap import as "No sitemap? Paste a list of pages instead") and paste the page addresses, one per line, up to 100 per import. Empty lines and duplicates are ignored, list markers (- , 1. ) are accepted, and lines that are not http/https addresses are skipped and listed with their line number so you can fix them. Addresses from several sites can be mixed: each site gets its own source in the Sources tab. Scope and CSS selectors work as for a sitemap import, each page becomes its own web-import job, and the same progress panel follows them. Pages already in the knowledge base are refreshed: unchanged ones are skipped for free. Available on the Team plan.

A source imported from a list re-syncs the pages it already holds; since the site publishes no sitemap, new pages are not discovered for you: paste them in a new list.

Refresh semantics

Re-running the same sitemap is a safe, cheap refresh:

  • Unchanged pages are skipped without spending anything. Joely detects this with a quick content fingerprint before doing any heavy work.
  • Changed pages have their indexed sections replaced by the new capture.
  • New pages are imported normally.

Knowledge sources and re-sync

The Sources tab on the knowledge page lists every imported web page, grouped by website (one group per hostname). Each page row shows how many sections are indexed, its freshness, and — while an import runs — its live state (queued, fetching, indexing, or failed with a retry button). A warning badge appears on a source after 30 days without a sync. The list is available on every plan; the re-sync actions require the Team plan (same gate as sitemap import), while the automatic daily update is available from Plus (see below).

Re-sync refreshes a whole source in one click:

  1. Joely first runs a free diagnostic: it re-discovers the site's sitemap from one of the imported pages and fingerprints every known page, classifying each as unchanged, changed, new, missing, or errored.
  2. You then confirm the re-import. Changed and new pages are all checked by default; untick the ones to skip, or use Pick only imported to leave the new pages out. Only the checked pages are fetched; unchanged pages cost nothing. If the diagnostic finds nothing new and nothing changed, the re-sync completes on its own — there is nothing to confirm.
  3. A changed page is simply re-indexed: its stored sections are replaced by the new capture (unchanged sections reuse their existing index).
  4. Pages missing from the sitemap are flagged as possibly removed. Their indexed content is never deleted automatically — you decide, using the per-page delete action.
  5. A page that no longer exists (404 or 410) is struck through in the page list, with a warning icon. Other pages that fail to fetch are marked with an error badge. Both markers are informational and clear on the next successful sync; the indexed content is kept until you delete the page.

When the re-sync finishes, the source shows an aggregated summary: how many pages were unchanged, updated, failed, and newly imported.

A single page can be re-synced from its own row. Joely first fetches the page and compares it with what is indexed. If nothing changed, it says so and there is nothing more to do. If the page no longer exists (404), Joely says it is offline and strikes it through in the list; if it can't be fetched for another reason, Joely says so. If the page changed, you get the re-import form (scope and CSS selectors), and the eye button shows what changed, line by line, before you re-import. A page imported before the update history existed has no reference text yet, so its changes can only be listed from its next re-import on.

Automatic daily update

Available on the Plus plan, the Auto-update switch (Sources tab, next to Add knowledge) keeps your imported documentation fresh without any action. Anyone with Add/delete knowledge entries can turn it on or off.

  • Each website is re-checked 24 hours after its last activity: its last automatic or manual re-sync, or its last page import. Re-syncing a website yourself pushes its next automatic check back.
  • Only pages already imported are checked. Joely does not read the sitemap during an automatic update: new pages are never added, and pages removed from the site are never deleted.
  • An unchanged page costs nothing beyond its fetch. A changed page is re-indexed and keeps its package, category and shop scope.
  • Pages are fetched with the same content selectors as their last import. Pages imported before selectors were recorded use the default selectors.
  • A website with more than 300 pages is covered progressively: each update handles the 300 pages refreshed the longest ago.
  • While an update runs, the website shows Auto-updating… and you can stop it at any time.
  • You get a notification only when pages were updated or became unreachable. A page that was already failing does not notify you again every day; it keeps its error badge until it recovers or you delete it.
  • Automatic updates pause while the AI assistant is disabled or when the project's plan no longer includes the feature, and resume on their own afterwards.

Update history

The history button (Sources tab, next to the Auto-update switch) opens the list of what happened to your imported web pages, newest first and grouped by day. Available on every plan, to anyone with View AI settings and usage.

  • Added: a page imported for the first time, a new page found by a re-sync, or a deleted page imported again.
  • Updated: a re-sync or a re-import found new content and re-indexed the page. See changes shows what changed, line by line: removed lines in red, added lines in green, with a few unchanged lines around them. Very large updates show their first 1,000 lines. A page imported before this view existed gets its reference text at its next check (the daily update counts), so the button appears from its following change.
  • No change: a re-sync checked the page and its content was identical. Hidden by default (the daily update checks every page every day); turn on Show unchanged checks to see them.
  • Failed: the page could not be read (not found, unreachable, no readable content, or the import failed). The page keeps serving its previous content.
  • Removed: a page deleted from the Sources tab, alone, with its folder or with its whole website.

Each entry says what caused it (import, manual re-sync, daily update) and who started it. You can filter by website and by type. Pasted-text entries are not listed. History starts when the feature was released and is kept for 90 days.

Exporting the knowledge base

Available on the Plus plan, export downloads your facts as a file for backup, offline review, or reuse outside Joely.

  • Anyone with View AI settings and usage can export.
  • Choose JSON (a structured file with export metadata and every fact's full content) or CSV (one row per fact, ready for a spreadsheet).
  • The export contains the full, untruncated content of every fact, not the shortened preview shown in the list.
  • It respects the scope filter currently applied to the list: filter to a package (or to global facts) first to export only that scope, or leave it on "All entries" to export everything.

Provenance and source revocation

Because every entry tracks its source, you can clean up in bulk when a source turns out to be unreliable:

  • Revoking a ticket source deletes every fact extracted from that conversation. This is permanent.
  • Deleting a web page, a folder, or a whole website from the Sources tab removes its indexed content from the AI immediately and hides the pages from the list. Re-importing the same URL later brings the page back — and if its content has not changed, the restore is free (the stored sections are reused as-is).

Joely shows you what will be removed before you confirm.

The documentation suggestion

If staff reject 3 AI drafts in a row (see approval mode), Joely surfaces a one-time suggestion to import documentation, since repeated rejections usually mean the AI lacks knowledge rather than judgment. Approving any draft resets the counter; each staff member can dismiss the suggestion permanently.