
Manutenção de agentes: dar memória própria aos coding agents
O problema: cada sessão começa do zero
O autor, que trabalha em várias máquinas e alterna entre coding agents conforme a tarefa, descreve um problema recorrente: todo agente encontra seus projetos como um estranho. O raciocínio da sessão anterior desaparece quando ela termina, e cada novo agente, em cada novo host, parte do zero.
Um artigo anterior, "Software Forgets: Agent Traces Are the Memory", já argumentava que os coding agents produzem, ao longo do trabalho, o registro que se perde: ao buscar no código, testar abordagens, errar, ler documentação e mudar de direção, eles deixam uma conta densa não apenas do que mudou, mas do porquê. O autor concorda com o diagnóstico, mas sustenta que traços são apenas memória potencial: os registros de sessão são um arquivo, e não é possível usar grep para recuperar "por que abandonamos o parser de streaming?" em dez mil turnos. Para que os agentes usem esses traços, é preciso indexação, recuperação, ranqueamento e proveniência exata.
O que é o funes
funes, projeto do Hugging Face, é uma camada de memória durável para agentes (Claude Code, Codex, pi e Hermes), construída a partir das sessões já presentes na máquina. Funciona localmente e entra no fluxo normal do agente com um comando; quando desejado, também pode ser sincronizada com um dataset do Hugging Face de propriedade do usuário, privado por padrão.
É um binário único, cujo backend de inferência padrão não depende de runtime de ML: embedding e reranking acontecem na máquina do usuário. O comando funes add claude (ou codex, pi, hermes) constrói o índice inicial, dá ao agente as ferramentas recall e get e instala a automação que indexa cada turno concluído. A indexação é incremental: execuções novas adicionam turnos em vez de reprocessar todo o histórico, e o conteúdo antigo pode ser preenchido em etapas limitadas.
Na conversa, o próprio agente aciona o recall quando a tarefa toca uma decisão ou descoberta passada, e cita a sessão por trás da resposta. O recall retorna o texto original, não um resumo, com proveniência (agente, timestamp, sessão e turno), e cada resultado inclui um comando get que abre o turno completo com contexto. Por baixo, um pipeline determinístico converte todos os traços em um mesmo formato de turnos e blocos, gera chunks, faz embedding com um modelo local fixado e grava em um dataset Lance. A consulta combina busca vetorial e BM25, funde os rankings, reranqueia com cross-encoder, repondera por recência e anexa chunks vizinhos.
O desenho traz três propriedades: uma memória única entre agentes (todos escrevem no mesmo formato e cada resultado indica qual agente o produziu); a evidência bruta permanece intacta (nada é destilado em fato na escrita); e o recall é local por padrão (nenhuma conta ou repositório é exigida; um modelo hospedado não processa as sessões).
Memória como dataset, não serviço
Para que a memória siga o trabalho entre máquinas, funes add codex acme/funes-memory vincula uma memória a um dataset do Hub, que é mantido atualizado com publicação nos limites de sessão. Antes de qualquer envio, credenciais já foram removidas durante a indexação, e a publicação escaneia cada chunk novamente, retendo o que ainda parecer segredo - o escaneador está documentado no SECURITY.md, incluindo o que cobre e não cobre. O agente lê a memória remota com cache local, mantendo consultas aquecidas na velocidade local. A memória não vira uma conta em um serviço separado nem é alugada de volta por API.
Há ainda o comando funes ask, irmão somente leitura de add: faz uma pergunta à memória (local ou compartilhada, como a memória pública do próprio desenvolvimento do funes), entrega os trechos ao agente e retorna uma resposta fundamentada que cita as fontes. Se os trechos não sustentam uma resposta, o agente diz isso, sem disfarçar a falha de recuperação.
Escopos e custo
A memória compartilhada não está atrelada ao agente que a criou: uma tarefa pode começar no Claude Code e ser retomada no Codex, que recupera o raciocínio anterior. Os escopos incluem múltiplas máquinas, equipes (o agente de um novo colega acessa meses de decisões no primeiro dia, incluindo becos sem saída que nunca entraram em pull request) e projetos open-source (o mantenedor publica as sessões por trás de um release, como um CLAUDE.md pesquisável com o histórico do projeto).
No benchmark handoff-vs-recall, com duas tarefas cuja resposta não pode ser reconstruída sem a sessão anterior, a compactação foi a única das três abordagens com resultado dividido: chegou à resposta em uma tarefa e nunca na outra, pois o resumo achatou achados relevantes. O recall foi a opção mais barata nas duas: 8x mais barato que um handoff escrito em uma e 4x na outra.
O funes pouco inventa: apoia-se em modelos de embedding open-source que rodam localmente, nos datasets append-only do Lance e no cache e deduplicação de conteúdo do Hub. O trabalho, segundo o autor, foi encaixá-los em uma memória que um agente realmente consiga usar.