Das erste Problem bei der Ausführung mehrerer Agenten besteht darin, dass sie vergessen. Jede Sitzung beginnt leer. Der Kontext von einem Tool wird nicht auf ein anderes übertragen. Gestern getroffene Entscheidungen sind heute unsichtbar. Am Ende erklären Sie die gleichen Dinge noch einmal, oder schlimmer noch, die Agenten widersprechen sich, weil keiner Zugriff auf das hat, was der andere geschrieben hat.

Das ist das Speicherproblem, und es muss zuerst gelöst werden. Sie benötigen eine Zustandsebene, in der jeder Agent Beobachtungen schreiben und den Kontext abfragen kann. Fakten müssen über Sitzungen, Tools und Maschinen hinweg bestehen bleiben. Der Abruf muss unabhängig davon funktionieren, welcher Agent die Daten wann geschrieben hat. [Neotoma](/posts/truth-layer-agent-memory) existiert, um dieses Problem zu lösen: ein schemaagnostisches Substrat, das die Wahrheit über Ihren gesamten Agentenstapel speichert, bereitstellt und Sie abfragen lässt.

Aber sobald die Speicherung funktioniert, stößt man an eine zweite Wand. Wenn ein Agent eine neue Beobachtung schreibt, erfahren die anderen Agenten nichts davon, bis sie es überprüfen. „Überprüfen“ bedeutet Abfragen: erneute Abfragen in Intervallen, beim Sitzungsstart oder bei einem manuellen Auslöser. Die meisten dieser Umfragen geben nichts zurück. Diejenigen, die wichtig sind, kommen Minuten oder Stunden zu spät. Die Lücke zwischen „Status geändert“ und „Agentenbenachrichtigungen“ ist Totzeit und schafft eine Obergrenze dafür, was Agenten gemeinsam tun können.

Dies ist kein Abrufproblem. Die Daten sind da. Es handelt sich um ein Koordinationsproblem auf der Infrastrukturebene, und jedes Homebrew-Speichersystem, das ich gesehen habe, handhabt es auf die gleiche Weise: Das ist nicht der Fall.

## Die Koordinationsdecke

Die auf Umfragen basierende Koordination bringt drei Kosten mit sich, die mit der Größe noch größer werden.

**Latenz.** Der Zeitraum zwischen einer Statusänderung und der Wahrnehmung durch einen Agenten ist durch die Abfragehäufigkeit begrenzt. Wenn ein Agent alle fünf Minuten eine Überprüfung durchführt, kann eine kritische Beobachtung vier Minuten und neunundfünfzig Sekunden lang unbemerkt bleiben. Für Agenten, die zeitkritische Zustände koordinieren, etwa einen Fehlerbericht, der gerade übermittelt wurde, oder eine Finanztransaktion, die abgeglichen werden muss, ist diese Latenz der Flaschenhals.

**Verschwendete Rechenleistung.** Die meisten Umfragen geben keine Änderungen zurück. Ein Agent, der an einem Arbeitstag alle dreißig Sekunden nachfragt, stellt fast tausend Anfragen, von denen die überwältigende Mehrheit bestätigt, dass nichts passiert ist. Dies ist für einen Agenten tolerierbar. Bei zehn Maklern handelt es sich um eine Steuer. Bei 100 handelt es sich um Infrastruktur-Overhead, der linear skaliert und keinen Wert hat.

**Koordinationsobergrenze.** Die Kombination aus Latenz und Verschwendung führt zu einer praktischen Grenze für das Verhalten kollaborativer Agenten. Muster, die bei ereignisgesteuerter Erkennung natürlich wären, wie „Agent B reagiert innerhalb von Sekunden auf Schreibvorgänge von Agent A“, erfordern benutzerdefinierte Kleber: Timer, Webhook-Hacks, manuelle Trigger oder dedizierte Polling-Daemons, die selbst gewartet werden müssen. Die gewünschten Koordinationsmuster sind unkompliziert. Es gibt keine Installation, die dafür sorgt, dass sie mit Polling funktionieren.

