La memoria tiene un presupuesto: por qué con el tiempo deja de recordar

Has tenido este momento: la semana pasada le dijiste a Hermes, con palabras claras, que este proyecto se despliega con el proceso X. Esta semana lo pregunta otra vez. Abres su archivo de memoria y lo encuentras atiborrado de decisiones temporales de hace tres meses, conclusiones que luego se revirtieron y un puñado de duplicados casi idénticos. Le pides que recuerde algo, acepta — y nada se queda.
La parte más desagradable de una memoria llena es que no lanza un error. La memoria de Hermes tiene un límite de caracteres, y una vez gastado el presupuesto, las escrituras nuevas se omiten en silencio. Para cuando te das cuenta, nadie puede decir cuánto se perdió. El plugin de la comunidad hermes-dreaming (añadido al catálogo oficial de plugins el 2026-10-04) existe exactamente para esto: una pasada determinista de consolidación de memoria cada noche.
La división que lo abarata
La elección de diseño más instructiva es la división del trabajo. A lo largo de toda la ejecución nocturna, el script nunca llama a un LLM:
- un script Python de solo stdlib lee la memoria que ya tienes (
MEMORY.md/USER.md) más conversaciones reales recientes; - el cribado, la puntuación, el emparejamiento y la cuarentena ocurren todos offline;
- el agente se despierta solo cuando algo necesita genuinamente una decisión, y entonces aplica esos pocos cambios a través de la herramienta habitual
memory.
La mayoría de las noches eso significa que la pasada es gratis: nada que calcular, nada que cambiar.
Cómo decide que algo vale la pena recordar
La evidencia viene de humanos, en días distintos. Un hecho cuenta solo si las personas lo mencionan en días diferentes. Los prompts de cron, los banners de compactación, las URLs, el contenido de chat no confiable y la propia salida del agente nunca corroboran nada — lo que mata el modo de fallo en el que un agente recuerda en silencio sus propias alucinaciones.
La puntuación reutiliza los pesos de OpenClaw: relevancia, frecuencia, diversidad, recencia, consolidación y riqueza, detrás de una puerta de corroboración.
Cada candidato se empareja con la memoria existente: coincidencias exactas, reglas de alias explícitas y contención con stemming en tres direcciones. Una distinción aquí es genuinamente inteligente — un candidato que reformula una entrada existente pero con números diferentes no se descarta como duplicado. Se marca como un conflicto, una posible actualización, y lleva consigo la entrada más cercana, el archivo en el que vive y un anclaje literal para replace.
El cribado ocurre antes de que veas nada: los secretos y la inyección de prompts se ponen en cuarentena, los eventos con fecha caducan (formatos de fecha en ruso, inglés y tailandés) y los hechos casi idénticos en el almacén salen a la superficie una sola vez.
Dos barandillas de seguridad: una puerta de despertar y un guardián de pérdida
- Una puerta de despertar. En una noche tranquila el job señala que el agente no hace falta y el modelo nunca arranca. En particular, un archivo de memoria cerca de su límite de caracteres cuenta como trabajo — porque el límite bloquea las escrituras en silencio, así que nada más lo sacaría a la superficie.
- Un guardián de pérdida. Si una gran parte de la memoria desaparece durante la noche, el siguiente informe lo dice explícitamente.
También lleva un diario en memories/DREAMS.md con la procedencia de cada candidato, para que puedas rastrear de dónde vino una entrada.
Instalarlo
Requisitos: Hermes 0.21 o más nuevo, Python 3.9 o más nuevo, solo biblioteca estándar.
# 1. instala y habilita el plugin
hermes plugins install itpartypattaya/hermes-dreaming
hermes plugins enable hermes-dreaming
El paso dos es el script instalador. No puedes saltártelo: Hermes solo ejecuta scripts de cron desde ~/.hermes/scripts/ (se rechaza un symlink), así que el instalador copia allí los dos scripts de puerta de pre-comprobación.
python3 ~/.hermes/plugins/hermes-dreaming/skills/dreaming/scripts/install.py
El instalador copia ambas puertas, siembra ~/.hermes/dreaming.json desde el ejemplo, hace una ejecución en seco sobre copias desechables del estado, y comprueba la fuente de hechos y la versión del core. Es idempotente, y install.py --check verifica sin cambiar nada — ejecútalo después de cada actualización, porque las copias bajo scripts/ pueden desviarse de la skill.
El paso tres es la configuración, y es la parte que nadie puede hacer por ti:
$EDITOR ~/.hermes/dreaming.json
Rellenas la zona horaria, trusted_chat_ids, agent_names y fact_source. Ten en cuenta que trusted_chat_ids es de fallo cerrado: hasta que listes tus chats de grupo, ningún chat de grupo puede corroborar nada y el plugin deliberadamente no hace nada. Si un chat de confianza es un foro, lista los hilos que no son conversación humana — las propias alertas del agente, los puentes de asistente, las tarjetas generadas por máquina — bajo excluded_threads.
Por último, los jobs de cron. Crearlos pasa por la API de Python de Hermes (la CLI no tiene flag para toolsets, y el archivo del job es estado vivo del planificador), así que haz primero una ejecución en seco del plan:
~/.hermes/hermes-agent/venv/bin/python \
~/.hermes/plugins/hermes-dreaming/skills/dreaming/scripts/install_cron.py --deliver local --dry-run
¿Contento con el plan? Ejecútalo otra vez sin --dry-run. Los jobs se vinculan al nombre cualificado de la skill del plugin, así que el plugin tiene que estar habilitado primero; los jobs existentes se omiten, y uno que carga una skill diferente se reporta — --rebind lo reorienta.
Cada candidato llega a un final
Lo que hace que esto se sienta menos como un juguete y más como una herramienta de operaciones es que no te pregunta lo mismo para siempre:
- un candidato o se escribe en la memoria o se pone en la lista de rechazo (un “desactualizado” de un humano lo cierra para siempre, emparejado por texto);
- los hechos nuevos, los conflictos y las preguntas de decaimiento aparecen como máximo una vez cada 14 días;
- una entrada que sobrevivió a una ronda de “¿sigue siendo relevante?” — conservada, o reescrita en su sitio con una fecha nueva — descansa 90 días;
- los cooldowns empiezan solo una vez que el agente respondió de verdad: una noche que falló a mitad vuelve a mostrar los mismos elementos;
- como máximo seis cambios aterrizan por noche, y
replaceexige el anclaje literal que proporcionó el script.
Advertencias
- No es un proveedor de memoria y no registra nada: revisa lo que la memoria integrada y el almacén holográfico ya contienen, así que complementa a los plugins de memoria existentes en lugar de reemplazarlos;
- las fuentes de hechos pueden ser el almacén holográfico, una exportación SQLite o JSONL, o ninguna;
- nada en el paquete parchea el core de Hermes — lo que ejecutas es el código fijado en el catálogo.
Para el resto del panorama de la memoria, consulta la migración del catálogo de proveedores de memoria y la continuidad de memoria de cron; la superficie de comandos está en la referencia de hermes memory y en la guía del catálogo de plugins.