Knowledge sources
Bring pages in from Notion, Confluence, Google Drive, Sanity, GitHub and websites, and keep them up to date on their own.
A knowledge base can hold pages from the apps your team already writes in, next to the files you upload. You pick what to bring in once; Coderhelm keeps it up to date, removes what is deleted, and Chat and the agents cite each page with a link back to where it lives.
Adding a source
On the Knowledge page, choose New knowledge base (or Add on an existing one):
- Pick the app: Notion, Confluence, Google Drive, Sanity, GitHub, a website, or Upload files.
- If the app isn't connected yet, choose Connect and sign in to it. You come back to the same step.
- Tick what to bring in. Ticking a page, space or folder includes everything inside it, including what is added there later.
- A new knowledge base is named after what you picked; change the name if you like. It is readable by your whole team unless you change that.
The pages start arriving right away, and the dialog shows each one as it comes in. You can close it; the import keeps going.
What each app brings in
| App | You pick | Brought in | Connects with |
|---|---|---|---|
| Notion | Pages and databases | Each page's text, nested blocks and a database row's properties | A Notion sign-in, or the Notion token saved on the Integrations page |
| Confluence | Spaces or page trees | Each current page's body | An Atlassian sign-in, or the Confluence email and API token saved on the Integrations page |
| Google Drive | Folders (with their subfolders) or single files | Docs, Sheets and Slides as text; PDF, Word, Excel, Markdown, CSV, HTML and text files | A Google sign-in with read-only access to Drive |
| Sanity | A dataset, or document types in it | Each published document's text (drafts never) | The Sanity token and project id saved on the Integrations page (a Viewer token is enough) |
| GitHub | Repositories, folders or files | Markdown, MDX, text, reStructuredText and AsciiDoc files on the default branch | The Coderhelm GitHub App |
| Website | Page addresses or a sitemap | Each page's readable text | Nothing: public pages only |
A source keeps up to 1,000 pages. Coderhelm only ever reads: nothing is changed, created or deleted in the app.
Sanity: turning documents into text
By default a document's title is its first title, name, heading or label field and its body is every text field, with Portable Text read as paragraphs and headings. A source's settings can set, per type, which field is the title, which fields are the body, and a link template such as https://example.com/blog/{slug.current} so citations open the published page. With studio_url set, citations open the document in your Studio instead.
Staying up to date
| App | Changes arrive | Scheduled check |
|---|---|---|
| Sanity | The moment they are published (Coderhelm adds the webhook itself when the token may manage webhooks; otherwise the dialog shows the address and secret to add) | Every 6 hours |
| Notion | Within moments, when your install has Notion webhooks set up | Every hour, or every 6 hours with webhooks |
| GitHub | On every push to the default branch | Every 6 hours |
| Confluence, Google Drive, websites | At the scheduled check | Every hour |
Check for changes on a source checks right away, even while it is paused. Pause updates stops scheduled checks and webhooks until you resume.
Each check is as small as the change:
- A page whose edit time (or revision) is unchanged is not read again.
- A page that was read but whose text is the same is not indexed again.
- A changed page re-indexes only the passages whose text changed.
- A page that was deleted, moved out of what you picked, or is no longer shared with the connection is removed, with its passages.
Where a source stands
Each source on a knowledge base's page shows one line: Up to date, checked 5 minutes ago, Bringing in 12 of 40, Paused, or what to do when something is wrong, with a button that does it:
| What happened | What you see |
|---|---|
| The sign-in expired or was revoked | Reconnect Notion |
| What you picked was moved or deleted | Choose pages again |
| The app asked Coderhelm to slow down, or didn't answer | Try again (it also retries on its own) |
A page that couldn't be read says why in the list of pages, and is tried again on the next check.
Who can read it
Pages from an app follow the knowledge base's own setting, exactly like uploaded files: everyone who can read the knowledge base can read every page brought into it, even if they can't open that page in the app. The dialog says so when you add a source. Pick what you bring in with that in mind, or set the knowledge base to admins only.
- Only people whose role includes managing knowledge add, change, pause and remove sources.
- Connections belong to the team, not to the person who signed in, so syncs keep working when that person is away. The page shows who connected each app.
- Sign-ins are sealed with your install's encryption key for one team and one connection, renewed before they expire, revoked when you disconnect, and never sent to the browser or to a model.
Citations
A passage from a synced page is cited like one from an uploaded file, with its place in the page and the page's last edit date, and the citation links to the original page in Notion, Confluence, Drive, GitHub or on your site.
Cost
Indexing uses Titan embeddings and is recorded on your usage page like every other model call. Because only changed passages are indexed again, keeping a large source up to date costs a small fraction of the first import.
For developers
Every source type implements one interface with three calls: list what can be picked one level at a time (with a search box), list every item a selection covers with the app's version marker (or, from a cursor, what changed and what was deleted), and fetch one item as text with its title, link and edit time. The sync engine does the rest: comparing, hashing, indexing only what changed, deleting, scheduling, status and citations.
A plugin can add a source type by shipping a connector that answers those three calls; nothing else changes. The endpoints the dashboard uses are under /api/knowledge/connectors and /api/knowledge/{kb_id}/sources, and providers post change events to POST /webhooks/knowledge/{token} (see the API reference).
Running your own install? One-click sign-in for Notion, Confluence and Google Drive, and Notion webhooks, need OAuth apps of your own: see Knowledge sources in the self-hosting guide.