Wenn Sie einen Multi-Agenten-Stack aufgebaut haben, sind Sie an dieser Grenze angelangt. Die Zustandsschicht speichert die Wahrheit zuverlässig. Es schweigt über Änderungen dieser Wahrheit.

## Was Signalisierung bedeutet

Die Lösung ist vom Konzept her einfach. Nach jedem Schreibvorgang gibt die Statusschicht ein strukturiertes Ereignis aus, das beschreibt, was sich geändert hat. Registrierte Verbraucher, Agenten, Daemons und Peer-Instanzen empfangen das Ereignis und entscheiden, was dagegen zu tun ist. Die Zustandsschicht liefert das Signal. Der Verbraucher entscheidet über die Reaktion.

Dies ist ein Standardgrundelement in Systemen, die Zustände im Maßstab verarbeiten. PostgreSQL gibt WAL-Einträge aus und unterstützt LISTEN/NOTIFY. Niemand behauptet, dass PostgreSQL dabei „handelt“. Es sorgt für Beobachtbarkeit seiner eigenen Zustandsübergänge. Ein Nachrichtenbroker wie Kafka macht dasselbe, jedoch auf einer anderen Ebene. Das staatliche System berichtet, was passiert ist. Nachgeschaltete Verbraucher filtern, priorisieren und handeln. Die Berichtsebene macht keine Überlegungen zu den Ereignissen. Es feuert und vergisst.

Die biologische Analogie ist hier nützlich. Ein Nervensystem speichert und signalisiert. Das Gehirn speichert Erinnerungen. Sinnesneuronen vermitteln das Bewusstsein darüber, was sich verändert hat. Keiner von beiden beschließt, einen Muskel zu bewegen. Das motorische System wirkt. Eine Zustandsschicht, die Wahrheit speichert und Veränderungen signalisiert, ist das Gehirn und die Sinnesnerven. Die Akteure, die entscheiden, was mit diesen Signalen geschehen soll, sind das motorische System.

## Die Linie, die bleiben muss

Eine Statusebene, die Signale sendet, kann leicht zu einem Orchestrator, einer Workflow-Engine oder einem eigenständigen Agenten werden. Die Versuchung ist real. Sobald Sie Ereignisse ausgeben können, möchten Sie diese filtern, priorisieren, weiterleiten, Wiederholungslogik hinzufügen und eine bedingte Zustellung erstellen. Jeder Schritt klingt für sich genommen sinnvoll. Zusammen verwandeln sie das Substrat in etwas, das Entscheidungen darüber trifft, was wichtig ist und was nicht.

Diese Linie muss bleiben.

Was Signalisierung ist:

- **Beobachtung einer Zustandsänderung, keine Aktion auf den Zustand.** Das Substrat meldet, was sich geändert hat. Es wird nicht bewertet, ob die Änderung wichtig ist.
- **Fire-and-Forget-Zustellung.** Wenn ein Verbraucher nicht verfügbar ist, protokolliert das Substrat den Fehler. Es unternimmt keine erneuten Eskalationsversuche, greift nicht auf alternative Maßnahmen zurück und ändert auch nicht sein eigenes Verhalten.
– **Eine abgeleitete Ausgabe der Schreibpipeline.** Die vorhandene Pipeline ist Schreiben, Snapshot-Neuberechnung, Timeline-Upsert. Die Ereignisemission ist ein weiterer Eintrag in dieser Sequenz, genauso wie bei einem Schnappschuss Daten aus einer Beobachtung abgeleitet werden. Es wird ausgeführt, nachdem die Schreibtransaktion festgeschrieben wurde, nicht während. Wenn der Schreibvorgang fehlschlägt, wird kein Ereignis ausgelöst. Wenn eine Zustellung fehlschlägt, bleibt der Schreibvorgang bestehen. Das Signal folgt der Wahrheit; es öffnet nie ein Tor.

