Local-first AI memory. Verbatim storage, pluggable backend, 96.6% R@5 raw on LongMemEval — zero API calls. ![][release-link] ![][python-link] ![][license-link] ![][discord-link] Beware of impostor sites. MemPalace has no other official websites.
> /plugin marketplace add milla-jovovich/mempalace> /plugin install mempalace@mempalace
What's inside
Local-first AI memory. Verbatim storage, pluggable backend, 96.6% R@5 raw on LongMemEval — zero API calls.
[!CAUTION] Beware of impostor sites. MemPalace has no other official websites. The only official sources are this GitHub repository, the PyPI package, and the docs at mempalaceofficial.com. Any other domain (including
.tech,.net, or other.comvariants) is an impostor and may distribute malware. Details and timeline: docs/HISTORY.md.
[!IMPORTANT] Claude Code sessions expire in 30 days without auto-save hooks wired. Read this →
Need the shortest recovery/setup path? Use the Claude Code retention setup checklist.
MemPalace stores your conversation history as verbatim text and retrieves it with semantic search. It does not summarize, extract, or paraphrase. The index is structured — people and projects become wings, topics become rooms, and original content lives in drawers — so searches can be scoped rather than run against a flat corpus.
The retrieval layer is pluggable. The current default is ChromaDB; the
interface is defined in mempalace/backends/base.py
and alternative backends can be dropped in without touching the rest of
the system.
Nothing leaves your machine unless you opt in.
Architecture, concepts, and mining flows: mempalaceofficial.com/concepts/the-palace.
MemPalace ships a CLI, so install it in an isolated environment to avoid
PEP 668 errors on Debian/Ubuntu/Homebrew Pythons and to keep mempalace's
deps (chromadb, numpy, grpcio, …) from conflicting with anything
else in your global site-packages.
We recommend uv — uv tool install puts
the mempalace CLI in an isolated environment on your PATH:
uv tool install mempalace
mempalace init ~/projects/myapp
pipx works the same way if you prefer it:
pipx install mempalace.
Prefer plain pip only inside an activated virtualenv where you
explicitly want import mempalace available:
python -m venv .venv && source .venv/bin/activate
pip install mempalace
A container image is also available for running the MCP server or the CLI without a local Python toolchain. Multi-arch (amd64 + arm64), so it runs natively on Apple Silicon:
docker pull ghcr.io/mempalace/mempalace:latest
Everything persists under /data — palace, config, and the cached embedding
model — so mount a volume there and reuse it across runs:
# MCP server over stdio — note the `-i` flag (JSON-RPC needs stdin)
docker run -i --rm -v mempalace-data:/data ghcr.io/mempalace/mempalace
# Run any CLI command instead. The container only sees what you mount, so
# mount the directory you want to mine — read-only is enough, mining never
# writes to the source.
docker run --rm -v mempalace-data:/data -v /path/to/project:/work:ro \
ghcr.io/mempalace/mempalace mine /work
docker run --rm -v mempalace-data:/data ghcr.io/mempalace/mempalace search "why GraphQL"
The first command that needs embeddings downloads the model into /data
(~80 MB for the default minilm, ~300 MB for embeddinggemma). It is a
one-off as long as the volume persists, but it does mean the first call is
slow and needs network — worth knowing before assuming a hung container.
Wire it into an MCP client (e.g. Claude Code) as a stdio server. Mount anything you want the server to be able to mine — it cannot reach your transcripts otherwise:
{
"mcpServers": {
"mempalace": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "mempalace-data:/data",
"-v", "/absolute/path/to/.claude/projects:/transcripts:ro",
"ghcr.io/mempalace/mempalace"
]
}
}
}
Use a real absolute path there — ~ and $HOME are not expanded by every
MCP client. Paths are container paths from then on: mine /transcripts, not
~/.claude/projects.
Mount permissions on Linux. The image runs as uid 1000 and bind mounts
keep their host ownership, so a mounted directory has to be readable by that
uid — an ordinary 0755 checkout is fine, a 0700 directory is not, and the
failure surfaces as PermissionError: [Errno 13] rather than anything about
Docker. Docker Desktop maps uids on macOS and Windows, so this only bites on
Linux. Do not work around it with --user: /data is owned by uid 1000
inside the image, so another uid cannot write the palace at all.
docker compose run --rm mcp works too (see docker-compose.yml), and
deploy/docker-compose.server.yml stands up the team server. To build the
image yourself instead of pulling — required for the GPU variant, which is not
published:
docker build -t mempalace . # CPU
docker build --build-arg EXTRAS="extract,spellcheck" -t mempalace .
docker build -f Dockerfile.gpu -t mempalace:gpu . # CUDA; run with --gpus all
The GPU image is x86_64-only: onnxruntime-gpu publishes no aarch64 Linux
wheels, so that last build fails on an ARM host (including Apple Silicon) with
a dependency-resolution error rather than an obvious one.
Note that a build from a clone uses whatever branch you checked out; develop
is the default branch, so pull the published image if you want the released
version.
ChromaDB is the default and needs no configuration. MemPalace also ships a pluggable backend contract, exercised across deliberately different substrates so the contract is never accidentally shaped around one vendor. Every non-default backend is opt-in.
| Backend | Mode | Install | Namespaces | Lexical | Configure with |
|---|---|---|---|---|---|
chroma (default) | Local (embedded) | bundled | – | ✓ | – |
sqlite_exact | Local (exact) | bundled | – | ✓ | – |
milvus | Local (Lite) · Server opt-in | mempalace[milvus] | ✓ | ✓ | MEMPALACE_MILVUS_URI |
qdrant | Server (REST) | bundled | ✓ | ✓ | MEMPALACE_QDRANT_URL |
pgvector | Server (Postgres) | mempalace[pgvector] | ✓ | ✓ | MEMPALACE_PGVECTOR_DSN |
Select with --backend <name>, MEMPALACE_BACKEND=<name>, or
"backend": "<name>" in config.json. See
Storage backends for connection
variables, namespace behavior, and deployment notes.
# Mine content into the palace
mempalace mine ~/projects/myapp # project files
mempalace mine ~/.claude/projects/ --mode convos # Claude Code sessions (scope with --wing per project)
# Search
mempalace search "why did we switch to GraphQL"
# Load context for a new session
mempalace wake-up
For Claude Code, Gemini CLI, Antigravity, MCP-compatible tools, and local models, see mempalaceofficial.com/guide/getting-started.
All numbers below are reproducible from this repository with the commands
in benchmarks/BENCHMARKS.md. Full
per-question result files are committed under benchmarks/results_*.
LongMemEval — retrieval recall (R@5, 500 questions):
| Mode | R@5 | LLM required |
|---|---|---|
| Raw (semantic search, no heuristics, no LLM) | 96.6% | None |
| Hybrid v4, held-out 450q (tuned on 50 dev, not seen during training) | 98.4% | None |
| Hybrid v4 + LLM rerank (full 500) | ≥99% | Any capable model |
The raw 96.6% requires no API key, no cloud, and no LLM at any stage. The hybrid pipeline adds keyword boosting, temporal-proximity boosting, and preference-pattern extraction; the held-out 98.4% is the honest generalisable figure.
The rerank pipeline promotes the best candidate out of the top-20
retrieved sessions using an LLM reader. It works with any reasonably
capable model — we have reproduced it with Claude Haiku, Claude Sonnet,
and minimax-m2.7 via Ollama Cloud (no Anthropic dependency). The gap
between raw and reranked is model-agnostic; we do not headline a "100%"
number because the last 0.6% was reached by inspecting specific wrong
answers, which benchmarks/BENCHMARKS.md flags as teaching to the test.
Other benchmarks (full results in benchmarks/BENCHMARKS.md):
| Benchmark | Metric | Score | Notes |
|---|---|---|---|
| LoCoMo (session, top-10, no rerank) | R@10 | 60.3% | 1,986 questions |
| LoCoMo (hybrid v5, top-10, no rerank) | R@10 | 88.9% | Same set |
| ConvoMem (all categories, 250 items) | Avg recall | 92.9% | 50 per category |
| MemBench (ACL 2025, 8,500 items) | R@5 | 80.3% | All categories |
We deliberately do not include a side-by-side comparison against Mem0, Mastra, Hindsight, Supermemory, or Zep. Those projects publish different metrics on different splits, and placing retrieval recall next to end-to-end QA accuracy is not an honest comparison. See each project's own research page for their published numbers.
Reproducing every result:
git clone https://github.com/MemPalace/mempalace.git
cd mempalace
uv sync --extra dev # or: pip install -e ".[dev]"
# see benchmarks/README.md for dataset download commands
uv run python benchmarks/longmemeval_bench.py /path/to/longmemeval_s_cleaned.json
MemPalace includes a temporal entity-relationship graph with validity windows — add, query, invalidate, timeline — backed by local SQLite. Usage and tool reference: mempalaceofficial.com/concepts/knowledge-graph.
44 MCP tools cover palace reads/writes, knowledge-graph operations, cross-wing navigation, drawer management, agent diaries, and agent coordination (logstream events + artifact handoffs). Installation and the full tool list: mempalaceofficial.com/reference/mcp-tools.
Each specialist agent gets its own wing and diary in the palace.
Discoverable at runtime via mempalace_list_agents — no bloat in your
system prompt:
mempalaceofficial.com/concepts/agents.
Auto-save hooks for Claude Code, Codex CLI, and Cursor IDE save periodically and before context compression:
If you are installing under time pressure, start with the
Claude Code retention setup checklist:
wire the hooks, back up existing JSONL transcripts, and backfill them with
mempalace mine ~/.claude/projects/ --mode convos.
For per-message recall on top of the file-level chunks the hooks produce,
run mempalace sweep <transcript-dir> periodically — it stores one
verbatim drawer per user/assistant message, idempotent and resume-safe.
python -m mempalace.onboarding) offers embeddinggemma-300m (multilingual, 100+ languages, recommended) or all-MiniLM-L6-v2 (English-only, ~30 MB). See the docstring at mempalace/embedding.py for details and migration notes.No API key is required for the core benchmark path.
PRs welcome. See CONTRIBUTING.md.
MIT — see LICENSE.
.agents/
plugins/
marketplace.json
.antigravity-plugin/
hooks.json.tmpl
mcp_config.json
plugin.json
README.md
rules/
mempalace-recall.md
skills/
mempalace/
mempalace-recall/
SKILL.md
SKILL.md
.claude-plugin/
.mcp.json
commands/
help.md
init.md
mine.md
search.md
status.md
hooks/
hooks.json
mempal-precompact-hook.sh
mempal-session-end-hook.sh
mempal-stop-hook.sh
marketplace.json
plugin.json
README.md
skills/
mempalace/
mempalace-recall/
SKILL.md
SKILL.md
.codex-plugin/
hooks/
hooks.json
mempal-hook.sh
plugin.json
README.md
skills/
help/
SKILL.md
init/
SKILL.md
mine/
SKILL.md
search/
SKILL.md
status/
SKILL.md
.cursor-plugin/
marketplace.json
mcp.json
plugin.json
README.md
.devcontainer/
devcontainer.json
post-create.sh
.dockerignore
.github/
CODEOWNERS
dependabot.yml
ISSUE_TEMPLATE/
bug_report.md
feature_request.md
PULL_REQUEST_TEMPLATE.md
workflows/
bump-plugin-version.yml.disabled
ci.yml
deploy-docs.yml
docker-publish.yml
publish.yml
version-guard.yml
.gitignore
.pre-commit-config.yaml
.python-version
AGENTS.md
assets/
mempalace_logo.png
benchmarks/
BENCHMARKS.md
convomem_bench.py
HYBRID_MODE.md
lme_split_50_450.json
locomo_bench.py
longmemeval_bench.py
membench_bench.py
mine_bench.py
model_eval/
__init__.py
candidates.yaml
datasets/
calibration/
dataset.de.jsonl
dataset.es.jsonl
dataset.fr.jsonl
dataset.hi.jsonl
dataset.it.jsonl
dataset.jsonl
dataset.ko.jsonl
dataset.pt-BR.jsonl
dataset.ru.jsonl
dataset.zh.jsonl
labels.jsonl
entity_extraction/
dataset.de.jsonl
dataset.es.jsonl
dataset.fr.jsonl
dataset.hi.jsonl
dataset.it.jsonl
dataset.jsonl
dataset.ko.jsonl
dataset.pt-BR.jsonl
dataset.ru.jsonl
dataset.zh.jsonl
labels.jsonl
memory_extraction/
dataset.de.jsonl
dataset.es.jsonl
dataset.fr.jsonl
dataset.hi.jsonl
dataset.it.jsonl
dataset.jsonl
dataset.ko.jsonl
dataset.pt-BR.jsonl
dataset.ru.jsonl
dataset.zh.jsonl
labels.jsonl
labels.ko.jsonl
README.md
room_classification/
dataset.de.jsonl
dataset.es.jsonl
dataset.fr.jsonl
dataset.hi.jsonl
dataset.it.jsonl
dataset.jsonl
dataset.ko.jsonl
dataset.pt-BR.jsonl
dataset.ru.jsonl
dataset.zh.jsonl
labels.jsonl
room_lists.jsonl
metrics.py
orchestrator.py
README.md
reports/
2026-05-10-analysis.md
2026-05-10-z690-ex-glacial.md
2026-05-13-multilingual.md
README.md
results/
.gitignore
2026-05-10-cloud-z690-ex-glacial.csv
2026-05-10-spotcheck-qwen3.csv
2026-05-10-z690-ex-glacial.csv
2026-05-11-cloud-z690-ex-glacial.csv
2026-05-11-modern-z690-ex-glacial.csv
README.md
runner.py
summarize.py
tasks/
__init__.py
calibration/
__init__.py
prompts.py
score.py
entity_extraction/
__init__.py
prompts.py
score.py
memory_extraction/
__init__.py
prompts.py
score.py
room_classification/
__init__.py
prompts.py
score.py
translate_datasets.py
README.md
results_convomem_raw_top10_20260414_1649.json
results_locomo_hybrid_session_top10_20260414_1649.json
results_locomo_raw_session_top10_20260414_1634.json
results_membench_hybrid_all_movie_top5_20260414_1656.json
results_mempal_hybrid_v4_held_out_session_20260414_1634.jsonl
results_mempal_hybrid_v4_llmrerank_session_20260414_1654.jsonl
results_mempal_hybrid_v4_llmrerank_session_20260414_1659.jsonl
results_mempal_raw_session_20260414_1629.jsonl
CHANGELOG.md
CLAUDE.md
commands/
mempalace-help.md
mempalace-init.md
mempalace-mine.md
mempalace-search.md
mempalace-status.md
CONTRIBUTING.md
deploy/
docker-compose.server.yml
mempalace-server.service
server.env.example
docker-compose.yml
docker-entrypoint.sh
Dockerfile
Dockerfile.gpu
docs/
authored-at.md
CLOSETS.md
format-coverage.md
HISTORY.md
hook-write-routing.md
recovery/
index-metadata-recovery.md
wing-name-migration.md
RELEASING.md
rfcs/
002-source-adapter-plugin-spec.md
003-agent-logstream-coordination.md
004-replicated-palace.md
005-agent-identity-routing.md
schema.sql
virtual-line-numbering.md
write-routing-policy.md
examples/
antigravity/
hooks.json
mcp_config.json
README.md
basic_mining.py
convo_import.py
cursor/
hooks.json
hooks.minimal.json
README.md
rules/
mempalace-recall-always.mdc
mempalace-recall.mdc
README.md
gemini_cli_setup.md
HOOKS_TUTORIAL.md
mcp_setup.md
hooks/
antigravity/
install.sh
INVESTIGATION.md
lib/
common.sh
mempal_save_hook_antigravity.sh
mempal_wake_hook_antigravity.sh
README.md
STDIN_SHAPE.md
cursor/
install.sh
lib/
common.sh
mempal_precompact_hook_cursor.sh
mempal_save_hook_cursor.sh
mempal_wake_hook_cursor.sh
README.md
STDIN_SHAPE.md
mempal_precompact_hook.sh
mempal_save_hook.sh
mempal_session_end_hook.sh
README.md
integrations/
openclaw/
SKILL.md
shared/
coordination-protocol.md
recall-protocol.md
landing/
index.html
mempalace_logo.png
LICENSE
mcp.json
mempalace/
__init__.py
__main__.py
_stdio.py
backends/
__init__.py
_sidecar.py
base.py
chroma.py
embedding_wrapper.py
milvus.py
pgvector.py
qdrant.py
registry.py
sqlite_exact.py
backups.py
cli.py
closet_llm.py
collision_scan.py
config.py
convo_miner.py
convo_scanner.py
corpus_origin.py
daemon.py
data/
coca_content_words.json
known_systems.json
dedup.py
dialect.py
diary_ingest.py
dynamics.py
embedding.py
encoding_repair.py
entities.py
entity_detector.py
entity_registry.py
exporter.py
fact_checker.py
format_miner.py
general_extractor.py
hallways.py
hlc.py
hook_shell.py
hooks_cli.py
i18n/
__init__.py
be.json
de.json
en.json
es.json
fr.json
hi.json
id.json
it.json
ja.json
ko.json
pt-br.json
ru.json
zh-CN.json
zh-TW.json
ids.py
instructions/
instructions_cli.py
help.md
init.md
mine.md
search.md
status.md
knowledge_graph.py
layers.py
llm_client.py
llm_refine.py
logstream.py
logsync.py
mcp_server.py
migrate.py
miner.py
normalize.py
onboarding.py
palace_graph.py
palace.py
project_scanner.py
py.typed
query_sanitizer.py
README.md
repair.py
replica.py
room_detector_local.py
searcher.py
server_registry.py
service.py
sources/
__init__.py
base.py
context.py
registry.py
transforms.py
spellcheck.py
split_mega_files.py
sweeper.py
sync.py
transport.py
version.py
wal.py
write_routing.py
MISSION.md
openarena-claim.txt
pyproject.toml
README.md
ROADMAP.md
rules/
mempalace-recall.mdc
scripts/
backfill_authored_at.py
docker-smoke.sh
mempalace_repair_encoding.py
SECURITY.md
skills/
mempalace/
mempalace-recall/
SKILL.md
... 220 moreFAQ
mempalace is a Claude Code plugin with 2 hand-picked skills for data work, indexed on Flowy. Install it with the command on its page. It includes mempalace-recall, mempalace. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.