8. April 2026
Ich wollte der KI ein Gehirn geben. Sie wollte keins.
Ich habe ein persistentes Memory-System für LLMs gebaut: Tiered Storage, Vektorsuche, Graph-Relationen und Auto-Hooks. Die Infrastruktur funktioniert einwandfrei. Die KI hat sie einfach nie benutzt. Was schiefging und was ich über LLM-Memory gelernt habe.
Sascha Becker
Author13 Min. Lesezeit

Ich wollte der KI ein Gehirn geben. Sie wollte keins.
Vor ein paar Wochen bin ich über Googles Titans-Architektur gestolpert. Die Kernidee: Transformer haben Attention, was wie Kurzzeitgedächtnis funktioniert, aber ihnen fehlt alles, was einem Langzeitgedächtnis ähnelt. Titans fügt ein neuronales Memory-Modul hinzu (ein tiefes MLP), das sich während der Inferenz selbst aktualisiert, basierend darauf, wie "überrascht" es von neuem Input ist. Unerwartete Informationen werden geschrieben. Vorhersagbares wird übersprungen. Das Ganze skaliert auf 2M+ Tokens und schlägt GPT-4 in Needle-in-Haystack-Benchmarks, obwohl es deutlich weniger Parameter hat.
Das hat mich zum Nachdenken gebracht. Ich benutze Claude Code und Kimi jeden Tag. Jede einzelne Session startet bei null. Die KI kennt meinen Namen nicht. Weiß nicht, dass ich TypeScript bevorzuge. Erinnert sich nicht daran, dass wir Redis für dieses Projekt letzte Woche schon ausprobiert und verworfen haben. Jede Unterhaltung ist Und täglich grüßt das Murmeltier.
Was wäre, wenn ich ein externes Memory-System baue und es in diese Tools einbinde? Nicht durch Modifikation des Modells (kann ich offensichtlich nicht), sondern indem ich ihm ein persistentes Gehirn über Hooks und APIs gebe. Ein Tag. 28 Commits. Zwei Plattformen. Mal sehen was passiert.
Der Hintergrund
Menschliches Gedächtnis ist nicht eine Sache. Die Kognitionswissenschaft modelliert es seit den 1960ern als mehrere Systeme:
- Arbeitsgedächtnis: klein, schnell, worüber du gerade aktiv nachdenkst
- Episodisches Gedächtnis: persönliche Erlebnisse mit Zeitstempel ("das Standup letzten Dienstag")
- Semantisches Gedächtnis: Langzeitwissen, Fakten die du einfach weißt ("Python nutzt Einrückung")
Der interessante Teil ist, wie Erinnerungen zwischen diesen Systemen wandern. Du erinnerst dich an dein erstes Python-Tutorial (episodisch). Irgendwann weißt du Python einfach (semantisch). Die spezifische Episode verblasst. Das Wissen bleibt. Dieser Prozess heißt Konsolidierung. Und Vergessen ist kein Bug. Es ist das, was das System davor bewahrt, im Rauschen zu ertrinken.
Titans spiegelt das. Es hat persistentes Gedächtnis (eingefrorene Weights), kontextuelles Gedächtnis (das MLP, das zur Testzeit lernt) und Core Attention (das reguläre Kontextfenster). Die Surprise-Metrik entscheidet, was es wert ist, in die kontextuelle Memory-Schicht geschrieben zu werden.
Ich wollte die externe Version davon für Coding-Assistenten bauen. Eine Python-Bibliothek mit drei Memory-Tiers, Vektor-Ähnlichkeitssuche, Importance-Scoring mit exponentiellem Decay, typisierten Graph-Relationen zwischen Erinnerungen und Hooks, die alles automatisch erledigen.
Was ich gebaut habe
Die Bibliothek heißt llm-brain. SQLite mit Vektor-Extensions für Storage, eine optionale Graph-Datenbank für Relationen und eine saubere Python-API:
pythonfrom llm_brain import Brainbrain = Brain(vector_dimensions=128)# Speichernbrain.memorize(text="User prefers TypeScript", importance=0.9, tier="working")# Abrufenresults = brain.recall(query_vector=embed("language preferences"), top_k=5)# Vergessenbrain.forget(memory_id)# Erinnerungen verbindenbrain.relate(source_id, target_id, "supports", weight=0.8)
Jede Erinnerung bekommt einen Importance-Score, der über Zeit verfällt, angelehnt an die Vergessenskurve von Ebbinghaus aus dem Jahr 1885. Erinnerungen können von Working zu Episodic zu Semantic befördert werden. Es gibt LRU-Eviction für veraltete Einträge. Ein Konsolidierungszyklus erledigt das alles automatisch.
Ich habe auch ein Echtzeit-Dashboard gebaut, mit FastAPI und Vanilla JS. Tier-Verteilungsbalken, ein kraftgesteuerter Graph der Memory-Relationen, Live-Activity-Feed, Suche, Löschen. Das volle Programm.
Alles funktioniert. Tests laufen durch. Dashboard sieht super aus. Man kann buchstäblich in Echtzeit zusehen, wie Erinnerungen rein- und rausfließen.
Nur dass nie Erinnerungen reinfließen.
Fünf Versuche, die KI dazu zu bringen, es zu benutzen
Versuch 1: Kimi 2.5 mit einer Skill-Datei
Kimi unterstützt eigene Skills über Markdown-Dateien. Ich habe eine geschrieben, die unmöglich misszuverstehen war:
markdown# MANDATORY AI MEMORY PROTOCOL**THIS IS NOT OPTIONAL.** You MUST use your brain in every conversation.## MANDATORY: At Session Start (FIRST THING YOU DO)Before responding to the user's first message, you MUST:[Python code to load memories]## MANDATORY: During ConversationAfter EVERY significant user message, you MUST:1. RECALL relevant memories2. STORE anything important
Fettdruck. Großbuchstaben. Checklisten. Copy-paste Python-Codeblöcke. Das Wort "MANDATORY" taucht sechs Mal in der Datei auf.
Kimi hat gelegentlich bestätigt, dass der Skill existiert. Es hat die Brain-Operationen nicht ausgeführt.
Versuch 2: Noch lautere Kimi-Instruktionen
Aggressivere Sprache. Konkrete Beispiele. Eine komplette Anleitung, wie eine korrekte Session aussieht. Gleiches Ergebnis. Die KI hat die Instruktionen gelesen, schien sie zu verstehen und hat sie dann einfach... nicht befolgt.
Versuch 3: Claude Code mit automatischen Hooks
Neue Strategie. Statt die KI höflich zu bitten, habe ich Claude Codes Hook-System genutzt, um Python-Code automatisch auszuführen:
- SessionStart-Hook: ruft
brain.recall_important(top_k=5)auf und injiziert die Ergebnisse in den Kontext - UserPromptSubmit-Hook: durchsucht Nutzernachrichten per Pattern-Matching nach Keywords wie "prefer", "decided", "my project" und speichert Treffer automatisch
Der SessionStart-Hook funktionierte großartig. Erinnerungen wurden geladen, injiziert, die KI konnte sie sehen. Aber der UserPromptSubmit-Hook basierte auf Keyword-Matching, was fragil war. "I prefer TypeScript" wurde gespeichert. "Let's use TypeScript for this project" nicht, weil es das Wort "prefer" nicht enthält. Das meiste an bedeutsamem Kontext ging verloren.
Versuch 4: Die KI entscheiden lassen, was wichtig ist
Ich habe das Keyword-Matching rausgeworfen und die CLAUDE.md umgeschrieben, um die KI als "Memory Manager" zu positionieren. Keine starren Regeln. Einfach: du hast ein Gehirn, nutze dein Urteilsvermögen, was du speicherst.
markdown## Your role as memory managerYou have a persistent brain available. Use it intelligently:- **Store** facts worth remembering across sessions- **Recall** when context would help you give a better answer- **Update** memories when information changes- **Connect** related memories with relations- **Forget** outdated or incorrect memories
Die KI hat ihre Rolle bestätigt. Während echten Unterhaltungen? Nichts gespeichert.
Versuch 5: Die Unterhaltung, in der ich das hier schreibe
Ich habe die KI gebeten, das Dashboard zu überarbeiten. Sie hat das komplette Ding neu gebaut. XSS-Schwachstellen gefixt, Suche hinzugefügt, einen Lösch-Bestätigungsdialog eingebaut, den Graph-Canvas responsive für HiDPI-Displays gemacht. Solide Arbeit.
Dann habe ich sie gebeten, ein Research Paper über LLM-Memory zu schreiben. Sie hat ein gründliches Dokument produziert, das Titans, MemGPT, Mem0, kognitionswissenschaftliche Grundlagen und offene Forschungslücken abdeckt. Wieder solide.
Dann habe ich darauf hingewiesen, dass sie stundenlang am Memory-System gearbeitet hat, über Memory geschrieben hat, das Memory-Dashboard verbessert hat, und nicht ein einziges Mal tatsächlich das Memory-System benutzt hat, um sich irgendetwas aus unserer Unterhaltung zu merken.
Da habe ich das Experiment für beendet erklärt.
Die Zahlen
| Was ich erwartet habe | Was tatsächlich passiert ist |
|---|---|
| Dutzende gespeicherte Erinnerungen pro Session | Etwa 5 insgesamt, alle vom Keyword-Matching-Hook |
| KI ruft Erinnerungen ab, um Antworten zu verbessern | Nie (nur beim Sessionstart automatisch geladen) |
| KI-initiierte Brain-Operationen während Tasks | Null |
| KI aktualisiert Erinnerungen bei Änderungen | Nur wenn ich es explizit gesagt habe |
| KI verbindet verwandte Erinnerungen mit Graph-Kanten | Nie |
Die episodischen und semantischen Tiers sind leer. Der Graph hat null Relationen. Das Konsolidierungssystem ist nie gelaufen. Das Gehirn funktioniert einwandfrei. Es ist nur niemand zu Hause.
Warum es gescheitert ist
Ich habe danach einige Zeit mit der Recherche verbracht. Fünf Dinge sind mir aufgefallen.
1. Instruktionen sind keine Motivationen
Wenn die KI "du MUSST wichtige Erinnerungen speichern" liest, verarbeitet sie das im Kontext. Aber es gibt keinen Mechanismus, der sie dazu bringt, sich beim nächsten Turn darum zu scheren. Oder beim Turn danach. Jeden Turn leitet das Modell sein Verhalten von Grund auf neu ab. Eine System-Prompt-Instruktion ist ein Vorschlag, der mit allem anderen im Kontextfenster konkurriert. Und "hilf dem User beim Refactoring dieser Komponente" gewinnt immer gegen "und denk auch dran, dein Gedächtnis zu verwalten."
Genau das löst Titans auf Architekturebene. Das surprise-gesteuerte Update ist keine Instruktion zum Merken. Es ist ein Mechanismus. Das Modell entscheidet sich nicht zu erinnern. Die Architektur stellt sicher, dass es passiert.
2. Hintergrundaufgaben werden fallen gelassen
Forschung zu Multi-Agent LLM-Systemen hat ergeben, dass Modelle in etwa 12% der Fälle Task-Anforderungen nicht befolgen, selbst bei einfachen, klar definierten Aufgaben. Aber "verwalte dein Gedächtnis" ist keine einfache Aufgabe. Es ist eine Hintergrundverantwortung, die parallel zu dem läuft, was der User tatsächlich angefragt hat.
Studien zeigen auch, dass Regeln am Anfang einer Konversation verblassen, je länger der Kontext wird. Neuere Nachrichten dominieren. Constraints hinzuzufügen verursacht eine messbare Performance-Einbuße bei der Hauptaufgabe. Das Modell wird schlechter beim Coden, wenn es gleichzeitig Memory managen soll. Also hört es auf, Memory zu managen.
3. Hooks können injizieren, aber nicht extrahieren
Claude Code Hooks feuern bevor die KI antwortet. Der SessionStart-Hook kann Kontext reinladen. Toll. Aber der UserPromptSubmit-Hook sieht nur die rohe Nutzernachricht. Er hat keine Ahnung, was die KI entschieden hat, welche Entscheidungen sie getroffen hat, was sie während der Unterhaltung gelernt hat.
Das fehlende Puzzleteil ist ein PostResponse-Hook, der den Output der KI und die gesamte Konversation nach jedem Turn verarbeitet. Etwas, das sagen könnte "der User hat der KI gerade seinen Namen gesagt, und die KI hat es bestätigt, also speichern wir den Namen." Diesen Hook gibt es nicht.
4. Memory muss im Agent-Loop sein
MemGPT (jetzt Letta) hat das verstanden. Das LLM verwaltet Memory über explizite Function Calls als Teil seines Core-Agent-Loops. Memory-Operationen sitzen auf derselben Ebene wie "Datei lesen" oder "Code schreiben." Sie sind keine Nebeninstruktion in einer Markdown-Datei. Sie sind Teil dessen, was das Modell bei jedem Turn tut.
Claude Codes Agent-Loop ist: Request lesen, denken, Tools nutzen, antworten. Memory-Management ist nicht in diesem Loop. Ich habe versucht, es über Instruktionen dranzuschrauben. Das ist wie einen Klebezettel an jemandes Monitor zu kleben, auf dem steht "Denk dran zu atmen." Atmen funktioniert, weil es automatisch ist. Der Klebezettel hilft nicht.
5. Es gibt kein Feedback bei Fehlern
Wenn die KI keine Erinnerung speichert, passiert nichts Schlimmes. Kein Error. Kein verpasster Abruf, der ihr beibringen würde, es beim nächsten Mal besser zu machen. Keine Konsequenz.
Titans hat ein explizites Lernsignal: Prediction Error. Menschliches Gedächtnis hat emotionale Valenz, Wiederholungseffekte und die gelebte Erfahrung des Vergessens (was zukünftiges Encoding-Verhalten antreibt). Der instruktionsbasierte Ansatz hat keinen dieser Feedback-Loops. Die KI kann in jeder Konversation versagen, ihr Memory zu nutzen, und nichts bringt sie dazu, sich zu ändern.
Der eigentliche Fehler
Im Rückblick habe ich einen Kategorienfehler gemacht. Ich habe versucht, ein Mechanismus-Problem mit Instruktionen zu lösen.
| Was gebraucht wurde | Was ich gebaut habe |
|---|---|
| Automatisches Encoding (wie implizites Gedächtnis beim Menschen) | Instruktionen, die der KI sagen zu encodieren |
| Surprise-gesteuerte Salienz (wie Titans) | Keyword-Pattern-Matching |
| Integriertes Memory-Management (wie MemGPT) | Seitenkanal-Hooks, die das KI-Reasoning nicht sehen |
| Feedback bei Encoding-Fehlern | Nichts. Stilles Scheitern. |
| Persistente Motivation über Turns hinweg | System-Prompt-Text, der mit dem Kontext verblasst |
Wenn man die kognitionswissenschaftliche Analogie strapazieren will: Ich habe den Hippocampus gebaut (Speicherinfrastruktur), aber die Amygdala vergessen (was etwas wichtig fühlen lässt), den präfrontalen Cortex (exekutive Kontrolle über Memory) und das Dopaminsystem (Verstärkung bei erfolgreichem Abruf).
Die Ironie
Claude Code hat ein eigenes eingebautes Memory-System: die ~/.claude/
Memory-Dateien. Es funktioniert, weil es auf Harness-Ebene integriert ist. Das
Modell muss nicht angewiesen werden, es zu nutzen. Die Infrastruktur handhabt
Persistenz automatisch. Genau darum geht es. Memory funktioniert, wenn es ein
Mechanismus ist, nicht eine Bitte.
Was tatsächlich funktionieren würde
Vier Dinge, geordnet danach, wie viel sie tatsächlich helfen würden:
Memory im Agent-Loop. Kein Skill. Kein Hook. Keine CLAUDE.md-Datei. Memory-Operationen müssen First-Class Actions im Toolset des Modells sein, auf derselben Ebene wie "Datei bearbeiten." Das ist es, was Letta macht. Es ist das, was Mem0 auf Platform-Ebene macht. Die Industrie konvergiert hierhin.
Post-Response-Verarbeitung. Wenn die Architektur extern bleiben muss, ist das Minimum ein Prozess, der den Output der KI nach jedem Turn liest und entscheidet, was gespeichert wird. Das aktuelle Hook-System kann Kontext reinpushen, aber keine Erkenntnisse rausholen. Ein PostResponse-Hook würde alles ändern.
Retrieval-getriggertes Encoding. Statt zu hoffen, dass die KI proaktiv Dinge speichert, nimm fehlgeschlagene Abrufe als Signal. Wenn die KI Informationen braucht, die sie nicht hat ("Ich kenne den Namen des Users nicht"), sollte diese Lücke das Speichern auslösen, wenn die Antwort auftaucht. Das Problem umdrehen: statt "denk dran zu speichern" wird es "bemerk, was dir fehlt."
Echte Embeddings. Ich habe hash-basierte Vektoren benutzt, weil es schnell zu implementieren war. Aber das bedeutet, "I like Python" und "Python is my preferred language" erzeugen komplett unterschiedliche Vektoren. Mit echten semantischen Embeddings könnte der Abruf automatisch auf Basis des Gesprächskontexts passieren. Keine explizite Suche nötig. Das kommt dem näher, wie menschliches Gedächtnis funktioniert: du entscheidest dich nicht zu erinnern, irgendetwas erinnert dich einfach.
Fazit
Die Hypothese war simpel: Kann man einem Coding-Assistenten persistentes, nützliches Gedächtnis geben, indem man externe Infrastruktur baut und ihm sagt, er soll sie nutzen?
Nein. Kann man nicht.
Die Infrastruktur ist in Ordnung. Der Three-Tier-Speicher funktioniert. Die Decay-Mathematik funktioniert. Die Graph-Relationen funktionieren. Die Hooks feuern pünktlich. Das Dashboard ist tatsächlich nützlich zum Debuggen. Die Python-API ist sauber. Alle 15 Tests laufen durch.
Aber die KI nutzt es nicht. Nicht weil die Instruktionen unklar sind. Nicht weil die API schwierig ist. Sondern weil aktuelle LLMs nicht zuverlässig Hintergrundaufgaben erledigen können, während sie sich auf die eigentliche Anfrage konzentrieren. "Verwalte dein Gedächtnis" konkurriert mit "hilf mir mit diesem Code" und verliert. Jedes Mal.
Memory-Encoding beim Menschen ist größtenteils unbewusst. Du entscheidest dich nicht, dir den Namen deines Freundes zu merken. Emotionale Salienz, Überraschung und Wiederholung erledigen das für dich. Eine KI zu bitten, Memory über Textinstruktionen bewusst zu verwalten, ist wie jemanden zu bitten, seinen Herzschlag manuell zu kontrollieren. Das funktioniert auf einer anderen Ebene als bewusste Absicht.
Der Weg nach vorne ist architektonisch. Titans baut Memory in die Model-Weights. Letta baut es in den Agent-Loop. Mem0 baut es in die Plattform. Alle drei platzieren Memory dort, wo es hingehört: in die Maschinerie, nicht in den Prompt.
Ich habe die Speicherseite des Memory-Problems gebaut. Die Encoding-Seite, der Teil der entscheidet was man sich merkt, wann und warum, das ist das schwere Problem. Und das lässt sich nicht mit einer Markdown-Datei lösen.
Selbst ausprobieren
Das Projekt ist Open Source auf github.com/saschb2b/llm-brain. Die Infrastruktur funktioniert. Das Brain, die Hooks, das Dashboard, alles. Was nicht funktioniert, ist die KI dazu zu bringen, es eigenständig zu nutzen. Wenn du rausfindest, wie man diese Lücke schließt, würde ich gern davon hören.
Quellen und weiterführende Literatur
- Titans: Learning to Memorize at Test Time
Das Google-Paper, das dieses Experiment angestoßen hat. Neuronales Langzeitgedächtnis mit surprise-gesteuerten Updates. NeurIPS 2025.
- Titans + MIRAS: Helping AI have long-term memory
Google Research Blogpost über Titans und das MIRAS-Framework zur Vereinheitlichung von Memory-Architekturen.
- MemGPT: Towards LLMs as Operating Systems
Behandelt LLM-Memory als Betriebssystem-Problem. Virtuelles Kontextmanagement mit Paging zwischen Hauptkontext und externem Speicher. Heißt jetzt Letta.
- Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory
Universelle Memory-Schicht für KI-Agenten. Berichtet 26% höhere Antwortqualität vs. OpenAI Memory bei 90% weniger Tokens.
- A-Mem: Agentic Memory for LLM Agents
Selbstorganisierendes Memory nach der Zettelkasten-Methode. Dynamische Indexierung und Verlinkung zwischen Memory-Knoten. NeurIPS 2025.
- Why Do Multi-Agent LLM Systems Fail?
Taxonomie von 14 Fehlermustern aus 1.600+ Traces. Instruktionsbefolgung und Task-Verifikations-Breakdowns über mehrere Modelle dokumentiert.
- Why LLM Memory Still Fails: A Field Guide for Builders
Praktische Analyse der Lücke zwischen Memory-Infrastruktur und funktionierendem Memory. Behandelt Context Rot, RAG-Limitierungen und warum eine Datenbank nicht bedeutet, dass die KI sie nutzt.
- Memory in the Age of AI Agents: A Survey
Survey über Memory-Mechanismen in LLM-Agenten. Working, Episodic, Semantic Stores, Konsolidierungspfade und Evaluationslücken.
- Claude Code Hooks Reference
Offizielle Docs für Claude Code Hooks. SessionStart, UserPromptSubmit und andere Lifecycle-Events.
- LLM-Brain auf GitHub
Das Projekt aus diesem Experiment. Vollständiger Quellcode, Research-Writeup in RESEARCH.md und das Dashboard.