Welche Signalisierung ist nicht:

- **Keine Entscheidungsfindung.** Das Substrat filtert nicht, welche Ereignisse es wert sind, gesendet zu werden. Es strahlt sie alle aus. Verbraucherfilter.
- **Kein Agentenverhalten.** Das Substrat abonniert keine eigenen Ereignisse. Es werden keine Schleifen ausgeführt. Es ist kein Grund.
- **Keine Orchestrierung.** Keine Priorisierung, keine Planung, kein bedingtes Routing. Daemons, die Ereignisse verarbeiten und Maßnahmen ergreifen, sind Verbraucher auf der operativen Ebene und nicht Teil des Substrats.

Der Test ist sauber. Wenn das Entfernen der Ereignisemission bedeuten würde, dass das Substrat seine eigenen Zustandsübergänge weniger beobachten kann, handelt es sich um ein Substratprimitiv. Wenn das Entfernen dazu führen würde, dass ein Benutzer eine Erinnerung verpasst oder ein Agent eine Frist verpasst, ist das eine Strategie.

## Die verfeinerte Grenze

Die alte Grenze: Das Substrat speichert und dient der Wahrheit.

Die neue Grenze: Das Substrat speichert, dient und signalisiert die Wahrheit. Wenn sich die Wahrheit ändert, meldet das Substrat die Änderung. Was als nächstes passiert, liegt in der Verantwortung des Verbrauchers.

Das ist eine Erweiterung, kein Widerspruch. Die vorhandene Schreibpipeline führt nach jedem Schreibvorgang bereits abgeleitete Arbeiten aus: Snapshot-Neuberechnung, Erstellung von Zeitleistenereignissen, Einbettungsgenerierung, automatische Verknüpfung. Die Ereignisemission ist ein weiterer Eintrag in der Liste. Es ist kein neues Datenmodell erforderlich. Es ändert nichts daran, was gespeichert wird oder wie Abfragen aufgelöst werden. Es fügt einen ausgehenden Kanal zur Sensibilisierung für Zustandsänderungen hinzu.

Die Terminologie ist wichtig. „Signalisieren“ und „aussenden“ statt „benachrichtigen“ oder „alarmieren“. Benachrichtigen impliziert eine Beurteilung der Wichtigkeit. Warnung impliziert eine Dringlichkeitsbewertung. Signal ist neutral. Die Substratsignale. Der Verbraucher interpretiert.

Es lohnt sich, deutlich zu machen, wo die Strategie in diesem Bild verankert ist. Pläne, Geschäftsregeln, Präferenzen und vorherige Entscheidungen sind selbst festgelegt. Sie sind wie alle anderen im Substrat gespeicherte Entitäten, die auf die gleiche Weise abgefragt, reduziert und signalisiert werden. Sie laufen nicht in einer separaten Ebene. Die Grenze liegt nicht zwischen „Strategie lebt in einem anderen System“ und „Staat lebt im Substrat“. Es liegt zwischen „das Substrat speichert und signalisiert“ und „Konsumenten entscheiden und handeln entsprechend dem, was sie lesen“. Dadurch bleiben Strategieartefakte einsehbar, wiederholbar und werden von jedem Verbraucher geteilt, der sie liest, ohne dass das Substrat über die Grenze gezogen wird, um eine Entscheidung zu treffen.

## Vom Gedächtnis zum Nervensystem

Die meisten Leute, die Multiagentensysteme entwickeln, bezeichnen das gemeinsame Substrat immer noch als „Speicher“. Diese Formulierung ist soweit zutreffend. Erinnerung ist Speicherung und Abruf: Das System zeichnet auf, was passiert ist, und Agenten fragen es ab, wenn sie Kontext benötigen. Das ist die Grundlage, und sie muss funktionieren, bevor alles andere zählt.

