Repository navigation
Security and Privacy
Christopher Ennis edited this page May 24, 2026
·
1 revision
Privacy isn't a feature of Compass — it's the architecture. This page is the consolidated threat model and the guarantees that back the "your data never leaves your machine" claim.
The only bytes that ever leave your device are OAuth tokens you explicitly grant (to pull your own data back) and BYO-key AI requests you trigger. There is no Compass server.
All data — the SQLite DB, the encrypted vault, the markdown knowledge base — lives in your OS application-data directory. Nothing is uploaded to a Compass backend (there isn't one).
- AES-256-GCM, with a random 16-byte IV and 16-byte auth tag per blob.
- The master key is generated once and sealed by the OS Keychain via
safeStorage(.vault/key.enc). It never leaves the Keychain except to be decrypted in the main process. - Plaintext secrets never hit disk.
- The Vault page enables content protection (
setContentProtection(true)) while open, blocking macOS screenshots and screen recording of the window.
- Stored encrypted (
.vault/oauth-<service>.enc) using the samesafeStoragemechanism. - Kept in the main process — never exposed to the renderer and never logged.
-
contextIsolation: true,nodeIntegration: false. The renderer cannotrequire('fs')or touch Node — it can only call typed functions onwindow.api. -
Production CSP blocks remote scripts (
script-src 'self') andeval, with an explicit allowlist for the OAuth/API endpoints you opt into. - Every IPC handler validates inputs (type checks, path-traversal guards) and is the sole writer.
- Ask Compass prefers a local Ollama model; cloud keys are BYO and used only on requests you trigger.
- BYO keys are encrypted (
.vault/assistant.enc) and never re-cross the IPC boundary after being set.
| Surface | Vault | Raw finance rows | Knowledge notes |
|---|---|---|---|
| Ask Compass (embedded) | ❌ never | ❌ (no raw rows) | ✅ (the point) |
| MCP / Claude (external) | ❌ never | ❌ summaries only | ✅ read-only |
- The vault is categorically excluded from every AI surface, read or write.
- Finance is exposed only as summaries/aggregates — never raw transaction rows.
- External Claude is read-only and can only propose writes; every change is human-approved in the Claude Inbox and audit-logged.
- Vault key never leaves the OS Keychain except via
safeStorage.decryptString()in the main process. - OAuth tokens stored encrypted, never logged, never sent to the renderer.
- Production CSP blocks all remote scripts.
- The renderer can never import Node — context isolation enforces it.
- The Vault page toggles
setContentProtectionon mount/unmount. - The MCP process opens the DB
readonly: trueand never touches the vault or knowledge files.
See docs/conventions.md
and the security-review skill / security-auditor agent.
Compass — local-first personal life OS · 100% your data, on your machine · Repository · Design docs
Get going
Features
- Dashboard
- Planner (Daily/Weekly/Monthly)
- Knowledge Base
- Finance
- Storehouse & Timeline
- People
- Data Rights & Acquisition
- Vault
- Ask Compass
- Integrations
- Claude & MCP
- Search & Command Palette
- Settings
Reference
- Security & Privacy
- Backup & Restore
- Data & Storage
- Roadmap & Status
- Cross-Border & Retirement
- FAQ & Troubleshooting
Contribute