O primeiro problema com a execução de vários agentes é que eles esquecem. Cada sessão começa em branco. O contexto de uma ferramenta não é transferido para outra. As decisões tomadas ontem são invisíveis hoje. Você acaba explicando novamente as mesmas coisas, ou pior, os agentes se contradizem porque nenhum deles tem acesso ao que o outro escreveu.

Esse é o problema de armazenamento e precisa ser resolvido primeiro. Você precisa de uma camada de estado onde cada agente possa escrever observações e cada agente possa consultar o contexto. Os fatos precisam persistir entre sessões, ferramentas e máquinas. A recuperação deve funcionar independentemente de qual agente gravou os dados ou quando. [Neotoma](/posts/truth-layer-agent-memory) existe para resolver isso: um substrato independente de esquema que armazena, serve e permite consultar a verdade em toda a sua pilha de agentes.

Mas uma vez que o armazenamento funciona, você se depara com uma segunda parede. Quando um agente escreve uma nova observação, os outros agentes não sabem disso até verificarem. "Verificar" significa sondagem: nova consulta em intervalos, no início da sessão ou em um acionamento manual. A maioria dessas pesquisas não retorna nada. Os que importam chegam minutos ou horas atrasados. A lacuna entre o “estado alterado” e os “avisos dos agentes” é um tempo morto e cria um limite para o que os agentes podem fazer juntos.

Este não é um problema de recuperação. Os dados estão lá. É um problema de coordenação na camada de infraestrutura, e todos os sistemas de memória homebrew que vi lidam com isso da mesma maneira: não é assim.

## O teto de coordenação

A coordenação baseada em pesquisas tem três custos que aumentam com a escala.

**Latência.** O intervalo entre uma mudança de estado e um agente tomar conhecimento dela é limitado pela frequência da pesquisa. Se um agente verifica a cada cinco minutos, uma observação crítica pode passar despercebida por quatro minutos e cinquenta e nove segundos. Para agentes que coordenam estados urgentes, como um relatório de bug que acabou de ser enviado ou uma transação financeira que precisa de reconciliação, essa latência é o gargalo.

**Cálculo desperdiçado.** A maioria das pesquisas não retorna alterações. Um agente que verifica a cada trinta segundos durante um dia de trabalho faz quase mil consultas, a esmagadora maioria das quais confirma que nada aconteceu. Isto é tolerável para um agente. Com dez agentes, é um imposto. Aos cem, é a sobrecarga de infraestrutura que aumenta linearmente sem valor.

**Teto de coordenação.** A combinação de latência e desperdício cria um limite prático no comportamento colaborativo do agente. Padrões que seriam naturais com reconhecimento orientado a eventos, como "O Agente B reage à gravação do Agente A em segundos", exigem cola personalizada: temporizadores, hacks de webhook, gatilhos manuais ou daemons de pesquisa dedicados que precisam de manutenção. Os padrões de coordenação que você deseja são diretos. O encanamento para fazê-los funcionar com pesquisas não é.

Se você construiu uma pilha multiagente, você atingiu esse obstáculo. A camada de estado armazena a verdade de forma confiável. Ele permanece em silêncio sobre as mudanças nessa verdade.

## O que significa sinalização

A correção é simples em conceito. Após cada gravação, a camada de estado emite um evento estruturado descrevendo o que mudou. Consumidores, agentes, daemons e instâncias de pares registrados recebem o evento e decidem o que fazer a respeito. A camada de estado entrega o sinal. O consumidor decide a resposta.

Esta é uma primitiva padrão em sistemas que lidam com estado em escala. PostgreSQL emite entradas WAL e suporta LISTEN/NOTIFY. Ninguém afirma que o PostgreSQL está “agindo” quando faz isso. Ele fornece observabilidade em suas próprias transições de estado. Um corretor de mensagens como Kafka faz a mesma coisa em uma escala diferente. O sistema estadual relata o que aconteceu. Os consumidores downstream filtram, priorizam e agem. A camada de relatório não raciocina sobre os eventos. Ele dispara e esquece.

A analogia biológica é útil aqui. Um sistema nervoso armazena e sinaliza. O cérebro guarda a memória. Os neurônios sensoriais transmitem consciência do que mudou. Nenhum dos dois decide mover um músculo. O sistema motor atua. Uma camada de estado que armazena a verdade e sinaliza mudanças é o cérebro e os nervos sensoriais. Os agentes que decidem o que fazer com esses sinais são o sistema motor.

