Hermes-Agent-Speichersystem
Die zentrale Differenzierungsfähigkeit von Hermes ist nicht das Aufrufen von Tools, sondern vielmehr, dass es sichwirklich an dich erinnert。
Die meisten KI-Tools beginnen jede Konversation bei null – du verbringst heute eine Stunde damit, ihm deine Projektstruktur, Namenskonventionen und deinen Deployment-Prozess beizubringen, und morgen, wenn du eine neue Sitzung startest, ist alles zurückgesetzt.
Dieses Kapitel analysiert eingehend, wie Hermes dieses Problem durch eine dreistufige Speicherstruktur löst und wie der Agent Speicher autonom verwaltet, wodurch sitzungsübergreifende Suche und Abruf ermöglicht werden.
Dreistufige Speicherarchitektur
Hermes verwendet eine dreischichtige Speicherarchitektur aus voneinander unabhängigen, funktional komplementären Schichten, um Informationen zu speichern und abzurufen.
Kern-Designphilosophie der dreistufigen Architektur:Häufig genutzte wichtige Informationen bleiben im Kontext, selten genutzte historische Informationen werden bei Bedarf abgerufen, und tiefe Muster werden automatisch von der KI abgeleitet.—wodurch ein Gleichgewicht zwischen Speicherfähigkeit und Token-Kosten entsteht.
┌─────────────────────────────────────────────────┐ │ 第一层:持久记忆(Persistent Memory) │ │ MEMORY.md(环境事实)+ USER.md(用户画像) │ │ → 每次会话启动时自动注入系统提示词,始终可见 │ ├─────────────────────────────────────────────────┤ │ 第二层:情节日志(Session History) │ │ SQLite + FTS5 全文检索,存储所有历史对话 │ │ → Agent 主动搜索时按需加载,不占用固定 Token │ ├─────────────────────────────────────────────────┤ │ 第三层:用户建模(Honcho,可选) │ │ 辩证推理引擎,提取跨会话模式、偏好与目标 │ │ → 比你亲口说出来的更深层地理解你 │ └─────────────────────────────────────────────────┘
| Speicherhierarchie | Speicherort | Kapazität | Lademethode | Zweck |
|---|---|---|---|---|
| Persistenter Speicher | Markdown-Dateien unter ~/.hermes/memories/ | ~1,300 Tokens insgesamt | Automatisch in den System-Prompt beim Sitzungsstart injiziert | Wichtige Fakten, immer sichtbar |
| Story-Log | SQLite-Datenbank + JSONL-Transkriptdateien | Unbegrenzt (alle historischen Konversationen) | Agent sucht bei Bedarf, FTS5-Volltextsuche | Spezifische historische Diskussionen finden |
| Honcho-Benutzermodellierung | Serverseitige Honcho-API | Pro Agent isoliert | Hintergrund-Inferenz-Injektion pro Runde / alle N Runden | Leitet automatisch tiefe Präferenzen und Ziele ab |
Die drei Ebenen sind keine Ersatzlösungen, sondern Ergänzungen. Persistenter Speicher beantwortet "Ich muss diese immer wissen," der Sitzungsverlauf beantwortet "Haben wir das letzte Woche besprochen," und Honcho beantwortet "Was willst du wirklich."
Persistente Speicherdatei
Persistenter Speicher ist die erste und grundlegendste Ebene des Hermes-Speichersystems.
Er wird in zwei gespeichert~/.hermes/memories/Besteht aus Markdown-Dateien unter, die bei jedem Sitzungsstart automatisch in den System-Prompt eingefügt werden.
Zwei Kerndateien
Die beiden Dateien haben jeweils ihre eigene Rolle und überschneiden sich nicht.
| Datei | Zweck | Zeichenlimit | ungefähr gleich |
|---|---|---|---|
| MEMORY.md | Die persönlichen Notizen des Agenten—Umgebungsfakten, Projektkonventionen, Dinge, die bei der Arbeit gelernt wurden | 2,200 Zeichen | ~800 Tokens |
| USER.md | Benutzerprofil – Ihre Präferenzen, Kommunikationsstil, Arbeitsgewohnheiten, Kompetenzniveau | 1,375 Zeichen | ~500 Tokens |
Das Zeichenlimit ist beabsichtigt – es stellt sicher, dass der Speicherinhalt prägnant und fokussiert bleibt. Wenn ein neuer Eintrag das Limit überschreitet, gibt das Speicher-Tool einen Fehler zurück, der den Agenten dazu auffordert, vor dem Schreiben Speicherplatz freizugeben, anstatt alte Einträge stillschweigend zu verwerfen.
Wie der Speicher in den System-Prompt injiziert wird
Beim Start jeder Sitzung werden die Inhalte beider Dateien in einem festen Format in den System-Prompt injiziert, wie folgt:
══════════════════════════════════════════════ MEMORY(Agent 个人笔记)[67% — 1,474/2,200 字符] ══════════════════════════════════════════════ 用户的项目是位于 ~/code/myapi 的 Rust Web 服务,使用 Axum + SQLx § 本机运行 Ubuntu 22.04,已安装 Docker 和 Podman § 用户偏好简洁回复,不喜欢冗长解释
Hier sind einige wichtige Design-Details:
Freeze Snapshot Mode: Der Speicherinhalt im System-Prompt wird einmal zu Beginn der Sitzung erfasst und während der Sitzung nicht aktualisiert.
Dies ist eine bewusste Design-Entscheidung – um den Prefix-Cache (Prompt-Cache) des LLM gültig zu halten und die Token-Kosten zu reduzieren.
Wenn der Agent den Speicher während einer Sitzung ändert, werden Änderungen sofort auf die Festplatte geschrieben, müssen aber aufStart in der nächsten Sitzungwarten. Erst dann erscheinen sie im Kontext.
Nutzungsprozentsatz sichtbar:[67% — 1,474/2,200]Hält den Agenten jederzeit über die verbleibende Kapazität informiert, sodass er proaktiv umorganisieren kann, wenn er sich dem Limit nähert.
§ als Elementtrenner: Jeder Speichereintrag wird durch § getrennt, und die Einträge selbst können mehrzeiliger Text sein.
Wie der Agent den Speicher verwaltet
Der Agent verwendet integriertememoryTools zur Speicherverwaltung, die drei Operationen unterstützen.
| Aktion | Beschreibung | Parameter |
|---|---|---|
| hinzufügen | Neuen Speichereintrag hinzufügen | target(memory/user)、content |
| ersetzen | Vorhandenen Eintrag ersetzen (durch Teilstring-Abgleich lokalisiert) | target、old_text、content |
| entfernen | Vorhandenen Eintrag löschen (durch Teilstring-Abgleich lokalisiert) | target、old_text |
Hinweis:Kein Lesevorgang—der Speicherinhalt wird bereits beim Sitzungsstart in den System-Prompt injiziert, sodass der Agent ihn direkt im Kontext sieht, ohne zusätzliche Lesevorgänge zu benötigen.
replaceundremoveVerwendungTeilstring-AbgleichUm einen Eintrag zu finden, musst du nicht den vollständigen Eintragstext angeben:
Beispiel
# Muss nun auf eine präzisere Version aktualisiert werden
# Verwende Teilstring-Abgleich, um es zu finden — gib einfach ein eindeutig identifizierbares Textfragment an
memory(
action="replace",
target="memory",
old_text="dunkles Design", # Ein eindeutiger Teilstring reicht aus, um den ursprünglichen Eintrag zu finden.
content="VS Code des Benutzers verwendet helles Design, Terminal verwendet dunkles Design" # Neuer Inhalt nach der Ersetzung
)
Wenn der Teilstring auf mehrere Einträge passt, gibt das Tool einen Fehler zurück und verlangt eine genauere Übereinstimmungszeichenfolge.
Was man sich merken sollte, was nicht
Der Agent ermittelt und speichert wertvolle Informationen automatisch — normalerweise musst du nicht explizit danach fragen.
Aber das Verständnis der Kriterien hilft Ihnen, das Verhalten des Agenten zu verstehen und es bei Bedarf manuell zu steuern.
Sollte proaktiv im Speicher gespeichert werden (Umgebung & Arbeit)
Die folgenden Informationsarten veranlassen den Agenten, in MEMORY.md zu schreiben:
| Type | Beispiel |
|---|---|
| Umgebungsfakten | Auf dieser Maschine läuft Debian 12, PostgreSQL 16, wobei Docker durch Podman ersetzt wurde |
| Projektspezifikation | ~/code/api Verwendung Go 1.22,sqlc query,chi Routing;Testen verwendet make test |
| Tool-Erfahrung | SSH-Port des Staging-Servers ist 2222, nicht 22; Schlüssel befindet sich unter ~/.ssh/staging_ed25519 |
| Korrektureintrag | Docker-Befehle nicht mit sudo ausführen; der Benutzer ist bereits in der docker-Gruppe |
| Abgeschlossene Arbeit | 2026-01-15 Migration der Datenbank von MySQL zu PostgreSQL abgeschlossen |
Sollte proaktiv beim Benutzer gespeichert werden (über dich)
Die folgenden Arten von Informationen veranlassen den Agenten, in USER.md zu schreiben:
| Type | Beispiel |
|---|---|
| Identitätsinformationen | Name, Berufsbezeichnung, Zeitzone |
| Kommunikationspräferenzen | Bevorzugt prägnante Antworten, offensichtliche Schritte müssen nicht erklärt werden |
| Abgelehntes Element | Keine übermäßigen Kommentare im Code hinzufügen |
| Arbeitsgewohnheiten | Nachrichten nicht vor 3 PM jeden Tag prüfen |
| Kompetenzniveau | Mit Rust und Python vertraut, Go ist neu gelernt |
Inhalte, die nicht gespeichert werden sollten
Der folgende Inhalt verdient keinen wertvollen Speicherplatz:
| Type | Beispiel | Grund |
|---|---|---|
| Zu allgemein | Benutzer hat ein Projekt | Kein Informationswert, kann nicht wiederverwendet werden |
| Kann jederzeit erneut überprüft werden | Python 3.12 unterstützt verschachtelte f-strings | Einfach suchen; es lohnt nicht, Platz zu belegen |
| Rohdaten | Große Log-Segmente, Codeblöcke, Datentabellen | Überschreitet das Zeichenlimit; strukturierter Speicher ist nützlicher |
| Temporärer Inhalt | Temporäre Dateipfade für diese Debugging-Sitzung | Nächstes Mal nicht verwendbar |
| Inhalt bereits im Kontext | Informationen bereits im Projekt SOUL.md, AGENTS.md vorhanden | Wiederholte Injektion verschwendet Tokens |
Gutes Gedächtnis vs. schlechtes Gedächtnis
Dieselbe Information, gut geschrieben, kann zehn Einträge wert sein; schlecht geschrieben ist sie wertlos.
| Bewertung | Beispiel | Überprüfen |
|---|---|---|
| Gut | Benutzer von macOS 14 Sonoma, Homebrew, Docker Desktop, Shell ja mit oh-my-zsh für zsh, Editor ja VS Code + Vim Keybits | Hohe Informationsdichte; zusammengehörige Fakten sind gebündelt |
| Gut | Projekt ~/code/api, Verwendung: Go 1.22, sqlc macht DB-Abfragen, chi route. Test: make test. CI: GitHub Actions | Konkrete umsetzbare Regeln |
| Gut | Staging-Server (10.0.1.50) SSH-Port 2222 ist nicht 22, Schlüssel ~/.ssh/staging_ed25519 | Kontextbezogene Lehren, um Fallstricke zu vermeiden |
| Schlecht | Benutzer haben Projekte | Zu vage, kann keine Aktion anleiten |
| Schlecht | Am 5. Januar 2026 bat mich der Benutzer, mir sein Projekt unter ~/code/api anzusehen, und ich stellte fest, dass es Go 1.22 verwendet... | Zu ausführlich; die Kerninformation ist in der Erzählung vergraben |
Verwaltung der Speicherkapazität
Speicherdateien haben ein striktes Zeichenlimit; der Agent muss proaktiv organisieren, wenn er sich dem Limit nähert.
Was passiert, wenn man sich dem Limit nähert
Wenn ein neuer Eintrag dazu führen würde, dass das Zeichenlimit überschritten wird, gibt das Tool einen Fehler zurück, anstatt stillschweigend abzuschneiden:
{
"success": false,
"error": "Memory 已用 2,100/2,200 字符。新条目(250 字符)会超出上限。
请先整理:用 replace 合并重叠条目,或 remove 过时条目,
再重试——在同一轮对话中完成。",
"current_entries": [
"用户的 macOS 14 Sonoma,Homebrew,Docker Desktop",
"项目 ~/code/api 使用 Go 1.22,sqlc 做 DB 查询"
],
"usage": "2,100/2,200"
}
Beim Empfang dieses Fehlers ist das korrekte Vorgehen des Agenten:
- Alle aktuellen Einträge lesen (bereits in der Fehlerantwort enthalten)
- Einträge finden, die gelöscht oder zusammengeführt werden können
- Verwenden Sie
replaceMehrere zusammengehörige Einträge zu einer verfeinerten Version zusammenführen - Versuchen Sie dann erneut, den neuen Eintrag hinzuzufügen.
Best Practice: Wenn der System-Prompt eine Speichernutzung von über 80% anzeigt, organisieren Sie proaktiv – warten Sie nicht auf einen Fehler. Vorbeugung spart immer mehr Tokens als Behebung.
Kapazitätsreferenz
| Speicher | Obergrenze | Typische Eintragsanzahl |
|---|---|---|
| MEMORY.md | 2,200 Zeichen | 8–15 Einträge |
| USER.md | 1,375 Zeichen | 5–10 Einträge |
Schreibberechtigungen für den Speicher steuern
Standardmäßig kann der Agent frei in den Speicher schreiben – einschließlichIm Hintergrund automatisch ausgelöste Selbstverbesserungs-Überprüfung(Läuft im Hintergrund nach dem Ende einer Gesprächsrunde ab und destilliert Speicher und Fähigkeiten.)
Wenn Sie Inhalte überprüfen möchten, bevor etwas in den Speicher geschrieben wird, können Sie die Schreibgenehmigung aktivieren.
Schreibgenehmigung aktivieren
Legen Sie es einfach in der Konfigurationsdatei fest:
Beispiel
# Genehmigung für Speicherschreibvorgänge aktivieren — alle Schreibvorgänge erfordern eine manuelle Genehmigung
memory:
write_approval: true # Standardmäßig false (freies Schreiben)
Verhaltensänderungen nach der Aktivierung:
| Szenarien | Verhalten |
|---|---|
| Wenn der Agent während der CLI-Interaktion Speicher schreiben möchte | Inline-Aufforderung im Terminal, die um Ihre Genehmigung bittet |
| Messaging-Plattform / automatische Überprüfung im Hintergrund | Schreibvorgänge werden zwischengespeichert und warten auf Ihre manuelle Genehmigung |
Befehle zur Genehmigungsverwaltung
Verwenden Sie die folgenden Slash-Befehle, um ausstehende Speicherschreibvorgänge zu verwalten:
Beispiel
/memory pending
# Schreibvorgänge für die angegebene ID genehmigen oder alle genehmigen.
/memory approve <id>
/memory approve all
# Schreibvorgänge für die angegebene ID ablehnen oder alle ablehnen.
/memory reject <id>
/memory reject all
# Genehmigung zur Laufzeit aktivieren oder deaktivieren (Einstellung bleibt erhalten)
/memory approval on
/memory approval off
Anwendungsfälle: Wenn der Agent eine falsche Annahme über dich gespeichert hat oder du die volle Kontrolle über den Speicherinhalt möchtest, ist das Aktivieren von write_approval der direkteste Ansatz.
Über die Selbstverbesserungsprüfung im Hintergrund
Nach jeder Gesprächsrunde führt Hermes im Hintergrund eine Selbstverbesserungsprüfung (Hintergrundprüfung) durch, analysiert das Gespräch und destilliert Erinnerungen oder Fähigkeiten, die es wert sind, behalten zu werden.
Standardmäßig wird eine Benachrichtigungszeile im Chat angezeigtMemory updated。
Sie können den Detailgrad der Benachrichtigungen anpassen:
Beispiel
# Steuert den Detailgrad der Benachrichtigungen für die Hintergrundüberprüfung
display:
memory_notifications: on # off | on (Standard) | verbose
| Wert | Wirkung |
|---|---|
| off | Keine Benachrichtigung wird angezeigt, aber die Überprüfung wird weiterhin ausgeführt und schreibt weiterhin |
| on (Standard) | Kurze Meldungen, wie z. B. "Memory aktualisiert" |
| verbose | Enthält eine Änderungsvorschau, wie z. B. Memory + Benutzer bevorzugt präzise Antworten |
Wenn Ihr Hauptmodell teuer ist, können Sie Hintergrundüberprüfungen mit einem günstigeren Modell ausführen:
Beispiel
# Hintergrundüberprüfung verwendet ein unabhängiges Modell, um Kosten zu senken
auxiliary:
background_review:
provider: openrouter
model: google/gemini-3-flash-preview # Standard auto = Hauptmodell
Episodenverzeichnis und sitzungsübergreifende Suche
Die zweite Speicherschicht – Sitzungsverlauf – speichert vollständige Aufzeichnungen aller historischen Konversationen und unterstützt Volltextsuche sowie Abruf auf Anfrage.
Alle Konversationen werden automatisch gespeichert
Jede Sitzung – ob von CLI, Telegram, Discord oder einer anderen Plattform – wird automatisch an zwei Orten gespeichert:
| Speicherort | Formatierung | content |
|---|---|---|
| ~/.hermes/state.db | SQLite-Datenbank + FTS5-Volltextindex | Strukturierte Metadaten, vollständige Nachrichtenhistorie (einschließlich Tool-Aufrufe und Ergebnisse), Token-Nutzung, Zeitstempel |
| ~/.hermes/sessions/ | JSONL-Transkriptdateien | Rohe Gesprächstranskripte, einschließlich Aufzeichnungen von Tool-Aufrufen |
session_search-Tool
Integrierter Agentsession_searchEin Tool, das eine Volltextsuche über alle historischen Konversationen durchführen kann.
Der gesamte Prozess erfordert keine Beteiligung eines LLM in der Suchphase; sie wird direkt von der SQLite-FTS5-Engine durchgeführt:
Workflow:
- FTS5 ruft übereinstimmende Nachrichten ab, sortiert nach Relevanz
- Nach Sitzung gruppiert, wobei die relevantesten Sitzungen genommen werden (standardmäßig 3)
- Lädt die Konversation jeder Sitzung und erfasst ungefähr 100.000 Zeichen rund um den Trefferpunkt
- Ein leichtgewichtiges Zusammenfassungsmodell erzeugt fokussierte Zusammenfassungen
- Gibt die Zusammenfassung und den Kontext jeder Sitzung an den Agenten zurück
Unterstützte Suchsyntax (FTS5-Standard):
| Syntax | Beispiel | Beschreibung |
|---|---|---|
| Schlüsselwortabruf | docker-Bereitstellung | Entspricht Nachrichten, die ein beliebiges Schlüsselwort enthalten |
| Phrasenübereinstimmung | "exakte Phrase" | Exakte Übereinstimmung für die gesamte Phrase |
| Boolesches OR | docker OR kubernetes | Beliebiges Schlüsselwort abgleichen |
| Boolesches NOT | python NOT java | Bestimmte Schlüsselwörter ausschließen |
| Präfix-Wildcard | deploy* | Findet Wörter, die mit "deploy" beginnen |
Auslösezeitpunkt: Der Agent ruft session_search automatisch auf, wenn Sie "was wir letztes Mal besprochen haben ..." oder "der vorherige Vorschlag ..." erwähnen, statt dass Sie die Erklärung wiederholen müssen.
session_search vs. persistentes Gedächtnis
Die beiden ergänzen sich, sie stehen nicht in einem Ersatzverhältnis:
| Vergleichsdimension | Persistentes Gedächtnis (MEMORY.md / USER.md) | Ereignisprotokoll (Session Search) |
|---|---|---|
| Kapazität | ~1,300 Tokens insgesamt | Unbegrenzt (alle historischen Konversationen) |
| Geschwindigkeit | Sofort (bereits im System-Prompt) | ~20ms (FTS5-Abfrage) |
| Token-Kosten | Fester Verbrauch pro Sitzung | Bei Bedarf; keine Abfrage, keine Kosten |
| Zweck | Wichtige Fakten, immer sichtbar | Spezifische historische Diskussionen finden |
| Verwaltungsstil | Agent organisiert proaktiv | Vollautomatisch, kein Eingreifen nötig |
GedächtnisVerwendet für "Das muss ich immer wissen"—Umgebungsfakten, Benutzereinstellungen, Projektkonventionen.
Story-ProtokollVerwendet für "Haben wir letzte Woche darüber gesprochen?"—Finden bestimmter historischer Diskussionen.
Sitzungsverwaltung
Jede Sitzung im Sitzungsverlauf kann benannt, fortgesetzt, exportiert und bereinigt werden.
Benennung und Wiederherstellung
Hermes generiert automatisch einen kurzen Sitzungstitel (3–7 Wörter) nach der ersten Gesprächsrunde, der asynchron im Hintergrund läuft, ohne die Antwortgeschwindigkeit zu beeinträchtigen.
Sie können sie auch manuell benennen:
Beispiel
/title refactor authentication module
Nach der Benennung können Sitzungen direkt über den Titel fortgesetzt werden:
Beispiel
hermes -c Authentifizierungsmodul refaktorieren
# Die letzte Session wiederherstellen
hermes --continue
# Nach Session-ID wiederherstellen
hermes -r <session_id>
Auto-Lineage: Wenn eine Session eine Kontextkomprimierung durchläuft, erstellt und nummeriert Hermes automatisch Fortsetzungs-Sessions:
"我的项目" → "我的项目 #2" → "我的项目 #3"
Beim Fortsetzen anhand des Titels wird automatisch die neueste Fortsetzungs-Session ausgewählt.
Übliche Befehle zur Session-Verwaltung
Beispiel
hermes sessions list
# Nach Quellplattform filtern
hermes sessions list --source telegram
# Mehr Einträge anzeigen
hermes sessions list --limit 50
# Angegebene Sitzung umbenennen
hermes sessions rename <id> "Neuer Titel"
# Alle Sitzungen in Datei exportieren
hermes sessions export backup.jsonl
# Angegebene Sitzung löschen
hermes sessions delete <id>
# Sitzungen älter als 30 Tage bereinigen
hermes sessions prune --older-than 30
# Statistiken anzeigen
hermes sessions stats
hermes sessions listBeispielausgabe:
标题 预览 最近活跃 ID ──────────────────────────────────────────────────────────────────── 重构认证模块 帮我重构认证模块的代码 2 小时前 20260305_09... 我的项目 #3 检查一下测试失败的原因 昨天 20260304_14... — Python 装饰器怎么用 3 天前 20260303_10...
Automatische Sitzungsbereinigung (optional)
Standardmäßig wird der Sitzungsverlauf dauerhaft aufbewahrt (da er Daten für session_search bereitstellt).
Wenn eine automatische Bereinigung erforderlich ist, aktivieren Sie sie in der Konfiguration:
Beispiel
# Automatische Bereinigung von Gesprächen aktivieren (standardmäßig deaktiviert)
sessions:
auto_prune: true # standardmäßig false
retention_days: 90 # Die letzten 90 Tage aufbewahren
vacuum_after_prune: true
min_interval_hours: 24
Honcho-Benutzermodellierung
Honcho ist ein KI-natives Memory-Backend, entwickelt von Plastic Labs und als Plugin in Hermes integriert.
Es ersetzt MEMORY.md und USER.md nicht, sondern baut auf ihnen aufDialektische Argumentationsschicht hinzufügen—durch die Analyse Ihrer Gesprächsmuster leitet es automatisch Präferenzen, Ziele und Gewohnheiten ab, die Sie nicht explizit ausgedrückt haben.
Im Gegensatz zur manuellen Pflege von MEMORY.md ist Honcho vollautomatisch: Nach jeder Gesprächsrunde (Frequenz konfigurierbar) denkt es im Hintergrund nach und entwickelt dabei ein tieferes Verständnis von Ihnen.
Honcho vs. integriertes Gedächtnis
| Skills | Integriertes Gedächtnis | Honcho |
|---|---|---|
| Sitzungsübergreifende Persistenz | Lokale Dateien | Serverseitige API |
| Benutzerprofil | Manuell kuratiert (USER.md) | Automatische dialektische Schlussfolgerung |
| Sitzungszusammenfassung | — | Kontextinjektion auf Sitzungsebene |
| Multi-Agent-Isolierung | — | Separat pro Agent modelliert |
| Semantische Suche | FTS5-Volltext | Basierend auf Schlussfolgerungen aus dem Reasoning |
Zweischichtige Kontextinjektion
Bei jedem Konversationsschritt stellt Honcho zwei Ebenen von Kontext zusammen, die in den System-Prompt injiziert werden:
Basisschicht (Basiskontext): Sitzungszusammenfassung + Nutzercharakterisierung + Nutzer-Peer-Card + KI-Selbstcharakterisierung. Aktualisiert gemäß contextCadence (alle N Schritte). Dies ist die Schicht „Wer ist dieser Nutzer?“.
Dialektische Schicht (Dialektische Ergänzung): In Echtzeit von Honchos LLM-Engine generiert, mit Fokus darauf, „was gerade am relevantesten ist“. Aktualisiert gemäß dialecticCadence.
Zwei Startmodi für dialektisches Reasoning:
| Mode | Bedingungen | Abfragemethode |
|---|---|---|
| Kaltstart | Keine historischen Daten | Generische Abfrage—„Wer ist dieser Nutzer? Was sind die Präferenzen, Ziele und die Arbeitsweise dieses Nutzers?“ |
| Warmstart | Vorhandene historische Daten | Sitzungsfokussierte Abfrage — "Basierend auf dem, was in dieser Sitzung besprochen wurde, welcher Kontext über diesen Benutzer ist am relevantesten?" |
Drei unabhängige Einstellregler
| Parameter | Kontrolliert | Standardwert |
|---|---|---|
| contextCadence | Aktualisierungsintervall der Basisschicht (ruft die API einmal alle N Runden auf) | 1 |
| dialecticCadence | Aktualisierungsintervall der dialektischen Schicht (ruft das LLM einmal alle N Runden auf) | 2 (Empfohlen 1–5) |
| dialecticDepth | Argumentationstiefe pro Dialektik (1–3 Durchläufe) | 1 |
Die drei Regler sind völlig unabhängig — du kannst die Basisschicht mit hoher Frequenz aktualisieren und die dialektische Schicht mit niedriger Frequenz laufen lassen, oder umgekehrt:
Beispiel
"contextCadence": 1,
"dialecticCadence": 5,
"dialecticDepth": 2
}
Die obige Konfiguration bedeutet: die Basisschicht jede Runde zu aktualisieren und alle 5 Runden ein tiefes dialektisches Reasoning mit 2 Durchgängen durchzuführen.
Dialektisches Reasoning mit mehreren Durchgängen
Wenn dialecticDepth auf größer als 1 gesetzt ist, führt jeder Durchlauf des dialektischen Reasonings mehrere Runden von LLM-Aufrufen aus:
| Durchgang | Aufgabe | Beschreibung |
|---|---|---|
| Durchgang 0 | Kalt-/Warmstart-Reasoning | Ersteinschätzung vornehmen |
| Durchgang 1 | Selbstprüfung | Identifiziert blinde Flecken in der Ersteinschätzung und synthetisiert Evidenz aus aktuellen Sitzungen. |
| Durchgang 2 | Abgleich | Prüft Widersprüche aus den beiden vorherigen Durchgängen und erzeugt eine abschließende synthetisierte Schlussfolgerung |
Tiefe 3 bedeutet nicht unbedingt 3 LLM-Aufrufe – wenn der vorherige Durchgang bereits eine hochwertige Ausgabe erzeugt hat, wird der nächste Durchgang frühzeitig beendet, um Tokens zu sparen.
Schnellstart mit Honcho
Beispiel
hermes memory setup
Oder manuelle Konfiguration:
Beispiel
# Honcho als Speicher-Provider aktivieren.
memory:
provider: honcho
Beispiel
echo 'HONCHO_API_KEY=your_key' >> ~/.hermes/.env
API-Schlüssel auf honcho.dev abrufen.
Von Honcho bereitgestellte Tools
Nach der Aktivierung von Honcho kann der Agent fünf exklusive Tools verwenden:
| Werkzeuge | Zweck |
|---|---|
| honcho_profile | Peer Card des Benutzers lesen oder aktualisieren |
| honcho_search | Semantische Suche basierend auf Reasoning-Schlussfolgerungen (Rohfragmente, keine LLM-Synthese) |
| honcho_context | Vollständigen Sitzungskontext abrufen (Zusammenfassung, Benutzercharakterisierung, aktuelle Nachrichten) |
| honcho_reasoning | Honcho-LLM-Inferenz aufrufen (reasoning_level kann angegeben werden) |
| honcho_conclude | Reasoning-Schlussfolgerungen erstellen oder löschen |
Honcho-CLI-Befehle
Beispiel
hermes honcho status
# Sitzungsrichtlinie anzeigen oder festlegen
hermes honcho strategy
# Recall-Modus anzeigen oder festlegen (hybrid/context/tools)
hermes honcho mode
# Token-Budget anzeigen oder festlegen
hermes honcho tokens
# Bekannte Honcho-Sitzungszuordnungen auflisten
hermes honcho sessions
Referenz zur Konfiguration des Speichersystems
Das Folgende ist die vollständige Referenz für alle speicherbezogenen Konfigurationen, die direkt in Ihre Konfigurationsdatei kopiert werden kann.
Beispiel
# Dateipfad: ~/.hermes/config.yaml
# Vollständige Konfigurationsreferenz für das Hermes-Speichersystem
# ============================================
# --- Konfiguration des persistenten Speichers ---
memory:
memory_enabled: true # Ob persistenter Speicher aktiviert werden soll (MEMORY.md)
user_profile_enabled: true # Ob das Benutzerprofil aktiviert werden soll (USER.md)
memory_char_limit: 2200 # Zeichenlimit für MEMORY.md (ungefähr 800 Token)
user_char_limit: 1375 # Zeichenlimit für USER.md (ca. 500 Token)
write_approval: false # true = alle Speicherschreibvorgänge erfordern manuelle Genehmigung
provider: honcho # Optional: Honcho-Speicheranbieter aktivieren
# --- Automatische Sitzungsbereinigung (optional, standardmäßig deaktiviert) ---
sessions:
auto_prune: false # Ob alte Sitzungen automatisch bereinigt werden sollen
retention_days: 90 # Sitzungen der letzten N Tage behalten
vacuum_after_prune: true # Ob Speicherplatz nach der Bereinigung zurückgewonnen werden soll
min_interval_hours: 24 # Mindestintervall zwischen zwei Bereinigungen
# --- Benachrichtigungen zur Hintergrundüberprüfung ---
display:
memory_notifications: on # off | on | verbose
# --- Hintergrundüberprüfung mit günstigerem Modell (optional) ---
auxiliary:
background_review:
provider: openrouter # Modellanbieter
model: google/gemini-3-flash-preview # Modellname
Kurzreferenz für häufige Speicheroperationen
Speicher direkt in der Konversation bearbeiten
Sie können Hermes anweisen, den Speicher mit natürlicher Sprache zu bearbeiten, ohne sich Befehle merken zu müssen:
Beispiel
Zur Erinnerung: Dieses Projekt verwendet Poetry für die Abhängigkeitsverwaltung, nicht pip
# Speicher löschen oder überschreiben
Vergiss die vorherigen Datensätze zu MySQL, wir sind zu PostgreSQL migriert
# Informationen im Speicher aktualisieren
Aktualisiere die IP des Staging-Servers auf 10.0.2.100
# Speicher abfragen
Sag mir, was du derzeit über mich in Erinnerung hast.
Slash-Befehle
Beispiel
/memory
# Ausstehende Schreibvorgänge anzeigen
/memory pending
# Alle ausstehenden genehmigen
/memory approve all
# Alle ausstehenden ablehnen
/memory reject all
# Schreibgenehmigung aktivieren
/memory approval on
# Schreibgenehmigung deaktivieren
/memory approval off
Speicherdateien direkt bearbeiten
Speicherdateien sind reines Markdown und können direkt mit einem Editor geöffnet und bearbeitet werden:
Beispiel
cat ~/.hermes/memories/MEMORY.md
cat ~/.hermes/memories/USER.md
# Zum Ändern im Editor öffnen
nano ~/.hermes/memories/MEMORY.md
Hinweis: Nach direkter Bearbeitung von Dateien werden Änderungen beim nächsten Sitzungsstart wirksam und erscheinen nicht sofort im Kontext der aktuellen Sitzung.
Speichersicherheit und Datenschutz
Sicherheitsscan
Speicherinhalte werden vor dem Schreiben einem Sicherheitsscan unterzogen, der Injection-Angriffe und Muster von Datendiebstahl erkennt.
Das System erkennt die folgenden Bedrohungsmuster:
| Bedrohungstyp | Erkennungsinhalt |
|---|---|
| Prompt-Injection | Injektionsmuster, die versuchen, die Systemanweisungen des Agenten zu überschreiben |
| Diebstahl von Anmeldedaten | Anweisungen, die den Agenten dazu verleiten, API-Schlüssel oder Token preiszugeben |
| Backdoor-Installation | Installationsanweisungen für SSH-Backdoors oder Remote-Zugriff |
| Versteckte Zeichen | Unsichtbare Unicode-Zeichen (Nullbreiten-Leerzeichen, Richtungsüberschreibungen usw.) |
Inhalte, die Bedrohungsmustern entsprechen, werdenSchreiben verweigern。
Sensible Informationen in Logs werden maskiert
Vertrauliche Informationen wie API-Schlüssel und Tokens werden in allen Protokolldateien automatisch geschwärzt—selbst wenn sie in Tool-Ausgaben erscheinen, werden sie niemals im Klartext aufgezeichnet:
Beispiel
# Standardmäßig aktiviert, macht vertrauliche Informationen automatisch unkenntlich
Sicherheit:
redact_secrets: true
Lokale Datenspeicherung
Alle Speicherdaten (MEMORY.md, USER.md, state.db) werden standardmäßig lokal gespeichert~/.hermes/Verzeichnis, wird nicht in die Cloud hochgeladen
Wenn Sie sich für die Nutzung von Honcho entscheiden, werden Gesprächsdaten zur Verarbeitung an Honchos Server gesendet—dies ist ein bewusster Kompromiss: Datenuploads gegen tiefergehende Reasoning-Fähigkeiten einzutauschen.
Weitere Erweiterungen