Observed, not guessed
+Cluster identities on evidence.
+Observed people are assembled from explicit archive links across sources. Equal display names alone never merge two people.
+Where is my email data stored?
-By default, everything stays on your local machine. msgvault stores messages in a SQLite database and Parquet analytics files inside your `MSGVAULT_HOME` directory (defaults to `~/.msgvault`). If you configure a remote deployment, that archive lives on your own server. See [Data Storage](/architecture/storage/) for details. +By default, everything stays on your local machine. msgvault stores messages in a SQLite database and Parquet analytics files inside your `MSGVAULT_HOME` directory (defaults to `~/.msgvault`). If you configure a remote deployment, that archive lives on your own server. See [Data Storage](/docs/architecture/storage/) for details.Can I use msgvault with non-Gmail accounts?
@@ -34,20 +34,20 @@ Discord guilds, Slack workspaces, Beeper Desktop chats, Google Calendar, and sup note services. You can also import email from PST, MBOX, or Apple Mail and chats/texts from WhatsApp, iMessage, Google Voice, Facebook Messenger, and SMS Backup & Restore. All messages use the same Web UI, search, TUI, MCP, REST API, -and export surfaces. See [Setup Guide](/setup/#add-an-imap-account), -[Importing Local Email](/usage/importing/), [Text Messages](/usage/text-messages/), -and [Discord](/usage/discord/) or [Slack](/usage/slack/). +and export surfaces. See [Setup Guide](/docs/setup/#add-an-imap-account), +[Importing Local Email](/docs/usage/importing/), [Text Messages](/docs/usage/text-messages/), +and [Discord](/docs/usage/discord/) or [Slack](/docs/usage/slack/).Can msgvault archive Discord direct messages?
No. Discord bot tokens expose guilds the bot has joined, not a person's direct messages. msgvault does not accept user tokens or implement selfbots. It can archive accessible guild channels, threads, forum posts, and attachments; see -[Discord](/usage/discord/). +[Discord](/docs/usage/discord/).Does deleting email in msgvault delete it from Gmail?
-Only if you explicitly run the full deletion workflow. Staging messages for deletion in the Web UI or TUI does not touch Gmail or your IMAP provider. You must run `MSGVAULT_ENABLE_REMOTE_DELETE=1 msgvault delete-staged` to execute staged deletions. Gmail messages move to trash by default; `--permanent` opts into permanent Gmail deletion. IMAP deletion removes messages from the provider. Your local archive is always preserved. See [Deleting Email](/usage/deletion/) for the complete process. +Only if you explicitly run the full deletion workflow. Staging messages for deletion in the Web UI or TUI does not touch Gmail or your IMAP provider. You must run `MSGVAULT_ENABLE_REMOTE_DELETE=1 msgvault delete-staged` to execute staged deletions. Gmail messages move to trash by default; `--permanent` opts into permanent Gmail deletion. IMAP deletion removes messages from the provider. Your local archive is always preserved. See [Deleting Email](/docs/usage/deletion/) for the complete process. --- diff --git a/docs/guides/daemon-migration.md b/docs/guides/daemon-migration.md index 485a4363d..d3e3eb555 100644 --- a/docs/guides/daemon-migration.md +++ b/docs/guides/daemon-migration.md @@ -122,7 +122,7 @@ With a `[remote]` server configured, tokens live on the remote host, so authorization happens there — same as pre-daemon remote behavior. For headless remote setups, keep using `add-account --headless` or `msgvault export-token` to push a locally minted token to the server (see -[Remote Deployment](/guides/remote-deployment/)). +[Remote Deployment](/docs/guides/remote-deployment/)). ## Gotcha: `--local` means "local daemon" @@ -198,4 +198,4 @@ shows version, uptime, and vector-search state. **Something is off after upgrading. What is the first thing to try?** `msgvault daemon restart`. It re-reads config, picks up the current binary and environment, and re-registers the runtime record. See -[Troubleshooting](/troubleshooting/) for more. +[Troubleshooting](/docs/troubleshooting/) for more. diff --git a/docs/guides/oauth-setup.md b/docs/guides/oauth-setup.md index 41c2b2b51..151d7ead8 100644 --- a/docs/guides/oauth-setup.md +++ b/docs/guides/oauth-setup.md @@ -183,7 +183,7 @@ msgvault add-account personal@gmail.com # uses default The binding is stored per account, so `sync`, `verify`, and `serve` automatically use the correct credentials. You only need `--oauth-app` when first adding or rebinding an account.
+
- Quick Start + Quick Start GitHub Discord
+
+
+
+
+
+
+
+
+
Lifecycle guide
+One archive moves through nine stages. Your data stays local and complete at every stop.
+Live sources sync on a schedule — Gmail, IMAP, Slack, Teams, Discord, Beeper, Google Calendar, CardDAV, meeting notes. Dead exports import once — MBOX, Apple Mail, PST, WhatsApp, iMessage, Messenger, SMS backups. Interrupted syncs resume from checkpoints.
+ Importing local email +Raw provider payloads are retained compressed beside the parsed record. Attachments are content-addressed by SHA-256, deduplicated, and sealed into immutable packs. Cross-account duplicates hide behind a reversible safety ladder — the surviving copy is always the complete one.
+ Data storage +
+
+ Every source knows you and your contacts by different addresses and handles. Identity discovery classifies the evidence; observed people cluster from explicit archive links, never from matching display names. Nothing merges without proof.
+ People, profiles, and identities +Promote the people who matter into durable profiles with stable IDs and vCard UIDs. Attach typed attributes, organizations, employment history, and relationships over a fact ledger with evidence and reversible merges. Watch each relationship's activity calendar and temperature across every channel.
+ Curating people +
+
+ Opt in to semantic search by pointing msgvault at an embedding server you choose — local ones included. The embedded Docbank document engine extracts and indexes attachment text and images behind explicit, fail-closed consent. Every intelligence lane is disposable and rebuildable; the record is not.
+ Vector search +Full-text search with Gmail-style operators answers instantly and offline. Semantic and hybrid modes fuse BM25 with vectors through reciprocal rank fusion, with explainable ranking and honest coverage states; msgvault never quietly substitutes one mode for another.
+ Searching +
+
+ A DuckDB-over-Parquet analytics cache answers aggregate questions across hundreds of thousands of messages in milliseconds: senders, domains, labels, time. Drill down from a decade to a single message in the TUI or the browser.
+ Analytics and stats +Staging and execution never share a surface. Any interface can stage a deletion manifest for review; only the CLI executes it, behind an explicit environment gate, defaulting to recoverable trash. The local archive is never modified, and deleted mail remains searchable.
+ Deleting email +
+
+ Run it on a laptop or serve it from your own NAS: the daemon carries the Web UI, HTTP API, scheduler, and MCP server in one binary. Verifiable backup snapshots restore the archive with no provider in the loop.
+ Backup and restore +Next
+Move from the lifecycle model to installation, OAuth setup, exact command behavior, configuration, and architecture.
+ +
+
+ msgvault
+
msgvault is a local-first, open-source archive for a lifetime of email, chat, meetings, calendars, and contacts. It keeps everything in one database on your own hardware, resolves the people behind decades of messages, and searches by keyword or by meaning.
+curl -fsSL https://msgvault.io/install.sh | bash
+
+ brew install msgvault
+
+ irm https://msgvault.io/install.ps1 | iex
+
+ Installers fetch the latest release and verify its SHA-256 checksum. Also on conda-forge, or build from source.
+ +01 / Record
+Twenty years of correspondence should not be scattered across a dozen walled gardens. msgvault syncs live sources and imports dead exports into one schema, keeping raw payloads and content-addressed attachments intact.
+02 / People
+The people layer resolves decades of addresses, handles, and phone numbers into the people behind them — with archive evidence and user curation kept strictly apart.
+Observed, not guessed
+Observed people are assembled from explicit archive links across sources. Equal display names alone never merge two people.
+Durable profiles
+A promoted profile gets a stable ID and vCard UID, so names, notes, and typed attributes survive later identity changes. Merges are atomic and reversible.
+Fact ledger
+Organizations, employment history, typed relationships, and custom attributes rest on immutable evidence, deterministic decisions, and per-person pins.
+Activity
+An activity calendar tracks interaction with each person across email, chat, calendar, and meetings, year by year, including current and peak relationship temperature.
+03 / Operation
+The daemon serves a dense, keyboard-driven browser application: relationships, a unified Everything table, files, saved views, source status, deletion staging, and settings. Every analytical slice is URL-addressable, so Back and Forward restore exact views.
+
+
+ In development
+An open pull request adds Directory and Reviews workspaces: durable-person search, profile maintenance and history, identity and merge review queues, the privacy-gated fact ledger, CardDAV publication, and a self-describing Settings surface with write-only credential management. Captures land here when it merges.
+04 / Intelligence
+Keyword search works offline, always. Semantic search, document extraction, and visual search are opt-in, with explicit consent recording exactly what leaves your machine and where it goes.
+Hybrid search
+FTS5 with Gmail-style operators, pure semantic search, or hybrid BM25-plus-vector fusion via reciprocal rank fusion, with an explain mode that shows why each result ranked.
+Local models
+Any OpenAI-compatible endpoint works: Ollama, llama.cpp, LM Studio, or Apple's on-device model. Embedding scope is a privacy boundary; out-of-scope accounts are never sent anywhere.
+Attachments
+The embedded Docbank document engine handles OCR extraction, normalized chunks, lexical and semantic document search, and visual search over images. Consent-gated and fail-closed.
+Agents
+An MCP server exposes search, people, files, and analytics tools to Claude Desktop and other agents; bundled agent skills install into Claude Code and Codex. Profile writes stay behind explicit flags.
+05 / Interfaces
+The daemon owns all writes and serializes every mutation. People, scripts, and agents work through the interface suited to the task, against the same record.
+06 / Ownership
+Once the archive is complete and verified, you can start deleting from the provider. Every step is explicit and reviewed, and nothing is irreversible until the last one.
+Verify
+Integrity verification checks the archive against the mailbox before you trust it with anything irreversible.
+Stage
+Deletions are staged into manifests from the Web UI, TUI, or MCP — inspected, counted, and cancellable. No surface executes them.
+Execute
+Execution is a separate CLI step behind an explicit environment gate, defaulting to recoverable trash. The local archive is never modified.
+Restore
+Append-only, verifiable backup snapshots cover the database and attachments, with restore paths that need no provider at all.
+07 / Boundary
+msgvault is a data warehouse for your communications: a system of record you operate, query, and extend. Not a viewport, and not cold storage.
+Mail client
+A client renders whatever the server still holds. Identity, search, and history live and die with the account.
+Export archive
+A takeout captures one moment in one format. It does not sync, resolve people, answer questions, or talk to agents.
+msgvault
+Providers become replaceable feeds around a database you own — continuously synced, people-resolved, searchable by meaning, and open to your tools.
+08 / Start
+The guide walks the archive lifecycle from capture to ownership. The documentation carries setup, exact command behavior, configuration, and architecture.
+ +