Aber das Gedächtnis ist passiv. Es enthält die Wahrheit. Es überträgt das Bewusstsein über Veränderungen in der Wahrheit nicht an die Teile des Systems, die reagieren müssen. Eine Speicherschicht, die eine neue Finanztransaktion speichert, teilt dem Abstimmungsagenten nicht mit, dass die Transaktion angekommen ist. Eine Speicherschicht, die einen neuen Fehlerbericht aufzeichnet, teilt dem Triage-Daemon nicht mit, dass etwas Aufmerksamkeit erfordert. Die Daten sind da. Das Bewusstsein ist es nicht.

Ein Nervensystem fügt die Übertragungsschicht hinzu. Es umfasst alles, was das Gedächtnis tut, Speicherung und Abruf, aber es erweitert die Verantwortung des Substrats um die Signalübertragung. Die staatliche Ebene hält nicht nur die Wahrheit bereit. Es gibt Änderungen der Wahrheit in Echtzeit an registrierte Verbraucher weiter.

Der richtige Maßstab, um dies zu beurteilen, ist die Integrität des Staates, nicht die Abrufqualität. Der Speicher wird danach beurteilt, ob Sie ihn zurückfragen können. Ein Nervensystem wird danach beurteilt, ob der Rest des Systems in dem Moment, in dem die Veränderung dauerhaft ist, auf eine Veränderung reagieren kann, und nicht erst Minuten später, wenn etwas passiert. Das sind unterschiedliche Probleme mit unterschiedlichen Fehlermodi.

Die biologische Rahmung ist präzise, ​​nicht dekorativ. Ein Gehirn ohne Sinnesnerven kann Erinnerungen perfekt speichern und ist dennoch nicht in der Lage, auf die Umgebung zu reagieren. Das fehlende Teil ist kein Speicher. Es ist der Signalweg zwischen dem, was sich geändert hat, und dem, was man darüber wissen muss. Das ist das Stück, das Sie am Ende von Hand bauen, eine Abfrageschleife nach der anderen, bis klar wird, dass es in den Untergrund gehört.

## Was dadurch freigeschaltet wird

Wenn Sie einen Multi-Agent-Stack für den gemeinsam genutzten Status ausführen, überlegen Sie, was möglich wird, wenn die Statusebene beim Schreiben Signale sendet.

**Ein Daemon, der eingehende Arbeiten innerhalb von Sekunden nach der Übermittlung verarbeitet.** Ein Benutzer oder externer Agent übermittelt einen Fehlerbericht, eine Funktionsanfrage oder strukturiertes Feedback. Die Zustandsschicht speichert die Entität und gibt ein Ereignis aus. Ein Daemon mit langer Laufzeit empfängt den Webhook, erstellt einen Arbeitsbaum, führt eine Agentensitzung für die relevante Codebasis aus, öffnet einen PR und aktualisiert den Entitätsstatus. Keine Abrufschleife. Keine Überprüfung des Cron-Timers alle fünf Minuten. Der Daemon abonniert einmal und reagiert, wenn Arbeit eintrifft.

**Toolübergreifende Koordination ohne Klebercode.** Ein Finanzabstimmungsagent abonniert Transaktionsbeobachtungen. Ein Content-Pipeline-Agent abonniert Entwurfsstatusänderungen. Ein Issue-Triage-Agent abonniert nach Typ gefilterte Entitätserstellungsereignisse. Jeder Verbraucher registriert Interesse an einem Bereich, allen Ereignissen, Ereignissen für einen bestimmten Entitätstyp, Ereignissen für eine bestimmte Entität und stellt einen Bereitstellungsendpunkt bereit. Das Substrat liefert. Der Verbraucher behält die Logik bei. Keine benutzerdefinierte Integration pro Agentenpaar.

