TIP
MemPalace wurde gemeinsam von der Schauspielerin Milla Jovovich (aus âDas fĂŒnfte Elementâ) und ihrem technischen Partner Ben Sigman entwickelt und ist ein rein lokales KI-Erinnerungssystem. Bei LongMemEval erreichte es im âraw verbatimâ-Modus 96,6% R@5 â ohne die ganze Zeit ĂŒber irgend eine externe API aufzurufen und völlig kostenlos. GitHub: milla-jovovich/mempalace
Mittlere Schwierigkeit · ca. 20 Minuten · Du erhĂ€ltst die komplette Deployment-Pipeline fĂŒr MemPalace, verstehst die Palace-Schichten und lernst, mit MCP ein beliebiges KI-System an das Speichersystem anzuschlieĂen.
Zielgruppe
1â3 Jahre Berufserfahrung als Entwickler:in, bereits mit KI-Programmier-Tools wie Claude Code / Cursor / Copilot gearbeitet. Ziel: Damit KI in langfristigen Projekten den Kontext behĂ€lt und nicht jedes Mal bei Null beginnt.
Kernerfordernisse und Umgebung
- Python: 3.9+
- KernabhÀngigkeiten:
chromadb>=0.5.0,<0.7ăpyyaml>=6.0 - Installation:
pip install mempalaceoderuv pip install mempalace - Betriebssystem: macOS / Linux / Windows (WSL ebenfalls)
- Speicher: ChromaDB (Vektor-DB) + SQLite (Wissensgraph), alles lokal, ohne Netzwerk
WARNING
MemPalace ist als reiner Local-Run konzipiert: Die Daten verlassen deine Maschine nicht. Bei der Erstinstallation wird zwar ChromaDB ĂŒber pip installiert, aber ChromaDB selbst benötigt keine Internetverbindung â es reicht, wenn du es korrekt importieren kannst.
VollstÀndige Projektstruktur
mempalace/
âââ mempalace/ # Kern-Python-Paket
â âââ cli.py # CLI-Entrypoint, routet zu mine/search/init usw.
â âââ mcp_server.py # MCP-Server, stellt 19 Tools bereit
â âââ knowledge_graph.py # Zeitlicher Wissensgraph (SQLite)
â âââ palace_graph.py # Palace-Navigationsgraph (BFS-Traversal, Tunnel-Findung)
â âââ convo_miner.py # Dialog-Mining, schneidet nach Q+A
â âââ miner.py # Projektdateien minen, schneidet nach AbsĂ€tzen
â âââ searcher.py # Semantische Suche (ChromaDB)
â âââ normalize.py # 5 Dialogformate vereinheitlichen
â âââ dialect.py # AAAK-Kompressionsdialekt
â âââ layers.py # Vier-Schichten-Speicher-Stack (L0âL3)
â âââ onboarding.py # Initialisierung per Onboarding
â âââ entity_detector.py # Automatisches Erkennen von Personennamen/Projektbezeichnungen
â âââ split_mega_files.py # Aufteilen und ZusammenfĂŒhren groĂer Sitzungsdateien
âââ hooks/ # Claude-Code-Auto-Save-Hooks
â âââ mempal_save_hook.sh # Speichert alle 15 Nachrichten automatisch
â âââ mempal_precompact_hook.sh # Notfall-Save vor Kontextkompression
âââ benchmarks/ # Reproduzierbare Benchmarks (LongMemEval / LoCoMo)
â âââ longmemeval_bench.py
â âââ locomo_bench.py
â âââ BENCHMARKS.md
âââ examples/
âââ basic_mining.py
âââ mcp_setup.md
Schritt-fĂŒr-Schritt
Step 1: Installation
pip install mempalace
Die niedrigste unterstĂŒtzte Python-Version ist 3.9. Nach der Installation prĂŒfen, ob es funktioniert:
mempalace --version
TIP
Wenn du uv nutzt: uv pip install mempalace â das Ergebnis ist identisch.
Step 2: Erinnerungspalast initialisieren
mempalace init ~/projects/myapp
Der init-Befehl startet den gefĂŒhrten Prozess und fragt nacheinander:
- die Personen, mit denen du hÀufig zusammenarbeitest (in die Wing-Konfiguration aufnehmen)
- das Projekt, an dem du arbeitest (pro Projekt ein wing)
- deine KI-IdentitÀt (wird in die L0-Schicht geschrieben)
Nach Abschluss des Onboardings werden zwei Konfigurationsdateien erzeugt:
~/.mempalace/config.jsonâ globale Konfiguration (u. a. palace-Pfad)~/.mempalace/wing_config.jsonâ Mapping zwischen wing und Keywords
Die erzeugte wing_config.json sieht ungefÀhr so aus:
{
"default_wing": "wing_general",
"wings": {
"wing_kai": { "type": "person", "keywords": ["kai", "kai's"] },
"wing_driftwood": { "type": "project", "keywords": ["driftwood", "analytics", "saas"] }
}
}
Wenn die KI startet, lÀdt sie nur L0 + L1 (ca. 170 Tokens) und weià so, wie deine Welt aussieht.
Step 3: Daten auswerten (Mining)
MemPalace unterstĂŒtzt zwei Mining-Modi â je nachdem, welche Datenquelle du verwendest.
Modus A: Projektdateien minen (Code, Dokumente, Notizen)
mempalace mine ~/projects/myapp
Der miner scannt das Verzeichnis rekursiv, schneidet nach AbsĂ€tzen und speichert in ChromaDB; die Drawer speichern den ursprĂŒnglichen Inhalt.
Modus B: Dialog-Exports minen (Claude/ChatGPT/Slack)
# Grundverwendung
mempalace mine ~/chats/ --mode convos
# Konkretes wing angeben, damit spÀter nach Projekt gefiltert werden kann
mempalace mine ~/chats/ --mode convos --wing myapp
# Automatische Klassifizierung aktivieren (extrahiert Entscheidungen, PrÀferenzen,
# Meilensteine, Problemfragen sowie emotionale Kontextinformationen)
mempalace mine ~/chats/ --mode convos --extract general
Der convo_miner schneidet die Dialoge nach Q+A, erkennt automatisch die room-Zugehörigkeit (ĂŒber 70+ Modi-Matching in room_detector_local.py, ohne API).
TIP
Wenn deine ChatGPT/Claude-Exportdatei aus mehreren Sitzungen besteht und diese zusammengefĂŒhrt sind, teile sie zuerst mit mempalace split ~/chats/ in Einzelsitzungsdateien auf â dann ist das Ergebnis deutlich besser.
Step 4: Semantische Suche zur Verifikation
Wenn das Mining abgeschlossen ist, probiere eine Suche:
mempalace search "why did we switch to GraphQL"
Mit wing-Filter, damit nur in einem bestimmten Projekt gesucht wird:
mempalace search "auth decision" --wing driftwood
Noch genauer: ZusÀtzlich room filtern:
mempalace search "auth decision" --wing driftwood --room auth-migration
ZurĂŒckgegeben wird der Originaltext aus dem Drawer (verbatim) â ohne Zusammenfassung und ohne Informationsverlust. ChromaDB macht die Vektor-Retrievals, Closet liefert die strukturierten Zusammenfassungen.
Step 5: MCP-Service anbinden
MCP (Model Context Protocol) macht MemPalace als Tool fĂŒr jede beliebige KI verfĂŒgbar. Einmal konfigurieren, fĂŒr immer aktiv.
Einbindung in Claude Code:
claude mcp add mempalace -- python -m mempalace.mcp_server
Nach der Konfiguration erhĂ€lt Claude Code automatisch 19 Tools; die KI ruft mempalace_search bei Bedarf selbst auf â du musst nicht manuell suchen.
Einbindung in Gemini CLI:
# siehe examples/gemini_cli_setup.md
claude mcp add mempalace -- python -m mempalace.mcp_server
Die Gemini CLI bietet fĂŒr MCP eine umfassendere UnterstĂŒtzung; auĂerdem können save hooks automatisch konfiguriert werden.
Liste der MCP-Tools (19):
| Tool | Zweck |
|---|---|
mempalace_status | Gibt das Gesamtbild des Palastes + AAAK-Protokoll zurĂŒck |
mempalace_list_wings | Listet alle wings und die Anzahl der Memory-EintrÀge auf |
mempalace_list_rooms | Listet alle rooms innerhalb eines wings auf |
mempalace_search | Semantische Suche, unterstĂŒtzt wing/room-Filter |
mempalace_kg_query | Fragt die zeitlichen Beziehungen von EntitÀten ab |
mempalace_kg_add | FĂŒgt Fakt-Dreiergruppen hinzu |
mempalace_kg_invalidate | Macht eine bestimmte Tatsache ungĂŒltig |
mempalace_kg_timeline | Erzeugt die zeitliche ErzÀhlung einer EntitÀt |
mempalace_diary_write | Agent schreibt AAAK-Tagebuch |
mempalace_diary_read | Agent liest AAAK-Tagebuch |
mempalace_traverse | BFS-Traversal innerhalb eines wings |
mempalace_find_tunnels | Findet Tunnel ĂŒber wings hinweg |
| ... | ... |
Die KI lernt automatisch AAAK-Syntax und den Memory-Mechanismus aus der Antwort von mempalace_status â ohne dass du manuell Prompts konfigurieren musst.
Step 6: Claude-Code-Auto-Save-Hooks konfigurieren
Mit den Hooks von Claude Code kann MemPalace bei jedem Dialog automatisch Erinnerungen speichern.
Passe ~/.claude/settings.json an (globale Konfiguration von Claude Code) und ergÀnze:
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "/path/to/mempalace/hooks/mempal_save_hook.sh"
}
]
}
],
"PreCompact": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "/path/to/mempalace/hooks/mempal_precompact_hook.sh"
}
]
}
]
}
}
Der Unterschied zwischen den beiden Hooks:
- Stop: Triggert alle 15 Nachrichten. Strukturierte Speicherung â Thema, Entscheidungen, Zitate sowie Code-Ănderungen werden vollstĂ€ndig erfasst. ZusĂ€tzlich wird die L1-Schicht neu aufgebaut (wichtige Faktenschicht).
- PreCompact: Triggert vor der Kontextkompression. Speichert als Notfall noch nicht gesicherte Erinnerungen, um zu vermeiden, dass beim Komprimieren wichtiger Kontext verloren geht.
WARNING
In Hook-Skripten sind Shell-Aufrufpfade enthalten. Es wird empfohlen, sie nach dem Clone an einer festen Stelle abzulegen und den Pfad in der Konfiguration einzutragen. Die Skripte fĂŒhren keine gefĂ€hrlichen Aktionen aus â sie schreiben nur strukturierte Erinnerungen in ChromaDB.
Step 7: Palace-Struktur verstehen
MemPalace basiert auf der Kernabstraktion âErinnerungspalastâ: inspiriert von den GedĂ€chtnistechniken antiker griechischer Redner, bei denen man mit rĂ€umlicher Struktur statt flacher Suchindizes arbeitet.
WING: kai (person)
ââââââââââââ ââhallââ ââââââââââââ
â auth-mig â â security â
ââââââŹââââââ ââââââââââââ
â
âŒ
ââââââââââââ ââââââââââââ
â Closet â ââââ¶ â Drawer â â Originaltext liegt hier
ââââââââââââ ââââââââââââ
TUNNEL (Verbindung ĂŒber wings hinweg):
kai/auth-mig ââ driftwood/auth-mig ââ priya/auth-mig
Wings: Eine Person oder ein Projekt â die Hauptkategorie der Erinnerungen. Unter jedem wing können mehrere rooms existieren.
Rooms: Konkrete Themen innerhalb eines wings, z. B. auth-migration, ci-pipeline, pricing. Wenn ein room mit demselben Namen in verschiedenen wings vorkommt, wird automatisch ein Tunnel erzeugt.
Halls: GĂ€nge fĂŒr Erinnerungstypen. Jeder wing hat dieselbe Menge an halls:
hall_factsâ festgeschlossene Entscheidungenhall_eventsâ Sitzungen, Meilensteine, Debugging-Prozessehall_discoveriesâ DurchbrĂŒche und neue Erkenntnissehall_preferencesâ Gewohnheiten, PrĂ€ferenzen, Meinungenhall_adviceâ Empfehlungen und Lösungen
Closets: Die Zusammenfassungsebene, die auf die Position des Originalinhalts (Drawer) zeigt. Der Originaltext geht nicht verloren â es kommt nur eine zusĂ€tzliche, navigierbare Strukturschicht hinzu.
Drawers: Ort der Aufbewahrung fĂŒr den Originaltext. Der âraw verbatimâ-Modus von MemPalace liest genau von hier den Originaltext aus und fĂŒhrt dann die Vektor-Suche aus â damit werden 96,6% R@5 erreicht.
Step 8: Zeitliche Beziehungen im Knowledge Graph nutzen
ChromaDB speichert Vektoren aus dem Originaltext; der Knowledge Graph (SQLite) speichert strukturierte Fakten-Dreiergruppen. Beide ergÀnzen sich.
from mempalace.knowledge_graph import KnowledgeGraph
kg = KnowledgeGraph()
# Fakten hinzufĂŒgen, inklusive GĂŒltigkeitszeitraum
kg.add_triple("Kai", "works_on", "Orion", valid_from="2025-06-01")
kg.add_triple("Maya", "assigned_to", "auth-migration", valid_from="2026-01-15")
kg.add_triple("Maya", "completed", "auth-migration", valid_from="2026-02-01")
# Abfragen, woran Kai gerade arbeitet
print(kg.query_entity("Kai"))
# â [Kai â works_on â Orion (current)]
# Abfragen, wie es am 2026-01-20 war (damals war Maya auth-migration noch nicht fertig)
print(kg.query_entity("Maya", as_of="2026-01-20"))
# â [Maya â assigned_to â auth-migration]
# Zeitleiste des Projekts Orion ansehen
print(kg.timeline("Orion"))
# â Faktenkette in zeitlicher Reihenfolge
# Maya wechselt das Projekt: alte Fakten werden ungĂŒltig
kg.invalidate("Maya", "assigned_to", "auth-migration", ended="2026-02-01")
# Jetzt gibt query_entity("Maya") kein auth-migration mehr zurĂŒck
Das GĂŒltigkeitsfenster (valid_from / ended) ist die KernfĂ€higkeit von MemPalace: Bei der Abfrage des historischen Zustands erfĂ€hrst du âwas damals passiert istâ, nicht âwas jetzt passiertâ.
Step 9: Vier-Schichten-Architektur des Memory-Stacks
MemPalace teilt die Retrieval-Strategie in vier Schichten auf. Je weiter oben, desto leichtergewichtig; je weiter unten, desto prÀziser:
| Ebene | Inhalt | GröĂe | Wann laden |
|---|---|---|---|
| L0 | KI-IdentitÀt (wer du bist) | ~50 Tokens | Bei jeder Sitzung |
| L1 | Wichtige Fakten (Team, Projekt, PrÀferenzen) | ~120 Tokens | Bei jeder Sitzung |
| L2 | Room-Recall (aktuelle, jĂŒngere Sitzungen des Projekts) | Nach Bedarf | Wenn das Thema L2 berĂŒhrt |
| L3 | Deep Search (vollstÀndige semantische Retrieval) | Nach Bedarf | Bei expliziten Fragen |
Wenn die KI startet, lÀdt sie zuerst L0 + L1 (mempalace wake-up); bereits nach 170 Tokens steht ein vollstÀndiger Hintergrundkontext. L2 wird nur geladen, wenn ein Thema einen bestimmten room triggert; L3 wird nur aktiviert, wenn explizit nach einer vollstÀndigen ChromaDB-Suche gefragt wird.
Das erklĂ€rt auch, warum MemPalace so geringe Kosten hat â $10/Jahr Suchkosten gegenĂŒber $507/Jahr fĂŒr die reine Zusammenfassungs-Variante.
HĂ€ufige Probleme beheben
Q1: Suchergebnisse sind leer, aber der Inhalt ist sicher vorhanden
In drei Schritten prĂŒfen:
# 1. PrĂŒfen, ob wing- und room-Namen korrekt sind
mempalace list-wings
mempalace list-rooms --wing myapp
# 2. Bereich erweitern, nicht wing/room einschrĂ€nken und Vollsuche durchfĂŒhren
mempalace search "SchlĂŒsselwort" # ohne --wing
# 3. PrĂŒfen, ob wirklich etwas in ChromaDB geschrieben wurde
mempalace status # Drawer-Gesamtzahl ansehen: ist sie 0?
Wenn mempalace status 0 Drawer anzeigt, ist das Mining vermutlich nicht erfolgreich gewesen â möglicherweise ist das Dialogformat nicht unterstĂŒtzt (derzeit unterstĂŒtzt: Claude Code JSONL, Claude.ai JSON, ChatGPT JSON, Slack JSON, plain text).
Q2: ChromaDB-Collection-Namenskonflikt
Der Standard-Collection-Name ist mempalace_drawers. Wenn du mehrfach init machst oder in verschiedenen Verzeichnissen arbeitest, kann es zu Konflikten kommen. In ~/.mempalace/config.json den Pfad explizit setzen:
{
"palace_path": "/custom/path/to/palace",
"collection_name": "mempalace_drawers"
}
Dann mit --palace <path> ĂŒberschreiben:
mempalace search "query" --palace /custom/path/to/palace
Q3: MCP-Verbindung schlÀgt fehl
Zuerst manuell verifizieren, dass der MCP-Service korrekt startet:
python -m mempalace.mcp_server
# Normalerweise wird nichts ausgegeben; im Vordergrund laufen lassen
# Ctrl+C zum Beenden
Wenn es einen ModuleNotFoundError gibt, prĂŒfe die korrekte Installation:
pip show mempalace
Wenn du ein Virtual Environment nutzt, stelle sicher, dass in der MCP-Konfiguration von Claude Code der korrekte Python-Pfad eingetragen ist:
which python # holt den richtigen Python-Pfad
claude mcp add mempalace -- /path/to/python -m mempalace.mcp_server
Q4: MCP-Toolaufrufe funktionieren, aber das Ergebnis entspricht nicht den Erwartungen
Wenn die KI mempalace_search aufruft, mĂŒssen die wing/room-Parameter exakt ĂŒbereinstimmen, um die Palace-Struktur maximal auszunutzen. FĂŒhre die KI im Prompt an, den korrekten Filter zu verwenden:
When searching for project-specific memories, always pass --wing <project>.
When searching for a specific topic, always pass --room <room-name>.
Q5: Hook-Skripte werden nicht getriggert
# PrĂŒfen, ob die hooks in Claude Code aktiviert sind
claude doctor
Stelle sicher, dass in settings.json die Hook-Pfade absolute Pfade sind. Relative Pfade können scheitern, weil Claude Code in unterschiedlichen Working Directories lÀuft.
Q6: Zeitliche Knowledge-Graph-Abfragen liefern unerwartete Ergebnisse
Zeitliche Abfragen hÀngen vom as_of-Parameterformat ab; das Datum muss YYYY-MM-DD sein:
# Falsches Format
kg.query_entity("Kai", as_of="2026/03/01")
# Korrektes Format
kg.query_entity("Kai", as_of="2026-03-01")
AuĂerdem prĂŒfen, ob du beim HinzufĂŒgen von Fakten mit add_triple valid_from ebenfalls im korrekten Format verwendet hast â sonst greift das zeitliche Fenster nicht.
WeiterfĂŒhrende LektĂŒre / Fortgeschrittene Richtungen
AAAK experimentelle Kompressionsschicht
AAAK ist eine verlustbehaftete AbkĂŒrzungs-Dialektvariante: Durch regulĂ€re Ersetzungen werden wiederkehrende EntitĂ€ten zu Code komprimiert. In groĂem MaĂstab (wenn dasselbe Projekt in hundertfacher Wiederholung erwĂ€hnt wird) kann es Token-Kosten sparen â aktuell ist der âraw verbatimâ-Modus (96,6%) jedoch immer noch besser als der AAAK-Modus (84,2%). Geeignet sind Szenarien mit langen Laufzeiten, mehreren Sitzungen und vielen wiederholten EntitĂ€ten.
Specialist Agents: Memory-Isolation durch Multi-Agent
Jeder Agent hat ein eigenes wing und ein AAAK-Tagebuch:
~/.mempalace/agents/
âââ reviewer.json # CodequalitĂ€t, Muster, Bugs
âââ architect.json # Architekturentscheidungen, Trade-offs
âââ ops.json # Deployment, AusfĂ€lle, Infrastruktur
Die KI entdeckt Agents zur Laufzeit dynamisch aus dem palace heraus â du musst keine Konfiguration in CLAUDE.md schreiben.
Benchmarks reproduzieren
Im benchmarks/-Verzeichnis liegen vollstĂ€ndige Reproduktionsskripte fĂŒr LongMemEval und LoCoMo:
python benchmarks/longmemeval_bench.py
Ăber den gesamten Lauf sind keine API-Keys nötig. Auf einem M2 Ultra lĂ€uft das Ganze in unter 5 Minuten durch und testet 500 Aufgaben â damit wird die Reproduzierbarkeit von 96,6% validiert.
Quervergleich mit anderen Systemen
| System | LongMemEval R@5 | API-Anforderung | Kosten |
|---|---|---|---|
| MemPalace (raw) | 96,6% | Keine | Kostenlos |
| MemPalace (hybrid + rerank) | 100% | Optional | Kostenlos |
| Mem0 | ~85% | Muss | $19â249/Monat |
| Zep | ~85% | Muss | $25/Monat+ |
| Mastra | 94,87% | Muss (GPT) | API-Kosten |
MemPalace ist die einzige Lösung, die ohne jegliche API-Aufrufe die höchste Punktzahl erreicht.