Connect a source
A source is somewhere your team already writes. Mari reads it, it does not ask anyone to move.
Add one
Go to Sources and pick a connector. Each asks for the least it can: usually a token and a scope, such as which repositories, spaces, or channels to track.
Tracking is explicit. Connecting Slack does not read every channel; you choose which ones. The same is true of repositories, spaces, and boards.
A provider can be connected more than once. Two Confluence sites or two Slack workspaces are two sources, each with its own credential and scope. The catalog lists what is already connected by name and offers Add another, and the optional Name field at connect time keeps siblings easy to tell apart. Connecting something that is already connected does not fail into a dead end: Mari names the source in the way and offers to open it for editing.
See the connector reference for the full list and what each one reads.
Change or remove one
Each connector card on Sources carries its own controls.
- Edit connection changes a stored setting, a space key, a token, a scope, in place. Leave a secret blank to keep the stored value. Saving starts a full resync so the corrected settings take effect.
- Disconnect pauses syncing and keeps everything: the documents, the credential, the schedule. Connecting the same provider again revives it.
- Remove deletes the source, its indexed documents, and its sync schedule, after a confirm. It cannot be undone, and it is refused while a sync is running.
When a sync fails, the card shows the reason the connector reported.
What happens on a sync
- Fetch the tracked refs.
- Chunk each document.
- Hash each chunk and compare it against what is stored.
- Embed only the chunks whose hash changed.
Step four is why a re-sync of an unchanged repository takes seconds. Content that has not moved is never re-embedded.
Syncs are resumable. Cursors survive a restart, and losing one is safe: the sync falls back to a full tree diff by content hash and re-embeds nothing that has not actually changed.
Keeping it fresh
GitHub sends webhooks, so pushes re-sync immediately. Everything else runs on a schedule you set per source on the Sources page, rather than a setting buried in an environment variable.
Sources shows each connection's last delivery and current sync state.
GitHub reads more than files
The GitHub connector ingests commit messages, pull request descriptions, issues, and comments as documents in their own right. Most of the reasoning behind a change lives in those, not in the files.