## A linha que tem que ficar

Uma camada de estado que sinaliza pode facilmente se tornar um orquestrador, um mecanismo de fluxo de trabalho ou um agente por si só. A tentação é real. Depois de emitir eventos, você deseja filtrá-los, priorizá-los, roteá-los, adicionar lógica de nova tentativa e criar entrega condicional. Cada passo parece razoável isoladamente. Juntos, eles transformam o substrato em algo que toma decisões sobre o que é importante e o que não é.

Essa linha tem que ficar.

O que é sinalização:

- **Observação sobre a mudança de estado, não ação sobre o estado.** O substrato relata o que mudou. Não avalia se a mudança é importante.
- **Entrega do tipo "dispare e esqueça".** Se um consumidor não estiver disponível, o substrato registra a falha. Ele não tenta novamente com escalada, recorre a ações alternativas ou altera seu próprio comportamento.
- **Uma saída derivada do pipeline de gravação.** O pipeline existente é gravação, recomputação de instantâneo e upsert da linha do tempo. A emissão do evento é mais uma entrada nessa sequência, da mesma forma que um instantâneo é derivado de dados de uma observação. Ele é executado após a confirmação da transação de gravação, não durante. Se a gravação falhar, nenhum evento será acionado. Se uma entrega falhar, a gravação continuará válida. O sinal segue a verdade; nunca o bloqueia.

O que a sinalização não é:

- **Não é tomada de decisão.** O substrato não filtra quais eventos valem a pena enviar. Ele emite todos eles. Filtro de consumidores.
- **Não é comportamento do agente.** O substrato não assina seus próprios eventos. Não executa loops. Não raciocina.
- **Sem orquestração.** Sem priorização, sem agendamento, sem roteamento condicional. Os daemons que processam eventos e agem são consumidores da camada operacional, e não fazem parte do substrato.

O teste está limpo. Se a remoção da emissão de eventos significar que o substrato tem menos observabilidade em suas próprias transições de estado, é um substrato primitivo. Se removê-lo significaria que um usuário perderia um lembrete ou um agente perderia um prazo, é uma estratégia.

## O limite refinado

A velha fronteira: o substrato armazena e serve a verdade.

A nova fronteira: o substrato armazena, serve e sinaliza a verdade. Quando a verdade muda, o substrato reporta a mudança. O que acontece a seguir é responsabilidade do consumidor.

Isto é uma extensão, não uma contradição. O pipeline de gravação existente já faz trabalho derivado após cada gravação: recálculo de instantâneo, criação de evento de linha do tempo, geração de incorporação, vinculação automática. A emissão de eventos é mais uma entrada na lista. Não requer nenhum novo modelo de dados. Isso não altera o que é armazenado ou como as consultas são resolvidas. Ele adiciona um canal de saída para conscientização sobre mudanças de estado.

A terminologia é importante. "Sinalizar" e "emitir" em vez de "notificar" ou "alertar". Notificar implica julgamento sobre importância. Alerta implica avaliação de urgência. O sinal é neutro. Os sinais do substrato. O consumidor interpreta.

Vale a pena ser explícito sobre onde reside a estratégia neste cenário. Planos, regras permanentes, preferências e decisões prévias são, em si, estados. São entidades armazenadas no substrato como qualquer outra, consultadas, reduzidas e sinalizadas da mesma forma. Eles não estão sendo executados em alguma camada separada. A fronteira não é entre “a estratégia vive em outro sistema” e “o estado vive no substrato”. Está entre “o substrato armazena e sinaliza” e “os consumidores decidem e agem de acordo com o que lêem”. Isso mantém os artefatos estratégicos inspecionáveis, reproduzíveis e compartilhados entre todos os consumidores que os lêem, sem arrastar o substrato para a decisão.

## Da memória ao sistema nervoso

A maioria das pessoas que constroem sistemas multiagentes ainda descreve o substrato compartilhado como “memória”. Esse enquadramento é preciso até onde vai. Memória é armazenamento e recuperação: o sistema registra o que aconteceu e os agentes consultam quando precisam de contexto. Essa é a base e tem que funcionar antes de qualquer outra coisa.

