agent-knowledge
agent-knowledge
Sitzungsübergreifender Speicher und Abruf für KI-Codierungsassistenten -- funktioniert sofort mit Claude Code, Cursor, OpenCode, Cline, Continue.dev und Aider. Git-synchronisierte Wissensdatenbank, hybride semantische+TF-IDF-Suche, automatische Destillation mit Schwärzung von Geheimnissen.
Benchmark: R@5 = 97.2% (sparse) / 98.8% (hybrid) auf longmemeval_s und 86.0% (sparse) / 88.4% (hybrid) auf dem schwierigeren longmemeval_m-Split — das öffentliche akademische Benchmark LongMemEval (Wu et al. 2024, ICLR 2025), volle 500 Fragen pro Split, kein LLM, kein API-Schlüssel, läuft vollständig offline. +8.6pp bis +13.2pp R@5 gegenüber der offiziellen flat-bm25-Basislinie des Papers in einer direkten Reproduktion. Vollständige Tabelle nach Kategorien, Reproduktionsanweisungen und Details zum Paper-Vergleich finden Sie in bench/README.md.
Warum
KI-Codierungssitzungen sind vergänglich. Wenn eine Sitzung endet, ist alles, was sie gelernt hat – Architekturentscheidungen, Debugging-Einblicke, Projektkontext – verloren. Die nächste Sitzung beginnt von Null.
agent-knowledge löst dies mit zwei komplementären Systemen:
Wissensdatenbank – ein git-synchronisierter Markdown-Speicher mit strukturierten Einträgen (Entscheidungen, Arbeitsabläufe, Projektkontext), der über Sitzungen und Maschinen hinweg bestehen bleibt.
Sitzungssuche – TF-IDF-bewertete Volltextsuche über Sitzungstranskripte aller Ihrer Codierungswerkzeuge, sodass Agenten sich daran erinnern können, was zuvor passiert ist – unabhängig davon, welches Werkzeug verwendet wurde.
Related MCP server: Memory-MCP
Unterstützte Werkzeuge
Sitzungen aller gängigen KI-Codierungsassistenten werden automatisch erkannt – wenn ein Werkzeug installiert ist, erscheinen seine Sitzungen automatisch.
Werkzeug | Format | Automatisch erkannter Pfad |
Claude Code | JSONL |
|
Cursor | JSONL |
|
Codex CLI | JSONL |
|
Aider | Markdown/JSONL |
|
Continue.dev | JSON |
|
Cline | JSON | VS Code globalStorage |
OpenCode | SQLite |
|
Keine Konfiguration erforderlich. Zusätzliche Sitzungswurzeln können über die Umgebungsvariable AGENT_KNOWLEDGE_EXTRA_SESSION_ROOTS hinzugefügt werden (durch Kommas getrennte Pfade).
Funktionen
Host-unabhängige Sitzungssuche -- einheitliche Suche über alle gängigen KI-Codierungsassistenten (Claude Code, Cursor, Codex CLI, Aider, Continue.dev, Cline, OpenCode). Kein Hostname ist in der Konfiguration fest verdrahtet – die Adapter-Registry prüft beim Start installierte Host-Wurzeln.
Hybride Suche -- semantische Vektorähnlichkeit kombiniert mit TF-IDF-Keyword-Ranking
Git-synchronisierte Wissensdatenbank -- Markdown-Speicher mit YAML-Frontmatter, automatisches Commit und Push bei Schreibvorgängen
Automatische Veraltungserkennung --
knowledge_analyze(action: "stale_by_code_activity")kreuzreferenziert Dateipfade, die in jedem Eintragstext erwähnt werden, mitfilesModifiedin aktuellen Sitzungszusammenfassungen. Gepaart mit einer Präzisionsschicht für Symbolpräsenz: Bezeichner, die der Eintrag zitiert (Inline-Backticks + Codeblöcke), werden in der berührten Datei überprüft; wenn sie weiterhin existieren, wird die Konfidenz um ×0,3 herabgestuft. Einträge mitevergreen: truesind ausgenommen.Verfolgung von Suchlücken --
knowledge_analyze(action: "search_gaps")zeigt Null-Ergebnis-Abfragen der letztensince_days, gruppiert nach Token-Jaccard-Ähnlichkeit. Das klarste Signal für „Welche Einträge sollte ich als Nächstes schreiben?".Kontextpacker mit Abschnittspriorität --
knowledge(action: "wakeup")erstellt ein mehrteiliges Bündel (identity→active_tasks→recent_decisions→known_gotchas→last_session_summary→top_weighted→semantic_fallback) innerhalb eines Token-Budgets (Standard 800, überschreibbar übertoken_budgetoderAGENT_KNOWLEDGE_WAKEUP_BUDGET). Nicht genutztes Abschnittsbudget wird auf spätere Abschnitte umverteilt.Bewerteter und abgesicherter Promoter -- Sitzungseinblicke werden über einen gewichteten Bewerter mit 6 Signalen und drei unabhängigen Toren (
minScore,minRecallCount,minUniqueQueries) gefördert. Läuft automatisch im Hintergrund, auf Anfrage überknowledge_admin(action: "promote")oder offline testbar übernpm run bench:promote. Gibt bei jedem Lauf ein prüfbares.dreams/YYYY-MM-DD.md-Tagebuch aus.Plugbares Adaptersystem -- Unterstützung für neue Werkzeuge durch Implementierung der
SessionAdapter-SchnittstelleEmbeddings -- lokale (Hugging Face), OpenAI, Claude/Voyage oder Gemini-Anbieter
Fuzzy-Matching -- tolerante Suche bei Tippfehlern mittels Levenshtein-Distanz
6 Suchbereiche -- Fehler, Pläne, Konfigurationen, Werkzeuge, Dateien, Entscheidungen
6 MCP-Werkzeuge -- konsolidierte aktionsbasierte Schnittstelle (
knowledge,knowledge_search,knowledge_session,knowledge_graph,knowledge_analyze,knowledge_admin)Evergreen-Einträge --
evergreen: trueim Frontmatter befreit einen Eintrag vom Verfall im Ranking UND macht ihn unter Promotion nur anhängbar. Das Dashboard zeigt auf diesen Karten ein Pinn-Nadel-Abzeichen.Autorenzuordnung -- optionales
author: <string>-Frontmatter erscheint als dezenter Chip auf jeder Karte.Code-Graph-Auflösung --
calls,imports,inherits-Kantentypen für Codestruktur; gerichtete BFS-Traversierung (outbound/inbound/both);bulk_linkfür effiziente Erfassung;unlink_by_originzum Löschen veralteter Code-Kanten vor erneuter Erfassung;code:-präfixierte Knoten-IDs unterscheiden Code von WissenTemporaler Wissensgraph -- Kanten unterstützen
valid_from/valid_to-Gültigkeitsfenster;as_of-Abfragen liefern Punkt-in-der-Zeit-Schnappschüsse;invalidate-Aktion markiert Fakten als beendet, ohne sie zu löschenHybride Bewertungsverstärkungen -- Verstärkungen für Eigennamen und zeitliche Nähe zusätzlich zur TF-IDF + semantischen Mischung, begrenzt auf +66,7%, Kurzschluss, wenn keine Signale vorhanden sind
Kategorie als Verstärkung (nicht Filter) -- Opt-in zu
category_mode: "boost", sodass eine falsche Kategorievermutung die richtige Antwort herabstuft, anstatt sie zu verwerfenWörtliche Sitzungsindizierung -- Nachrichten-Chunks (≥30 Zeichen) werden in den Vektorspeicher eingebettet, sodass rohe Konversation abrufbar ist; umschaltbar mit
AGENT_KNOWLEDGE_INDEX_VERBATIM=falseKonfigurierbare Git-URL --
knowledge_admin(action: "config")für Laufzeit-Setup, gespeichert am XDG/AppData-SpeicherortMaschinenübergreifende Persistenz -- Wissen wird über Git synchronisiert, Sitzungen werden aus dem lokalen Speicher jedes Werkzeugs gelesen
Echtzeit-Dashboard -- durchsuchen, suchen und verwalten unter
localhost:3423Schwärzung von Geheimnissen -- API-Schlüssel, Tokens, Passwörter, private Schlüssel werden vor dem Git-Push automatisch geschwärzt
Wissensgraph -- Beziehungskanten zwischen Einträgen (related_to, supersedes, depends_on, contradicts, specializes, part_of, alternative_to, builds_on) mit BFS-Traversierung
Konfidenz-/Verfallbewertung -- Einträge werden nach Zugriffshäufigkeit und Aktualität bewertet; automatische Beförderung von Kandidat zu etabliert zu bewährt
Speicherkonsolidierung -- TF-IDF-Duplikaterkennung beim Schreiben (warnt vor ähnlichen Einträgen) plus
knowledge_analyze(action: "consolidate")für Stapel-Dedup-ScanReflexionszyklus --
knowledge_analyze(action: "reflect")zeigt unverbundene Einträge und generiert strukturierte Aufforderungen für den Agenten, neue Graphverbindungen zu identifizierenAutomatische Verlinkung beim Schreiben -- neue Einträge werden automatisch mit den 3 ähnlichsten vorhandenen Einträgen verlinkt, wenn die Kosinus-Ähnlichkeit > 0,7 ist
Konfidenz-Metadaten — Einträge mit
extracted(benutzergeschrieben) oderinferred(automatisch destilliert, 0,85× Suchrang-Multiplikator) gekennzeichnet; das Feldconfidence_scoreträgt die Modellsicherheit 0-1Wissensanalyse —
knowledge_analyze-Aktionengod_nodes(am stärksten verbundene Einträge),bridges(kategorieübergreifende Verbinder),gaps(isolierte Einträge)Wissenszusammenfassung —
knowledge_analyze(action: "brief")gibt eine gecachte Zusammenfassung von ~200 Token zurück (Kernkonzepte, aktive Projekte, aktuelle Entscheidungen, veraltete und Lückenanzahl) für die Orientierung zu SitzungsbeginnKantenherkunft — Graphkanten verfolgen
origin(manuell, Auto-Link, Destillat, Reflexion), sodass die Analyse Benutzerurteil von automatisierten Heuristiken unterscheiden kannDeterministische Vorextraktion bei der Destillation — Sitzungszusammenfassungen enthalten jetzt Git-Commits, Fehlermuster, aufgerufene URLs und geänderte Pakete, die per Regex aus Bash-/Werkzeugausgabe extrahiert werden (keine LLM-Kosten)
Frische-Metadaten bei jedem Suchergebnis — jedes Wissensergebnis trägt
freshness: { body_age_days, last_accessed, access_count, verified_at, verification_age_days, evergreen }. Der Agent liest das Vertrauenssignal und entscheidet; wir erlegen keine Richtlinien-Herabstufung auf.Kategoriespezifische Verfallsfenster — der Filter „Unused" und das Bytype-Diagramm berücksichtigen kategoriespezifische Schwellenwerte (Projekte 180d, Personen 365d, Entscheidungen 90d, Arbeitsabläufe 60d, Notizen 30d), sodass identitätsgeprägte Inhalte nicht nur deshalb veraltet aussehen, weil sie nicht wöchentlich erneut gelesen werden.
Lebenszyklus-Hooks —
SessionStartAuto-Wakeup + Erfassungs-Frischeprüfung,UserPromptSubmitgezielte Injektion beim ersten Prompt,PreCompactSpeicher-Leerungs-Hinweis + Destillat,SessionEndDestillat. Insgesamt sechs Hook-Skripte, alle fail-open, jedes über eineAGENT_KNOWLEDGE_*-Umgebungsvariable umschaltbar. Siehedocs/HOOKS.md.Ersetzt Host-Auto-Speicher — auf Hosts mit einem Sitzungsspeichersystem (Claude Codes
~/.claude/projects/*/memory/, ähnlich in anderen IDEs) leiten Sie dauerhafte Benutzerfakten und Feedback stattdessen an agent-knowledge weiter. Auto-Speicher ist maschinenlokal und für andere Maschinen unsichtbar; agent-knowledge ist git-synchronisiert, maschinenübergreifend, durchsuchbar und erscheint im Wakeup. Siehe den Claude-Code-Integrationshinweis indocs/USER-MANUAL.md.
Codebasis-Erfassung
Die knowledge-ingest-Fähigkeit befüllt oder aktualisiert die Wissensdatenbank aus einem Codebasis-Verzeichnis. Sie verwendet tree-sitter für die strukturelle Extraktion ohne Token (Klassen, Funktionen, Importe, Aufrufgraphen, Begründungskommentare), gruppiert dann Dateien in Subsysteme und erstellt Wissenseinträge + Graphkanten über vorhandene MCP-Werkzeuge. Nachfolgende Läufe sind inkrementell – nur geänderte Dateien werden erneut verarbeitet.
/knowledge-ingest ./my-projectVerwendet den Agent Skills Standard – funktioniert mit Claude Code, OpenCode, Cursor, Codex CLI und Gemini CLI. Einzelheiten finden Sie im Erfassungsleitfaden.
Unterstützte Sprachen: TypeScript, JavaScript, Python, Go, Rust, Java, C, C++.
Schnellstart
Installation über npm
npm install -g agent-knowledgeOder aus dem Quellcode klonen
git clone https://github.com/keshrath/agent-knowledge.git
cd agent-knowledge
npm install && npm run buildOption 1: MCP-Server (für KI-Agenten)
Fügen Sie dies zu Ihrer MCP-Client-Konfiguration hinzu (Claude Code, Cline usw.):
{
"mcpServers": {
"agent-knowledge": {
"command": "npx",
"args": ["agent-knowledge"]
}
}
}Das Dashboard startet automatisch unter http://localhost:3423 bei der ersten MCP-Verbindung.
Siehe Einrichtungsleitfaden für clientspezifische Anweisungen (Claude Code, Cursor, Windsurf, OpenCode).
Option 2: Eigenständiger Server (für REST/WebSocket-Clients)
node dist/server.js --port 3423MCP-Werkzeuge (6)
Wissensdatenbank
Tool | Aktion | Beschreibung | Parameter |
|
| Einträge nach Kategorie und/oder Tag auflisten |
|
| Einen bestimmten Eintrag lesen |
| |
| Eintrag erstellen/aktualisieren (automatische Git-Synchronisierung) |
| |
| Eintrag löschen (automatische Git-Synchronisierung) |
| |
| Manuelles Git pull + push | -- | |
| L0-Identität + L1-Einträge mit höchster Gewichtung zurückgeben (token-budgetiert) |
|
Suche
Tool | Beschreibung | Parameter |
| Allgemeine hybride TF-IDF + semantische Suche (ohne |
|
Eingeschränkter sitzungsbezogener Abruf (wenn |
|
Antwortformat: {mode: "general" \| "scoped", sessions, knowledge}. Der eingeschränkte Modus gibt per Design knowledge: [] zurück.
Bereiche (scopes): errors, plans, configs, tools, files, decisions, all.
Suchoptionen:
mmr: truewendet ein Maximal-Marginal-Relevance-Reranking an (entfernt nahezu doppelte Cluster in den Top-K).mmr_lambda0-1, Standard 0.7.category_mode: "boost"(Standard) gibt Einträgen mit passender Kategorie einen 1,25-fachen Score-Multiplikator, anstatt Nicht-Übereinstimmungen zu verwerfen. Übergeben Sie"filter"für ein striktes Filterverhalten.explain: truefügt jedem Wissens-Trefferscore_components: {bm25, decay, maturity, confidence, category_boost, mmr_penalty}hinzu.
Sitzungen
Tool | Aktion | Beschreibung | Parameter |
|
| Sitzungen mit Metadaten auflisten |
|
| Vollständige Sitzungskonversation abrufen |
| |
| Sitzungszusammenfassung (Themen, Tools, Dateien) |
|
Wissensgraph
Tool | Aktion | Beschreibung | Parameter |
|
| Kante zwischen Einträgen erstellen/aktualisieren |
|
| Kanten zwischen Einträgen entfernen |
| |
| Kanten als abgelaufen markieren (valid_to setzen) |
| |
| Kanten auflisten |
| |
| Gerichtete BFS-Traversierung ab einem Eintrag |
| |
| Kanten in Stapelverarbeitung erstellen (Code-Graph-Erfassung) |
| |
| Alle Kanten nach Ursprung löschen |
|
Wissenstypen: related_to, supersedes, depends_on, contradicts, specializes, part_of, alternative_to, builds_on
Codestrukturtypen: calls, imports, inherits
Traversierungsrichtungen: outbound (Quelle→Ziel), inbound (Ziel→Quelle), both (Standard, ungerichtet)
Analyse
Tool | Aktion | Beschreibung | Parameter |
|
| Nahezu doppelte Einträge finden |
|
| Unverbundene Einträge zum Verknüpfen finden |
| |
| Am stärksten verbundene Einträge (Grad-Zentralität) |
| |
| Kategorieübergreifende Verbinder (Betweenness) |
| |
| Isolierte Einträge (0-1 Kanten) nach Reife |
| |
| Zwischengespeicherte Zusammenfassung der Wissensbasis (~200 Token) | -- |
Verwaltung
Tool | Aktion | Beschreibung | Parameter |
|
| Vektor-Store-Statistiken | -- |
| Konfiguration anzeigen oder aktualisieren |
| |
| Alle Wissenseinträge neu einbetten (nützlich bei Anbieterwechsel) | -- | |
| Einbettungen für nicht mehr auf der Festplatte vorhandene Sitzungen löschen |
| |
| Freie Seiten im Vektor-Store zurückgewinnen | -- | |
| Bewerteter und mit Schwellenwerten versehener Promoter |
|
Bewerteter Promoter
Jeder projektbezogene Kandidat wird anhand von sechs Signalen bewertet (Relevanz 0,30, Häufigkeit 0,24, Abfragevielfalt 0,15, Aktualität 0,15, Konsolidierung 0,10, konzeptioneller Reichtum 0,06) und anhand von minScore ≥ 0,5, minRecallCount ≥ 2, minUniqueQueries ≥ 2 geprüft. Alle drei Schwellenwerte müssen erfüllt sein. Die automatische Promotion im Hintergrund wird über dasselbe Konfigurationsflag auto_distill gesteuert; bei Bedarf mit knowledge_admin(action: "promote") aufrufen.
promote_mode: "explain"(Standard) — Kandidaten bewerten + prüfen, Tagebuch schreiben, Wissensbasis NICHT verändern.promote_mode: "apply"— Kandidaten, die die Prüfung bestehen, promoten, Tagebuch schreiben, Git-Commit erstellen.Jeder Lauf schreibt
~/agent-knowledge/.dreams/YYYY-MM-DD.mdmit Signalaufschlüsselungen und Prüfergebnissen pro Kandidat. Das mit.beginnende Verzeichnis ist git-verfolgt, aber von Liste/Suche ausgeschlossen.Fundierte Rehydrierung: Ein Kandidat wird übersprungen, wenn seine Quellsitzungsdatei nicht mehr auf der Festplatte vorhanden ist (verhindert das Promoten gelöschter Inhalte).
Einträge mit
evergreen: true-Frontmatter werden durch Promotion nie überschrieben — Aktivität wird angehängt.
Write-Bench-Testumgebung: npm run bench:promote — Offline-Wiedergabe mit automatischer Beschriftung durch „in späteren Sitzungen referenziert". Vergleicht den geprüften Promoter mit einer naiven „alles veröffentlichen"-Basislinie und berichtet Präzision / Recall / F1. Verwenden Sie dies, um Signalgewichtungs- oder Schwellenwertänderungen zu prüfen, bevor Sie sie ausrollen.
REST-API
Methode | Endpunkt | Beschreibung |
GET |
| Wissenseinträge auflisten |
GET |
| Wissensbasis durchsuchen |
GET |
| Einen bestimmten Eintrag lesen |
GET |
| Am stärksten verbundene Einträge |
GET |
| Kategorieübergreifende Verbinder |
GET |
| Isolierte Einträge |
GET |
| Kurzübersicht der Wissensbasis |
GET |
| Sitzungen auflisten |
GET |
| Sitzungen durchsuchen (TF-IDF) |
GET |
| Eingeschränkter Abruf |
GET |
| Eine Sitzung lesen |
GET |
| Sitzungszusammenfassung |
POST |
| Eintrag schreiben (HTTP-Clients) |
GET |
| Gesundheitsprüfung |
Architektur
graph LR
subgraph Storage
KB[(Knowledge Base<br/>~/agent-knowledge<br/>Git Repository)]
end
subgraph Session Sources
CC[(Claude Code<br/>JSONL)]
CU[(Cursor<br/>JSONL)]
OC[(OpenCode<br/>SQLite)]
CL[(Cline<br/>JSON)]
CD[(Continue.dev<br/>JSON)]
AI[(Aider<br/>MD / JSONL)]
end
subgraph agent-knowledge
KM[Knowledge Module<br/>store / search / git]
AD[Session Adapters<br/>auto-discovery]
SE[Search Engine<br/>TF-IDF + Fuzzy]
DS[Dashboard<br/>:3423]
MCP[MCP Server<br/>stdio]
end
subgraph Clients
AG[Agent Sessions]
WB[Web Browser]
end
KB <-->|git pull/push| KM
CC --> AD
CU --> AD
OC --> AD
CL --> AD
CD --> AD
AI --> AD
AD --> SE
KM --> MCP
SE --> MCP
KM --> DS
SE --> DS
MCP --> AG
DS --> WBWissensgraph
Einträge und Codesymbole können über typisierte, gewichtete Kanten verbunden werden, die in einer dedizierten edges-SQLite-Tabelle gespeichert sind. Elf Beziehungstypen werden unterstützt — 8 für Wissenskanten und 3 für Codestruktur:
Wissen: related_to, supersedes, depends_on, contradicts, specializes, part_of, alternative_to, builds_on
Codestruktur: calls, imports, inherits
knowledge_graph(action: "link")erstellt oder aktualisiert eine Kante (mit optionaler Stärke 0-1)knowledge_graph(action: "unlink")entfernt Kanten (optional nach Typ gefiltert)knowledge_graph(action: "list")listet Kanten für einen Eintrag oder Beziehungstyp aufknowledge_graph(action: "traverse")führt eine gerichtete BFS-Traversierung ab einem Starteintrag durch. Unterstütztdirection(outbound,inbound,both) undrel_type-Filterknowledge_graph(action: "bulk_link")erstellt Kanten in Stapelverarbeitung in einer einzigen Transaktion (für die Code-Graph-Erfassung)knowledge_graph(action: "unlink_by_origin")löscht alle Kanten mit einem bestimmten Ursprung (zum Löschen veralteter Code-Kanten vor der erneuten Erfassung)
Code-Graph
Codestruktur-Kanten werden von der knowledge-ingest-Fähigkeit während der Codebasis-Erfassung erstellt. Sie verwenden Knoten-IDs mit code:-Präfix:
code:src/auth/middleware.ts # file node
code:src/auth/middleware.ts::validateToken # symbol nodeAbfragebeispiele:
# Who calls validateToken?
knowledge_graph({ action: "traverse", entry: "code:src/auth.ts::validateToken", direction: "inbound", rel_type: "calls", depth: 3 })
# What breaks if I change this function?
knowledge_graph({ action: "traverse", entry: "code:src/auth.ts::validateToken", direction: "inbound", rel_type: "calls", depth: 5 })
# Combined: callers + knowledge context (decisions, design rationale)
knowledge_graph({ action: "traverse", entry: "code:src/auth.ts::validateToken", depth: 2 })Automatische Verknüpfung
Wenn knowledge mit action: "write" einen Eintrag erstellt oder aktualisiert, findet es automatisch die 3 ähnlichsten vorhandenen Einträge über Kosinus-Ähnlichkeit und erstellt related_to-Kanten für jedes Paar mit einem Wert über 0,7.
Konfidenz- & Abkling-Bewertung
Jeder Wissenseintrag hat einen Konfidenzwert, der in der entry_scores-SQLite-Tabelle verfolgt wird. Suchergebnisse werden wie folgt eingestuft:
finalScore = baseRelevance * 0.5^(daysSinceLastAccess / 90) * maturityMultiplierEinträge reifen automatisch basierend auf der Zugriffszahl:
Stufe | Zugriffe | Multiplikator |
| < 5 | 0.5x |
| 5-19 | 1.0x |
| 20+ | 1.5x |
Häufig aufgerufene Einträge steigen im Suchranking; veraltete Einträge verlieren mit der Zeit an Gewicht.
Suchfunktionen
TF-IDF-Ranking -- Ergebnisse werden nach Term Frequency-Inverse Document Frequency bewertet. Seltene Begriffe erhöhen die Relevanz. Globaler Index wird 60 Sekunden lang zwischengespeichert.
Fuzzy-Matching -- Levenshtein-Editierdistanz mit gleitendem Fenster. Konfigurierbarer Schwellenwert (Standard 0,7).
Bereichsbezogener Abruf über knowledge_search mit dem Parameter scope:
Bereich | Treffer |
| Stack-Traces, Ausnahmen, fehlgeschlagene Befehle |
| Architektur, TODOs, Implementierungsschritte |
| Einstellungen, Umgebungsvariablen, Konfigurationsdateien |
| MCP-Tool-Aufrufe, CLI-Befehle |
| Dateipfade, Änderungen |
| Abwägungen, Begründungen, Entscheidungen |
Integrationen
REST-Schreib-Endpunkt
POST /api/knowledge akzeptiert { category, filename, content } und führt die vollständige Schreib-Pipeline aus: git pull → Datei schreiben → Einbettungsindex → Auto-Link → git push → Duplikatprüfung. Gibt { path, autoLinks?, duplicateWarnings?, git } mit Status 201 zurück.
Dies ermöglicht HTTP-basierte Schreibvorgänge von anderen Diensten ohne MCP-Verbindung.
agent-tasks KnowledgeBridge
agent-tasks verfügt über eine eingebaute KnowledgeBridge, die bei Aufgabenabschluss automatisch learning- und decision-Artefakte an agent-knowledge überträgt. Einträge landen in decisions/ mit Frontmatter-Tags (agent-tasks, Projektname, Artefakttyp), werden automatisch mit Einbettungen indiziert und automatisch mit ähnlichen Einträgen verlinkt. Keine Konfiguration erforderlich — wenn agent-knowledge unter localhost:3423 läuft, funktioniert es.
Tests
npm test # 563 tests across 35 files
npm run test:watch # Watch mode
npm run lint # ESLint on src/ and tests/
npm run typecheck # tsc --noEmit
npm run check # typecheck + lint + format + testUmgebungsvariablen
Alle Umgebungsvariablen stehen unter dem Präfix AGENT_KNOWLEDGE_*. Kein Hostname ist fest verdrahtet — die Adapter-Registry erkennt installierte KI-Coding-Hosts automatisch (.claude, .cursor, .codex, .aider, .continue, OpenCode) ohne Konfiguration.
Kern
Variable | Standard | Beschreibung |
|
| Git-synchronisiertes Wissensbasis-Verzeichnis |
| -- | Git-Remote-URL (automatisches Klonen, wenn das Verzeichnis fehlt) |
|
| Sitzungserkenntnisse automatisch in die Wissensbasis destillieren |
|
| Rohe Sitzungsnachrichten-Blöcke in den Vektor-Store indizieren, damit die Konversation später abrufbar ist. Setzen Sie |
| (Plattformkonfiguration) | Primären Host-Datenstamm überschreiben. Im Normalfall ungesetzt lassen — Adapter erkennen automatisch alle bekannten Host-Stämme unter |
| -- | Zusätzliche Sitzungsverzeichnisse, durch Kommas getrennt. Werden zu dem hinzugefügt, was die automatische Erkennung findet. |
|
| Dashboard-HTTP/WebSocket-Port |
Einbettungen
Variable | Standard | Beschreibung |
|
|
|
|
| TF-IDF- vs. semantischer Mischungsfaktor ( |
| -- | Standardmodell des Anbieters überschreiben |
|
| Sekunden bis zum Entladen des lokalen Modells ( |
| (automatisch) | ONNX-/OMP-Thread-Anzahl für den lokalen Anbieter |
API-Schlüssel
Projektbezogene Überschreibungen haben Vorrang vor den Standard-Schlüsseln. Setzen Sie einen von beiden; die projektbezogene Form ermöglicht es, agent-knowledge mit einem anderen Schlüssel auszuführen als den Rest Ihrer Umgebung.
Variable | Fallback | Beschreibung |
|
| OpenAI-Einbettungen |
|
| Claude-/Voyage-Einbettungen |
|
| Gemini-Einbettungen |
Hooks
Variable | Standard | Beschreibung |
|
| Automatisch ein |
|
| Tokens für das Wakeup-Bundle |
|
| Eine gezielte |
|
| Tokens für die First-Prompt-Injektion (Begrenzung |
|
| Maximale Wissens-Treffer, die dem ersten Prompt angehängt werden (Begrenzung |
|
| Vor der Vorkompaktierung den Agenten dazu anregen, Kontext über |
Externe Tool-Überschreibungen
Variable | Standard | Beschreibung |
|
| Überschreiben, wo OpenCodes Sitzungsdatenbank liegt (OpenCodes eigene Umgebungsvariable, von unserem Adapter berücksichtigt) |
Dokumentation
Setup-Guide — Installation, Client-Einrichtung (Claude Code, OpenCode, Cursor, Windsurf), Hooks, Skills
Ingestions-Guide — Codebase-Ingestions-Skill, tree-sitter-Extraktion, inkrementelle Updates
Architektur — Quellstruktur, Designprinzipien, Datenbankschema
Dashboard — Web-UI-Ansichten und Funktionen
Lizenz
Available Tools
6 toolsknowledgeA
Knowledge base CRUD, sync, and session-start hydration. Actions: "list" (browse entries), "read" (get entry content), "write" (create/update entry, auto git sync), "delete" (remove entry, auto git sync), "sync" (manual git pull + push), "wakeup" (return token-budgeted section-priority context bundle — identity, active_tasks, recent_decisions, known_gotchas, last_session_summary, top_weighted, semantic_fallback — call once at session start).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by tag (action=list) | |
| path | No | Relative path to the entry, e.g. 'projects/my-project.md' (action=read, delete) | |
| action | Yes | Action to perform | |
| content | No | Full markdown content for the entry (action=write) | |
| category | No | Category (action=list: filter; action=write: target directory). One of: projects, people, decisions, workflows, notes | |
| filename | No | Filename with or without .md extension (action=write), e.g. 'my-project.md' | |
| sections | No | [wakeup] Comma-separated, ordered section list. Valid: identity, active_tasks, recent_decisions, known_gotchas, last_session_summary, top_weighted, semantic_fallback. Default: all seven in that order. Omit to preserve v1.8.0 behaviour. | |
| token_budget | No | [wakeup] Max tokens to render (chars/4 estimate, default 800) | |
| section_budgets | No | [wakeup] Per-section token-budget overrides, e.g. {"identity": 200, "top_weighted": 400}. Unspecified sections split the remainder evenly. Unused budget redistributes to later sections. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden — and it does disclose meaningful side effects: write/delete trigger auto git sync, sync is a manual git pull+push, and wakeup returns a token-budgeted section-priority bundle. This is solid disclosure for a mutation-capable tool; it only omits reversibility (e.g., whether delete is recoverable from git history) and confirmation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the content is dense and informative, but it is presented as one long run-on sentence without line breaks or structural separation, making the six actions and their caveats harder to parse at a glance. Fewer words could be used; the parentheticals are useful but poorly delimited.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity tool (9 params, 6 actions, enums, nested objects) with no output schema, the description explains wakeup's return bundle but not the return values for the other five actions (e.g., what list returns, what read returns on success/failure). The schema covers parameter semantics well, but the absence of output descriptions for the remaining actions leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the input schema already documents all nine parameters with action-scoped descriptions. The description adds value on top by explaining wakeup semantics — section ordering, defaults, budget behavior — but does not substantially enrich the other parameters beyond what the schema states. A baseline of 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear purpose ('Knowledge base CRUD, sync, and session-start hydration') and enumerates six concrete actions with brief one-line definitions. It implicitly distinguishes from siblings (search, graph, analyze) by being the CRUD/sync/wakeup orchestrator, though it never names the siblings or their differing responsibilities explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is conveyed per-action ('call once at session start' for wakeup, 'auto git sync' for write/delete) and the verb definitions imply when each is appropriate. However, with five siblings present, there is no explicit when-to-use-versus-alternative guidance (e.g., when to prefer knowledge_search over this tool's list action), and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_adminB
Admin operations: view vector store stats, view/update configuration, rebuild embeddings, prune orphan session embeddings, or VACUUM the database. Use action "status" for index stats, "config" to view or update settings, "rebuild_embeddings" to re-embed all knowledge entries (useful when switching providers), "prune_orphans" to delete embeddings for sessions no longer present on disk, "vacuum" to reclaim free pages.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action: status (vector store stats), config (view/update settings), rebuild_embeddings (re-embed all entries), prune_orphans (delete embeddings for missing sessions), vacuum (reclaim free pages), promote (run the scored promoter — see promote_mode) | |
| vacuum | No | Run VACUUM after pruning (action=prune_orphans, default true) | |
| git_url | No | Git remote URL (action=config). Set to empty string to remove. | |
| min_score | No | [promote] Minimum composite score to promote (default: 0.5). | |
| memory_dir | No | Local knowledge base directory (action=config). Empty to reset. | |
| auto_distill | No | Enable/disable scheduled promotion (action=config) | |
| force_vacuum | No | Run VACUUM even if no orphans were pruned (action=prune_orphans) | |
| promote_mode | No | action=promote mode (default: explain). "explain" returns score breakdowns without writing; "apply" promotes candidates that pass all gates. | |
| min_recall_count | No | [promote] Minimum recall count gate (default: 2). | |
| min_unique_queries | No | [promote] Minimum unique-query gate (default: 2). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it does disclose destructive effects for prune_orphans ('delete embeddings') and vacuum ('reclaim free pages'). However, it understates rebuild_embeddings' destructive rewriting of existing embeddings, and it completely omits the 'promote' action's behavior (apply vs explain modes, write behavior vs read-only). For a tool with several destructive operations, the disclosure is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core operations are front-loaded in the opening sentence, with each action's purpose expanded in a single subsequent sentence. The structure is efficient and scannable. Minor deduction for the slightly run-on single-sentence expansion and for leaving out promote, which makes the list feel incomplete rather than intentionally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex admin tool with 10 parameters, 6 actions, no output schema, and no annotations, the description should be comprehensive — but it covers only 5 of 6 actions and omits the entire promote workflow with its 4 dedicated parameters (promote_mode, min_score, min_recall_count, min_unique_queries). An agent reading only the description would never learn a whole callable mode exists, which is a significant completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 10 parameters, giving a baseline of 3. The description adds marginal value by linking rebuild_embeddings to the provider-switching use case, but it adds no semantics beyond the schema for the config params (git_url, memory_dir, auto_distill) and leaves the promote-related parameters entirely unexplained in prose despite them being a substantial cluster of the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear purpose — administrative operations on the knowledge/vector store — and enumerates five concrete actions (status, config, rebuild_embeddings, prune_orphans, vacuum) with their effects. It clearly distinguishes itself from the read/search siblings. However, it silently omits the 'promote' action that exists in the schema enum, and the umbrella phrase 'Admin operations' is vague until the action list clarifies it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives actionable when-to-use context for rebuild_embeddings ('useful when switching providers') and explains what each action accomplishes, which implicitly routes the agent to the right action. But it provides no guidance for the 'promote' action (its dedicated params min_score, min_recall_count, min_unique_queries, promote_mode are never narrated), and it never states when NOT to use the tool or how it differs from siblings beyond 'admin' framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_analyzeA
Analysis tools: find duplicates, unconnected entries, most-connected concepts (god nodes), bridge entries, knowledge gaps, zero-result search queries, stale-by-code-activity entries, or generate a compact knowledge brief. Actions: consolidate, reflect, god_nodes, bridges, gaps, brief, search_gaps, stale_by_code_activity.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Number of results (action=god_nodes default: 10, action=bridges default: 5) | |
| action | Yes | Action: consolidate (find duplicates), reflect (find unconnected entries), god_nodes (most-connected entries), bridges (cross-cluster connectors), gaps (entries with 0-1 edges), brief (compact knowledge base summary), search_gaps (zero-result knowledge_search queries grouped by similarity — the single best signal for "what entries should I write next?"), stale_by_code_activity (entries whose referenced file paths were modified in recent sessions after the entry body was last edited — automatic staleness signal, v1.8.1). | |
| category | No | Scan only this category (omit for all) | |
| min_count | No | [search_gaps] Minimum occurrence count per merged group (default: 1). Raise to surface only repeated misses. | |
| threshold | No | Similarity threshold 0-1 (action=consolidate, default: 0.5) | |
| since_days | No | [search_gaps] Lookback window in days (default: 30). Only queries logged within this window are considered. | |
| max_entries | No | Max unconnected entries to include (action=reflect, default: 20) | |
| group_similarity | No | [search_gaps] Jaccard token similarity threshold for merging near-duplicate queries (default: 0.35, range 0-1). Low because short queries yield low Jaccard even when topically related. | |
| min_touching_sessions | No | [stale_by_code_activity] Minimum distinct sessions that must have modified one of the entry's referenced files for it to be flagged (default: 1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears the full disclosure burden, yet it is internally contradictory on the consolidate action: the verb implies merging/mutation while the gloss '(find duplicates)' implies read-only discovery. There is no statement about whether any action mutates entries, what output shape results, or performance implications — a real gap for a multi-action analysis tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence and the whole description runs roughly 60 words with no filler. The trailing 'Actions:' enumeration is partially redundant with the schema enum but serves as a useful name→semantic mapping, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool — 9 parameters, 8 actions, no output schema, no annotations. All action semantics are enumerated, but the description is silent on per-action return formats and on whether any action (notably consolidate) has side effects, both material for an analysis surface of this breadth.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema's parameter descriptions are unusually rich (per-action defaults, the Jaccard rationale for group_similarity, min_count semantics). The tool description adds little beyond re-listing action names, so the schema-carrying baseline of 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates eight distinct analyses with denotative glosses (duplicates, unconnected entries, god nodes, bridges, gaps, zero-result queries, stale-by-code-activity, brief), clearly binding the tool to knowledge-base entry analysis. This differentiates it from siblings like knowledge_search (querying) and knowledge_admin (admin actions) without needing to open a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each action carries clear context, e.g., 'gaps (entries with 0-1 edges)', 'bridges (cross-cluster connectors)', and search_gaps is explicitly framed as 'the single best signal for what entries should I write next?'. Missing, however, are explicit when-not or alternative statements that route selection against sibling tools at the tool level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_graphB
Knowledge graph operations with temporal validity and code structure support. Create/remove edges, traverse via directed BFS, bulk-import code graph edges. Relationship types: related_to, supersedes, depends_on, contradicts, specializes, part_of, alternative_to, builds_on, calls, imports, inherits. Code structure types (calls/imports/inherits) are created by knowledge-ingest and use "code:" prefixed node IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ISO date — only return edges valid at this date (action=list/traverse, optional) | |
| depth | No | Max traversal depth in hops (action=traverse, default: 2) | |
| edges | No | Array of edges to create (action=bulk_link). Each: { source, target, rel_type, strength?, origin? } | |
| entry | No | Entry path for filtering (action=list) or BFS start (action=traverse) | |
| action | Yes | Action: link (create edge), unlink (remove edge), invalidate (set valid_to), list (list edges), traverse (directed BFS), bulk_link (batch-create edges), unlink_by_origin (delete all edges from a specific origin) | |
| origin | No | Edge origin to delete (action=unlink_by_origin). E.g. "tree-sitter" to clear code graph before re-ingest. | |
| source | No | Source entry path (action=link/unlink/invalidate), e.g. 'projects/my-project.md' | |
| target | No | Target entry path (action=link/unlink/invalidate), e.g. 'decisions/architecture.md' | |
| rel_type | No | Relationship type (required for link, optional filter for unlink/invalidate/list) | |
| strength | No | Edge strength 0-1 (action=link, default: 0.5) | |
| valid_to | No | ISO date the fact stopped being true (action=link/invalidate). For invalidate, defaults to today. | |
| direction | No | Traversal direction (action=traverse, default: both). outbound: follow source→target (what does X call?). inbound: follow target→source (who calls X?). both: undirected (default, preserves legacy behavior). | |
| valid_from | No | ISO date the fact became true (action=link, optional). Null/omitted = unbounded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses temporal validity and that code structure edges are created by knowledge-ingest, which is useful. However, it does not warn about destructive side effects of unlink/invalidate or the scope of bulk operations, leaving behavioral uncertainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise, using three sentences to cover operations, relationship types, and code structure nuance. It could tighten by omitting the redundant relationship list from the enum, but it remains front-loaded and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is present, and the description does not describe return values for actions like list or traverse. It also omits details about state mutations (e.g., irreversibility of unlink). Given the tool's complexity and no annotations, this is a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds minimal value: it re-lists relationship types (already in the enum) and notes the 'code:' prefix for node IDs. It does not explain parameter interactions beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs knowledge graph operations: create/remove edges, traverse via BFS, bulk-import code edges. It also lists relationship types and code structure specifics. However, it does not explicitly contrast with sibling tools like knowledge_search or knowledge_analyze, so differentiation relies on the implicit 'graph' focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus siblings. It does not mention when not to use it, nor does it reference alternative tools. The code structure note implies a use case, but there is no clear routing or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_searchA
Search across sessions AND knowledge entries. Returns {mode, sessions, knowledge}. General mode (no scope): hybrid TF-IDF + semantic over both sources, with optional MMR diversity and category boost. Scoped mode (scope set): sessions-only filtered recall for a specific domain (errors, plans, configs, tools, files, decisions).
| Name | Required | Description | Default |
|---|---|---|---|
| mmr | No | Apply Maximal Marginal Relevance re-ranking to knowledge results (default: false). Trades a small amount of top-1 relevance for diversity in the top-K. | |
| role | No | Filter by message role (default: all, ignored when scope is set) | |
| query | Yes | Search query -- supports keywords and phrases | |
| scope | No | Search scope (optional): errors (stack traces), plans (architecture, TODOs), configs (settings, env vars), tools (MCP tool calls), files (file paths, code refs), decisions (trade-offs, choices), all (no filter). When set, response mode switches to "scoped" and results are sessions-only. | |
| ranked | No | Use TF-IDF ranking (default: true, ignored when scope is set). Set false for regex mode. | |
| explain | No | When true, each knowledge hit carries `score_components` (bm25, decay, maturity, confidence, category_boost, mmr_penalty). | |
| project | No | Restrict search to sessions from this project | |
| category | No | Knowledge category hint (optional). By default applied as a boost (non-matching kept, matching +25%). Pass category_mode="filter" for the legacy hard-filter behavior. | |
| semantic | No | Blend semantic vector similarity with TF-IDF (default: true). Falls back to pure TF-IDF if embeddings unavailable. | |
| mmr_lambda | No | MMR tradeoff 0-1 (default: 0.7). 1.0 = pure relevance; 0.0 = pure diversity. | |
| max_results | No | Maximum number of results to return (default: 20) | |
| category_mode | No | How `category` is applied to knowledge results (default: "boost"). "boost" keeps all entries but gives matching-category entries a 25% score boost; "filter" restricts to matching category only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, and it excels. It reveals the return shape ({mode, sessions, knowledge}), explains the hybrid ranking (TF-IDF + semantic), discloses fallback behavior (pure TF-IDF if embeddings unavailable), details the boost/filter semantics of category, and even mentions the 'score_components' breakdown when explain=true. This is comprehensive transparency for a read-only search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized: it leads with the core action and return format, then systematically explains the two modes and key behaviors. Every sentence adds distinct information (modes, ranking, fallback, category handling) with no filler. It is long, but each phrase earns its place given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 12 parameters, 4 enums, and no output schema, the description covers the critical decision points: mode selection, source scope, ranking approach, category application, and MMR parameter meaning. It explains the return envelope and the score breakdown for explain mode. No essential usage context appears missing; the schema handles parameter-level details, and the description supplies the higher-level orchestration model.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter is already described. The description adds meaningful context beyond the schema by explaining how scope switches modes, how category boost/filter interacts with category_mode, the MMR tradeoff (lambda 1.0 = pure relevance, 0.0 = diversity), and that 'role' is ignored in scoped mode. This is valuable semantic glue, though it doesn't cover every parameter explicitly – some are only in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search across sessions AND knowledge entries.' It immediately clarifies the dual-source nature and then distinguishes two modes (general vs. scoped) with clear scope semantics. This cleanly differentiates it from sibling tools like knowledge_session or knowledge_graph, which are likely more specialized.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use general mode (no scope) vs. scoped mode ('scope' set), including that scoped mode is sessions-only and filtered by domain. It mentions the behavior of parameters like 'role' being ignored when scope is set. However, it does not name any sibling tools as alternatives or give exclusion conditions, so the guidance is strong but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_sessionA
Session operations: list sessions, get a full conversation, or get a summary. Use action "list" to browse sessions, "get" to retrieve messages, "summary" for a quick overview.
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | Only return the last N messages (action=get) | |
| limit | No | Max sessions to return (action=list, default: 20, max: 500) | |
| action | Yes | Action to perform | |
| offset | No | Skip first N sessions (action=list, default: 0) | |
| project | No | Filter by project name (substring match) | |
| session_id | No | Session UUID (required for get, summary) | |
| include_tools | No | Include tool_use and tool_result messages (action=get, default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It states the actions but does not mention whether operations are read-only, side effects, required permissions, error behavior (e.g., invalid session_id), or any rate limits. For a tool with three read-like actions, this is a notable gap; the agent is left to infer safety and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with zero waste. It front-loads the core concept 'Session operations' and immediately explains the three actions. Every sentence contributes to understanding the tool, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides enough to invoke the tool correctly for the three actions, but it omits the response format entirely. Since there is no output schema, the agent is unaware of what each action returns (e.g., list returns an array, get returns messages). For a multi-action tool, this is a moderate gap, though the actions are simple enough that an agent might infer typical behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All seven parameters are fully described in the schema (100% coverage), so the schema carries the heavy lifting. The description adds context for how the action parameter drives behavior (list vs get vs summary) and clarifies the purpose of some parameters indirectly (e.g., tail for get, limit for list), but it does not add new semantic detail beyond the schema. This aligns with the coverage baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Session operations: list sessions, get a full conversation, or get a summary.' It identifies three distinct actions (list, get, summary) and explicitly differentiates from sibling tools by focusing on session operations, which none of the sibling names (knowledge, knowledge_search, knowledge_admin, knowledge_graph, knowledge_analyze) cover.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides per-action guidance: 'Use action list to browse sessions, get to retrieve messages, summary for a quick overview.' This clarifies when to use each action, but it does not mention when to favor this tool over siblings such as knowledge_search or knowledge_analyze. There is no explicit exclusion or alternative routing at the tool level, though the action-level guidance is useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v1.9.7- First observed
knowledge - First observed
knowledge_admin - First observed
knowledge_analyze - First observed
knowledge_graph - First observed
knowledge_search - First observed
knowledge_session
TDQS
Scored across 6 tools
Each tool targets a distinct functional domain: CRUD operations, cross-source search, session management, admin/maintenance, graph relationships, and analysis/insights. The action-based sub-operations are clearly scoped, and there is no meaningful overlap between tools.
All tool names follow the consistent pattern `knowledge_<verb_noun>` using snake_case throughout. The naming convention is uniform, with descriptive suffixes (search, session, admin, graph, analyze) that clearly differentiate purposes.
Six tools is an ideal count for a knowledge-management server. Each tool encapsulates a distinct set of related operations (CRUD, search, sessions, admin, graph, analysis), providing comprehensive functionality without overwhelming the agent.
The toolset covers the full lifecycle of a knowledge base: creating/reading/updating/deleting entries, searching across sessions and entries, managing session history, performing administrative tasks (embeddings, vacuum), maintaining knowledge graph relationships, and deriving analytical insights. No obvious gaps exist; even advanced features like bulk graph import and orphan pruning are included.
Maintenance
Related MCP Connectors
Shared memory for coding agents. Stop re-explaining your codebase every session.
- EngramOAuthtools.engram
Memory for AI agent teams across tools, sessions, repositories, and teammates.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Persistent memory and knowledge graphs for AI agents. Hybrid search, context checkpoints, and more.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceProvides persistent memory for AI coding assistants, storing and retrieving architectural decisions, patterns, and solutions across sessions using semantic search, while also offering git integration for commit messages and code expertise mapping.MIT- AlicenseAqualityDmaintenanceProvides persistent memory for AI agents using hybrid search (vector embeddings + BM25) with neural reranking, enabling storage and retrieval of insights, debugging solutions, and patterns across coding sessions.8MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI coding assistants with persistent, context-rich memory of a codebase, including documentation and git history, enabling recall across sessions.105Apache 2.0
- AlicenseNot gradedqualityBmaintenanceProvides persistent, searchable memory and knowledge capture for AI-assisted development, enabling agents to retain decisions, bugs, and patterns across sessions and projects.MIT