A memória tem um orçamento: por que ela acaba parando de lembrar

Você já viveu este momento: semana passada você disse ao Hermes, em palavras simples, que este projeto faz deploy com o processo X. Esta semana ele pergunta de novo. Você abre o arquivo de memória dele e o encontra entupido de decisões temporárias de três meses atrás, conclusões que depois foram revertidas e um punhado de duplicatas quase idênticas. Você pede que ele lembre de algo, ele concorda — e nada gruda.
A parte mais desagradável de uma memória cheia é que ela não gera erro. A memória do Hermes tem um limite de caracteres e, uma vez gasto o orçamento, novas escritas são ignoradas silenciosamente. Quando você percebe, ninguém consegue dizer quanto se perdeu. O plugin da comunidade hermes-dreaming (adicionado ao catálogo oficial de plugins em 2026-10-04) existe exatamente para isso: uma passagem determinística de consolidação de memória toda noite.
A divisão que o torna barato
A escolha de design mais instrutiva é a divisão do trabalho. Ao longo de toda a execução noturna, o script nunca chama um LLM:
- um script Python só com a biblioteca padrão lê a memória que você já tem (
MEMORY.md/USER.md) mais conversas reais recentes; - triagem, pontuação, correspondência e quarentena acontecem todas offline;
- o agente só é acordado quando algo genuinamente precisa de uma decisão, e então ele aplica essas poucas mudanças pela ferramenta
memorynormal.
Na maioria das noites isso significa que a passagem é gratuita: nada para computar, nada para mudar.
Como ele decide que algo vale a pena lembrar
A evidência vem de humanos, em dias separados. Um fato só conta se as pessoas o mencionam em dias distintos. Prompts de cron, faixas de compactação, URLs, conteúdo de chat não confiável e a própria saída do agente nunca corroboram nada — o que mata o modo de falha em que um agente lembra silenciosamente das próprias alucinações.
A pontuação reutiliza os pesos do OpenClaw: relevância, frequência, diversidade, recência, consolidação e riqueza, por trás de um portão de corroboração.
Todo candidato é comparado com a memória existente: correspondências exatas, regras de alias explícitas e contenção com stemming em três direções. Uma distinção aqui é genuinamente inteligente — um candidato que reformula uma entrada existente mas com números diferentes não é descartado como duplicata. Ele é sinalizado como um conflito, uma possível atualização, e carrega a entrada mais próxima, o arquivo onde ela vive e uma âncora literal para replace.
A triagem acontece antes de você ver qualquer coisa: segredos e prompt-injection são colocados em quarentena, eventos datados expiram (formatos de data russo, inglês e tailandês) e fatos quase idênticos no armazenamento aparecem uma única vez.
Dois trilhos de segurança: um portão de despertar e um guarda de perda
- Um portão de despertar. Numa noite tranquila, o job sinaliza que o agente não é necessário e o modelo nunca é iniciado. Notavelmente, um arquivo de memória próximo do seu limite de caracteres conta como trabalho — porque o limite bloqueia escritas silenciosamente, então nada mais jamais o destacaria.
- Um guarda de perda. Se uma grande parcela da memória desaparecer durante a noite, o relatório seguinte diz isso explicitamente.
Ele também mantém um diário em memories/DREAMS.md com a proveniência de cada candidato, para que você possa rastrear de onde veio uma entrada.
Instalando
Requisitos: Hermes 0.21 ou mais novo, Python 3.9 ou mais novo, apenas biblioteca padrão.
# 1. instale e habilite o plugin
hermes plugins install itpartypattaya/hermes-dreaming
hermes plugins enable hermes-dreaming
O passo dois é o script instalador. Você não pode pulá-lo: o Hermes só roda scripts de cron a partir de ~/.hermes/scripts/ (um symlink é recusado), então o instalador copia os dois scripts de portão de pré-verificação para lá.
python3 ~/.hermes/plugins/hermes-dreaming/skills/dreaming/scripts/install.py
O instalador copia ambos os portões, semeia ~/.hermes/dreaming.json a partir do exemplo, faz uma execução de teste em cópias descartáveis do estado e verifica a fonte de fatos e a versão do núcleo. É idempotente, e install.py --check verifica sem mudar nada — rode-o após cada atualização, porque as cópias em scripts/ podem divergir da skill.
O passo três é a configuração, e é a parte que ninguém pode fazer por você:
$EDITOR ~/.hermes/dreaming.json
Você preenche o fuso horário, trusted_chat_ids, agent_names e fact_source. Note que trusted_chat_ids é fail-closed: até você listar seus chats de grupo, nenhum chat de grupo pode corroborar nada e o plugin deliberadamente não faz nada. Se um chat confiável for um fórum, liste as threads que não são conversa humana — os próprios alertas do agente, pontes de assistente, cards gerados por máquina — em excluded_threads.
Por fim, os jobs de cron. Criá-los passa pela API Python do Hermes (a CLI não tem flag para toolsets, e o arquivo de job é estado vivo do agendador), então faça um dry-run do plano primeiro:
~/.hermes/hermes-agent/venv/bin/python \
~/.hermes/plugins/hermes-dreaming/skills/dreaming/scripts/install_cron.py --deliver local --dry-run
Satisfeito com o plano? Rode de novo sem --dry-run. Os jobs se vinculam ao nome qualificado da skill do plugin, então o plugin precisa estar habilitado primeiro; jobs existentes são pulados, e um que carregue uma skill diferente é reportado — --rebind o aponta de volta.
Todo candidato chega a um desfecho
O que faz isto parecer menos um brinquedo e mais uma ferramenta de operações é que ele não te faz a mesma pergunta para sempre:
- um candidato ou é escrito na memória ou é colocado na lista de rejeição (um “desatualizado” de um humano o encerra de vez, casado por texto);
- novos fatos, conflitos e perguntas de decaimento aparecem no máximo uma vez a cada 14 dias;
- uma entrada que sobreviveu a uma rodada de “ainda é relevante?” — mantida, ou reescrita no lugar com uma data nova — descansa por 90 dias;
- os cooldowns só começam quando o agente de fato respondeu: uma noite que falhou pela metade mostra os mesmos itens de novo;
- no máximo seis mudanças entram por noite, e
replaceexige a âncora literal que o script forneceu.
Ressalvas
- Ele não é um provedor de memória e não registra nada: ele revisa o que a memória embutida e o armazenamento holográfico já contêm, então complementa plugins de memória existentes em vez de substituí-los;
- fontes de fatos podem ser o armazenamento holográfico, uma exportação SQLite ou JSONL, ou nenhuma;
- nada no pacote faz patch no núcleo do Hermes — o que você roda é o código fixado no catálogo.
Para o restante do panorama de memória, veja a migração do catálogo de provedores de memória e continuidade de memória do cron; a superfície de comandos está na referência de hermes memory e no guia do catálogo de plugins.