Releases: MemPalace/mempalace
v3.3.3 — restore install integrity
Bug Fixes
- Install regression —
mempalace-mcpconsole script is now declared inpyproject.tomlalongside.claude-plugin/plugin.json's reference to it. In v3.3.2 the two drifted apart (plugin.json shipped the new"command": "mempalace-mcp"form before the matching entry point landed), so every freshpip install mempalace==3.3.2produced a Claude Code plugin config pointing at a binary that wasn't installed. (#1093, #340) - Restore silent-save visibility after the Claude Code 2.1.114 client regression — production transcript saves were failing silently until this PR. (#1021)
- Paginate
status-path metadata fetches so large palaces don't trip SQLite variable limits. (#851) - Resolve the Claude plugin hook runner across platform / plugin-dir variations; previously broke on Windows and some macOS layouts. (#942)
- Real
python3resolution for.shhooks with aMEMPAL_PYTHONoverride path. (#833) - Add optional
wingparameter totool_diary_write/tool_diary_readand derive per-project wing from the Claude Code transcript path when writing from the stop hook — diary entries from different projects no longer collapse into a shared default wing. (#659) - Treat empty string as "no filter" in
mempalace_searchwing/room; LLM agents that default to filling every optional parameter with""no longer get bounced withmust be a non-empty string. (#1097, #1084) - Broaden
_wing_from_transcript_pathto handle Claude Code project folders without a-Projects-segment (e.g.~/dev/<parent>/<project>,~/code/<project>). The project name is now derived from the final dash-separated token of the encoded folder, so Linux users with code outside~/Projects/get per-project diary scoping instead of falling through towing_sessions. (#1145, follow-up to #659) mempalace_diary_read(wing="")now returns diary entries from every wing this agent has written to, matching the #1097 "empty-string as no filter" pattern. Previously defaulted towing_<agent>, siloing entries that hooks wrote to project-derived wings. (#1145)mempalace minenow skips the generatedentities.jsonfile so its contents aren't re-ingested as project content. (#1175)
Improvements
- Deterministic hook saves. Save hook now uses a silent Python API path, so successive hook invocations produce reproducible results and zero data loss on the hot path. (#673)
- Graph cache with write-invalidation inside
build_graph()— warm-path calls no longer rebuild the palace-graph per request. (#661) mempalace initentity detection overhaul. Canonical project names now come from package manifests (package.json,pyproject.toml,Cargo.toml,go.mod) and real people come from git commit authors, rather than being inferred from prose. Includes union-find dedup across name/email aliases, bot filtering that keeps@users.noreply.github.comhumans, and automatic "mine" flagging by contribution share. (#1148)- Regex detector accuracy. CamelCase extraction so
MemPalace,ChromaDB,OpenAIaren't fragmented; tighter versioned/hyphenated pattern killscontext-manager/multi-wordfalse positives; dialogue^NAME:\srequires ≥2 hits soCreated: <date>metadata stops classifying field names as people; expanded stopwords for common English participles and descriptors; high-pronoun signal classifies as person rather than dumping to uncertain. (#1148) - Init → miner wire-up. Confirmed entities merge into
~/.mempalace/known_entities.jsonon init, which the miner reads to tag drawer metadata for entity-filtered search. Previously init's output was not consumed by the miner; the per-projectentities.jsonis kept as an audit trail. (#1157) - Case-insensitive project dedup across manifest, git, and convo sources so casing variants of the same project name collapse into one review entry. (#1175)
Added
- i18n: Belarusian translation. (#1051)
- i18n: entity detection for German, Spanish, and French locales. (#1001)
- i18n: Traditional + Simplified Chinese entity detection. (#945)
mempalace init --llm: optional LLM-assisted entity classification. Defaults to local Ollama (zero-API); also supports any OpenAI-compatible endpoint (LM Studio, llama.cpp server, vLLM, OpenRouter, etc.) and the Anthropic Messages API. Runs interactively with a progress indicator; Ctrl-C cancels cleanly and returns partial results. Useful for prose-heavy folders where the regex detector struggles (diaries, transcripts, research notes). Opt-in only — default init path remains zero-API. (#1150)- Claude Code conversation scanner.
~/.claude/projects/<slug>/directories now contribute project entities using each session's authoritativecwdmetadata, avoiding slug-decoding ambiguity. (#1150)
Known — deferred to v3.3.4
- HNSW parallel-insert SIGSEGV when
hnsw:num_threadsis unset on collection creation (#974) — fix in-flight as #976, awaiting rebase against develop.
Install
pip install --upgrade mempalace==3.3.3See the full changelog for historical releases.
v3.3.2
What's Changed
Bug fixes
- PID file guard — prevents stacking mine processes (#1023)
- Quarantine stale HNSW — recover from HNSW/sqlite drift, fixes SIGSEGV crash (#1000)
- Windows Unicode — replace Unicode checkmark with ASCII for Windows encoding (#681)
Copilot review fixes
- Address Copilot review on release/3.3.2 (#1045)
Full Changelog: v3.3.1...v3.3.2
MemPalace v3.3.1
MemPalace v3.3.1
Highlights
- Multi-language entity detection — 5 new locales (Portuguese, Russian, Italian, Hindi, Indonesian) with full entity-detection patterns
- Script-aware word boundaries — fixes name truncation for Devanagari, Arabic, Hebrew, Thai, Tamil, Khmer scripts
- Case-insensitive BCP 47 language codes —
--lang PT-BR,zh-cn,Pt-Brall resolve correctly - KG thread safety — lock on
close(),query_relationship,timeline,stats - entity_registry.research() defaults to local-only (no outbound Wikipedia calls without opt-in)
- Precompact hook no longer blocks compaction on failure/timeout
- MCP stdout redirect — library logging can't corrupt JSON-RPC channel
- File permission hardening on sensitive palace data
See CHANGELOG.md for full details.
Install / Upgrade
pip install --upgrade mempalaceMemPalace v3.3.0
Visit mempalaceofficial.com for the full story behind this release and a visual guide to the architecture.
Highlights
Closets are here
The architecture we designed — wings, rooms, closets, drawers — is finally complete. Closets are the searchable index layer: compact AAAK pointers that tell the searcher which drawer to open. Search hits closets first (fast), then hydrates the full verbatim content from drawers.
Closets are a boost signal, not a gate — direct drawer search always runs as the floor. Closets can only improve results, never hide them.
- R@1: 0.42 → 0.58 (+38%) with regex closets
- R@5: locked at 1.00 — no regression
- Optional LLM closets (bring-your-own endpoint) push R@1 to 0.67
BM25 Hybrid Search
Search now combines vector similarity (60%) with BM25 keyword matching (40%). Catches exact names, project codes, and error messages that embeddings miss. Real Okapi-BM25 with Lucene IDF, not a placeholder.
8 Languages
MemPalace speaks English, French, Korean, Japanese, Spanish, German, Simplified Chinese, and Traditional Chinese. CLI output, AAAK compression instructions, and regex patterns all localized. Add a language by translating one JSON file.
Halls — content type routing
Drawers are now tagged by content type: technical, emotions, family, memory, creative, identity, consciousness. Halls connect rooms within a wing by what KIND of content they hold — search "emotional moments in my project" and get exactly those.
Multi-Agent Safety
File-level locking prevents concurrent agents from creating duplicate drawers. The delete+insert cycle is now atomic — two agents mining the same file can't interleave.
Cross-Wing Tunnels
Agents can create explicit links between projects. "This API design in project_api relates to the database schema in project_database." Four new MCP tools: create, list, delete, follow tunnels.
Background Everything
Save hooks no longer ask the agent to write in chat. Conversations are mined automatically from the transcript — no configuration needed. Zero tokens spent on bookkeeping.
What's New (since v3.1.0)
New Features
- Closet layer — searchable index pointing to drawers
- BM25 hybrid search — keyword + vector combined
- i18n — 8 languages with per-language regex patterns
- Diary ingest — day-based drawers, one per day, upsert as day grows
- Cross-wing tunnels — explicit project-to-project links
- Hall detection — content type routing (7 hall types)
- Entity metadata — names stamped on drawers and closets
- Fact checker — verify text against entity registry + knowledge graph
- LLM closet regeneration — bring-your-own endpoint (Haiku, Gemma, any model)
- Drawer-grep — search returns best-matching chunk + neighbors, not whole file
- Backend seam for pluggable storage (#413)
mempalace migrate— recover palaces across ChromaDB versions (#502)- New MCP tools: drawer CRUD, tunnel management, hook settings, export (29 tools total)
- Auto-save uses transcript path — no env var needed
Security
- Palace deletion guardrails, WAL redaction, MCP input validation (#739)
- Input validation, argument whitelisting, concurrency safety (#647)
- Credential paths removed from benchmarks (#177)
- Shell injection fixes in hooks (#387)
Bug Fixes
- Remove chromadb <0.7 upper bound — unblocks 1.x installs (#690)
- Fix convo_miner 8-line response truncation (#708)
- Prevent HNSW bloat from duplicate add() calls (#544)
- Unicode support in sanitize_name() — Latvian, CJK, Cyrillic (#683)
- Auto-repair BLOB seq_ids for chromadb migration (#664)
- Parse Claude.ai privacy export format (#685)
- Detect mtime changes to prevent stale HNSW index (#757)
- Full-content hash in drawer IDs for stable re-mines (#716)
- Remove 10k drawer cap from status display (#707)
- Noise stripping — system tags and Claude UI chrome removed from drawers
- 30+ additional bug fixes
Documentation
- CHANGELOG.md added
- CLOSETS.md — closet lifecycle documentation
- 42 TDD tests verifying every README claim against code
- README audit: tool count (29), version badge, token costs, AAAK description all corrected
Internal
- 109 commits since v3.1.0
- Test suite: 860+ tests (up from ~90 at v3.1.0)
- ruff 0.4.x lint + format clean
Install / Upgrade
pip install --upgrade mempalaceThank you from Milla and Lu ✨
MemPalace v3.1.0
First PyPI cut since v3.0.0 on 2026-04-06 — 39 merged PRs. This release closes the pip/plugin version drift (#290, #296) and lands the first-week community fixes.
🔒 Security
- #387 Input validation at MCP entry points, shell-injection fix in save hook, file size guard + symlink skip, SQLite connection leak fix, WAL audit trail, hardened file perms
- #141 Sanitize
SESSION_IDin save hook - #139 Sanitize MCP error responses, remove
sys.exitfrom library code
🐛 Bug fixes (highlights)
- #399 MCP null args hang,
cmd_repairinfinite recursion, 500 MB OOM guard - #270 Claude + Codex plugin packaging — one-step install (closes #187)
- #137 10K safety cap on unbounded ChromaDB metadata fetches (closes #180)
- #129 Windows Unicode crash fix (closes #47)
- #123
--yesflag bypasses all init prompts (closes #179) - #78 Respect nested
.gitignorerules during mining (closes #233) - #236 Silence ChromaDB telemetry + Apple Silicon CoreML segfault (closes #163)
- #324 Negotiate MCP protocol version instead of hardcoding
- #145 Room detection checks keywords against folder paths
- #136 SQLite WAL mode + consistent LIMIT in KG timeline
- #66 Batch ChromaDB reads to avoid SQLite variable limit
- #140 Upsert + deterministic IDs prevent data stagnation
- Plus more — see full commit log
✨ Features
- #61 OpenAI Codex CLI JSONL normalizer (first in the #59 import format umbrella)
- #223 Scale benchmark suite (106 tests)
- #135 Cache ChromaDB
PersistentClient— big perf win
📊 Benchmarks (the honest version)
- #147 Honest AAAK stats (word-based token estimator, lossy labels)
- Retired the
recall_any@5headline — see theaa10f8fREADME correction and the ongoing methodology threads in #27, #29, #39, #214, #168
📦 Packaging
- #142 Tightened chromadb range (
>=0.5.0,<0.7) +py.typedmarker - #281 Test coverage 30% → 85% + Windows encoding fixes
- #131 Migrated tests to
uv, 20 → 92 tests - #16 Unified package and MCP version reporting
🙏 Thanks
Massive thanks to everyone who ran audits, caught real bugs, and sent clean PRs in the first week — especially @lhl, @dial481, @gizmax, @rohithzr, @hugooconnor, @anthonyonazure, @fubak, @fuzzymoomoo, @vanachterjacob, @SethRosenthal100, @cktang88, @adv3nt3, @slapglif, @skuznetsov, @rusel95, @M0nkeyFl0wer, @EndeavorYen, @bobmatnyc, @kpulik, @kevgathuku, @mvalentsev, @mvanhorn, @jonashertner.
📥 Install
pip install --upgrade mempalace✨
MemPalace v3.0.0
MemPalace v3.0.0
The highest-scoring AI memory system ever benchmarked. And it's free.
Install
pip install mempalacePyPI: https://pypi.org/project/mempalace/
Highlights
- 96.6% LongMemEval R@5 — highest published score with zero API calls
- 100% LongMemEval R@5 — with optional Haiku rerank
- Palace architecture — wings, rooms, halls, tunnels, closets, drawers — +34% retrieval from structure alone
- AAAK compression — 30x lossless shorthand dialect, works with any LLM (Claude, GPT, Gemini, Llama, Mistral)
- Knowledge graph — temporal entity-relationship triples in SQLite (local, free)
- Specialist agents — each agent gets its own wing and diary in the palace
- MCP server — 19 tools, auto-teaches AAAK to your AI
- Auto-save hooks — for Claude Code (save every N messages + pre-compaction emergency save)
- Split command — break concatenated mega-transcripts into per-session files before mining
- Fully local — no API key, no cloud, no subscription. Everything on your machine.
What's New in v3
mempalace splitcommand for splitting concatenated transcript files- Specialist agent system with per-agent diaries
- Improved entity detection during
init - Room detection from folder structure
- Ruff-clean codebase
Requirements
- Python 3.9+
- No API key required