El primer problema amb l'execució de diversos agents és que s'obliden. Cada sessió comença en blanc. El context d'una eina no es trasllada a una altra. Les decisions preses ahir són invisibles avui. Acabes tornant a explicar les mateixes coses, o pitjor, els agents es contradiuen perquè cap dels dos té accés al que va escriure l'altre.

Aquest és el problema d'emmagatzematge i primer s'ha de resoldre. Necessiteu una capa d'estat on cada agent pugui escriure observacions i cada agent pugui consultar el context. Els fets han de persistir entre sessions, eines i màquines. La recuperació ha de funcionar independentment de quin agent hagi escrit les dades o quan. [Neotoma](/posts/truth-layer-agent-memory) existeix per resoldre això: un substrat independent de l'esquema que emmagatzema, serveix i us permet consultar la veritat a tota la vostra pila d'agents.

Però un cop funciona l'emmagatzematge, toqueu una segona paret. Quan un agent escriu una nova observació, els altres agents no en saben fins que la comproven. "Comprovar" significa enquestar: tornar a consultar per intervals, a l'inici de la sessió o en un activador manual. La majoria d'aquestes enquestes no retornen res. Els que importen arriben minuts o hores tard. La bretxa entre "l'estat canviat" i els "avisos d'agents" és temps mort, i crea un sostre al que els agents poden fer junts.

Aquest no és un problema de recuperació. Les dades hi són. És un problema de coordinació a la capa d'infraestructura, i tots els sistemes de memòria homebrew que he vist ho gestionen de la mateixa manera: no.

## El sostre de coordinació

La coordinació basada en enquestes té tres costos que s'agreguen a l'escala.

**Latència.** L'interval entre un canvi d'estat i un agent que en pren consciència està limitat per la freqüència d'enquesta. Si un agent comprova cada cinc minuts, una observació crítica pot passar desapercebuda durant quatre minuts i cinquanta-nou segons. Per als agents que es coordinen en un estat sensible al temps, com ara un informe d'error que s'acaba d'enviar o una transacció financera que necessita conciliació, aquesta latència és el coll d'ampolla.

**Calculat malgastat.** La majoria de les enquestes no retornen cap canvi. Un agent que revisa cada trenta segons durant un dia laboral fa prop d'un miler de consultes, la gran majoria de les quals confirmen que no ha passat res. Això és tolerable per a un agent. A deu agents, és un impost. A cent, és una sobrecàrrega d'infraestructura que escala linealment sense cap valor.

**Sostre de coordinació.** La combinació de latència i malbaratament crea un límit pràctic en el comportament dels agents col·laboratius. Els patrons que serien naturals amb la consciència basada en esdeveniments, com ara "L'agent B reacciona a l'escriptura de l'agent A en qüestió de segons", requereixen una cola personalitzada: temporitzadors, hacks de webhook, activadors manuals o dimonis d'enquesta dedicats que necessiten manteniment. Els patrons de coordinació que voleu són senzills. La fontaneria per fer-los funcionar amb enquestes no ho és.

Si heu creat una pila de diversos agents, heu tocat aquest mur. La capa estatal emmagatzema la veritat de manera fiable. Es manté en silenci sobre els canvis en aquesta veritat.

## Què significa la senyalització

La solució és senzilla en concepte. Després de cada escriptura, la capa d'estat emet un esdeveniment estructurat que descriu què ha canviat. Els consumidors registrats, els agents, els dimonis, les instàncies iguals, reben l'esdeveniment i decideixen què fer-hi. La capa d'estat lliura el senyal. El consumidor decideix la resposta.

Aquesta és una primitiva estàndard en sistemes que gestionen l'estat a escala. PostgreSQL emet entrades WAL i admet LISTEN/NOTIFY. Ningú afirma que PostgreSQL està "actuant" quan ho fa. Proporciona observabilitat en les seves pròpies transicions d'estat. Un corredor de missatges com Kafka fa el mateix a una escala diferent. El sistema estatal informa del que va passar. Els consumidors aigües avall filtren, prioritzen i actuen. La capa d'informes no raona sobre els esdeveniments. Dispara i oblida.

L'analogia biològica és útil aquí. Un sistema nerviós emmagatzema i senyala. El cervell conté la memòria. Les neurones sensorials transmeten la consciència del que ha canviat. Cap dels dos decideix moure un múscul. El sistema motor actua. Una capa d'estat que emmagatzema la veritat i els senyals de canvis és el cervell i els nervis sensorials. Els agents que decideixen què fer amb aquests senyals són el sistema motor.