**Agenten, die über das Substrat miteinander kommunizieren können.** Die Agent-zu-Agent-Kommunikation funktioniert bereits über die Statusebene: Konversations-Threading, Absenderidentität, Mehrparteien-Thread-Semantik. Was fehlt, ist der Anstoß. Wenn Agent A eine Nachricht für Agent B schreibt, sollte Agent B keine Abfrage durchführen müssen, um sie zu erkennen. Das Substrat sollte beim Schreiben ein Signal senden, sodass die Konversation mit der Verarbeitungsgeschwindigkeit und nicht mit der Abfragegeschwindigkeit fortgesetzt wird.

**Strukturierte Gasteinreichungen mit Zugriffskontrolle.** Jeder Entitätstyp, nicht nur ein Typ in Sonderfällen, kann für externe Einreichungen mit konfigurierbaren Zugriffsrichtlinien geöffnet werden. Der Agent eines Kunden gibt strukturiertes Feedback. Die Automatisierung eines Partners übermittelt Daten zum Abgleich. Das Substrat legt fest, wer was schreiben darf, verfolgt die Herkunft externer Akteure und leitet Folgegespräche. Die Übermittlung ist ein dauerhafter Zustand, keine Nachricht, die verschwindet.

## Über Ihre eigenen Agenten hinaus

Bisher sieht es so aus, als ob die Agenten alle Ihnen gehören. Sie befinden sich in Ihrem Editor, Ihren Cronjobs, Ihrem Laptop. Das ist der einfache Fall. Es ist nicht das ganze Bild.

Der natürliche Fortschritt ist eine zentrale Instanz auf Ihrem Computer plus Satelliteninstanzen auf anderer Infrastruktur: Client-Server, Team-VPS-Droplets, Remote-Agenten, die Sie betreiben, aber nicht besitzen. Sobald Sie dort sind, ist Umfragen nicht nur verschwenderisch. Es ist strukturell blind. Sie stellen eine SSH-Verbindung her, führen Zusammenfassungen aus und fragen, „was zwischen diesen Daten passiert ist“, da der Remote-Store das Bewusstsein nie an den Ort zurückschickt, an dem Ihre koordinierenden Agenten ausgeführt werden.

Dabei handelt es sich um eine Koordination über Vertrauensgrenzen hinweg, nicht nur über Prozesse hinweg. Wenn der Autor der Agent einer anderen Person ist, reicht „gemeinsames Gedächtnis“ nicht aus. Sie benötigen Schreibvorgänge, die Sie im Nachhinein zuordnen, prüfen und verifizieren können. Das bedeutet eine verifizierte Autoridentität auf jeder Oberfläche (MCP, HTTP, signierte Anfragen), Zuordnungsebenen, die einen kryptografisch verifizierten Agenten von einem anonymen Anrufer unterscheiden, und Konversationsformen, die Agent-zu-Agent- und Mehrparteien-Threads umfassen, sodass die grenzüberschreitende Kommunikation eher ein strukturierter Zustand als Ad-hoc-Nachrichten ist.

Die Signalisierung rundet das Bild ab. Eine Satelliteninstanz, die beim Schreiben Ereignisse ausgibt, stellt Ihren zentralen Verbrauchern das gleiche Grundelement zur Verfügung, auf das sie bereits lokal angewiesen sind. Letztendlich können zwei Instanzen bidirektional synchronisiert werden: Wenn sich eine Entität auf Instanz A ändert, wird Instanz B benachrichtigt und kann das Update ohne manuelles Eingreifen abrufen. Kein zentraler Hub erforderlich. Jede Instanz kann ein Peer sein.

Der „offene“ Teil ist die Interoperabilität nach Regeln, nicht ein Prinzip, bei dem es für alle gilt. Durch offene Oberflächen sowie explizite Identitäts- und Thread-Semantik lassen Sie die Agenten anderer Leute an einem Nervensystem teilhaben, ohne vorzugeben, dass jeder Anrufer gleichermaßen vertrauenswürdig oder gleichermaßen lesbar ist. Memory Framing unterbietet diese Anforderung. Die Einrahmung des Nervensystems ist nicht der Fall.

## Was ich baue