Mas a memória é passiva. Contém a verdade. Não transmite a consciência das mudanças na verdade às partes do sistema que precisam reagir. Uma camada de memória que armazena uma nova transação financeira não informa ao agente de reconciliação que a transação chegou. Uma camada de memória que registra um novo relatório de bug não informa ao daemon de triagem que algo precisa de atenção. Os dados estão lá. A consciência não é.

Um sistema nervoso adiciona a camada de transmissão. Abrange tudo o que a memória faz, o armazenamento e a recuperação permanecem, mas estende a responsabilidade do substrato para incluir a sinalização. A camada estatal não contém apenas a verdade. Ele propaga mudanças de verdade aos consumidores cadastrados em tempo real.

A barreira certa para julgar isso é a integridade do estado, não a qualidade da recuperação. A memória é avaliada pela capacidade de consultá-la. Um sistema nervoso é julgado pela capacidade do resto do sistema de agir sobre uma mudança no momento em que a mudança é durável, em vez de minutos depois, quando algo acontece para perguntar. Esses são problemas diferentes com modos de falha diferentes.

O enquadramento biológico é preciso e não decorativo. Um cérebro sem nervos sensoriais pode armazenar memórias perfeitamente e ainda assim ser incapaz de reagir ao ambiente. A peça que falta não é armazenamento. É o caminho de sinalização entre o que mudou e o que precisa ser conhecido sobre isso. Essa é a peça que você acaba construindo manualmente, um loop de pesquisa de cada vez, até ficar óbvio que ela pertence ao substrato.

## O que isso desbloqueia

Se você estiver executando uma pilha multiagente em estado compartilhado, considere o que se torna possível quando a camada de estado sinaliza durante a gravação.

**Um daemon que processa o trabalho recebido segundos após o envio.** Um usuário ou agente externo envia um relatório de bug, uma solicitação de recurso ou feedback estruturado. A camada de estado armazena a entidade e emite um evento. Um daemon de longa execução recebe o webhook, cria uma árvore de trabalho, executa uma sessão de agente na base de código relevante, abre um PR e atualiza o estado da entidade. Sem ciclo de votação. Sem verificação de cronômetro a cada cinco minutos. O daemon se inscreve uma vez e reage quando o trabalho chega.

**Coordenação entre ferramentas sem código cola.** Um agente de reconciliação financeira assina observações de transações. Um agente de pipeline de conteúdo assina rascunhos de alterações de estado. Um agente de triagem de problemas assina eventos de criação de entidade filtrados por tipo. Cada consumidor registra interesse em um escopo, todos os eventos, eventos para um tipo de entidade específico, eventos para uma entidade específica e fornece um terminal de entrega. O substrato oferece. O consumidor mantém a lógica. Nenhuma integração personalizada por par de agentes.

**Agentes que podem conversar entre si por meio do substrato.** A comunicação entre agentes já funciona por meio da camada de estado: encadeamento de conversação, identidade do remetente, semântica de encadeamento multipartidário. O que falta é o empurrão. Quando o Agente A escreve uma mensagem destinada ao Agente B, o Agente B não deveria ter que pesquisar para descobri-la. O substrato deve sinalizar na gravação para que a conversa prossiga na velocidade do processamento, não na velocidade da pesquisa.

**Envios de convidados estruturados com controle de acesso.** Qualquer tipo de entidade, não apenas um tipo de caso especial, pode ser aberto para envios externos com políticas de acesso configuráveis. O agente de um cliente envia feedback estruturado. A automação de um parceiro envia dados para reconciliação. O substrato impõe quem pode escrever o quê, rastreia a proveniência do ator externo e encadeia conversas de acompanhamento. O envio é um estado durável, não uma mensagem que desaparece.

## Além de seus próprios agentes

Até agora, parece que todos os agentes pertencem a você. Eles ficam no seu editor, nos seus cron jobs, no seu laptop. Esse é o caso fácil. Não é o quadro completo.

A progressão natural é uma instância central em sua máquina mais instâncias satélite em outra infraestrutura: servidores clientes, droplets VPS de equipe, agentes remotos que você opera, mas não possui. Uma vez lá, a votação não é apenas um desperdício. É estruturalmente cego. Você faz login por SSH, executa resumos e pergunta "o que aconteceu entre essas datas" porque o armazenamento remoto nunca leva o reconhecimento de volta ao local onde seus agentes coordenadores operam.

