Wie merkt sich ein KI-Agent, was er gelernt hat?
Das Gedächtnis eines Agenten besteht aus verlinkten Markdown-Seiten, eine pro Ding, und nicht aus Tagebucheinträgen. Wie Ablegen, Suchen und Aufräumen zusammenhängen.
Ein Agent schließt ein Ticket ab, in dem ein Zertifikat abgelaufen war. Er hat es erneuert und der Fall ist erledigt. Im Schritt done hält er fest, was er dabei gelernt hat: „Ticket 4711 vom 29.07.2026: Zertifikat abgelaufen."
Zwei Wochen später kommt dasselbe Problem wieder, und er fängt bei null an.
Der Satz ist nicht falsch. Er ist als Gedächtnis wertlos, weil er von einem Vorfall handelt und nicht von einer Sache. Wonach der Agent beim nächsten Mal sucht, heißt Zertifikatserneuerung, und unter diesem Namen steht nichts da.
Eine Seite ist ein Ding, kein Vorfall
Das Gedächtnis eines Agenten ist deshalb weder ein Protokoll noch ein Haufen Textschnipsel. Es ist ein Wiki: verlinkte Markdown-Seiten, eine pro Ding, durchsuchbar über einen pgvector-Index. Ein Ding ist ein Kunde, ein Projekt, ein System, eine Person, ein wiederkehrendes Problem oder ein Thema. Diese sechs Werte bilden das gesamte Vokabular des Gedächtnisses.
PageTypes in internal/memory/memory.go führt sie als bewusst geschlossene und kurze Liste. Der Grund steht im Kommentar daneben: bei den Kanban-Spalten haben frei erfundene Bezeichnungen sich binnen Tagen vermehrt und die Struktur wertlos gemacht. Was nicht passt, wird thema.
Die Regel für den Agenten steht im Wiki-Schema und ist einen Satz lang. Eine neue Seite entsteht, wenn es eine eigenständige Sache ist, auf die von anderswo verwiesen werden kann. Alles andere ist eine Eigenschaft oder eine Fortschreibung von etwas, das schon eine Seite hat, und wandert dorthin.
Die Verweise sind der Graph
Eine Seite zeigt in ihrer Prosa mit [[wikilinks]] auf andere Seiten. extractLinks liest sie aus dem Text heraus und legt sie als Kanten neben der Seite ab: Kunde, Ticket, Lösung, zuständige Kollegin. Das ist der ganze Wissensgraph, ohne Graphstore daneben und ohne Pipeline, die aus Prosa Tripel extrahiert.
Beim Aufgreifen einer Aufgabe liefert die Vektorsuche die passenden Seiten. Wahlweise wird das Ergebnis um einen Verweissprung erweitert. Dieser eine Sprung führt über index.md und die Verweise weiter zu den verbundenen Dingen, etwa vom Kunden zur zuständigen Kollegin und zu deren offenen Themen. Dazu bekommt der Agent den kompakten Index seines gesamten Wikis mit Titel und Slug und weiß damit auch, was er nicht weiß.
Erst suchen, dann höchstens ein Sprung: dafür nennt die Spezifikation zwei Gründe. Der Vektorindex sitzt auf den Seiten und liefert deshalb keine zufälligen Schnipsel mehr, sondern die passenden Seiten. Der kompakte Index zeigt dem Agenten mehr als die besten Treffer und lässt ihn deshalb gezielt navigieren und seltener Dubletten anlegen.
Die Seiten liegen zweimal, mit klarer Rollenteilung
Im Home der Sandbox liegen sie als ~/wiki/<slug>.md samt index.md. Der Agent liest und schreibt sie mit normalen Dateiwerkzeugen, ohne eigene Schnittstelle. Zu Beginn einer Aufgabe materialisiert der Daemon sie dorthin, am Ende synchronisiert er die Änderungen zurück.
Die Control Plane hält die maßgebliche Fassung in Postgres. Geht die Sandbox verloren, ist kein Wissen verloren.
Der Weg über die Control Plane hat noch einen zweiten Zweck. Wer im Unternehmen die Verwaltungsrolle hat, kann eine Seite lesen, einen einzelnen Satz korrigieren oder sie löschen; von Hand gepflegte Seiten tragen source: manual und bleiben so von dem unterscheidbar, was der Agent selbst gelernt hat. Ein Gedächtnis, in das niemand hineinsehen kann, lässt sich auch nicht korrigieren.
Sechs Befunde, die ein Wiki über sich selbst meldet
Eine Seite, die niemand verlinkt, bleibt auffindbar und wird gezählt. Die Qualitätsleiste eines Wikis meldet sie als orphan: eine Seite ohne lebenden ausgehenden Verweis und ohne eingehenden. Daneben stehen tote Verweise, Seiten ohne Typ, Dublettenverdacht und Stummel, also Seiten mit weniger als 120 Zeichen Text.
Als Tagebucheintrag gilt ein Titel ab 80 Zeichen oder einer mit einem Datum darin, wobei eines von beiden genügt. „Ticket 4711 vom 29.07.2026: Zertifikat abgelaufen" bleibt mit 49 Zeichen weit unter der Längengrenze und wird trotzdem gemeldet, weil das Datum darin steht.
Ohne Zutun des Agenten ändern zwei Stellen etwas: Wartungslauf und Traum
Der Befund ändert nichts. Er ist ausdrücklich nur lesend und ersetzt kein Urteil, sondern macht sichtbar, wo eines nötig ist. Ein Wartungslauf in der Control Plane führt Seiten ab einer Ähnlichkeit von 0,93 zusammen, ohne Modell und ohne Kosten. Nachts nimmt sich der Traum höchstens vierzig Seiten vor und entscheidet, welcher Titel ein Ereignis benennt statt einer Sache.
Danach erzählt er, welche Seite er wie umbenannt hat und warum. Eine Umbenennung lässt sich einzeln zurücknehmen. Eine Zusammenführung nicht, denn welcher Satz von welcher Seite kam, wäre danach geraten.
Was das kostet
Zwei Dinge kostet dieses Gedächtnis, und beide gehören dazu.
Die eingebaute Einbettung misst Wortüberlappung. Zwei Sätze wie etwa „Die Pipeline ist rot" und „Der CI-Build schlägt fehl" haben kein Wort gemeinsam, ihre Ähnlichkeit ist null. Damit greift die Zuordnung nicht mehr: Der Agent findet seine eigene Seite nicht wieder, sobald er anders formuliert. Für den Betrieb gehört deshalb eine echte Einbettung davor, über COVEY_EMBEDDING_PROVIDER selbst betrieben oder als Dienst eingekauft.
Das zweite ist die Disziplin beim Ablegen einer Erkenntnis. Wer eine solche per covey/remember als freien Satz abgibt, bekommt sie ab einer Ähnlichkeit von 0,80 an die nächstgelegene Seite angehängt. Darunter entsteht eine neue Seite, und ihr Titel ist der erste Satz, gekürzt auf 80 Zeichen. So kommt der Tagebucheintrag zustande, den nachher jemand aufräumen muss.
Wer jeden Satz einfach ablegt, verschiebt diese Arbeit auf die Kuratierung. Sie soll das Wissen mit jeder Aufgabe dichter machen statt es nur wachsen zu lassen. Ein Gedächtnis, das nur wächst, ist ein Archiv.