ghostbrain/docs/privacy & security

privacy & security

ghostbrain is a local-first product. nothing leaves your machine unless you flip an explicit switch — and even then, only in shapes you've consented to. this page lays out exactly what stays, what moves, and how to verify each claim for yourself.

what stays local

you can verify this with a network monitor. with default settings, ghostbrain makes only outbound requests directly to the connector providers (gmail api, slack api, etc.) using your own tokens. there is no "phone home" endpoint.

tip

on macos, the simplest verification is little snitch or the built-in tcpdump -i any host -not gmail.com -and host -not slack.com. on linux, ss -tnp and the audit subsystem. you should see traffic only to the api hosts of the connectors you've authorised.

where credentials live

every oauth token or api key sits in your operating system's secure credential store:

osstore
macoskeychain (login keychain)
windowswindows credential manager
linuxgnome-keyring or kwallet (whichever is active); falls back to libsecret

ghostbrain never writes tokens to a plain file. when you disconnect a connector, the token is removed from the keychain immediately — not at the next sync.

telemetry

ghostbrain ships two kinds of telemetry by default, both off:

both are opt-in, both off out of the box, and both can be turned off again without losing functionality. the full schema of what each report contains is in docs/telemetry.md.

does the model train on my data?

no. the extraction and ranking models are pre-trained, shipped as static weights, and run inference-only inside the indexer. there is no online learning, no gradient updates, no batched-then-uploaded fine-tuning. you can strace the indexer and confirm there is no write activity on the model files.

the model also can't see your data over the wire. it's loaded from disk on startup and runs in the same process; there is no rpc, no server, no inference api.

optional end-to-end encrypted sync

if you want your vault on two machines, ghostbrain ships an optional sync service. it is:

warning

if you lose your sync passphrase, we cannot help you recover your data. that's the trade-off for not having a backdoor. write the passphrase down somewhere offline.

permissions per connector

each connector requests the narrowest scope its provider exposes:

connectorscopes
gmailgmail.readonly, gmail.metadata
slackchannels:history, groups:history, im:history, mpim:history + matching :read
notionread on the pages you share with the integration
linearpersonal api key, read scopes only
githubrepo:read, issues:read, pull-requests:read
calendarcalendar.readonly
drivedrive.metadata.readonly (default), drive.readonly if you opt in

no connector ever writes back to the source. ghostbrain is read-only by design — we never want to be in a position to send a slack message on your behalf.

threat model

what ghostbrain protects against, and what it doesn't:

protects against

does not protect against

responsible disclosure

found something? we'd rather hear about it than have it be public:

no bug bounty program yet, but if your report saves us from shipping a real issue, we'll send you something nicer than a t-shirt.