Ich füge diese Funktionen nacheinander zu [Neotoma](/posts/truth-layer-agent-memory) hinzu, wobei jede auf der vorherigen aufbaut.

**Emission eines Schreibpfadereignisses.** Geben Sie nach jedem erfolgreichen Schreibvorgang, jeder erfolgreichen Korrektur oder jeder erfolgreichen Beziehungserstellung ein strukturiertes Ereignis aus: Entitätstyp, Entitäts-ID, Beobachtungstyp, Zeitstempel und die geänderten Felder. Verbraucher erhalten genügend Informationen, um zu entscheiden, ob sie handeln möchten, ohne die Statusebene erneut abfragen zu müssen. Dies ist die Sensorschicht. Ohne sie erfordert jede Downstream-Funktion eine Abfrage. Dadurch wird das Substrat reaktiv.

**Abonnement und Webhook-Zustellung.** Agenten registrieren Interesse an einem Bereich und stellen einen Zustellungsendpunkt bereit. Das Substrat verwaltet die Registrierung und liefert Ereignisse über Webhook-Rückrufe und SSE. Der Verbraucher behält die Logik bei. Webhooks stehen an erster Stelle, weil sie für Remote-Agenten in der VPS-Infrastruktur, lokale Daemons auf Ihrem Laptop und die instanzübergreifende Synchronisierung zwischen Peers funktionieren. SSE- und MCP-Push-Benachrichtigungen sind additiv.

**Generalisierte Entitätsübermittlung.** Derzeit gibt es strukturierte externe Übermittlungen (Gastzugriff, Zugriffsrichtlinien, Konversationsthreading, Herkunft externer Akteure), die jedoch mit einem einzigen Entitätstyp verbunden sind. Der nächste Schritt besteht darin, diesen Entitätstyp unabhängig zu machen: Jeder Entitätstyp kann für Gastbeiträge mit konfigurierbaren Zugriffsrichtlinien, optionalen externen Spiegeln und Konversationsthreading geöffnet werden. Der Agent eines Kunden übermittelt strukturierte Daten. Die Automatisierung eines Partners übermittelt Feedback. Das Substrat übernimmt die Zugangskontrolle und Herkunft. Der Betreiber konfiguriert, was geöffnet ist und was nicht.

**Bidirektionale instanzübergreifende Synchronisierung.** Die vorhandene Infrastruktur unterstützt die unidirektionale Remote-Übermittlung: Eine Instanz sendet an eine andere. Die Erweiterung ist bidirektional. Wenn sich eine Entität auf Instanz A ändert, empfängt Instanz B einen Webhook und kann das Update abrufen. Kein zentraler Knotenpunkt. Jede Instanz kann mit jeder anderen Peer-Verbindung bestehen. Auf diese Weise bleibt eine Flotte von Satelliteninstanzen in der Client-Infrastruktur mit einer zentralen Instanz ohne SSH und Cron koordiniert.

Nichts davon ist die ehrgeizigste Version dessen, was ein „Nervensystem“ sein könnte. Routing, Filterung, Transformation, Zustellgarantien, Warteschlangen für unzustellbare Nachrichten: Message Broker bieten all das. Ich baue absichtlich nichts davon. Die Aufgabe des Substrats besteht darin, zu signalisieren, nicht zu orchestrieren. Jedes Merkmal, das diese Grenze überschreitet, macht das Substrat als neutralen Berichterstatter für Staatsübergänge weniger vertrauenswürdig.

Die Einschränkung ist das Feature. Eine Zustandsschicht, die signalisiert, aber nicht entscheidet, ist eine Zustandsschicht, über die Sie immer noch nachdenken können. Wenn Sie dem Signalpfad Logik auf der Betriebsebene hinzufügen, verlieren Sie die Eigenschaft, die das Substrat überhaupt erst nützlich gemacht hat: Das Verhalten des Substrats wird vollständig durch den Schreibvorgang und nicht durch die Richtlinie bestimmt.