33fb180855
- README.md with project overview, status, architecture - AGENTS.md with agent context and conventions - .env.example with environment variables - docs/research/agent-memory-solutions-2026.md (full research) - docs/architecture/memory-tiers.md (4-tier architecture) - docs/decisions/ADR-001-structured-memory-blocks.md - Directory structure for src/, tests/, scripts/, logs/, data/
75 lines
2.0 KiB
Markdown
75 lines
2.0 KiB
Markdown
# ADR-001: Structured Memory Blocks
|
|
|
|
## Status
|
|
|
|
Accepted
|
|
|
|
## Kontext
|
|
|
|
Hermes Memory ist aktuell flaches Key-Value. Der Nutzer speichert manuell:
|
|
```
|
|
memory: "User prefers tables with │ separators"
|
|
```
|
|
|
|
Das Problem:
|
|
- Keine Typisierung (ist das eine Präferenz, ein Fakt, ein Projekt-State?)
|
|
- Keine Verknüpfung (welches Projekt? welche Person?)
|
|
- Keine Temporalität (wann gespeichert? wann zuletzt genutzt?)
|
|
- Keine Confidence (wie sicher ist die Extraktion?)
|
|
- Keine automatische Extraktion (Nutzer muss manuell speichern)
|
|
|
|
## Entscheidung
|
|
|
|
Wir führen **Structured Memory Blocks** ein:
|
|
|
|
```yaml
|
|
memory_block:
|
|
id: "uuid"
|
|
type: "user_preference" | "project_state" | "learned_pattern" | "entity_relationship" | "procedural"
|
|
category: "formatting" | "workflow" | "tech_stack" | "contact" | "project" | "skill"
|
|
key: "table_style"
|
|
value: "compact with │ separators"
|
|
source: "session_2026-06-03"
|
|
confidence: 0.95
|
|
entities: ["Flo", "waldseilgarten-crm"]
|
|
created_at: "2026-06-03T14:30:00Z"
|
|
updated_at: "2026-06-03T14:30:00Z"
|
|
access_count: 1
|
|
last_accessed: "2026-06-03T14:30:00Z"
|
|
```
|
|
|
|
## Konsequenzen
|
|
|
|
### Positiv
|
|
- Typisierung ermöglicht gezieltes Retrieval ("gib mir alle Präferenzen des Users")
|
|
- Entity-Linking ermöglicht Kontext-Navigation ("was wissen wir über Projekt X?")
|
|
- Temporalität ermöglicht "letzter Stand"-Abfragen
|
|
- Confidence ermöglicht Filterung nach Qualität
|
|
- Auto-Extraction kann strukturiert speichern
|
|
|
|
### Negativ
|
|
- Komplexer als Key-Value
|
|
- Migration bestehender Memories nötig
|
|
- Mehr Speicherplatz pro Memory
|
|
|
|
## Alternative
|
|
|
|
Key-Value beibehalten + Tags hinzufügen:
|
|
```
|
|
memory: "User prefers tables with │ separators"
|
|
tags: ["user_preference", "formatting", "Flo"]
|
|
```
|
|
|
|
Abgelehnt: Tags sind nicht strukturiert genug für Entity-Linking und Temporalität.
|
|
|
|
## Implementierung
|
|
|
|
1. SQLite-Schema für Memory Blocks
|
|
2. Migration bestehender `memory` Einträge
|
|
3. Erweitertes `memory` Tool in Hermes
|
|
4. Auto-Extraction produziert Blocks statt Strings
|
|
|
|
## Datum
|
|
|
|
2026-06-03
|