## La línia que s'ha de quedar

Una capa d'estat que els senyals poden derivar fàcilment cap a convertir-se en un orquestrador, un motor de flux de treball o un agent per dret propi. La temptació és real. Un cop pugueu emetre esdeveniments, voleu filtrar-los, prioritzar-los, encaminar-los, afegir una lògica de reintentar, crear un lliurament condicional. Cada pas sona raonable aïlladament. Junts, converteixen el substrat en una cosa que pren decisions sobre què és important i què no.

Aquesta línia s'ha de mantenir.

Què és la senyalització:

- **Observació sobre el canvi d'estat, no acció sobre l'estat.** El substrat informa del que ha canviat. No avalua si el canvi és important.
- **Enviament de foc i oblida't.** Si un consumidor no està disponible, el substrat registra l'error. No torna a intentar-ho amb l'escalada, no torna a accions alternatives ni altera el seu propi comportament.
- **Una sortida derivada de la canalització d'escriptura.** La canalització existent és l'escriptura, el càlcul d'instantànies, la pujada de la línia de temps. L'emissió d'esdeveniments és una entrada més d'aquesta seqüència, de la mateixa manera que es deriven dades d'una instantània a partir d'una observació. S'executa després de la confirmació de la transacció d'escriptura, no durant. Si l'escriptura falla, no es dispara cap esdeveniment. Si un lliurament falla, l'escriptura continua vigent. El senyal segueix la veritat; mai el tanca.

Què no és la senyalització:

- **No presa de decisions.** El substrat no filtra quins esdeveniments val la pena enviar. Les emet totes. Filtre els consumidors.
- **No comportament de l'agent.** El substrat no subscriu els seus propis esdeveniments. No fa bucles. No raona.
- **No orquestració.** Sense priorització, sense programació, sense encaminament condicional. Els dimonis que processen esdeveniments i actuen són consumidors de la capa operativa, no formen part del substrat.

La prova està neta. Si eliminar l'emissió d'esdeveniments significaria que el substrat té menys observabilitat en les seves pròpies transicions d'estat, és un substrat primitiu. Si eliminar-lo voldria dir que un usuari perd un recordatori o un agent no té una data límit, és una estratègia.

## El límit refinat

L'antic límit: el substrat emmagatzema i serveix la veritat.

El nou límit: el substrat emmagatzema, serveix i indica la veritat. Quan la veritat canvia, el substrat informa del canvi. El que passa després és responsabilitat del consumidor.

Això és una extensió, no una contradicció. La canalització d'escriptura existent ja fa un treball derivat després de cada escriptura: recomputació d'instantànies, creació d'esdeveniments de línia de temps, generació d'inserció, enllaç automàtic. L'emissió d'esdeveniments és una entrada més a la llista. No requereix cap model de dades nou. No canvia el que s'emmagatzema ni com es resolen les consultes. Afegeix un canal de sortida per a la consciència del canvi d'estat.

La terminologia importa. "Señal" i "emetre" en lloc de "notificar" o "alerta". Notificar implica un judici sobre la importància. L'alerta implica una avaluació d'urgència. El senyal és neutre. Els senyals del substrat. El consumidor interpreta.

Val la pena ser explícit sobre on viu l'estratègia en aquesta imatge. Els plans, les normes vigents, les preferències i les decisions prèvies són en si mateixos estats. Són entitats emmagatzemades al substrat com qualsevol altra, consultades i reduïdes i senyalitzades de la mateixa manera. No s'executen en cap capa separada. El límit no és entre "l'estratègia viu en un altre sistema" i "l'estat viu en el substrat". Està entre "les botigues de substrat i senyals" i "els consumidors decideixen i actuen en funció del que llegeixen". Això manté els artefactes estratègics inspeccionables, reproduïbles i compartits entre tots els consumidors que els llegeixen, sense arrossegar el substrat per decidir.

## De la memòria al sistema nerviós

La majoria de les persones que construeixen sistemes multiagent encara descriuen el substrat compartit com a "memòria". Aquest enquadrament és exacte fins on arriba. La memòria és emmagatzematge i recuperació: el sistema registra el que ha passat i els agents ho consulten quan necessiten context. Aquesta és la base, i ha de funcionar abans que qualsevol altra cosa importa.

