New features
- Import Telegram Desktop JSON exports with
msgvault import-telegram <export-dir>. Re-imports add new messages and missing media while preserving previously archived text. Single-chat exports require--me. - Archive Inline chats and threads with scheduled, resumable sync and attachment capture. Browser OAuth is the default connection; an authenticated Inline CLI connection is also available.
- Add personal Pocket meeting sources with
add-pocketandsync-pocketto archive transcripts and recorded actions. Audio downloads and organization API keys are not included. - Recover encrypted Matrix history from your account's server-side key backup, including edits, reactions, and replies. Setup requires a recovery secret, or
--skip-key-backupto retain placeholders. Keys absent from the backup remain unavailable. - Keep locally available iMessage photos, videos, and voice notes with
import-imessage. Configure[imessage].media_max_participantsandmax_media_mb, or pass--max-media-mbfor one import. Defaults remain 20 participants and 250 MiB per file. - List archived calendar events with
msgvault calendar events --from <date> --to <date>. Results expand repeats, show moved meetings at their new times, and mark cancellations. Existing Google Calendar archives need no re-sync. - Browse people and domains in one People workspace, with messages, files, calendars, and editable profile details together. Saved profiles remain available even without archived messages.
- Review possible duplicates through People → Filter → Possible duplicates. Merge profiles, keep them separate, undo a decision, or split a merged profile through History.
- Preview contact tiers with
person tiers previewand inspect the reasons withperson tiers explain <person-id>. Tiers reflect message exchanges, shared meetings, and qualifying answered calls. Previewing does not track anyone. - Track or untrack several people in one command by passing multiple IDs to
person trackorperson untrack. - Find archived chats across networks with
find-chatand MCPfind_chat. Results include network labels and a message reference for opening the chat. - Search text inside mirrored PDFs and documents through media search, the HTTP API, and MCP. Attachment results open their messages and require attachment mirroring.
- Enable local semantic search without setting up an embedding server. Switching from Ollama's
nomic-embed-textpreserves the existing index; switching from another model asks before rebuilding it. - Connect an authenticated Streamable HTTP MCP client directly to
msgvault serveat/mcp. Reads require the owner bearer key.--mcp-allow-writesenables a separate/mcp/writescatalog, with additional write families requiring their own flags. - Read the MCP connection and safety guide offline with
msgvault quickstart --mcp, without a configured archive or running daemon. - Read archive totals with
msgvault stats --json, including active and source-deleted message counts and the scope they cover. - Find saved people with
person directory --queryor literal, case-insensitive--addressfiltering. Address filtering is also available through the Directory API and MCP. - Inspect and save room policy overrides with
msgvault policy list,set, andreset. This release does not enforce those tiers or hide rooms.
Improvements
- Navigate the Web UI through Messages, People, Files, and Sources. Saved searches live in the sidebar, and the footer status dot opens queued jobs, running jobs, failures, and past runs.
- Save ordinary settings through one Save changes bar. Settings opens on Overview, warns before leaving with unsaved edits, and identifies changes that require a restart.
- Find attachments, recordings, linked tasks, and actions under each message. Message menus offer original downloads, meeting export, text or HTML switching, and Add to task where available.
- Manage mail and Contacts sync independently in Sources. Staged deletion batches show their date, message count, and account, and staging opens a review dialog before
msgvault delete-stagedperforms deletion. - Load message lists, searches, statistics, person files, and large conversation windows faster. In a SQLite benchmark, opening a message in a million-message conversation drops from about two seconds to 98 ms.
- Refresh analytics faster after sync on Linux, macOS, and Windows. Measured incremental updates after one added message take 23% less time on Linux and 29% less on macOS and Windows.
- Build analytics with a memory budget based on available resources unless explicitly configured. Large chat archives and linked participant sets use less memory, and exhaustion errors identify the limits and retry command.
- Import SQLite mailboxes and growing group chats faster. Participant merges, attachment verification, and message deletion or re-embedding also avoid repeated work across unrelated archive data.
- Select verification samples faster with
msgvault verify. Selecting 1,000 samples from a million-message SQLite archive takes about 233 ms instead of 95 seconds in benchmarks. - Let queued mail and contact syncs run during large indexing jobs. Automatic indexing yields in bounded passes, and
embeddings optimizeallows archive writes between preparation batches. - Choose activity day boundaries during
msgvault setup. Restart the daemon after changing the time zone; later activity updates re-date existing rows. - See which Beeper chats failed and which command retries their messages or media. Slack sync and media backfill summaries also include an example download error.
- Allow time and disk space for new archive indexes during upgrade. The analytics cache also rebuilds once to exclude drafts and unsent messages from contact activity.
Bug fixes
- Keep previously indexed messages searchable across daemon restarts while keyword backfill fills remaining gaps.
- Find newly imported or edited iMessage, SMS, and Google Voice messages by keyword immediately. Re-run imports or the normal search backfill to fill existing omissions.
- Remove archived iMessage text when a re-import finds that the source body is empty, including after an unsend. The message record remains in the archive.
- Include Spam and Trash in Gmail full sync. To recover historical omissions, run one unfiltered, unlimited
sync-fullwithout query, date, or limit filters. - Retry failed Gmail downloads and saves during later incremental syncs, even without new mail. Sync stops before advancing its checkpoint if it cannot save the failure record. Older failures outside the retained retry history still require a full sync.
- Respect saved IMAP folder exclusions during scheduled and manual syncs. Configure
sync.imap_skip_foldersby account; explicit folder flags replace those exclusions for one run. Filtered syncs pause deletion tracking. - Wait and retry when an IMAP server rejects reads because of command limits. Set
[sync].imap_max_commands_per_minuteand restart the daemon to enable pacing. The default0leaves pacing off. - Keep drafts and unsent messages out of relationship activity and person file listings while retaining them in general search. Re-import Synctech backups to correct older draft, queued, and failed text classifications.
- Load person calendars, timelines, and domain details without the previous memory exhaustion on large chat archives. The TUI relationship calendar also loads with default system time zones; Windows groups its days in UTC and labels that choice.
- Show readable text for HTML-only email in the TUI and
show-messagethrough the daemon. JSON output keeps HTML inbody_htmlinstead of mislabeling it as plain text. - Flag messages whose HTML appears to hide readable text in MCP and CLI output. Detection checks inline styles and legacy attributes, so an unset flag does not guarantee that all text was visible.
- Stage every source-deletable match through MCP
stage_deletion, up to 100,000, or refuse without saving a batch. Larger queries receive guidance to narrow the search. - Reconnect local MCP proxies after a daemon restart without restarting the proxy.
- Leave supervised daemons for systemd or launchd to restart after
msgvault update. Use--no-restartto leave a self-started daemon stopped. Homebrew installations receivebrew upgrade msgvaultguidance instead of self-updating. - Preserve the host daemon's runtime record when commands run inside a PID-namespace sandbox.
- Report empty stored originals as sample errors in
verifyand as inconclusive in Gmail audits. Verification sample errors appear in the summary without changing the exit status. - Restore Mistral document extraction with
mistral-ocr-4-1. Update or remove an explicitmistral-ocr-4-0setting, then runmsgvault documents probe-mistralandmsgvault documents consent-mistralagain. - Process long PDFs through Docling in 50-page jobs and reuse saved progress after restarts. Saved range text is plaintext; status and backups disclose it, and
documents purge-derivedremoves it. - Complete embedding builds when a message contains only invisible or control characters by skipping empty content.
- Reject schedules with out-of-range wrapped values in both Settings and the daemon. Rewrite previously saved invalid ranges, such as
60-5, using valid field values. - Apply HTML sanitizer bypass fixes to email rendering in the Web UI.
Acknowledgements
Thanks to everyone who contributed to this release:
- @AndrewWiggins for complete Gmail full syncs that include Spam and Trash, retrying failed Gmail downloads, and verifying empty stored originals.
- @cpcloud for faster person and domain pages, lower Explore memory use, consistent page headers, and CI hardening.
- @elviskahoro for keeping sync progress lines aligned.
- @eserie for decrypting Matrix history from the account's key backup.
- @franklintra for full-height saved view rows.
- @hansn74 for faster attachment verification and fixing empty embedding inputs.
- @mariusvniekerk for running archive reads in parallel, restoring Mistral document extraction, Web UI security updates, and shared build caches.
- @morajabi for the Inline source.
- @rodboev for the redesigned Web UI, Telegram imports, attachment text search, shared local embeddings, saved IMAP folder exclusions, long Docling PDFs, and many speed and memory improvements.
- @salmonumbrella for Pocket meetings, native daemon MCP, archived calendar events, finding chats, the MCP quickstart, IMAP command-limit pacing, and analytics memory budgets.
- @sweenzor for listing the Beeper chats behind sync errors.
- @wesm for contact tiers, iMessage attachments, tracking several people at once, room policy overrides, and calendar event state in message details.