# Deep Research: Agent Memory & Context Rot Solutions (2026) ## Executive Summary LLM-basierte Agenten verlieren ihren Zustand bei Context-Compression, weil Token-Limits durch verlustbehaftete Summarization oder naive Truncation "gelöst" werden. Die Lösung ist kein größeres Kontextfenster, sondern **hierarchisches, strukturiertes Memory-Management** über mehrere Tiers — von Working Memory (aktiver Prompt) bis Long-Term Memory (Vektor-Store + Knowledge Graph). Projekte wie **Letta** (OS-ähnliches Memory), **Mem0** (Multi-Level Personal Memory), und **Zep** (asynchrone Long-Term Context) adressieren das Problem aktiv. Für Hermes Agent bedeutet das: Memory muss von flachem Key-Value zu strukturierten, gelabelten Blöcken mit Entity-Linking und temporaler Abfrage werden. --- ## 1. Context Rot: Warum Agenten ihren Zustand verlieren ### Technische Ursachen | Mechanismus | Beschreibung | Auswirkung | |------------|-------------|------------| | **Token-Limits** | Jedes LLM hat festes Kontextfenster (4K–2M Tokens) | Ältere Nachrichten müssen entfernt werden | | **Naive Truncation** | Einfaches Abschneiden alter Nachrichten | Kompletter Verlust aller Informationen vor dem Cutoff | | **Summarization** | KI-generierte Zusammenfassung bei ~90% Auslastung | Verlust von Details, Nuancen, implizitem Zustand | | **Sliding Window** | FIFO-Buffer, alte Nachrichten fallen raus | Keine Persistenz, keine Rückwärtsnavigation | | **Session Reset** | Neue Session = leerer Kontext | Totaler Zustandsverlust ohne Memory-Injection | ### Warum Summarization zerstört Die meisten Frameworks (LangChain, etc.) ersetzen bei Erreichen eines Schwellenwerts (typisch 90% des Kontextfensters) die ältesten Nachrichten durch eine einzelne Zusammenfassung. Das Problem: - **Verlust von Tool-Konfigurationen**: "Wir haben gerade Docker-Compose auf Port 8080 konfiguriert" → "Docker wurde erwähnt" - **Verlust von Präferenzen**: "Nutzer hasst Bullet-Points, mag Tabellen mit │" → "Nutzer hat Formatierungspräferenzen" - **Verlust von Projekt-Zustand**: "Wir arbeiten an Zeile 47 in auth.service.ts" → "Es wurde an Authentifizierung gearbeitet" - **Halluzinationen**: Der Agent "ratet", was vorher passiert ist, anstatt es zu wissen ### Der Hermes-spezifische Schmerz Hermes nutzt `session_search` für vergangene Sessions, aber: - **Keine automatische Memory-Extraktion**: Wichtige Fakten werden nicht automatisch aus Sessions gezogen - **Kein Entity-Linking**: "Projekt X" in Session A und "Projekt X" in Session B sind nicht verknüpft - **Keine Temporalität**: "Was war der letzte Stand?" kann nicht beantwortet werden - **Memory-Tool ist manuell**: Der Nutzer muss aktiv `memory` aufrufen, um etwas zu speichern - **Keine hierarchische Struktur**: Alles ist flaches Key-Value, keine gelabelten Blöcke --- ## 2. Memory-Architekturen für Agenten ### Memory-Typen (kognitive Psychologie) | Typ | Beschreibung | Beispiel für Agent | |-----|-------------|-------------------| | **Episodic** | Konkrete Ereignisse/Episoden | "Session vom 3.6.2026: Wir haben den Kundenprozess für Waldseilgarten modelliert" | | **Semantic** | Fakten, Konzepte, Beziehungen | "Nutzer bevorzugt Tabellen mit │-Trennern, kein SAP B1" | | **Procedural** | Wie man Dinge tut | "Für ECC-Integration: erst CODING.md lesen, dann planen" | | **Working** | Aktiver, kurzfristiger Kontext | "Wir sind gerade bei Zeile 47 in auth.service.ts" | ### Speicher-Mechanismen | Mechanismus | Stärke | Schwäche | Beste für | |------------|--------|----------|-----------| | **Vector Stores** | Semantische Ähnlichkeitssuche | Keine strukturierten Beziehungen | Fakten, Dokumente, große Mengen | | **Knowledge Graphs** | Strukturierte Beziehungen, Reasoning | Aufbau-Komplexität | Entitäten, Beziehungen, Projekte | | **Structured Memory** | Typisierte Blöcke, Labels | Weniger flexibel als Vektor-Store | User-Prefs, Projekt-State, Skills | | **Key-Value (current)** | Einfach, schnell | Keine Semantik, keine Verknüpfung | Einfache Fakten, kurze Notizen | --- ## 3. Projekte & Frameworks im Detail ### Letta (ehemals MemGPT) — OS-ähnliches Memory | Aspekt | Details | |--------|---------| | **GitHub** | `letta-ai/letta` | | **Kernidee** | Virtuelles Kontextfenster: Agent "denkt", er hat unendlichen Kontext, aber nur ein Subset ist im Prompt | | **Memory Blocks** | Strukturierte, gelabelte Blöcke: `human`, `persona`, `project`, `preferences` | | **Summarization** | Automatisch bei 90% Auslastung (`SUMMARIZATION_TRIGGER_MULTIPLIER = 0.9`) | | **Passage Manager** | Alle Nachrichten persistent gespeichert, auch nach Summarization | | **In-Context Messages** | Nur aktives Subset im Prompt, Rest aus DB geladen | | **Self-Management** | Eigene Memory-Tools: `core_memory_append`, `core_memory_replace`, `core_memory_delete` | | **Tool-Integration** | Agent kann selbst entscheiden, was wichtig ist und speichern | **Relevanz für Hermes**: Letta zeigt, dass Memory nicht passiv sein darf. Der Agent muss aktiv sein eigenes Memory verwalten können — nicht nur der Nutzer. ### Mem0 — The Memory Layer for Personalized AI | Aspekt | Details | |--------|---------| | **GitHub** | `mem0ai/mem0` | | **Kernidee** | Multi-Level Memory für User, Session und Agent-State | | **Neuer Algorithmus (Apr 2026)** | Single-pass ADD-only Extraction, Entity Linking, Multi-Signal Retrieval | | **Retrieval** | Semantisch + BM25 + Entity Matching + Temporal Reasoning | | **Benchmarks** | 91.6 auf LoCoMo, 94.8 auf LongMemEval | | **Hybrid Search** | Kombination aus semantischer und Keyword-Suche | | **API** | Einfache REST-API für Integration in bestehende Agenten | **Relevanz für Hermes**: Mem0's Multi-Level-Approach passt perfekt zu Hermes' Profile-System. User-Memory + Session-Memory + Agent-State als separate Ebenen. ### Zep AI — Long-Term Context for AI Assistants | Aspekt | Details | |--------|---------| | **GitHub** | `getzep/zep-python` | | **Kernidee** | Asynchrone Memory-Verarbeitung, die den Chat nicht blockiert | | **Auto-Summaries** | Generiert Zusammenfassungen aus Chat-Historie im Hintergrund | | **Fact Extraction** | Extrahiert Fakten ohne vordefiniertes Schema | | **Document Collections** | Vektor-Suche über Dokumente | | **Prompt-Strukturierung** | Automatisches Hinzufügen von Recent Messages + Summary + Relevant Context | **Relevanz für Hermes**: Zep's asynchrone Verarbeitung wäre ideal für Hermes' Cronjob-System — Memory-Extraktion im Hintergrund, nicht in der aktiven Session. ### LangChain Memory — Modularer Ansatz | Memory-Typ | Funktion | |------------|----------| | `ConversationBufferMemory` | Speichert alle Nachrichten roh | | `ConversationSummaryMemory` | Summarisiert bei Overflow | | `VectorStoreRetrieverMemory` | RAG-basiertes Retrieval aus Vektor-Store | | `CombinedMemory` | Kombiniert mehrere Memory-Typen | **Relevanz für Hermes**: LangChain's modulares Design zeigt, dass Memory nicht entweder/oder sein muss. Mehrere Tiers gleichzeitig sind sinnvoll. ### AutoGPT — Historischer Pioneer | Aspekt | Details | |--------|---------| | **GitHub** | `Significant-Gravitas/AutoGPT` | | **Historisch** | Einer der ersten Agenten mit Memory-Ansatz (2023) | | **Memory-Backends** | Lokale JSON, Redis, Pinecone, Weaviate | | **Aktueller Fokus** | Platform/Forge statt klassisches Memory | --- ## 4. Praktische Ansätze & Patterns ### Memory-Tiers ``` ┌─────────────────────────────────────────────────────────────┐ │ TIER 1: WORKING MEMORY (Aktiver Prompt) │ │ • Aktuelle Nachrichten + relevante Kontext │ │ • 4K–128K Tokens (je nach Modell) │ │ • Schnellster Zugriff, höchste Relevanz │ ├─────────────────────────────────────────────────────────────┤ │ TIER 2: SHORT-TERM MEMORY (Letzte N Sessions) │ │ • Vollständige Nachrichten der letzten 5–10 Sessions │ │ • SQLite/JSON, schneller Zugriff │ │ • Für Rückfragen zu kürzlich abgeschlossenen Tasks │ ├─────────────────────────────────────────────────────────────┤ │ TIER 3: LONG-TERM MEMORY (Vektor-Store + Graph) │ │ • Embeddings für semantische Suche │ │ • Knowledge Graph für Beziehungen │ │ • Fakten, Präferenzen, Projekt-Zustände │ ├─────────────────────────────────────────────────────────────┤ │ TIER 4: ARCHIVE (Vollständige Historie) │ │ • Alle Sessions, alle Nachrichten │ │ • Nur bei Bedarf durchsucht (langsame Suche) │ │ • Compliance, Audit, vollständige Rekonstruktion │ └─────────────────────────────────────────────────────────────┘ ``` ### Hierarchical Memory - **Session-Ebene**: Volle Nachrichten, aktueller Zustand - **Tages-Ebene**: Zusammenfassung der Sessions eines Tages - **Wochen-Ebene**: Zusammenfassung der Projekte einer Woche - **Monats-Ebene**: Langfristige Trends, gelernte Präferenzen ### Checkpoint/Restore - Agent-State wird nach jedem signifikanten Schritt persistiert - Bei Context-Overflow oder Fehler: Restore auf letzten Checkpoint - Hermes-Analogon: `session_search` + Memory-Tool, aber automatisch ### Session Bridging - Beim Start neuer Session: Relevante Memories aus vorherigen Sessions laden - "Memory Injection": System-Prompt wird mit relevantem Kontext angereichert - Hermes-Analogon: Aktuell manuell über `memory` tool, nicht automatisch ### Memory Injection Patterns | Pattern | Beschreibung | Wann nutzen | |---------|-------------|-------------| | **RAG-Style** | Retrieve relevante Memories → Inject in Prompt | Große Memory-Mengen, semantische Suche | | **Structured Blocks** | Typisierte Memory-Blöcke mit festen Labels | User-Prefs, Projekt-State, wiederkehrende Daten | | **Self-Management** | Agent entscheidet selbst, was gespeichert/gelesen wird | Komplexe, langlebige Agenten | | **Hybrid** | Kombination aus RAG + Structured + Self-Management | Produktions-Agenten (Letta, Mem0) | --- ## 5. Hermes-spezifische Analyse & Empfehlungen ### Was Hermes bereits hat | Feature | Status | Bewertung | |---------|--------|-----------| | `memory` Tool | ✅ Manuell | Nutzer muss aktiv speichern | | `session_search` | ✅ FTS5-basiert | Gut für Discovery, schlecht für State | | `skills` System | ✅ Wiederverwendbar | Prozedurales Memory, aber statisch | | `profile` System | ✅ Isoliert | Keine Cross-Profile Memory-Sync | | `cronjob` | ✅ Scheduler | Könnte Memory-Extraktion im Hintergrund machen | | `MEMORY.md` | ✅ Manuell | Nutzer muss selbst kuratieren | ### Was Hermes braucht | Priorität | Feature | Beschreibung | Umsetzung | |-----------|---------|------------|-----------| | **P0** | **Auto-Extraction** | Automatisches Extrahieren von Fakten aus Sessions | Cronjob nach jeder Session | | **P0** | **Structured Blocks** | Gelabelte Memory-Blöcke statt flaches Key-Value | `memory` Tool erweitern | | **P1** | **Entity Linking** | Verknüpfung von Memories über Entitäten | Projekt-Namen, Personen, Konzepte | | **P1** | **Temporal Memory** | Zeitbewusstes Retrieval | "Was war der letzte Stand von X?" | | **P1** | **Multi-Tier** | Unterschiedliche Speicher-Ebenen | Working → Short-Term → Long-Term | | **P2** | **Self-Management** | Agent kann selbst Memory verwalten | Memory-Tools für Agenten | | **P2** | **Summarization-Persistenz** | Zusammenfassungen bei Compression speichern | Nicht verwerfen, sondern archivieren | ### Konkrete Umsetzungsvorschläge für Hermes #### 1. Memory-Block-Schema (erweitertes `memory` Tool) ```yaml # Statt: memory: "User prefers tables with │ separators" # Besser: memory_block: type: "user_preference" category: "formatting" key: "table_style" value: "compact with │ separators" source: "session_2026-06-03" confidence: 0.95 entities: ["Flo"] ``` #### 2. Auto-Extraction Cronjob ```yaml # Nach jeder Session: cronjob: schedule: "after_session_end" action: "extract_memories" # Extrahiert automatisch: # - User preferences (Formatierung, Workflow) # - Project state (aktuelle Dateien, offene Tasks) # - Learned patterns (was hat funktioniert, was nicht) # - Entity relationships (Projekt X → Datei Y → Config Z) ``` #### 3. Entity-Linking Graph ``` [User: Flo] --prefers--> [Format: Tables with │] [User: Flo] --works_on--> [Project: waldseilgarten-crm] [Project: waldseilgarten-crm] --has_file--> [File: docker-compose.yml] [Project: waldseilgarten-crm] --uses--> [Tech: NestJS + React] [Session: 2026-06-03] --discussed--> [Topic: Kundenprozess] ``` #### 4. Session-Start Memory-Injection ``` # Bevor die Session startet: 1. Suche relevante Memories für aktuellen Kontext 2. Lade Project-State (letzter Stand) 3. Lade User-Preferences (Formatierung, Workflow) 4. Lade offene Tasks / TODOs 5. Injected in System-Prompt ``` --- ## 6. Vergleich: Bestehende Lösungen | Projekt | Memory-Typ | Self-Mgmt | Multi-Tier | Entity-Linking | Temporal | Integration | Open Source | |---------|-----------|-----------|------------|----------------|----------|-------------|-------------| | **Letta** | Structured Blocks | ✅ | ✅ | ✅ | ✅ | Python SDK | ✅ | | **Mem0** | Multi-Level | ❌ | ✅ | ✅ | ✅ | REST API | ✅ | | **Zep** | Async + Facts | ❌ | ✅ | ✅ | ✅ | Python/JS SDK | ✅ | | **LangChain** | Modular | ❌ | ✅ | ❌ | ❌ | Python/JS | ✅ | | **AutoGPT** | Configurable | ❌ | ❌ | ❌ | ❌ | Python | ✅ | | **Hermes (current)** | Key-Value | ❌ | ❌ | ❌ | ❌ | Built-in | ✅ | --- ## 7. Empfehlungen für Hermes ### Kurzfristig (1–2 Wochen) 1. **Memory-Blocks erweitern**: `memory` Tool um `type`, `category`, `entities` erweitern 2. **Auto-Extraction-Prototype**: Cronjob, der nach Sessions automatisch Fakten extrahiert (basierend auf `session_search` + LLM-Summarization) 3. **Project-State-Memory**: Automatisches Speichern von aktuellem Projekt, offenen Dateien, letzten Änderungen ### Mittelfristig (1–2 Monate) 1. **Entity-Linking**: Einfacher Graph, der Projekte, Dateien, Personen, Konzepte verknüpft 2. **Multi-Tier Memory**: SQLite für Short-Term, Vektor-Store (Chroma/Qdrant) für Long-Term 3. **Session-Start Injection**: Automatisches Laden relevanter Memories beim Session-Start ### Langfristig (3–6 Monate) 1. **Self-Management**: Agent kann selbst entscheiden, was wichtig ist 2. **Hierarchical Summarization**: Tages-/Wochen-/Monats-Zusammenfassungen 3. **Cross-Profile Memory**: Geteilte Fakten über Profile hinweg (User-Prefs bleiben gleich) --- ## 8. Quellen & Referenzen ### Primärquellen (GitHub) | Projekt | URL | Analysierte Dateien | |---------|-----|---------------------| | **Letta** | `https://github.com/letta-ai/letta` | `letta/agent.py`, `letta/memory.py`, `letta/system.py`, `letta/persistence_manager.py` | | **Mem0** | `https://github.com/mem0ai/mem0` | `mem0/memory/main.py`, `mem0/configs/base.py`, `mem0/utils/main.py` | | **Zep** | `https://github.com/getzep/zep-python` | `zep_python/client.py`, `zep_python/memory.py` | | **AutoGPT** | `https://github.com/Significant-Gravitas/AutoGPT` | `autogpt/memory/` | | **LangChain** | `https://github.com/langchain-ai/langchain` | `langchain/memory/` | ### Dokumentation - Letta Docs: `https://docs.letta.com/` — Memory Blocks, System Prompts, Tool Integration - Mem0 Docs: `https://docs.mem0.ai/` — Memory Layer, Multi-Level Architecture, API Reference - Zep Docs: `https://docs.getzep.com/` — Long-Term Memory, Fact Extraction, Async Processing - LangChain Memory: `https://python.langchain.com/docs/modules/memory/` — Buffer, Summary, Vector Store ### Papers & Benchmarks - LoCoMo Benchmark: Long-Context Memory Evaluation - LongMemEval: Long-term Memory Evaluation for Conversational Agents - Mem0 Benchmarks (Apr 2026): 91.6 LoCoMo, 94.8 LongMemEval ### Hermes-Intern - `memory` Tool: `~/.hermes/memory/` (user + memory stores) - `session_search`: SQLite FTS5 in `~/.hermes/sessions.db` - `skills`: `~/.hermes/skills/` (prozedurales Memory) - `cronjob`: `~/.hermes/cron/` (Scheduler für Background-Tasks) --- *Recherche durchgeführt: Juni 2026* *SearXNG war für API-Anfragen nicht verfügbar (403 Forbidden), daher primär über direkte GitHub-Source-Analyse*