Però la memòria és passiva. Conté la veritat. No transmet consciència dels canvis en la veritat a les parts del sistema que necessiten reaccionar. Una capa de memòria que emmagatzema una nova transacció financera no indica a l'agent de conciliació que la transacció ha arribat. Una capa de memòria que enregistra un nou informe d'error no diu al dimoni de triatge que alguna cosa necessita atenció. Les dades hi són. La consciència no ho és.

Un sistema nerviós afegeix la capa de transmissió. Engloba tot el que fa la memòria, l'emmagatzematge i l'estada de recuperació, però amplia la responsabilitat del substrat per incloure la senyalització. La capa estatal no només conté la veritat. Propaga els canvis de veritat als consumidors registrats en temps real.

La barra adequada per jutjar això és la integritat de l'estat, no la qualitat de la recuperació. La memòria es jutja en funció de si pots tornar-la a consultar. Un sistema nerviós es jutja per si la resta del sistema pot actuar sobre un canvi en el moment en què el canvi és durador, en lloc de minuts més tard quan es demana alguna cosa. Aquests són problemes diferents amb diferents modes de fallada.

L'enquadrament biològic és precís, no decoratiu. Un cervell sense nervis sensorials pot emmagatzemar els records perfectament i encara no pot reaccionar a l'entorn. La peça que falta no és emmagatzematge. És la via de senyal entre el que ha canviat i el que cal saber sobre això. Aquesta és la peça que acabes construint a mà, un bucle de sondeig a la vegada, fins que es fa evident que pertany al substrat.

## Què desbloqueja això

Si esteu executant una pila de diversos agents en un estat compartit, tingueu en compte què és possible quan la capa d'estat s'enregistra a l'escriptura.

**Un dimoni que processa el treball entrant en qüestió de segons.** Un usuari o un agent extern envia un informe d'error, una sol·licitud de funció o comentaris estructurats. La capa d'estat emmagatzema l'entitat i emet un esdeveniment. Un dimoni de llarga execució rep el webhook, crea un arbre de treball, executa una sessió d'agent contra la base de codi rellevant, obre un PR i actualitza l'estat de l'entitat. Sense bucle de votació. No es revisa el cron timer cada cinc minuts. El dimoni es subscriu una vegada i reacciona quan arriba el treball.

**Coordinació entre eines sense codi de cola.** Un agent de conciliació financera subscriu les observacions de transaccions. Un agent de canalització de contingut se subscriu als canvis d'estat d'esborrany. Un agent de triatge de problemes se subscriu als esdeveniments de creació d'entitats filtrats per tipus. Cada consumidor registra interès en un àmbit, tots els esdeveniments, esdeveniments per a un tipus d'entitat específic, esdeveniments per a una entitat específica i proporciona un punt final de lliurament. El substrat ofereix. El consumidor manté la lògica. No hi ha integració personalitzada per parell d'agents.

**Agents que es poden parlar entre ells a través del substrat.** La comunicació d'agent a agent ja funciona a través de la capa d'estat: fil de conversa, identitat del remitent, semàntica de fil multipartit. El que falta és l'empenta. Quan l'agent A escriu un missatge destinat a l'agent B, l'agent B no hauria d'haver d'enquestar per descobrir-lo. El substrat hauria de senyalitzar en escriptura perquè la conversa continuï a la velocitat de processament, no a la velocitat de sondeig.

**Enviaments de convidats estructurats amb control d'accés.** Qualsevol tipus d'entitat, no només un tipus de casos especials, es pot obrir a enviaments externs amb polítiques d'accés configurables. L'agent d'un client envia comentaris estructurats. L'automatització d'un soci envia dades per a la conciliació. El substrat fa complir qui pot escriure què, fa un seguiment de la procedència dels actors externs i connecta converses de seguiment. L'enviament és un estat durador, no un missatge que desapareix.

## Més enllà dels teus propis agents

Fins ara, això sembla com si tots els agents us pertanyin. S'asseuen al vostre editor, als vostres treballs de cron, al vostre ordinador portàtil. Aquest és el cas fàcil. No és tota la imatge.

La progressió natural és una instància central a la vostra màquina més instàncies de satèl·lit en altres infraestructures: servidors de clients, gotes de VPS d'equip, agents remots que opereu però que no teniu. Un cop hi ets, les enquestes no són només un malbaratament. És estructuralment cec. Entreu, feu resums, pregunteu "què va passar entre aquestes dates" perquè la botiga remota mai no torna la consciència al lloc on funcionen els vostres agents coordinadors.

