Live connectors Memory that keeps up with your tools.
Live connectors are the continuous ingest path. They run on a schedule,
remember where they left off, and pull only new documents from external
services into your memory directory. Connect once, and your docs stay
searchable alongside everything else your agents know.
Different from importers
Importers transform a one-shot export file into memories in a single
pass, then their job is done. Live connectors are continuous and
cursor-based: every invocation is an incremental sync that picks up where
the last one stopped, using a stored cursor so only new documents are
fetched. If you have a single export file, use an
importer. If you have a service you want Remnic to
keep watching, use a live connector.
What the connectors do
Google Drive
Polls for changed documents and exports Google Docs, Sheets, and Slides to text. Read-only scope. The first sync seeds a cursor and imports no history, so enabling it does not flood memory. Scope with folder ids or leave empty for all accessible files.
Notion
Imports Notion database page content on a poll schedule via the Notion REST API. Limited to the database ids you list, with an empty list meaning the connector does nothing.
Gmail and GitHub
Both run on the scheduled runner as built-in connectors. The manual remnic connectors run target currently covers Google Drive and Notion.
Read-only by contract
Connectors never mutate the upstream service: no marking emails read, no editing pages, no archiving. They are idempotent, cancellable, and never log document content.
OAuth and credentials, honestly
Keychain-backed credential storage is still deferred. Connectors
currently read OAuth credentials directly from the validated config, so
the intended pattern is to populate clientId,
clientSecret, and refreshToken from a secret
store (environment variables, an OS keychain, or a systemd
EnvironmentFile) rather than committing real values.
Credentials are never written through the connector state store. Only the
cursor and sync-status metadata are persisted, at
<memoryDir>/state/connectors/<id>.json on your
disk. Each connector documents the minimum OAuth scope it needs (Google
Drive uses read-only drive.readonly), and connectors are off
until you explicitly configure them.
Configuration
Enable Google Drive with credentials from a secret store:
{
"connectors": {
"googleDrive": {
"enabled": true,
"clientId": "${GOOGLE_DRIVE_CLIENT_ID}",
"clientSecret": "${GOOGLE_DRIVE_CLIENT_SECRET}",
"refreshToken": "${GOOGLE_DRIVE_REFRESH_TOKEN}",
"pollIntervalMs": 300000,
"folderIds": []
}
}
}
The googleapis package is not a hard dependency of core:
install it in the host package when you enable the connector.
CLI
remnic connectors list # enabled state, last poll, last error
remnic connectors status # same data, JSON for scripting
remnic connectors run google-drive
remnic connectors run notion
When any connector is enabled, the scheduled runner wakes on a cron and
runs only the connectors whose own poll interval says they are due. Full
reference:
docs/live-connectors.md.
Remnic was formerly named engram. Legacy names remain during the
compatibility window. See the rename note.