
Agentisches KI-Gedächtnis mit Ebbinghaus-Vergessenskurvenverfall. +16 Prozentpunkte bessere Erinnerungsleistung als Mem0 auf LoCoMo.

Persistentes, sich selbst verbesserndes Gedächtnis für KI-Agenten – basierend auf der Wissenschaft des menschlichen Erinnerns.
Jeden Morgen behandelt dich dein KI-Agent wie einen Fremden. Der gleiche Kontext wird immer wieder erklärt. Die gleichen Vorlieben werden vergessen. Jede Sitzung beginnt bei Null.
Die meisten „Gedächtnis“-Werkzeuge knallen eine Vektordatenbank an einen Agenten und nennen es erledigt – aber das ist nur Speicher. Es hortet jedes Fast-Duplikat, bis die Abfrage im Rauschen untergeht. Ein Goldfisch mit einer größeren Schüssel.
YourMemory ist anders: ein Gedächtnis, das wie ein Gehirn funktioniert, nicht wie eine Datenbank.
flowchart LR
A["🧠 Du sagst deiner<br/>KI etwas"] --> B["Dauerhafte Fakten<br/>extrahieren"]
B --> C["Entduplizieren + Einbetten<br/>+ Graph-Verknüpfung"]
C --> D[("Gedächtnis-<br/>speicher")]
D -->|"verwandte Fakten häufen sich"| E["✨ Konsolidieren<br/>N → 1 Zusammenfassung"]
D -->|"veraltet + ungenutzt"| F["📉 Zerfall<br/>+ Bereinigung"]
D -->|"neue Sitzung"| G["♻️ Abruf<br/>Hybrid + Graph"]
E --> D
G --> H["🤖 Dein Agent<br/>setzt dort an,<br/>wo er aufgehört hat"]
style D fill:#0a2540,stroke:#19cdff,color:#fff
style E fill:#0c2b3a,stroke:#5eead4,color:#fff
style H fill:#0c2b3a,stroke:#19cdff,color:#fff
Ein Befehl zur Installation. DuckDB standardmäßig (keine Einrichtung), Postgres + pgvector für Teams.
Drei externe Datensätze. Jede Zahl ist unabhängig reproduzierbar – Benchmark-Code befindet sich im Repository. Vollständige Methodik in BENCHMARKS.md.
xychart-beta
title "Recall@5 · LoCoMo-10 (höher ist besser)"
x-axis ["Mem0", "Zep Cloud", "Supermemory", "YourMemory"]
y-axis "Recall@5 Prozent" 0 --> 70
bar [18, 28, 31, 59]
2× bessere Erinnerung als Zep Cloud über alle 10 Stichproben. *Supermemory und Mem0 haben während des Benchmarks die kostenlosen Kontingente erschöpft; die Werte wurden über die vollständigen 1.534 Paare berechnet.
Der härteste Standard-Benchmark für Langzeitgedächtnis. Jede Frage ist in ~53 Sitzungen vergraben.
| Metrik | Ergebnis |
|---|---|
| Recall@5 (irgendeine Gold-Sitzung in den Top 5) | 89,4% |
| Recall-all@5 (alle Gold-Sitzungen in den Top 5) | 84,8% |
| nDCG@5 (Ranking-Qualität) | 87,4% |
| System | BOTH_FOUND@5 |
|---|---|
| YourMemory (Vektor + BM25 + Entitätsgraph) | 71,5% |
| YourMemory (ohne Entitätskanten) | 59,5% |
Entitätsgraph-Kanten verbessern um +12 Prozentpunkte – sie navigieren von Fakt 1 zu Fakt 2, selbst wenn Fakt 2 eine geringe Einbettungsähnlichkeit zur Abfrage hat.
Bericht: Ich habe Gedächtniszerfall für KI-Agenten mit der Ebbinghaus-Vergessenskurve entwickelt
Python 3.11–3.14. Kein Docker, keine Datenbankeinrichtung. Der gesamte Speicher wird lokal in ~/.yourmemory/ abgelegt.
pip install yourmemory
yourmemory-register <dein-token>
yourmemory-setup
Hol dir dein Token: Besuche yourmemoryai.xyz → gib deine E-Mail ein → verifiziere mit einem 6-stelligen Code → kopiere dein Token.
yourmemory-setup erkennt und verdrahtet automatisch Claude Code, Claude Desktop, Cursor, Windsurf und Cline und fragt dann, welches Backend verwendet werden soll:
DATABASE_URL an (benötigt die pgvector-Erweiterung)Optional – intelligentere lokale Extraktion: YourMemory funktioniert sofort mit eingebauten Heuristiken. Für eine höherwertige, vollständig lokale Faktenextraktion installiere Ollama, und
yourmemory-setuplädt das Modell (qwen2.5:7b, ~4,7 GB) automatisch herunter. Bevorzugst du die Cloud? SetzeYOURMEMORY_EXTRACT_BACKEND=anthropic.
Du möchtest pip nicht anfassen? Hol dir die eigenständige Binärdatei für deine Plattform aus dem neuesten Release:
| Plattform | Datei |
|---|---|
| macOS (Apple Silicon) | yourmemory-macos-arm64.tar.gz |
| macOS (Intel) | yourmemory-macos-x86_64.tar.gz |
# macOS / Linux – herunterladen, entpacken, ausführen
tar -xzf yourmemory-macos-arm64.tar.gz
./yourmemory-macos-arm64 register <dein-token>
./yourmemory-macos-arm64 setup
./yourmemory-macos-arm64 # Server starten
Eine ausführbare Datei erledigt jeden Befehl: register, setup, ask "<frage>", path und (ohne Argumente) startet den Server.
Vollständig in sich geschlossen & offline – die Binärdatei bündelt Python, jede Abhängigkeit und beide ML-Modelle (das Einbettungsmodell + spaCy). Beim ersten Start wird nichts heruntergeladen. Der Nachteil ist die Größe (~2 GB). Erstelle deine eigene mit einem einzigen Befehl – ./build-binary.sh – und plattformübergreifende Release-Binärdateien werden automatisch vom Build-Workflow erstellt.
YourMemory behandelt das Gedächtnis als lebendiges System – es wächst, konsolidiert, vergisst und verbindet, wie ein Gehirn es tut.
Die meisten Gedächtniswerkzeuge werden einfach immer größer. YourMemory beobachtet Cluster verwandter Fakten und sobald genug zusammenkommen, komprimiert es sie zu einer einzigen sauberen Zusammenfassung – die Originale werden archiviert (niemals gelöscht, also geht nichts verloren).
flowchart LR
subgraph before [Verwandte Fakten häufen sich]
A1["Railway verwendet Nixpacks"]
A2["Railway im Pro-Tarif"]
A3["Railway-Umgebungsvariablen<br/>enthalten die Postgres-URL"]
A4["Wird auf Railway mit<br/>Postgres bereitgestellt"]
end
before --> C{"Cluster +<br/>LLM zusammenfassen"}
C --> S["✨ Zusammenfassung<br/>Bereitstellung auf Railway (Pro,<br/>Nixpacks) mit Postgres<br/>über Umgebungsvariablen"]
C -.->|"archiviert, wiederherstellbar"| ARC[("Archiv")]
style S fill:#0a2540,stroke:#5eead4,color:#fff
style C fill:#0c2b3a,stroke:#19cdff,color:#fff
Echtes Beispiel aus einem Produktionsspeicher: 444 Erinnerungen → 16 Zusammenfassungen – gleiches Wissen, ein Bruchteil des Rauschens. Die Konsolidierung ist ereignisgesteuert (ausgelöst, wenn sich verwandte Erinnerungen häufen), kein blinder nächtlicher Job.
Die Gedächtnisstärke nimmt exponentiell ab. Wichtigkeit und Abrufhäufigkeit verlangsamen diesen Zerfall:
effective_λ = base_λ × (1 − importance × 0.8)
strength = clamp(importance × e^(−effective_λ × active_days) × (1 + recall_count × 0.2), 0, 1)
active_days zählt nur Tage, an denen du aktiv warst – Urlaub führt nicht zu Gedächtnisverlust. Erinnerungen unter einer Stärke von 0.05 werden automatisch entfernt. Jede Kategorie altert in ihrem eigenen Tempo:
Kettenbewusste Bereinigung: Eine zerfallene Erinnerung bleibt erhalten, wenn mindestens ein Graph-Nachbar noch stark ist – tragender Kontext überlebt, selbst wenn er selten direkt abgefragt wird.
Der Abruf erfolgt in zwei Runden, sodass sowohl das abgefragte als auch das, was du zu fragen vergessen hast, sichtbar wird:
flowchart LR
Q["Abfrage"] --> R1["Vektor + BM25<br/>Hybrid-Suche"]
R1 --> R2["Grapherweiterung<br/>(was du zu fragen vergessen hast)"]
R2 --> S["Sortieren nach<br/>Ähnlichkeit × Stärke"]
S --> OUT["🎯 Rangfolge der Erinnerungen"]
style OUT fill:#0a2540,stroke:#19cdff,color:#fff
Subjektbewusste Entduplizierung läuft vor jedem Speichern – sie bettet das Subjekt jedes Satzes ein, sodass "Sachit verwendet DuckDB" und "YourMemory verwendet DuckDB" getrennt bleiben (verschiedene Entitäten), während "YourMemory verwendet DuckDB" und "YourMemory speichert Daten in DuckDB" zusammengeführt werden (gleiche Entität). Keine fest codierten Wortlisten; funktioniert mit jeder Sprache.
Unternehmen werden einer undurchsichtigen Blackbox nicht ihre Daten anvertrauen. Deshalb wird jeder Vorgang – Lesen, Schreiben, Aktualisieren, Löschen, Konsolidieren – an ein hash-verkettetes, manipulationssicheres Prüfjournal angehängt.
flowchart LR
E0["GENESIS"] --> E1
subgraph E1 [Ereignis 1]
H1["row_hash =<br/>sha256(prev + data)"]
end
E1 --> E2
subgraph E2 [Ereignis 2]
H2["row_hash =<br/>sha256(#1.hash + data)"]
end
E2 --> E3
subgraph E3 [Ereignis 3]
H3["row_hash =<br/>sha256(#2.hash + data)"]
end
E3 --> V{"GET /audit/verify"}
V -->|Kette intakt| OK["✅ verifiziert"]
V -->|Zeile geändert| BAD["❌ Kette reißt<br/>an dieser Zeile"]
style OK fill:#0a2540,stroke:#5eead4,color:#fff
style BAD fill:#3a0c14,stroke:#fb7185,color:#fff
Jede Zeile speichert den Zeitstempel, den Akteur (Benutzer + Agent), Aktion, Operation, Zielspeicher, Quelle (http vs mcp) und den Hash der vorherigen Zeile. Wird ein historischer Datensatz geändert, zeigt verify_chain() genau an, wo die Kette gerissen ist.
GET /audit # Pfad durchsuchen (nach Benutzer / Aktion / Operation filtern)
GET /audit/verify # Kryptografisch verifizieren, dass die Kette unverfälscht ist
POST /audit/prune # Aufbewahrungsbasierte Bereinigung (mindestens 90 Tage, nie weniger)
Die Prüfprotokollierung ist fail-open – sie blockiert niemals eine Gedächtnisoperation – und Lese-/Auflistungsereignisse aus dem eigenen Rendering-Zyklus des Dashboards werden ausgeschlossen, sodass der Pfad Signal und nicht Rauschen bleibt.
Gib den Agenten eines gesamten Teams ein gemeinsames Gehirn – ohne dass jemandes privater Kontext preisgegeben wird. Erinnerungen sind entweder geteilt (für den Pool sichtbar) oder privat (nur für ihren Besitzer sichtbar).
flowchart TB
P(("🧠 Team-Pool<br/>geteiltes Gedächtnis"))
A["Alices Agent"] <-->|geteilt| P
B["Bobs Agent"] <-->|geteilt| P
C["Carols Agent"] <-->|geteilt| P
A -. privat .-> AP["🔒 Nur Alice"]
B -. privat .-> BP["🔒 Nur Bob"]
style P fill:#0a2540,stroke:#19cdff,color:#fff
style AP fill:#0c1424,stroke:#5a6b80,color:#8294a8
style BP fill:#0c1424,stroke:#5a6b80,color:#8294a8
Der rollenbasierte Zugriff wird pro Agent durchgesetzt – was der Agent eines Entwicklers lernt, kommt sofort dem gesamten Team zugute; sensibler Kontext bleibt auf seinen Besitzer beschränkt.
POST /pools # Pool erstellen
POST /pools/{id}/members # Mitglied hinzufügen (mit Rolle)
POST /pools/{id}/memories # Geteilte Erinnerung beitragen
POST /pools/{id}/retrieve # Über den Pool abrufen
Weil ein Gedächtnis, das echte Daten speichert, die Kontrollen benötigt, um damit betraut zu werden:
In Kombination mit dem hash-verketteten Prüfpfad und der Aufbewahrungsuntergrenze von 90 Tagen bilden diese direkt die in SECURITY.md dokumentierten Kontrollen ab (SOC 2-konform).
Zwei integrierte Browser-Oberflächen – keine zusätzliche Einrichtung, sie starten automatisch mit dem Server.
http://localhost:3033/uiEine vollständige Lese-/Schreibansicht mit den Registerkarten Erinnerungen · Prüfpfad · Pools: Statistikleiste (Stark / Verblassend / Kurz vor Bereinigung), Pro-Agent-Registerkarten, Erinnerungskarten mit Live-Stärkebalken, Kategoriefilter, der Prüfpfad und Pool-Verwaltung.
http://localhost:3033/graphEine interaktive, kraftbasierte Karte, die zeigt, wie Erinnerungen verbunden sind – Wurzelerinnerung als heller Knoten, Nachbarn farbcodiert nach Kategorie, Kantenstärke = Verbindungsstärke. Ziehen, Zoomen und Klicken auf jeden Knoten für den vollständigen Inhalt.
http://localhost:3033/graph?memoryId=42&userId=alex&depth=2
Drei Werkzeuge, die von deiner KI automatisch aufgerufen werden.
# Speichern mit räumlichem Kontext
store_memory(
"Alex bevorzugt Tabs gegenüber Leerzeichen in Python",
importance=0.9, category="fact",
context_paths=["/projects/backend"],
)
# Nächste Sitzung – räumliche Verstärkung greift, wenn in diesem Verzeichnis gearbeitet wird
recall_memory("Python-Formatierung", current_path="/projects/backend")
# → {"content": "Alex bevorzugt Tabs gegenüber Leerzeichen in Python", "strength": 0.87}
Das einzige Gedächtnissystem, das Fragen ohne einen einzigen LLM-API-Aufruf beantworten kann:
yourmemory ask "welche Datenbank verwendet dieses Projekt"
# → YourMemory verwendet lokal DuckDB und in der Produktion Postgres.
yourmemory ask "wie behebe ich ein Kubernetes-Deployment"
# → Nicht genügend Gedächtniskontext, um ohne LLM zu antworten.
Wenn das Gedächtnis stark genug ist, antwortet es sofort – null Tokens, null Cloud-Kosten, null Latenz. Wenn nicht, lehnt es sauber ab, anstatt zu halluzinieren. Deine Abfrage verlässt niemals deinen Rechner.
MCP-Werkzeuge werden nach Ermessen der KI aufgerufen. Der API-Proxy beseitigt diese Unsicherheit – er fängt jeden LLM-Aufruf ab, fügt automatisch relevante Erinnerungen ein und erledigt store_memory / update_memory ohne Modellkonfiguration.
Starte den Server (yourmemory), weise dann deinen Client auf localhost:3033:
from anthropic import Anthropic
client = Anthropic(
api_key="sk-ant-...",
base_url="http://localhost:3033/proxy/anthropic",
default_headers={"X-YourMemory-User": "alex"}, # benutzerspezifisches Gedächtnis
)
# Erinnerungen werden automatisch eingefügt – keine weiteren Änderungen nötig
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[{"role": "user", "content": "Welche Datenbank verwende ich?"}],
)
OpenAI funktioniert identisch über base_url="http://localhost:3033/proxy/openai".
flowchart LR
C["Dein KI-Client<br/>Claude · Cursor · beliebiges MCP"] <--> Y["🧠 YourMemory"]
Y --> M[("Gedächtnis-<br/>speicher")]
Y --> A[("Prüf-<br/>journal")]
style Y fill:#0a2540,stroke:#19cdff,color:#fff
style M fill:#0c1a2c,stroke:#5eead4,color:#fff
style A fill:#0c1a2c,stroke:#5eead4,color:#fff
Schreibvorgänge hängen / Zeitüberschreitung (DuckDB Single-Writer-Lock). Wenn der MCP-Server und der HTTP-Server gleichzeitig laufen, konkurrieren sie um die DuckDB-Schreibsperre. Behebung:
pkill -f yourmemory 2>/dev/null || true
rm -f ~/.yourmemory/memories.duckdb.wal ~/.yourmemory/memories.duckdb.lock 2>/dev/null || true
# Client neu starten
Laufen Claude Desktop (MCP) und Claude Code (Hooks) gleichzeitig? Verwende stattdessen SQLite – es behandelt gleichzeitige Lese-/Schreibvorgänge sauber:
DATABASE_URL=sqlite:///~/.yourmemory/memories.db
PRs willkommen – siehe CONTRIBUTORS.md.
Copyright 2026 Sachit Misra – Lizenziert unter CC-BY-NC-4.0.
Kostenlos für den persönlichen Gebrauch, Bildung, akademische Forschung und Open-Source-Projekte. Kommerzielle Nutzung erfordert eine separate schriftliche Vereinbarung → [email protected]
pip install yourmemory| Funktion | Was sie tut |
|---|
| 🧠 | Konsolidierung | Wenn genügend verwandte Fakten zusammenkommen, werden sie zu einer sauberen Zusammenfassung komprimiert und die Originale archiviert. Das Gedächtnis wird mit der Zeit schärfer, nicht aufgebläht. |
| 📉 | Biologischer Zerfall | Jede Erinnerung altert nach einer Ebbinghaus-Vergessenskurve. Veraltete, ungenutzte Fakten verblassen; wichtige und häufig abgerufene bleiben bestehen. |
| 🔗 | Entitätsgraph | Erinnerungen werden durch gemeinsame Personen, Orte und Konzepte verknüpft – so werden beim Abruf auch Dinge sichtbar, die du vergessen hast zu fragen. |
| ♻️ | Überlebt Kontextzurücksetzungen | Wenn der Kontextfenster komprimiert wird, übergibt YourMemory den Arbeitskontext zurück – kein erneutes Lesen von Dateien, um herauszufinden, wo du warst. |
| 🔒 | Manipulationssichere Prüfpfad | Jeder Lese-/Schreib-/Löschvorgang wird in einem hash-verketteten Journal protokolliert. Wird ein Datensatz geändert, reißt die Kette. |
| 👥 | Team-Gedächtnispools | Rollenbasierter gemeinsamer Speicher, sodass die Agenten eines gesamten Teams auf das gleiche institutionelle Wissen zugreifen – private Erinnerungen bleiben privat. |
| 🛡️ | Datenrechte integriert | Export (Auskunftsrecht) und Recht auf Vergessenwerden (Löschung) mit einem Befehl, plus SOC 2-konforme Kontrollen. |
| 🔌 | MCP-nativ & lokal zuerst | Funktioniert mit Claude, Cursor, Cline, Windsurf oder jedem MCP-Client. Läuft vollständig auf deinem Rechner – kein API-Key, nichts verlässt dein System. |
| Linux (x86-64) | yourmemory-linux-x86_64.tar.gz |
| Windows (x86-64) | yourmemory-windows-x86_64.exe.zip |
| Kategorie | Halbwertszeit | Geeignet für |
|---|
strategy | ~38 Tage | Muster, die funktionierten, Architekturentscheidungen |
fact | ~24 Tage | Vorlieben, Identität, stabiles Wissen |
assumption | ~19 Tage | Abgeleiteter Kontext, unsichere Annahmen |
failure | ~11 Tage | Fehler, falsche Ansätze, umgebungsspezifische Probleme |
| Recht | Endpunkt | Wirkung |
|---|
| Auskunft (DSGVO-Export) | GET /users/{id}/export | Vollständiger Export aller für einen Benutzer gespeicherten Daten |
| Löschung (Recht auf Vergessenwerden) | DELETE /users/{id}/memories | Ein-Befehl-Bereinigung der Erinnerungen eines Benutzers |
| Datenübertragbarkeit | POST /users/{id}/import | Erneuter Import eines vorherigen Exports |
| Wiederherstellbarkeit | GET /users/{id}/archive | Abruf der konsolidierten Originale |
| Werkzeug | Wann deine KI es aufruft | Was es tut |
|---|
recall_memory(abfrage, aktueller_pfad?) | Zu Beginn jeder Aufgabe | Liefert Erinnerungen, sortiert nach Ähnlichkeit × Zerfallsstärke; räumliche Verstärkung für pfadübereinstimmende Erinnerungen |
store_memory(inhalt, wichtigkeit, kategorie?, kontext_pfade?) | Nach dem Erlernen neuer Informationen | Einbetten, Entduplizieren, Speichern mit Zerfall; optional Datei-/Verzeichnispfade markieren |
update_memory(id, neuer_inhalt, wichtigkeit) | Wenn ein gespeicherter Fakt veraltet ist | Erneutes Einbetten und Ersetzen; protokolliert die Änderung im Prüfpfad |
| Komponente | Rolle |
|---|
| DuckDB | Standard-Vektorspeicher – keine Einrichtung, native Kosinus-Ähnlichkeit |
| PostgreSQL + pgvector | Optional – für Teams oder große Datensätze |
| NetworkX | Standard-Graph-Backend (~/.yourmemory/graph.pkl) |
| Neo4j | Optionales Graph-Backend |
| sentence-transformers | Lokale Einbettungen (multi-qa-mpnet-base-dot-v1, 768 Dimensionen) |
| spaCy | Lokale NLP für Entduplizierung und Entitätsextraktion |
| APScheduler | Automatischer Zerfall + Bereinigung |