Aquesta és la coordinació entre els límits de confiança, no només entre processos. Quan l'escriptor és l'agent d'una altra persona, la "memòria compartida" no és suficient. Necessites escrits que puguis atribuir, inspeccionar i verificar després dels fets. Això significa una identitat de l'escriptor verificada a totes les superfícies (MCP, HTTP, sol·licituds signades), nivells d'atribució que distingeixen un agent verificat criptogràficament d'una persona que truca anònima i formes de conversa que inclouen fils d'agent a agent i de diverses parts, de manera que la comunicació transfronterera sigui un estat estructurat en lloc de missatges ad hoc.

La senyalització completa la imatge. Una instància de satèl·lit que emet esdeveniments en escriptura ofereix als vostres consumidors centrals la mateixa primitiva en què ja confien localment. Finalment, dues instàncies es poden sincronitzar bidireccionalment: quan una entitat canvia a la instància A, la instància B es notifica i pot treure l'actualització sense intervenció manual. No es requereix cap concentrador central. Qualsevol instància pot ser igual.

La part "oberta" és la interoperabilitat sota regles, no un lliure per a tots. Les superfícies obertes i la identitat explícita i la semàntica del fil són com permeteu que els agents d'altres persones participin en un sistema nerviós sense pretendre que cada persona que truca sigui igual de fiable o igualment llegible. L'enquadrament de memòria supera aquest requisit. L'enquadrament del sistema nerviós no.

## El que estic construint

Estic afegint aquestes capacitats a [Neotoma](/posts/truth-layer-agent-memory) en seqüència, cadascuna basant-se en l'anterior.

**Emissió d'esdeveniments del camí d'escriptura.** Després de cada escriptura, correcció o creació de relacions amb èxit, emet un esdeveniment estructurat: tipus d'entitat, identificador d'entitat, tipus d'observació, marca de temps i camps que han canviat. Els consumidors obtenen prou informació per decidir si actuen sense necessitat de tornar a consultar la capa d'estat. Aquesta és la capa de detecció. Sense ell, totes les capacitats aigües avall requereixen enquestes. Amb ell, el substrat es torna reactiu.

**Enviament de subscripció i webhook.** Els agents registren interès en un àmbit i proporcionen un punt final de lliurament. El substrat manté el registre i ofereix esdeveniments mitjançant devolució de trucades de webhook i SSE. El consumidor manté la lògica. Els webhooks són el primer perquè funcionen per a agents remots a la infraestructura VPS, els dimonis locals al vostre ordinador portàtil i la sincronització entre instàncies entre iguals. Les notificacions push SSE i MCP són additives.

**Enviament d'entitats generalitzat.** Ara mateix, existeixen enviaments externs estructurats (accés de convidats, polítiques d'accés, fils de conversa, procedència d'actors externs), però estan connectats a un sol tipus d'entitat. El següent pas és fer que aquest tipus d'entitat sigui independent: qualsevol tipus d'entitat es pot obrir als enviaments de convidats amb polítiques d'accés configurables, miralls externs opcionals i fils de conversa. L'agent d'un client envia dades estructurades. L'automatització d'un soci envia comentaris. El substrat gestiona el control d'accés i la procedència. L'operador configura què està obert i què no.

**Sincronització bidireccional entre instàncies.** La infraestructura existent admet l'enviament remot unidireccional: una instància envia a una altra. L'extensió és bidireccional. Quan una entitat canvia a la instància A, la instància B rep un webhook i pot treure l'actualització. No hi ha centre central. Qualsevol instància pot comparar-se amb qualsevol altra. Així és com una flota d'instàncies satèl·lit a la infraestructura del client es manté coordinada amb una instància central sense SSH i cron.

Res d'això és la versió més ambiciosa del que podria ser un "sistema nerviós". Encaminament, filtratge, transformació, garanties d'entrega, cues de missatges sense lliurament: els intermediaris de missatges ofereixen tot això. No n'estic construint intencionadament res. La feina del substrat és senyalitzar, no orquestrar. Cada característica que creua aquesta línia fa que el substrat sigui menys fiable com a reporter neutral de les transicions d'estat.

La restricció és la característica. Una capa d'estat que senyalitza però no decideix és una capa d'estat sobre la qual encara podeu raonar. Afegiu la lògica de la capa operativa al camí de senyalització i perdreu la propietat que va fer que el substrat sigui útil en primer lloc: el comportament del substrat està totalment determinat per l'escriptura, no per la política.