feat(memory): Kategorien 'user' + 'instruction' fuer universelles Agenten-Gedaechtnis

Gilt fuer alle Tools (Hermes, Cline, OpenCode) via MCP-Server.
- user: wer der User ist, Praeferenzen, Arbeitsweise
- instruction: Verhaltensregeln fuer alle KI-Tools
Hermes-Agent speichert aktiv in diese Kategorien wenn er Neues lernt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-06-23 14:37:25 +02:00
parent ff60d6ff26
commit 5881a21d9a
4 changed files with 61 additions and 36 deletions
+17 -7
View File
@@ -26,6 +26,8 @@
) )
const CAT: Record<string, { label: string; color: string }> = { const CAT: Record<string, { label: string; color: string }> = {
user: { label: 'Über mich', color: '#a78bfa' },
instruction:{ label: 'Verhalten', color: '#fb923c' },
stable: { label: 'Stabil', color: 'var(--accent)' }, stable: { label: 'Stabil', color: 'var(--accent)' },
versioned: { label: 'Versioniert', color: '#f59e0b' }, versioned: { label: 'Versioniert', color: '#f59e0b' },
ephemeral: { label: 'Temporär', color: 'var(--mut)' }, ephemeral: { label: 'Temporär', color: 'var(--mut)' },
@@ -120,6 +122,8 @@
></textarea> ></textarea>
<label>Kategorie</label> <label>Kategorie</label>
<select bind:value={newCategory} style="margin-bottom:14px"> <select bind:value={newCategory} style="margin-bottom:14px">
<option value="user">Über mich — Wer du bist, Präferenzen, Arbeitsweise</option>
<option value="instruction">Verhalten — Wie alle KI-Tools sich verhalten sollen</option>
<option value="stable">Stabil — Projektfakten, die sich selten ändern</option> <option value="stable">Stabil — Projektfakten, die sich selten ändern</option>
<option value="versioned">Versioniert — Tech-Versionen (bei Updates überschreiben)</option> <option value="versioned">Versioniert — Tech-Versionen (bei Updates überschreiben)</option>
<option value="ephemeral">Temporär — Aktuelle Aufgabe (nach 7 Tagen gelöscht)</option> <option value="ephemeral">Temporär — Aktuelle Aufgabe (nach 7 Tagen gelöscht)</option>
@@ -137,10 +141,12 @@
<div class="flex gap-2" style="flex-wrap:wrap;align-items:center"> <div class="flex gap-2" style="flex-wrap:wrap;align-items:center">
<span style="font-size:11.5px;color:var(--mut);margin-right:4px">Filter:</span> <span style="font-size:11.5px;color:var(--mut);margin-right:4px">Filter:</span>
{#each [ {#each [
['all', 'Alle', '', memories.length], ['all', 'Alle', '', memories.length],
['stable', 'Stabil', 'var(--accent)', countCat('stable')], ['user', 'Über mich', '#a78bfa', countCat('user')],
['versioned', 'Versioniert', '#f59e0b', countCat('versioned')], ['instruction', 'Verhalten', '#fb923c', countCat('instruction')],
['ephemeral', 'Temporär', 'var(--mut)', countCat('ephemeral')], ['stable', 'Stabil', 'var(--accent)', countCat('stable')],
['versioned', 'Versioniert', '#f59e0b', countCat('versioned')],
['ephemeral', 'Temporär', 'var(--mut)', countCat('ephemeral')],
] as [val, lbl, clr, cnt]} ] as [val, lbl, clr, cnt]}
<span class="chip" <span class="chip"
role="button" tabindex="0" role="button" tabindex="0"
@@ -185,6 +191,8 @@
bind:value={editContent} bind:value={editContent}
></textarea> ></textarea>
<select bind:value={editCategory} style="margin-bottom:10px"> <select bind:value={editCategory} style="margin-bottom:10px">
<option value="user">Über mich</option>
<option value="instruction">Verhalten</option>
<option value="stable">Stabil</option> <option value="stable">Stabil</option>
<option value="versioned">Versioniert</option> <option value="versioned">Versioniert</option>
<option value="ephemeral">Temporär</option> <option value="ephemeral">Temporär</option>
@@ -230,8 +238,10 @@
style="color:var(--accent)">Verbinden → Gedächtnis-MCP</a>. style="color:var(--accent)">Verbinden → Gedächtnis-MCP</a>.
</div> </div>
<div class="card-sub" style="margin-top:8px;font-size:11.5px"> <div class="card-sub" style="margin-top:8px;font-size:11.5px">
Kategorien: <b style="color:var(--accent)">Stabil</b> = Projektfakten die sich selten ändern · <b style="color:#a78bfa">Über mich</b> = wer du bist, Präferenzen ·
<b style="color:#f59e0b">Versioniert</b> = Tech-Versionen (bei Updates überschreiben) · <b style="color:#fb923c">Verhalten</b> = Regeln für alle KI-Tools ·
<b style="color:var(--mut)">Temporär</b> = aktuelle Aufgaben, nach 7 Tagen automatisch gelöscht <b style="color:var(--accent)">Stabil</b> = Projektfakten ·
<b style="color:#f59e0b">Versioniert</b> = Tech-Versionen ·
<b style="color:var(--mut)">Temporär</b> = 7 Tage, dann weg
</div> </div>
</div> </div>
+20 -5
View File
@@ -92,8 +92,14 @@ TOOL_DEFS = [
"content": {"type": "string", "description": "Der zu speichernde Fakt"}, "content": {"type": "string", "description": "Der zu speichernde Fakt"},
"category": { "category": {
"type": "string", "type": "string",
"enum": ["stable", "versioned", "ephemeral"], "enum": ["user", "instruction", "stable", "versioned", "ephemeral"],
"description": "stable=Projektfakten, versioned=Tech-Versionen, ephemeral=temporaer (7 Tage)", "description": (
"user=Fakten ueber den User (Wer ist er? Wie arbeitet er?), "
"instruction=Verhaltensregeln fuer alle KI-Tools, "
"stable=Projektfakten, "
"versioned=Tech-Versionen (bei Updates ueberschreiben), "
"ephemeral=temporaer (7 Tage)"
),
}, },
}, },
"required": ["content"], "required": ["content"],
@@ -295,16 +301,25 @@ Dein Zuhause (Bosgame M5):
- Modelle: coder (Qwen3-30B-A3B), scout (Qwen3-8B), vision (Qwen3-VL) - Modelle: coder (Qwen3-30B-A3B), scout (Qwen3-8B), vision (Qwen3-VL)
- Du laeuft als Teil von Mission Control - Du laeuft als Teil von Mission Control
Gespeichertes Wissen: Gespeichertes Wissen (nach Kategorie):
{memories} {memories}
Verhaltenregeln: Verhaltensregeln (fest):
- Antworte praegnant auf Deutsch (max 2-3 Saetze wenn nicht ausdruecklich mehr gewuenscht) - Antworte praegnant auf Deutsch (max 2-3 Saetze wenn nicht ausdruecklich mehr gewuenscht)
- Kuendige an was du tust bevor du es tust - Kuendige an was du tust bevor du es tust
- Frag nach bevor du Dateien ueberschreibst oder Dienste neustartest - Frag nach bevor du Dateien ueberschreibst oder Dienste neustartest
- Nutze get_system_status() wenn du nicht sicher bist was gerade laeuft - Nutze get_system_status() wenn du nicht sicher bist was gerade laeuft
- Speichere wichtige Entscheidungen und Fakten per add_memory() ins Gedaechtnis
- Bei einfachen Fragen: keine Tools, direkt antworten - Bei einfachen Fragen: keine Tools, direkt antworten
Gedaechtnis-Kategorien (fuer add_memory):
- user → Fakten ueber den User: Wer er ist, wie er arbeitet, was er bevorzugt
- instruction → Verhaltensregeln die fuer ALLE KI-Tools gelten sollen
- stable → Technische Projektfakten (IPs, Ports, Architektur)
- versioned → Tech-Versionen (bei Updates ueberschreiben, nicht anhaengen)
- ephemeral → Temporaerer Kontext (7 Tage, dann weg)
Speichere wichtige Erkenntnisse aktiv per add_memory() — besonders wenn der User
etwas ueber sich selbst erwaehnt (→ user) oder Verhaltensregeln nennt (→ instruction).
""" """
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
+1 -1
View File
@@ -70,7 +70,7 @@ def get_memories(category: str = "") -> str:
@mcp.tool() @mcp.tool()
def add_memory(content: str, category: str = "stable", source: str = "agent") -> str: def add_memory(content: str, category: str = "stable", source: str = "agent") -> str:
"""Speichert einen Fakt oder eine Entscheidung. """Speichert einen Fakt oder eine Entscheidung.
category: stable=Projektfakten (selten aendern), versioned=Tech-Versionen (bei Updates ueberschreiben), ephemeral=temporaerer Kontext (nach 7 Tagen geloescht). category: user=Fakten ueber den User (Praeferenzen/Arbeitsweise), instruction=Verhaltensregeln fuer alle Tools, stable=Projektfakten, versioned=Tech-Versionen, ephemeral=temporaer (7 Tage).
""" """
m = _post("/api/memory", {"content": content, "category": category, "source": source}) m = _post("/api/memory", {"content": content, "category": category, "source": source})
return f"Gespeichert (ID: {m['id'][:8]}): {content}" return f"Gespeichert (ID: {m['id'][:8]}): {content}"
+23 -23
View File
File diff suppressed because one or more lines are too long