Isto é coordenação através dos limites de confiança, não apenas entre processos. Quando o escritor é agente de outra pessoa, a “memória compartilhada” não é suficiente. Você precisa de gravações que possa atribuir, inspecionar e verificar após o fato. Isso significa identidade verificada do autor em todas as superfícies (MCP, HTTP, solicitações assinadas), níveis de atribuição que distinguem um agente verificado criptograficamente de um chamador anônimo e formatos de conversação que incluem threads de agente para agente e multipartidários, de modo que a comunicação entre fronteiras é um estado estruturado em vez de mensagens ad hoc.

A sinalização completa o quadro. Uma instância satélite que emite eventos durante a gravação fornece aos consumidores centrais a mesma primitiva da qual eles já dependem localmente. Eventualmente, duas instâncias podem sincronizar bidirecionalmente: quando uma entidade muda na instância A, a instância B é notificada e pode obter a atualização sem intervenção manual. Não é necessário nenhum hub central. Qualquer instância pode ser um par.

A parte “aberta” é a interoperabilidade sob regras, e não um vale-tudo. Superfícies abertas, além de identidade explícita e semântica de thread, permitem que os agentes de outras pessoas participem de um sistema nervoso sem fingir que cada chamador é igualmente confiável ou legível. O enquadramento da memória subestima esse requisito. O enquadramento do sistema nervoso não.

## O que estou construindo

Estou adicionando esses recursos ao [Neotoma](/posts/truth-layer-agent-memory) em sequência, cada um baseado no anterior.

**Emissão de evento de caminho de gravação.** Após cada gravação, correção ou criação de relacionamento bem-sucedida, emita um evento estruturado: tipo de entidade, ID de entidade, tipo de observação, carimbo de data/hora e os campos que foram alterados. Os consumidores obtêm informações suficientes para decidir se devem agir sem precisar consultar novamente a camada de estado. Esta é a camada de detecção. Sem ele, todo recurso downstream requer pesquisa. Com isso, o substrato torna-se reativo.

**Assinatura e entrega de webhook.** Os agentes registram interesse em um escopo e fornecem um endpoint de entrega. O substrato mantém o registro e entrega eventos por meio de retornos de chamada de webhook e SSE. O consumidor mantém a lógica. Os webhooks vêm em primeiro lugar porque funcionam para agentes remotos na infraestrutura VPS, daemons locais em seu laptop e sincronização entre instâncias entre pares. As notificações push SSE e MCP são aditivas.

**Envio generalizado de entidades.** No momento, existem envios externos estruturados (acesso de convidados, políticas de acesso, encadeamento de conversas, proveniência de atores externos), mas estão conectados a um único tipo de entidade. A próxima etapa é tornar esse tipo de entidade agnóstico: qualquer tipo de entidade pode ser aberto para envios de convidados com políticas de acesso configuráveis, espelhos externos opcionais e threading de conversação. O agente de um cliente envia dados estruturados. A automação de um parceiro envia feedback. O substrato cuida do controle de acesso e da procedência. O operador configura o que está aberto e o que não está.

**Sincronização bidirecional entre instâncias.** A infraestrutura existente oferece suporte ao envio remoto unidirecional: uma instância envia para outra. A extensão é bidirecional. Quando uma entidade muda na instância A, a instância B recebe um webhook e pode extrair a atualização. Nenhum hub central. Qualquer instância pode fazer peering com qualquer outra. É assim que uma frota de instâncias satélite na infraestrutura do cliente permanece coordenada com uma instância central sem SSH e cron.

Nada disso é a versão mais ambiciosa do que poderia ser um “sistema nervoso”. Roteamento, filtragem, transformação, garantias de entrega, filas de mensagens mortas: os corretores de mensagens fornecem tudo isso. Intencionalmente não estou construindo nada disso. A função do substrato é sinalizar, não orquestrar. Cada característica que ultrapassa essa linha torna o substrato menos confiável como repórter neutro das transições de estado.

A restrição é o recurso. Uma camada de estado que sinaliza, mas não decide, é uma camada de estado sobre a qual você ainda pode raciocinar. Adicione a lógica da camada operacional ao caminho de sinalização e você perderá a propriedade que tornou o substrato útil em primeiro lugar: o comportamento do substrato é totalmente determinado pela gravação, não pela política.