New features
- Follow RSS, Atom, and JSON feeds with
msgvault source feeds. Import subscriptions with--opml, schedule updates, and keep archived items after publishers remove them. - Archive Facebook Page comments and comments on linked professional Instagram accounts, including nested replies. Unfinished syncs resume on the next run.
- Import direct and group messages from extracted X JSON archives with
msgvault import-x, including local DM media. Newer encrypted chats are unsupported. - Import your own sent Discord messages, including DMs, with
msgvault import-discord-package. Incoming messages and attachment downloads are absent from these imports. Current JSON package support is experimental. - Keep Matrix photos, stickers, audio, video, and files, including encrypted attachments. Sync also finds media in older archived messages. The default policy skips rooms over 20 members and files over 250 MiB.
- Schedule WhatsApp for Mac and iMessage imports in the daemon. Configure schedules under
[[whatsapp_apple]]and[imessage], then use Sources to check runs or sync immediately. - Turn on local search by meaning from web Settings without restarting. Setup reuses compatible Ollama or downloads the built-in server, then builds the message index.
- Track open loops, questions waiting on a reply from you or someone else. Use
msgvault loopsto list, complete, snooze, or reopen them. People Details shows a read-only list, and MCP supports approved decisions. - Import messages from custom sources through
POST /api/v1/import/message. Repeated imports update the same message without duplicates, and imported messages become keyword-searchable when the request returns. - Search mirrored documents and images by meaning through
msgvault media searchand MCPsearch_media. Configureattachment_search_profileunder[integrations.docbank]with text embeddings already available in Docbank. - Review sensitive-content warnings in MCP draft receipts, including findings in quoted history. Enable
msgvault mcp --confirm-sensitive-draftsto require approval before flagged drafts reach the provider. The client must support confirmation prompts. - Check email draft recipients against prior relationship evidence in the archive. MCP and JSON results flag unfamiliar addresses. These findings are advisory and do not authorize sending.
- Withhold detected sign-in codes, password-reset links, and magic links from delegated reads unless the token includes
verification.read. Detection is heuristic, and search-based confirmation remains outside this protection. - Read sender-authentication results on individual emails after configuring trusted receivers per source. JSON and MCP responses report whether a trusted receiver confirmed the displayed From domain.
- Distinguish newly authored text from quoted history, forwards, and signatures in MCP message reads with
include_segments: true. - Look up partial addresses with
msgvault address autocompleteand retrieve a chosen suggestion withmsgvault address select. Requests requireMSGVAULT_GOOGLE_PLACES_API_KEY, use separately billed Google Places services, and leave the archive unchanged. - Classify older email attachments as inline or standalone with
msgvault repair-attachment-roles, without enabling document indexing. - Track feedback decisions and follow-through with the
msgvault-feedbackskill, installed bymsgvault skills install. Recording acceptance, completing a change, and reporting back remain separate steps.
Improvements
- Search attachment text through Docbank, the service that now handles document processing. Local processing,
msgvault documents,/api/v1/documents/*, and MCPsearch_document_attachmentsare removed. Setdocument_profileunder[integrations.docbank], grant consent in Docbank, and use media search. - Replace
person files --lane documentswithmedia search --person <id> --direction from_person. The replacement has no date filters or cursor. Mistral processing requires Docbank 0.17.0 or later and incurs OCR charges when files are reprocessed. - Preview CSV, TSV, text, and audio in Files. See the originating message, step through results, and use PDF page counts and zoom controls. Missing archived content gets an explanation instead of a download action.
- Upgrade clients alongside the daemon. File-list and suggestion responses now return
content_available: nullfor unchecked files. Archive readers also need support for schema 42. - Browse Messages, Files, and grouped results on phones without scrolling sideways. Toolbars fit on one row, messages open in a full-width reader, and Back restores the opened row.
- Inspect grouped messages with counts, sizes, activity, and frequent participants. Month and Year groups appear newest first and follow your time zone.
- Curate people with readable merge history and address-based split choices. Job-edit conflicts show the saved record and offer a choice between keeping your edits and using the saved version.
- Find built-in and custom people fields together in Settings. Person tasks show their lists and use one add field with a searchable list picker.
- File a message to a new or existing task or Kata issue from one dialog. Existing destinations load immediately, and new task descriptions link back to the message.
- Find commands through a reorganized command palette with recent commands and archive-search fallbacks. Keyboard help shows all shortcuts together on wide screens.
- Read Messages during analytics-cache rebuilds in SQLite auto mode. Exports, folder listings, and policy reads also run alongside imports and syncs.
- Get faster searches and browsing on large archives. SQLite keyword searches, JSON snippets, selective address and label filters, large-chat paging, and People search spend less time loading unrelated data.
- Finish daemon imports, syncs, and message repairs without waiting for attachment packing. Packing runs as scheduled work, potentially up to six hours later. Loose files remain readable, and packing errors appear in job status.
- Keep explicitly started daemons running until stopped. Automatically started daemons retain their idle timeout, and status identifies which lifetime applies.
msgvault serveprints the existing daemon's web URL when one already owns the archive. - Install
msgvaultinto PATH for new Bash, Zsh, and Fish terminals. SetMSGVAULT_NO_MODIFY_PATH=1to leave shell profiles untouched. - Cancel more active queries, requests, and helper processes with Ctrl-C or daemon shutdown. Required work after a committed write, including cache refresh, still finishes.
- Connect Docbank and Kata over HTTP on trusted private networks with
trust_private_network = true. API keys travel in plaintext when this option is enabled. - Get account listings sooner when fresh counts run slowly. Previous counts include their age, and JSON marks them as stale.
- Load only MCP tool families relevant to the archive's sources and configured integrations. Reconnect stdio clients after adding a source to refresh the available tools.
Bug fixes
- Keep Gmail archives complete after interrupted full syncs. Resuming preserves the original History position so later incremental syncs collect mail received during the pause. Full syncs interrupted under older releases restart their scan once without redownloading archived messages.
- Retry failed Gmail label changes and deletions instead of advancing past them. Recovery after an expired History cursor also refreshes labels on already archived messages.
- Restore missing Gmail attachments and remote images after failed or interrupted saves, using retained originals without fetching the message again. For older messages without a retry record, use
repair-derived --attachment-message <message-id> --source-id <source-id>. - Keep IMAP flags current on servers without CONDSTORE, including Proton Mail Bridge and DavMail. Incremental sync refreshes the newest 5,000 archived UIDs per mailbox. Use
sync-full --noresumeto refresh older messages. - Sync non-ASCII IMAP folder names without repeatedly rescanning the whole account on servers advertising both protocol revisions.
- Complete scheduled Inline and Beeper passes on busy daemons without repeatedly restarting already visited work. Beeper also skips unchanged recent messages and reports new messages separately from updates.
- Recover from Plaud rate limits with longer waits and a reduced request rate. Set
limitin[[plaud]]to check large libraries over several scheduled runs. - Preserve full text in long iMessage imports, including non-Latin text and emoji. Rerun
import-imessageto repair messages still present inchat.db. - Archive Slack files served through signed redirects instead of retrying downloads that always fail.
- Connect iCloud Contacts with
add-carddav --icloud <apple-id>and an Apple app-specific password. If Apple moves the account to another partition, sync requests an explicit reconnect. - Find email addresses, host names, version numbers, and phone numbers in PostgreSQL searches. Older entries rebuild in the background after upgrading, so results remain incomplete until that rebuild finishes.
- Preserve existing message text when repair encounters an empty stored original. Interrupted automatic repairs resume from saved progress, and
repair-message --auditreports inconclusive comparisons. - Export each message once without duplicates at page boundaries. Large exports also finish faster.
- Keep message lists populated while scrolling person and domain pages. Direct message links open inside the normal app with the reader selected.
- Warn before leaving Settings or reloading would discard edits in independently saved forms. Restart notices identify the machine and commands to use, and terminal settings remain scrollable on short screens.
- Keep encrypted Matrix edits attached to their original message when an older edit is recovered.
- Exclude inactive WhatsApp for Mac roster entries from new imports. Previously imported extra members remain unchanged.
- Expand recurring calendar events across leap-year ends, and keep Google meeting rooms out of People unless linked with a real person.
- Preserve Unicode in streamed daemon output and truncated CLI text. Windows daemon helpers also stop flashing console windows.
- Keep activity calculations progressing across identity changes without resetting the scan or continuously queuing more work.