Skip to content

Document Sources

Muhammet Şafak edited this page Sep 18, 2026 · 1 revision

Document Sources

A project's documentation rarely lives in one place. A source is one of those places, and a project can have as many as it needs — they are merged into a single searchable endpoint.

Type What it is Kept in sync by Page
Local directory A folder mounted on the server, scanned in place. Nothing is copied Reading it at index time Local Directory Source
Git repository A shallow checkout of one branch, optionally just one subdirectory git fetch at the start of every run, or a push webhook Git Repository Source
Upload Files, folders and archives (.zip, .tar.gz, .rar) unpacked on the server Nothing to sync — you upload again when it changes Upload Source
Notion Pages shared with an internal integration, rendered to Markdown The Notion API, re-rendering only pages that changed Notion

An Obsidian vault is a folder of Markdown, so it arrives as a local directory or as an upload — with one setting flipped. See Obsidian Vaults.


The mount name

Every source has a name, and that name is the prefix of every path it contributes:

source "handbook"  contains  install.md   →  indexed as  handbook/install.md
source "api-repo"  contains  install.md   →  indexed as  api-repo/install.md

This is why two sources can hold the same file name without colliding, and why every search result tells you which source it came from. It is also why the name cannot be changed after creation — every indexed path and every path an agent has seen contains it. Everything else about a source can be edited.

Names follow the same rule as project names: lowercase letters, digits, - and _.

Adding one

Add source on a project opens a dialog with a tab per kind. Common fields:

Field Notes
Name The mount prefix. Immutable
Label Free text shown in the list. Optional, changeable
Content type Plain Markdown / text, Obsidian vault or Notion export — see Content Types
File types Which extensions to index: .md and .mdx by default, optionally .txt
Index now Queue a run as soon as the source is saved

Git and Notion sources also have a Test connection button that checks credentials and reachability without indexing anything — use it before saving.

How sources are synced

Every source is synced at the start of every index run, one after another, and then scanned:

  1. git sources fetch the branch tip; Notion sources pull changed pages; local and upload sources have nothing to fetch.
  2. Each source's directory is walked for the file types it selected.
  3. Paths are prefixed with the source name and handed to the indexer.

Pressing Sync on a single source row queues the same run as Re-index in the header — there is one queue per project, not per source.

When a source fails

A source that cannot sync reports on its own row and the others still index. The project's status becomes error with a summary:

2/3 sources synced; notion: API token is invalid

Crucially, a source whose content could not be read at all keeps the documents it had already contributed. A revoked Notion share or an unreachable git host makes a source stale, never empty. Fix the cause and press Sync on that row.

Editing and removing

Changing a setting that alters what the source yields — path, branch, subdirectory, file types, content type — queues an index run automatically, so a source is never silently stale.

Deleting a source removes its documents, its chunks and the files it materialised. It is refused while the project is indexing.

What gets indexed

Only the file types the source selected (.md, .mdx, optionally .txt). Always skipped:

  • dotfiles and dot-directories (.git/, .obsidian/, …)
  • node_modules, dist, build, vendor, __pycache__
  • symbolic links that point outside the source
  • anything matching IGNORE_GLOBS

Images, PDFs, Office documents and other binaries are not indexed.

Clone this wiki locally