v3.4.1 — Cursor and Antigravity IDE support
We now have support for two more editors: a Cursor plugin with native hooks, and first-class Google Antigravity support — both bringing MemPalace's auto-save, session-start recall, and verbatim transcript mining to the same standard already shipping for Claude Code and Codex. Two reliability fixes round out the cycle: embeddinggemma no longer OOM-kills large re-embeds, and migrate / repair backups stop accumulating until they fill the disk.
Features
-
Cursor IDE plugin (
.cursor-plugin/). Auto-registers themempalace-mcpserver, five slash commands (/mempalace-help,/mempalace-init,/mempalace-mine,/mempalace-search,/mempalace-status), and a model-invocable skill — no manual~/.cursor/mcp.jsonedit. Install from a local clone now, or the Cursor marketplace once published. (#1632) -
Cursor IDE hooks (
stop/preCompact/sessionStart). Background auto-save every N agent turns, synchronous transcript mining before Cursor compacts, and session-start memory recall scoped to the workspace wing. One-command installer athooks/cursor/install.sh(--scope user|project,--variant full|minimal,--dry-run,--uninstall) — idempotent and dependency-free. -
First-class Antigravity (Google) IDE support. New
.antigravity-plugin/package and idempotent installer that registers MemPalace as an Antigravity plugin — MCP server, skill, and two lifecycle hooks (background mining onStop, verbatim memory injection on the first model call). bash 3.2 / macOS-compatible, shares the same~/.mempalace/hook_state/directory as the Claude Code / Codex / Cursor hooks, and honors every existing kill switch. (#1633, #1771) -
Zero-config interpreter resolution for hooks. The hooks now resolve Python from the
mempalace-mcpconsole-script shebang before falling back topython3, fixing silently-no-op mining underuv tool install/pipxlayouts where the systempython3can't importmempalace.
Bug Fixes
-
embeddinggemmano longer OOM-kills bulk re-embeds. The ONNX embedder ran a single pass over its entire input, so a repair-scale batch (~5,000 docs) allocated attention buffers far beyond available RAM and the kernel killed the process silently. Embedding now runs in 32-doc sub-batches; per-document vectors are unchanged. (#1770) -
Backup retention to prevent unbounded disk usage.
mempalace migrateandmempalace repair max-seq-idwrote a fresh, full-size backup every run and never cleaned up — one palace was found with hundreds of GB of stale backups beside a few hundred MB of live data. A newmax_backupssetting (default10;0keeps all) now prunes the oldest after each new backup is written. (#1697)
A big thank-you to everyone who contributed this cycle — both IDE integrations and several of these fixes came from the community, including a number of first-time contributors. Everyone is credited below.
What's Changed
- feat(searcher): metric-aware distance→similarity conversion (RFC 001 §10) by @igorls in #1727
- feat(backends): embedder-identity contract + three-state enforcement (RFC 001) by @igorls in #1731
- feat(backends): observable maintenance hooks + pgvector indexed-build path (RFC 001) by @igorls in #1732
- feat(backends): shared embedder-identity sidecar + qdrant identity (RFC 001) by @igorls in #1734
- fix(backends): keep post-deletion dim-None HNSW segments instead of quarantining (#1710) by @mvalentsev in #1723
- fix(backups): add max_backups retention to bound backup disk usage by @margaretjgu in #1697
- feat(mcp): add mempalace_mine tool (#1662) by @mvalentsev in #1692
- fix(miner): count only new work toward --limit, not already-mined skips (#1535) by @mvalentsev in #1622
- feat(mcp): expose list_hallways and delete_hallway tools by @ggettert in #1741
- fix(mcp): preserve room/wing casing on case-only update by @Sathvik-1007 in #1737
- feat: add Antigravity IDE support (hooks, plugin, skill, docs, tests) by @undeadindustries in #1633
- feat(antigravity): add recall skill, optional rule, shared protocol by @undeadindustries in #1771
- feat: add Cursor IDE support (hooks, plugin, skill, docs, tests) by @undeadindustries in #1632
- fix(backends): serialize first connect in sqlite_exact and pgvector (#1774, #1775) by @mvalentsev in #1793
- fix(mcp): treat chunked drawers as logical drawers by @fatkobra in #1782
- fix(repair): run post-rebuild FTS5 cleanup on legacy cmd_repair path (#1747) by @mvalentsev in #1749
- fix(embedding): chunk EmbeddinggemmaONNX batches to bound ONNX memory (#1770) by @mvalentsev in #1777
- fix(hooks): delegate shell hooks to Python runner by @fatkobra in #1790
- fix(ids): use length-prefixed recipe v3 by @fatkobra in #1781
- fix(hallways): scope hallway-file path to MempalaceConfig.palace_path (#1778) by @ggettert in #1780
- fix(searcher): scope neighbor expansion by parent_drawer_id (#1580) by @mvalentsev in #1582
- fix(mcp): drop top-level anyOf from diary_write schema by @Hexecu in #1717
- test: stabilize release validation on develop by @igorls in #1802
- fix(mcp): fail closed when add_drawer idempotency pre-check fails by @thismilktea in #1721
- fix: close blob seq sqlite migration connection by @igorls in #1804
- fix: preserve collection_name on MCP search retry by @trek-e in #1624
- fix(palace): clean source mine locks safely by @igorls in #1803
- test: stabilize closet boost fixture on Windows by @igorls in #1807
- chore(release): 3.4.1 by @igorls in #1809
- fix(hooks): portable mtime in macOS hook throttles; doc cleanup by @igorls in #1811
- Release v3.4.1 — promote develop to main by @igorls in #1810
New Contributors
- @margaretjgu made their first contribution in #1697
- @ggettert made their first contribution in #1741
- @undeadindustries made their first contribution in #1633
- @Hexecu made their first contribution in #1717
- @thismilktea made their first contribution in #1721
Full Changelog: v3.4.0...v3.4.1