Reference

Available sources

Every source Omnesis can index, what each one adds to your index, and how to manage the sources you have connected. It is for anyone deciding what to connect, or looking after a running setup.

A source is one account's data from one platform, such as a Gmail mailbox or your Apple Notes. A provider is one sign-in that serves several source types: signing in to Google once covers Gmail, Calendar, Drive, and Contacts. Most sources run on a collector — some on any machine, some only on macOS because they read local Apple databases. A few run inside the phone apps and push straight to the gateway. A handful live on the gateway itself: Web Pages (type web), fed by the browser extension, and the Omnesis-native sources listed under Omnesis itself.

Every source follows the same deletion rule. An item goes when the platform reports it deleted, or when complete, successful reads stop listing it — and in that second case Omnesis waits for several reads over time to agree before removing it. A failed or partial read never deletes anything. Managing sources covers adding, pausing, re-syncing and removing them, and Sources on several devices covers what happens when two machines or phones host the same source.

In the tables below, the tags under each source's name say where it runs and how it connects — any collector OAuth, for example.

Email & messaging

Google sources share one sign-in too, through an OAuth client you register in your own Google Cloud project; the first Google source you add walks you through it (see Google's OAuth client). Microsoft sources share one sign-in, so consenting once covers Outlook Email, Outlook Calendar, and OneDrive. Omnesis supplies a public Azure app, so no Azure setup is needed; omnesis creds set outlook switches to an app registration you control. Microsoft sign-in supports personal Outlook.com, Hotmail, and Live accounts. Work and school accounts are not supported.

Source What it adds
Gmail
any collector OAuth
Every email as a document, dated by when it was sent, with attachment text extracted (scans and images are OCR'd when an OCR model is assigned); senders and recipients, Bcc included, feed the people graph.
Outlook Email
any collector OAuth
Emails and their attachments as documents; correspondents feed the people graph. Folder walks drain every delta page before starting incremental tracking, even when a page contains messages outside the retention window.
IMAP Email
any collector IMAP password
Email from any account that offers IMAP over TLS on port 993 — the whole mailbox, or only mail newer than the source's maxAge when one is set. Use an app-specific password when the provider offers one. The hostname is the provider's IMAP server, such as imap.fastmail.com for Fastmail or imap.mail.me.com for iCloud Mail. The source skips Drafts, Junk, and Trash and indexes up to 512 KiB of each message body. Attachment text is extracted (scans and images are OCR'd when an OCR model is assigned). Senders and recipients feed the people graph, mailboxes become tags, and reply headers link messages into threads. Use omnesis sources reauth imap:<email> to replace the password.
Maildir
any collector Folder path
Email that a mail tool such as mbsync or offlineimap, or Thunderbird, keeps on the collector's own machine as a Maildir. Omnesis reads the files and never connects to the mail server. See Maildir.
WhatsApp Messages
any collector QR pairing
Messages as conversational documents, live as they arrive, plus an optional one-time full-history import from an iPhone or Android backup — see WhatsApp full-history import. Media text is extracted, and voice notes are transcribed when a transcriber model is assigned. Until a note is transcribed its placeholder says why ([Voice note, 0:12 — awaiting transcription], no transcriber available, no speech detected, audio unavailable or audio could not be decoded), and the source's notice on the Sources page counts the notes still waiting. A note whose audio cannot be decoded is not sent to the transcriber again until the source is resynced. Message sync continues when media processing is disabled or unavailable. Pending media stays in the local archive for later retries, within the source's date range. The add flow shows a QR code; scan it under WhatsApp Settings → Linked Devices → Link a Device, and the collector starts syncing without a restart. WhatsApp may unlink a device after roughly two weeks without activity; run omnesis sources reauth whatsapp:<account> and scan a new QR code to reconnect it.
Telegram Messages
any collector QR sign-in experimental
Experimental — offered only when the gateway and collector run with OMNESIS_EXPERIMENTAL=1. Your chats as conversational documents, one per chat per day, through a Telegram API app you create yourself. Voice notes are transcribed when a transcriber model is assigned, and photo and document text is extracted. See Telegram.
Apple iMessage
macOS collector Full Disk Access
Messages as conversational documents, with attachment text inline, and voice-clip transcripts when a transcriber model is assigned; participants feed the people graph. A clip without a transcript says why in its placeholder and is retried on a schedule; the source's notice on the Sources page counts the clips still waiting. Transcription failures are retried without reporting a missing model; an unavailable transcriber notice can also mean the assigned backend is unreachable. A clip whose audio cannot be decoded is counted apart and not retried until its file changes or the source is resynced.
Discord
any collector Bot token Experimental
Each channel's day as one conversation document, across the servers a bot of yours belongs to, threads and forum posts included; posters feed the people graph. Offered only when the Gateway runs with OMNESIS_EXPERIMENTAL=1 — see Discord.

Discord

Discord is experimental: it appears in the source picker only when the Gateway runs with OMNESIS_EXPERIMENTAL=1, and its behavior may change between releases.

Discord hands message history to bots only — an ordinary account may not be automated, and no OAuth2 scope reads messages. So you create an application in Discord's Developer Portal, give it a bot, enable the Message Content Intent on its Bot page, and paste the bot token. Omnesis then builds the invite link itself, asking for View Channels and Read Message History and nothing else; open it and add the bot to each server you want indexed. Until the bot is in a server, the source reports that it is in none and shows the link.

❯ omnesis sources add discord

Maildir

Maildir indexes email that another program keeps on the collector's machine, such as mbsync, offlineimap or getmail. That program talks to the mail server; Omnesis only reads the files it writes and never connects to the server itself. That makes it a way in for an account that admits only approved mail apps, when one of them stores the mail as Maildir.

Omnesis does not run the mail tool. Schedule it yourself — cron, a launchd agent or a systemd timer — and Omnesis follows what it writes. The account the collector runs as needs read access to the folder; on macOS a folder under Documents, Desktop or an external drive also needs Full Disk Access for the collector, and a sync that cannot read it says so.

Add it with the folder that holds one account's mail — the folder, or a folder inside it such as INBOX, contains cur and new directories. Each folder you add is its own account, so two mail accounts are two sources.

❯ omnesis sources add maildir ~/Mail/example --device <collector>

Thunderbird. Thunderbird keeps each account's mail in its profile folder: Mail/Local Folders for local folders and ImapMail/<server> for an IMAP account. Maildir reads an account that uses Thunderbird's File per message (maildir) store; add the account's folder, and its folders and subfolders are read as Thunderbird keeps them. For a local account (Local Folders, or a POP account) stars and replies follow Thunderbird too. An IMAP account keeps those on the server rather than in its files, so for one its folders and deletions follow but a star added later does not; the IMAP source reads the server itself. A folder whose name is too long or has characters the disk does not allow appears under the name Thunderbird gave it on disk, which can be a hash of the original. By default Thunderbird stores an account as one mbox file per folder, which this source does not read; a sync over such a folder says so. To switch an account, in Thunderbird right-click the account, open Settings, and under Server Settings set Message Store Type to File per message (maildir). For an IMAP account, Thunderbird has local copies only of the folders it keeps for offline use.

WhatsApp full-history import

WhatsApp's linked-device sync only streams a companion a recent window of messages, not the full history on the phone. To recover older messages, import them once from a local phone backup. An import adds only the history actually present in the backup you provide — it is not a guaranteed universal lookback window. Run it with omnesis sources import-history <sourceId>; imported messages merge into the source by stable id, so re-running an import is safe and adds nothing already present, and a message already captured by live sync is never overwritten by a sparser imported copy.

Telegram

Experimental. The Telegram source is unstable and offered in Add source only when the gateway and the collector run with OMNESIS_EXPERIMENTAL=1; see Experimental.

Telegram Messages archives your own Telegram account — signed in as you, not as a bot — into Omnesis. It reads your chats through the Telegram API with a developer app that you create, and never sends a message or marks anything as read.

Your own API app. Omnesis ships no Telegram app credential; the add flow asks for an api_id and api_hash, which stay on the collector's host.

  1. Open https://my.telegram.org/apps and sign in with your phone number. The login code arrives inside the Telegram app, not by SMS.
  2. Create an app with a title that does not contain the word "Telegram", such as Omnesis archive, a short name of 5 to 32 letters or digits, and the platform Desktop.
  3. Paste the api_id (digits) and api_hash (32 hexadecimal characters) into the add flow.

Telegram allows one app per phone number: if you already created one, reuse its api_id and api_hash. If the form answers with a bare ERROR, turn off any VPN, proxy or ad blocker, try another browser or network, keep the title free of non-ASCII characters and of the word "Telegram", and try again later — a newly registered number is often refused for a while.

Signing in. The add flow shows a QR code; scan it in Telegram under Settings → Devices → Link Desktop Device. An account with a two-step password is asked for it once; it is used to sign in and never stored. The session appears in Telegram's device list as Omnesis. Ending it there stops the source, which then asks to be signed in again; run omnesis sources reauth telegram:<account> and scan a new code. One collector hosts an account: the session cannot be shared between machines.

The session is your whole account. The stored session is a full authorization of your Telegram account: anyone holding it can read your chats and act as you. The collector stores it encrypted, protected by its keyring.

Telegram's terms. Using this source is subject to the Telegram Terms of Service and the Telegram API Terms of Service. It is your responsibility to read them before connecting the source and to follow them while you use it. Omnesis signs in as a third-party API client with the app you register; it paces its requests and backs off when Telegram asks.

Notes, tasks & meetings

Source What it adds
Apple Notes
macOS collector Full Disk Access
Every note as a document.
Apple Reminders
macOS collector Full Disk Access
Reminders and tasks as documents.
Notion Pages
any collector OAuth
Notion pages as documents. Changes made during a paginated sync are replayed by the next incremental pass.
Notion Databases
any collector OAuth
Each shared Notion database as its own typed analytics table, queryable with SQL. A pass over several databases retains its starting watermark so edits made while it runs are fetched on the next pass.
Obsidian Notes
any collector Vault path
Markdown notes as documents, with frontmatter, tags, and wikilinks. Vaults with the same folder name on one collector remain separate sources.
Things 3
macOS collector Full Disk Access
Tasks as documents. Things must be running on the collector's host — the app is what pulls from Things Cloud, and the local database it maintains is the only thing Omnesis can read. A collector that finds Things quit opens it again, hidden and in the background; if it keeps quitting, the collector retries on a slowing schedule, never more than a few times a day, and the source says so. Several Macs can host it as one shared source, each reading its own local Things database.
Granola Meetings
any collector API key
Meeting notes as documents — summaries and transcripts — plus a meetings analytics table; attendees feed the people graph. Several accounts can be connected, one API key each. Each sync reads new and edited notes, and a full pass once a day picks up deleted ones.

Coding agents

These sources read session files written by coding agents on the collector host. Each session becomes one conversation document per local calendar day. Documents contain human prompts and completed assistant replies. Tool calls, tool results, hidden reasoning, system context, Claude Code sidechains, and Codex subagent sessions are excluded. Project, working-directory, branch, and model metadata remain available when the source records them.

The collector accepts at most 10,000 transcript files per source. It rejects a file above 1 GiB before or after decompression. It also rejects a daily document above 16 MiB. One session can contain at most 4,000 daily documents, and one source can track at most 100,000 daily documents. A rejected file does not delete its last indexed documents.

Source What it adds
Pi Sessions
any collector Local files
Active session-tree branches from ~/.pi/agent/sessions; linear session files are read too. A custom directory can be selected when adding the source.
Claude Code Sessions
any collector Local files
Main conversation branches from ~/.claude/projects. Claude Code removes old local transcripts according to its own retention setting; Omnesis mirrors the files that remain. On several collectors it is a per-device source: each machine contributes its own transcript directory, which + Add source can set separately for each collector.
Codex Sessions
any collector Local files
Root sessions from ~/.codex/sessions and ~/.codex/archived_sessions. Recorded rollbacks are applied before the conversation document is built. On several collectors it is a per-device source: each machine contributes its own Codex home, which + Add source can set separately for each collector.

Code hosting

These sources index the repositories the token can list: the private ones it was granted, plus the public repositories you own or belong to. A token's Only select repositories choice governs its private access only — it does not narrow the public side, because a fine-grained token can read every public repository on GitHub.

What Omnesis indexes is therefore decided here, not on GitHub. The repos setting is an allow-list of owner/name entries — name them and exactly those are indexed; excludeRepos drops individual repositories whether that list is set or empty. Entries must be repositories you own, collaborate on, or whose organization you belong to: a public repository you have no connection to cannot be added this way. Both settings take effect on the next sync when changed, without re-issuing the token — set them with omnesis config set or by editing the config file.

A read-only token with Metadata, Contents, Issues, Pull requests, and Discussions is enough, and code itself is never indexed — no diffs, no file contents.

A fine-grained token belongs to exactly one resource owner, so an organization's private repositories need a token of their own. Connect it as a second account and give it a connection name — the organization's, say — because both tokens authenticate as the same person and would otherwise resolve to one account, the second replacing the first's credential. Give each account its own repos list too: both tokens can see the same public repositories, and without a list each account would index its own copy.

A thread and its replies are one document, rewritten whenever anything in it changes, so a new comment, an edited comment, or a closed issue updates the document in place rather than adding another one. References between threads become links in the graph: a #-number mention or a "Closes" line resolves to that issue, pull request, or discussion, and a merged pull request links to the commit it landed as.

Source What it adds
GitHub
any collector Access token
Issues, pull requests, and discussions as documents — each with its comments, review verdicts, and inline review remarks, plus labels, state, and assignees. Authors and participants feed the people graph. Comment edits made during a long initial walk are replayed from its starting checkpoint.
GitHub Commits
any collector Access token
Commits on each repository's default branch — message, author, changed-file paths, and line counts. Commit authorship ties a GitHub account to the email address the same person uses elsewhere in the corpus.

Calendar & contacts

Source What it adds
Google Calendar
any collector OAuth
Events as documents, plus a typed events table for SQL queries.
Apple Calendar
macOS collector Full Disk Access
Events as documents, plus a typed events table.
Outlook Calendar
any collector OAuth
Events from every calendar on the account — your own, shared, and subscribed — as documents, plus a typed events table. Recurring series arrive as individual occurrences, and each event records how it marks your availability, so a block held as free is distinguishable from a meeting.
Google Contacts
any collector OAuth
Contacts as documents; each contact seeds an identity in the people graph.
Apple Contacts
macOS collector Full Disk Access
Contacts as documents; each contact seeds an identity in the people graph.

Files

Source What it adds
Google Drive
any collector OAuth
Files as documents, with text extracted from binary formats (PDF, modern and older Office formats, ODF, RTF) and images OCR'd when an OCR model is assigned.
OneDrive
any collector OAuth
Files from your own drive as documents, with text extracted from PDFs and Office formats and images OCR'd when an OCR model is assigned. Files other people have shared with you are not included, nor are SharePoint or Teams libraries.
Local Files
macOS or Linux collector Folder paths
Documents in the folders you choose on the collector's own machine — text, markdown, PDF, Office and OpenDocument files, among others — with text extracted. Per device: each machine indexes its own folders. See Local Files.
Immich
any collector API key experimental
Experimental — offered only when the gateway and collector run with OMNESIS_EXPERIMENTAL=1. One document per photo or video in a self-hosted Immich library — when and where it was taken, the people Immich recognised and you named, its albums, description and camera — with a link back to the asset. Never the images. See Immich.
Paperless-ngx
any collector API token Experimental
Archived documents from a self-hosted Paperless-ngx, with their OCR text, notes, correspondent, document type, tags and custom fields; custom field values are queryable in SQL. Offered only when the Gateway runs with OMNESIS_EXPERIMENTAL=1 — see Paperless-ngx.

For PDFs with repeated wide column gaps, extracted text preserves positioned segments in a labelled text block. Coordinates describe the source layout; they are not values or inferred table headings. This keeps otherwise empty columns distinguishable. Ordinary prose stays plain text. Existing extracted copies change only when fetched again; rebuilding a source deletes its indexed data before fetching it again.

Local Files

Local Files indexes documents on the collector's own machine — the folders you name, nothing else. There is no account and nothing to revoke. It runs on macOS and Linux collectors and reads plain text, markdown, CSV, JSON, HTML, PDF, Word, Excel, PowerPoint, OpenDocument, RTF, email (.eml), calendar (.ics) and wallet pass files.

The same file in two places is found once: a PDF or office document on disk is matched against mail attachments and cloud files by its extracted text, so a result can show where the file came from. It is a per-device source, so a result names the computer that holds the file.

Immich

Experimental. The Immich source is unstable and offered in Add source only when the gateway and the collector run with OMNESIS_EXPERIMENTAL=1; see Experimental.

Immich indexes one Immich user's photo and video library from a server you run, version 3.0 or later. It reads text and metadata only: the capture time and place, the people Immich recognised by face and you named, album names, descriptions, favorites and the camera. Photos and videos themselves never leave the Immich server.

  1. Sign in to Immich as the user whose library you want to index and open Account Settings → API Keys.
  2. Create a key with the asset.read, album.read and user.read permissions.
  3. Paste the key and the address you open Immich at, such as http://immich.local:2283, into the add flow. A plain http address works on a home network; the key then crosses that network unencrypted.

Paperless-ngx

Paperless-ngx is experimental: it appears in the source picker only when the Gateway runs with OMNESIS_EXPERIMENTAL=1, and its behavior may change between releases.

Paperless-ngx indexes the documents a self-hosted Paperless-ngx instance has archived; it needs Paperless-ngx 2.16 or later. It reads the text Paperless-ngx already extracted, so Omnesis neither downloads the original files nor runs OCR on them. Adding the source asks for two things: the address you open Paperless-ngx at, including any path it is served under, and an API token from My Profile in Paperless-ngx. The collector must be able to reach that address.

❯ omnesis sources add paperless

Web

Source What it adds
Chrome Bookmarks
any collector Local files
Bookmarks as documents, linked to the captured web page when one exists. A bookmark remains a pointer and does not stand in for the page or a structured source document that has the same URL.
Browser History
any collector Local files
Visit, daily-rollup, and search-term analytics tables, plus a daily browsing summary document. Reads Chrome, Brave, Edge, and Vivaldi on any collector, plus Safari and Arc on a macOS collector. Omnesis reads private copies of the browser databases and never modifies the originals.
Web Pages
gateway Paired extension
The full text of pages you visit, captured by the paired browser extension as one document per page, plus a page-visits analytics table. Each visit records the paired browser and the Chrome profile name you entered during pairing, so visits from different profiles stay apart; a page document names the profile that last changed it. Omnesis never fetches URLs it finds in other sources — only pages you open in the browser are captured. When another source indexes the same item (a GitHub issue, say), links prefer that source's document and keep the captured page attached to it.

Phone & device activity

Source What it adds
Apple Health
iPhone In-app toggle
Typed analytics tables for activity, sleep, vitals, body, nutrition, mindfulness, and mood, plus summary documents for workouts, mindful sessions, mood logs, and each night of sleep. Shared across your Apple devices: they all read the same HealthKit library.
Health Connect
Android In-app toggle
Typed analytics tables for activity, exercise, sleep, vitals, body, nutrition, cycles, and mindfulness. Per device: each Android phone adds its own data.
Photos & Screenshots
iPhone Android In-app toggle
Text found in your photos and screenshots, recognized by on-device OCR, plus place names and scene labels derived on-device. Only that derived text is indexed — the image itself never leaves the phone. Per device: each phone indexes its own library, so a photo synced to several phones through a cloud service appears once per phone.
Activity Segments
iPhone Android In-app toggle
Movement segments as analytics rows, plus one movement-summary document per day. Per device: each phone or tablet adds its own data.
Location Visits
iPhone In-app toggle
Places you spend time — each stay's arrival, departure, coordinates, accuracy, and resolved place details as an analytics row, plus one document per visit. Per device: each iPhone or iPad adds its own data.
App Usage
Android In-app toggle
Per-app usage sessions and daily totals as analytics tables, plus a daily attention-timeline document. Per device: each Android phone adds its own data.
Apple Call Log
macOS collector Full Disk Access
Calls as analytics rows plus per-day call-log documents; callers feed the people graph. It reads the iCloud-synced call history, so iPhone calls land too, and several Macs on one iCloud account host it as one shared source. Calls stay in the analytics table after they age out of the device's history.
Call Log
Android In-app toggle
The same call rows and per-day documents from an Android phone. Per device: each phone adds its own calls. Only the Android app you build yourself includes it; the Google Play app leaves out both the source and its permission.
Apple Voicemail
macOS 26+ collector Full Disk Access
Apple's locally synced voicemail transcripts as searchable documents; callers feed the people graph. The Phone app must stay running on the collector host to pull new voicemails from iCloud, so set it to open at login.
Screen Time
macOS collector Full Disk Access
App-session and daily screen-time analytics tables, plus a per-day digest document. Omnesis reads a private copy of the macOS activity database and never modifies the original. Per device: each Mac adds its own activity.

Finance & fitness

Source What it adds
Strava Activities
any collector OAuth
Activities, splits, best efforts, laps, segment efforts, zones, streams, comments, kudos, gear, and athlete profile, zones, and stats as analytics tables, plus a summary document per activity. Each installation needs its own Strava API app, registered by a Strava account with an active Strava subscription; the first add flow walks you through registering it. A new app connects one athlete, and its owner can raise that to ten. Without the subscription Strava deactivates the app and refuses every request: the source stops and says what to do, and once the owner has subscribed and reactivated the app on Strava's API settings page, it carries on where it stopped. The athletes you connect need no subscription, but Strava gives an activity's heart-rate and power zones only to an athlete who has one. Strava allows a new app 1,000 reads a day, so the source is added with a 30-minute sync interval, and for an account with many activities a first sync or a resync can take several days to fetch every activity's details, while new activities keep being listed.
Coinbase
any collector API key
Balances, holdings, orders, fills, and transactions as analytics tables, plus transaction documents. Several portfolios can be connected, one API key each.
Bank account (Enable Banking)
any collector PSD2 consent
Accounts, balances, and transactions from European banks as analytics tables, plus transaction documents; one instance per connected bank.
Bank accounts (Lunch Flow)
any collector API key
Bank accounts, balances, and transactions as analytics tables, plus transaction documents. Several keys can be connected, as long as they cover different bank accounts — the same account reached twice would have the two connections overwrite each other.
Bank account (Plaid)
any collector Plaid sign-in
Transactions from the banks Plaid covers — strongest in the United States and Canada — as documents, plus daily balance and holdings tables; one instance per connected bank. It needs a Plaid developer app of your own. See Plaid.

Plaid

Plaid connects banks in the countries you choose; its coverage is strongest in the United States and Canada. Plaid has no shared application for third-party tools, so you create your own Plaid developer app and configure it once: its client ID, the secret for the environment you use, that environment (sandbox or production), and the countries whose banks you want offered. Sandbox is free and uses Plaid's test banks. Real banks need Production access, which Plaid grants per team and bills per connected bank. The first add walks you through the app credential, or set it directly:

❯ omnesis creds set plaid

Adding a bank opens a sign-in page that Plaid hosts. Omnesis shows you a link, you complete the sign-in there — including any redirect to the bank's own website — and the source appears once Plaid reports the connection. The gateway hosts no callback, so the link works from any browser on any device.

Omnesis itself

Source What it adds
Omnesis Notes
gateway Paired device
Quick notes captured with omnesis note, the portal's Tell Omnesis page, the mobile apps, Siri or Android voice assistants, Apple Watch, and agents connected through MCP, OpenClaw or Hermes, indexed as one searchable document per day. Each capture is indexed separately for semantic search; long captures are split into smaller chunks within that note. No agent model is needed. The Sources lists show it as a read-only row; to amend or delete a note, use Tell Omnesis, and the day's document rebuilds from what remains. There is nothing to sync, pause, or remove.
Omnesis Chat
gateway Built-in
Your conversations with the agent, indexed back into the corpus as searchable documents with citation links.
Agent conversations
gateway Paired device
Conversations from an external agent harness connected with omnesis connect — see OpenClaw and Hermes. The installed plugin pushes its transcript to the gateway, which renders a document per conversation per day.

Managing sources

Every source-management task is available both in the portal's Sources page and under omnesis sources. Phone-hosted sources are the exception: they are turned on and off in the mobile apps, not from the portal or the CLI.

Adding a source

In the portal, open Sources and choose + Add source. In the CLI, omnesis sources add opens the same picker, or you can name the source type directly. The add flow walks you through the sign-in, API key, QR code or operating-system permission the source needs, then starts the first sync.

# interactive picker

❯ omnesis sources add

# or name the source type directly

❯ omnesis sources add gmail

With more than one collector paired, the flow asks which one hosts the new source; --device <collector> answers that up front. A source that reads a folder, such as an Obsidian vault, also takes the path: omnesis sources add obsidian-notes ~/Vaults/Work --device <collector>. The path is checked on that collector, so ~ and relative paths refer to its machine, not the one running the CLI.

Adding a source from a script or an agent

Without a terminal (a script, an AI agent, ssh without a tty) the add asks nothing. Give every answer as a flag instead: --set key=value (repeatable) for each setting, or --config with the same keys as one JSON object, inline, as @file, or as - to read it from standard input, which keeps a secret such as an API key off the command line. omnesis sources describe lists the source types the connected collectors offer, and omnesis sources describe <type> lists the keys one takes (with --json, for a program).

# the keys an add of the source takes

❯ omnesis sources describe obsidian-notes

# a folder source

❯ omnesis sources add obsidian-notes --device <collector> --set vaultPath=/Users/maya/Vaults/Work

# a source whose collector finds several accounts: name the ones to add

❯ omnesis sources add apple-notes --device <mac-collector> --account <account>

# an API key, read from standard input

❯ omnesis sources add paperless --config - < paperless.json

The values are checked against what the source declares before anything is added: a key it does not take, a choice outside its options and a malformed value are refused, and a folder is checked on its collector. An answer the command line does not give is refused with the flag that supplies it. Every refusal, and a prompt cancelled on a terminal, ends with a non-zero exit status, so a script never reads a failed add as a success. One account found is added; several are refused until --account names the ones to add. A join onto a source another device hosts needs --yes, and with more than one collector able to host the source, --device is required.

A source that signs in still needs the sign-in: the add prints the URL or code and waits until it is completed in a browser. Its application credential, such as Google's OAuth client, is given the same way the first time (--set client_id=… --set client_secret=…) or set up once on a terminal with omnesis creds set <provider>; once the collector has one, an add does not replace it. A sign-in step that asks for a typed answer cannot be completed without a terminal; add that source on a terminal or from the portal.

Most sources take several accounts. Run the add flow again and sign in with a different account: two mailboxes, two Notion workspaces, or two phone numbers each become their own source, identified as <type>:<account> (for example gmail:maya@example.com) and synced, paused, and removed independently. Your browser may need to be signed out of the platform, or signed in to the account you want, for its account chooser to offer it. Sources that read one local store — the Apple sources, Things, Screen Time, Local Files, and the coding-agent sources — take one account per machine, and show as already configured once set up on that collector.

Google's OAuth client

Omnesis ships no Google OAuth client. Google requires a security assessment before one shared client may read Gmail, so each installation registers its own client, in a Google Cloud project you own, and signs in through it. The first time you add a Google source, the add flow walks you through the registration, which takes about five minutes: create a project, enable the Gmail, Google Calendar, Google Drive and People APIs, configure the consent screen for External users, publish it, then create an OAuth client of type Desktop app and paste its client ID and secret. In the portal the same wizard opens when you choose + Add source for a Google source and no client is configured. Additional Google accounts reuse the client you registered.

# which providers have credentials configured

❯ omnesis creds list

# run the Google wizard again, to replace the client

❯ omnesis creds set google

Publish the consent screen rather than leaving it in testing. A client in testing signs in only the accounts listed as its test users, and Google expires its sign-ins after seven days, so every Google source would ask you to sign in again each week. Publishing needs no Google verification for your own use: the first sign-in shows a “Google hasn't verified this app” warning, which you pass with Advanced → Continue.

Google won't publish the consent screen until it has an app home page and a privacy policy, but you don't need a website of your own: Google reviews these links only when an app is submitted for verification, which Omnesis doesn't need. Enter https://omnesis.dev as the home page, https://omnesis.dev/privacy as the privacy policy, and add omnesis.dev as an authorized domain, or use any public page you control. Don't submit the app for verification.

Day-to-day tasks

Each task names the portal action on the Sources page first, then the CLI command.

Task How, and what happens
Sync now Sync, or omnesis sources sync <id>.
Runs an incremental sync without waiting for the next scheduled one. --wait blocks until it finishes. If a sync is already running, it waits for that sync to finish.
Pause Pause sync (keep data), or omnesis sources pause <id>.
Stops syncing on every device that hosts the source. Indexed data and sync progress stay. Resume sync or omnesis sources resume <id> picks up where it stopped.
Sign in again The Sign in again banner, or omnesis sources reauth <provider>:<account>.
Renews the sign-in for every source under that account (for example google:maya@example.com covers Gmail, Calendar, Drive, and Contacts). It must resolve to the same account; add a different account as a new source instead. Sources that read local files have nothing to renew.
Inspect Debug, or omnesis sources debug <id>.
Shows the source's sync status, cursor, and storage statistics.
Rebuild Resync, or omnesis sources resync <id>.
Deletes everything the source has indexed and syncs it again from scratch. Use it only when the indexed data must be rebuilt. The CLI asks first; pass --yes in scripts. Pages captured by the browser extension cannot be resynced, because the gateway has nowhere to fetch them again from. A phone source is resynced from the CLI only; the phone sends its data again.
Move + Add source on the other machine, which offers Move, or
omnesis sources move <id> --device <collector>.
Hands a source to another collector. Indexed data stays; the old collector stops syncing it, and the new one signs in with its own credentials if the source needs them.

Sources hosted by more than one device have extra tasks — joining a device, detaching one, and re-syncing one device only. They are covered in Sources on several devices. When a source reports an error instead, start from Troubleshooting.

Accounts of one source type that write the same analytics table can leave rows from before Omnesis recorded which account wrote them. A table only one account has ever written labels them as that account's by itself, in the background, a batch at a time, whether or not the account syncs again. In a table several accounts share, syncing never waits on such a row: a deletion or a snapshot that names it leaves it in place, and the account that still holds the record labels it whenever it syncs that record again. omnesis sources legacy-rows <id> lists what remains; --claim marks those rows as the source's account, for rows no other account still syncs, and --drop deletes them. The CLI asks first; pass --yes in scripts.

Removing a source

Remove in the portal, or omnesis sources remove <id>, removes the whole source for every device that hosts it, including devices that are offline; they learn about it when they reconnect. Syncing stops immediately, and a source pushed from a phone or the browser extension stops being accepted. To keep the data instead, pause the source.

Everything the source ingested — documents, analytics rows, search-index entries, and the data derived from them — is then deleted in the background, queued behind indexing so it does not interrupt work in flight. On a large mailbox that takes several minutes. Until it finishes, the source stays in the list marked removing, and its document count falls as the purge drains. If the gateway stops partway through, it resumes the purge on the next start. You cannot add the same account again until the removing row has gone; the re-added source then syncs from scratch. Tasks and memories built on the removed documents stay, without their link to them.

People survive the removal on the strength of what remains. An email address or phone number is kept while any other connected source still names it, so removing a mailbox does not erase a contact your address book also holds. An identifier no remaining source names goes with the purge, and a person left with none goes with it.

Removal deletes data from the gateway only. It does not delete the originals on the provider or the phone, retained backups, or exported copies, and it does not promise physical secure erasure. To delete one document rather than a whole source, see deleting a document.

Sources on several devices

A source normally lives on one device: the collector or phone that syncs it. Some source types can also be hosted by several devices at once — Apple Notes on two Macs signed in to the same iCloud account, or Health Connect on two Android phones. Each device that hosts a source is a member of it, and the source type fixes how its members share the work. There are three ways:

One machine at a time

  1. One devicesyncs the source
  2. Gatewaykeeps that device's data

Move it to hand it to another machine.

Shared

  1. Every memberreads the same upstream data
  2. Gatewaykeeps one copy of each item

Detaching a member keeps the data.

Per device

  1. Each membersends its own, different data
  2. Gatewaykeeps each member's data apart; search shows it all

Detaching a member deletes its data.

The three ways a source can be hosted: by one machine at a time, shared by members that read the same data, or per device, where each member adds its own.

The portal and omnesis sources name the mode with its code word, shown here under each plain name.

Mode How it works
One machine at a time
exclusive
One device hosts the source. Adding the same account elsewhere is refused and names the current host; move the source instead. There is no member to detach.
Sources: every collector source not listed below, including Apple Contacts and Apple Calendar, whose local databases have no item identifiers that are stable across Macs.
Shared
replicated
Every member reads the same upstream data with its own sync progress; the gateway keeps one copy of each item. Detaching a member stops it contributing; the data stays.
Sources: Apple Notes, Reminders, iMessage, Call Log, and Voicemail on Macs signed in to the same iCloud account; Things; Apple Health on iPhones.
Per device
partitioned
Each member sends data only it has. The gateway keeps each member's data apart, and search and SQL show all of it together. Detaching a member deletes its data from the gateway; other members' data stays.
Sources: Screen Time; Claude Code, Codex, and Pi sessions; Local Files; on phones, Photos, Activity Segments, Location Visits, Health Connect, Android Call Log, and App Usage.

Adding a device to a source

Start + Add source for the source type and pick the new machine as the destination. The flow first discovers which account that machine has. If the account is already configured on another device and the type allows several members, it offers to join; a different account becomes a separate source. On a second Mac, for example, the same iCloud account joins Apple Notes, while a different iCloud account becomes a second Apple Notes source. For a type that allows one machine at a time, the flow names the current host and offers to move the source.

From the CLI, omnesis sources join <id> --device <device> adds a member, and the portal's Join a device… action does the same. Each member syncs with its own credentials, so if the source needs a sign-in, run omnesis sources reauth <provider>:<account> --device <device> for it. A join is refused when the device cannot host the type or holds a different account. Update a collector before joining it to a shared or per-device source; an out-of-date collector is not offered as a destination.

A source that reads a folder on each machine — Claude Code, Codex, and Pi sessions, or a custom Things database — asks for that path once the destination is chosen, and the path belongs to that member only. Where + Add source offers Configure <device>, use it to change one member's path without touching the others. The shorter omnesis sources join uses the source's default path.

Phones are different: each phone and tablet is paired separately, and phone sources are turned on in the app, before the operating-system permission prompt, rather than joined from the portal or the CLI. When another iPhone already sends Apple Health, the app offers Keep using the other iPhone, Use both iPhones, or Use only this iPhone. Turning on a per-device source on a second phone adds that phone's data and keeps the first phone's history. See Mobile apps.

Members, detaching, and re-syncing

omnesis sources members <id> lists a source's mode and each member with its own sync status; the portal's Sources page shows the same under the source.

omnesis sources detach <id> --device <device>, or Detach a device… in the portal, stops one member hosting the source without removing it. What happens to the data depends on the mode, as in the table above, so the CLI and the portal both say it before you confirm; pass --yes in scripts. The last member cannot be detached — pause the source to keep its data, or remove it. On a phone, turning a source off in the app asks the gateway to detach that phone, with the same outcome.

omnesis sources resync <id> --device <device> re-syncs one member of a shared or per-device source and leaves the others alone. On a per-device source, that member's data is deleted and synced again; on a shared source, only that member's sync progress starts over, because the data is shared.

If shared members disagree about whether an item was deleted — one reports it gone while another still has it — Omnesis keeps the item until every member that holds it agrees. omnesis sources counts them as deletions in dispute, the member holding them shows Keeping N items that <device> no longer has in the portal and the apps, and omnesis doctor warns. The disagreement clears once the item is deleted on the device that still holds it, or once you delete the document for good.

What a source contributes

Searchable documents. Most sources emit documents — emails, notes, messages, pages, per-day summaries — into the document store, where they are indexed for keyword and vector search and available to the agent.

Typed analytics rows. Structured sources emit typed rows into analytics tables instead of, or alongside, documents: heart-rate samples, bank transactions, browser visits, screen-time sessions. These are queryable with plain SQL — see Search. Many sources contribute both, binding a readable summary document to the underlying rows.

People-graph identities. Contacts, email correspondents, message participants, callers, and meeting attendees become identities in the people graph, so one person's activity is connected across every source they appear in.