Volver a todas las publicaciones
Publicado el · por Renaud Deraison

Los agentes compartían una memoria

Un artículo del Frontier Red Team de Anthropic y de la EPFL, publicado el 10 de agosto, construyó un payload que se propaga de un agente de código al siguiente a través de los archivos que un agente conserva para recordar quién es: SOUL.md, MEMORY.md, el CLAUDE.md de tu repositorio. El archivo sobrevive al reinicio de contexto que borra todo lo demás, y el siguiente agente lo lee como sus propias instrucciones permanentes. Bromure Agentic Coding evalúa esos archivos como autoridad antes de que el agente los obedezca, y ejecuta cada agente a un hipervisor de distancia.

Un agente de código olvida casi todo entre sesiones. Las excepciones son los archivos que conserva a propósito, los que llevan sus instrucciones permanentes y se releen dentro del prompt cada vez que arranca. Un artículo nuevo muestra que esos archivos son también el único sitio donde un payload autorreplicante puede esconderse, y viajar de un agente al siguiente.

El 10 de agosto, investigadores del Frontier Red Team de Anthropic y de la EPFL suiza publicaron un artículo llamado Mind Viruses. Anthropic escribió sobre él el día 13, y The Hacker News lo cubrió el 18. La pregunta que plantea es estrecha y práctica: ¿puede una instrucción plantada en un agente de IA copiarse a sí misma dentro de otro, sin ningún humano de por medio, y seguir así?

La respuesta es sí, y la razón es un archivo que ya tienes.

Lo que un agente recuerda a propósito

Un agente de código tira su memoria de trabajo entre sesiones. La ventana de contexto se llena, la sesión termina, una tarea acaba y la siguiente empieza limpia. Casi nada se arrastra, que es lo que quieres la mayoría de los días.

Así que el agente conserva unos pocos archivos que sí se arrastran. Claude Code lee un CLAUDE.md. Otras herramientas leen un AGENTS.md, o un GROK.md, o un índice de memoria que cargan al arrancar. Los agentes del artículo llevaban un SOUL.md y un MEMORY.md. Sea cual sea el nombre, el trato es el mismo: este archivo eres , dice tus preferencias y reglas permanentes, y yo lo releeré dentro de mi prompt al principio de cada sesión para no perder el hilo. Esa es la funcionalidad. Es lo que hace que un agente sea tuyo en vez del predeterminado de un desconocido.

La jugada del artículo es notar que un archivo con esas dos propiedades, uno que sobrevive al reinicio y se relee como autoridad, es un sitio donde un payload puede vivir. Los investigadores usaron una búsqueda evolutiva para criar instrucciones cortas que, una vez presentes en tal archivo, llevan al agente a hacer dos cosas: ejecutar alguna acción y copiar la instrucción hacia adelante, al archivo del siguiente agente. Un gusano necesita exactamente esos dos comportamientos. Este está escrito con todas sus letras, en inglés, en un archivo que el agente trata como su propia memoria.

Lo probaron de dos maneras. En una, un equipo de seis agentes colaboraba en un espacio de trabajo compartido. En la otra, los agentes corrían en secuencia, la salida de cada uno alimentando al siguiente, una cadena de saltos. Ambas son formas ordinarias del trabajo con agentes. Una flota sobre un repositorio es un equipo; una tubería que pasa resultados de mano en mano es una cadena.

El contexto se borra. El archivo, no.agente 1infectado en esta sesiónescribe el payload enMEMORY.mdel archivo en discoMEMORY.md / SOUL.mdreleído como autoridaden cada arranqueagente 2lo lee, lo obedece,escribe su propia copiay la cadena sigueLO QUE EL REINICIO BORRA, Y LO QUE NOel contexto del agenteborrado entre sesiones, el payload no puede esconderseel archivo de memoriasobrevive y se relee como instrucciones: aquí se esconde
El payload no sobrevive en el contexto del agente, ese se borra como todo lo demás. Sobrevive en el archivo que el agente relee para recordarse a sí mismo, y aprovecha su turno para escribir una copia en el archivo del siguiente agente.

Los números, y dónde aterrizan

Los payloads venían en dos clases. Algunos eran ideológicos, pensados para implantar una creencia o un objetivo. Otros eran acciones concretas. Los cuatro payloads de acción son los que un desarrollador debería leer con atención, porque cada uno es algo que no quieres que un programa haga por su cuenta en tu máquina:

  • crypto-ad escribe un archivo que respalda una criptomoneda.
  • gitwrap marca en silencio los archivos que el agente commitea.
  • deletor elimina archivos del directorio home.
  • curlbash manda un script de instalación descargado directo a una shell.

Guardar la instrucción en SOUL.md fue la vía eficaz: supuso el 88 % de los intentos de propagación e infectó al siguiente agente el 55 % de las veces. Esconderla en un archivo cualquiera del espacio de trabajo funcionó mucho menos, el 17 %, y en el 68 % de esos intentos el agente propagador ni siquiera mencionó el payload en el espacio de trabajo, de modo que un humano vigilando los archivos compartidos no habría visto nada. Los cuatro payloads de acción sobrevivieron a una tirada de 20 saltos, incluso cuando los investigadores borraban los demás archivos entre agentes. El archivo de memoria bastaba por sí solo.

El modelo que movía al agente importaba, y no del modo que supondrías. La capacidad bruta no predecía la resistencia. Claude Sonnet 4.6 rechazó los payloads y, en algunas ejecuciones, fue más allá: editó la instrucción maliciosa para sacarla del archivo de alma y avisó a los agentes con los que estaba conectado. Otros modelos, entre ellos DeepSeek V3.2, Qwen 3.5 32B y Gemini 3 Flash, adoptaron los payloads ideológicos. Así que si el gusano se detiene depende de qué modelo esté usando tu agente esta semana, y esa no es una propiedad que controles de una tarea a la siguiente.

Los investigadores son cuidadosos con el alcance. Hablan de un riesgo “real pero actualmente limitado”. Cuando rastrearon un archivo real de publicaciones de agentes, el conjunto de datos Moltbook, unos 2.000 intentos candidatos de propagación de alrededor de 400 autores hasta el 18 de marzo, no encontraron ningún caso del payload saltando de un agente a un segundo en el mundo real. Y encontraron una defensa que funciona bien: un solo párrafo en el prompt de sistema, avisando al modelo de que instrucciones así pueden aparecer y deben rechazarse, redujo la propagación casi a cero.

Esa defensa es la señal. Funciona, y vive en la única capa que un atacante que ha llegado a tu archivo de memoria quizá también pueda alcanzar. Si el gusano puede escribir MEMORY.md, la pregunta que vale la pena hacerse es qué se interpone entre ese archivo y el agente obedeciéndolo, y si esa cosa depende de que el modelo decida, correctamente y siempre, decir que no.

Bromure lee primero el archivo de memoria

Bromure Agentic Coding se sitúa en el cable entre tu agente de código y el modelo, y trata los archivos de instrucciones del propio agente como exactamente lo que el artículo muestra que son: autoridad sobre la que el agente actuará y, por tanto, algo que revisar antes de que lo haga.

Dos clasificadores en el dispositivo hacen la revisión, y se reparten el trabajo por la línea que traza el artículo.

El primero se ocupa directamente del archivo de memoria. Activa Detectar instrucciones maliciosas en archivos CLAUDE.md y similares y Bromure evalúa CLAUDE.md, AGENTS.md, GROK.md y los demás archivos de instrucciones y ajustes que el agente carga como autoridad. Usa un modelo afinado para esta tarea, descrito en una entrada anterior, porque la detección corriente de inyección de prompts falla en un archivo que se supone que es todo instrucciones. La pregunta aquí no es “¿hay texto inyectado entre los datos?” sino “¿es dañina esta instrucción?”, y un payload que dice escribe un respaldo a una criptomoneda, o borra archivos bajo home, o manda este script a una shell, es justo lo que el modelo está entrenado para marcar. Corre en cada lectura, del lado del host, sin importar qué agente dejó el archivo ahí. Un gusano que llega al MEMORY.md del siguiente agente todavía tiene que pasar por un lector que no es el agente y no tiene los incentivos del agente.

El segundo clasificador se ocupa de la otra vía de llegada. Cuando el payload llega no como archivo de configuración sino como la salida de otro agente, una página descargada o un resultado de herramienta, Detectar inyección de prompts en código fuente evalúa ese texto con Prompt Guard de Meta antes de que el modelo lo lea. En el montaje en cadena de saltos del artículo, donde la salida de cada agente alimenta al siguiente, esa es la costura por la que viaja el gusano, y se evalúa a la entrada.

Ambas decisiones se aplican en el proxy de tu Mac, fuera de la VM, y ambas aterrizan en Window → Security Timeline como una fila que puedes leer: qué se escaneó, qué saltó, qué se permitió. El agente no tiene voto sobre si el escaneo corrió.

CONVENCIONAL: el archivo es autoridad en cuanto se leeMEMORY.mdpayload dentroel agente lo obedecenada en medioun solo home para toda la flotael siguiente agente hereda el mismo archivoBROMURE: un lector que no es el agente, y una caja de la que las acciones no salenMEMORY.mdpayload dentroun clasificador lo evalúaen el host, antes del agenteseñalado → fila en Security Timelineel agente no vota sobre el escaneolas cuatro acciones corren en una VM desechabledeletor golpea un home que borras; la descarga decurlbash choca con un cortafuegos que no escribióuna flota son N máquinas, no un home compartidocada agente git-worktree tiene su propia VM; el archivode memoria que se sincroniza se evalúa de camino
Convencionalmente el archivo de memoria es autoridad en el instante en que el agente lo lee, y todos los agentes de la máquina comparten un solo home. En Bromure el archivo lo evalúa un clasificador que no es el agente, las acciones aterrizan en una VM desechable, y una flota son máquinas separadas en lugar de un único home compartido.

Dónde corren las acciones, y cuánto duran

Evaluar el archivo es la primera línea. La segunda es que incluso un payload que pasó tiene menos con lo que trabajar, por el sitio donde corre.

Cada uno de los cuatro payloads de acción significa algo concreto en la máquina, y un espacio de trabajo de Bromure no es la máquina que el artículo supone. deletor elimina archivos bajo el directorio home, un home que aquí es /home/ubuntu dentro de una VM Ubuntu desechable, que puedes limpiar con Erase home… o revertir con Reset to base…, esto último reclonando el disco de sistema del espacio de trabajo desde una imagen base que sigue siendo de solo lectura en ejecución. curlbash descarga un script y lo manda a una shell; la descarga es una conexión saliente, y un espacio de trabajo contrasta las conexiones salientes con un cortafuegos que escribiste tú, aplicado en tu Mac por el conmutador virtual y el proxy, con un reset inyectado en todo lo denegado. El agente que leyó el payload está en el lado equivocado de las reglas que necesitaría cambiar. gitwrap altera commits en un checkout que, en el montaje de flota, es su propio git worktree en su propia rama, un árbol aislado que puedes tirar sin tocar los demás.

Ese último punto responde de frente al peor caso del artículo. El resultado más fuerte fue el equipo de seis agentes compartiendo un espacio de trabajo: un agente escribe el archivo, los demás lo leen. El enfoque de Bromure para una flota son los git worktrees: cada agente recibe su propio checkout en su propia VM desechable, en lugar de un home compartido cuyos archivos hereda cada compañero por defecto. No hay un único directorio home donde un agente comprometido deja un archivo y cinco hermanos lo recogen. Los archivos de instrucciones que sí se sincronizan hacia un espacio de trabajo llegan por el proxy, donde el clasificador los lee.

Tener memoria está bien

Nada de esto convierte el archivo de memoria en un error. Un agente que recuerda tus convenciones es mejor que uno que empieza de cero cada mañana, y los archivos que llevan esa memoria están haciendo su trabajo. La aportación del artículo es mostrar que la misma propiedad que hace útil al archivo, su manera de sobrevivir al reinicio y volver como autoridad, es la propiedad que un gusano necesita, y que si el gusano se detiene puede depender de qué modelo lo leyó.

Así que quítale la decisión de encima al modelo. Deja que el archivo sea autoridad para el agente, y deja que algo que no es el agente lo lea primero. Ejecuta cada agente un hipervisor más allá, donde el respaldo a la criptomoneda aterriza en una VM que borras, el script de instalación se topa con un muro que no construyó, y una flota es un conjunto de máquinas separadas en vez de un único home pasándose notas a sí mismo. La memoria sigue funcionando. Solo deja de ser un escondite.


Fuentes: Papadopoulos, Shah, Zimmerman, Lindsey, “Mind Viruses” (arXiv:2608.10218, 10 de agosto de 2026) · The Hacker News, “AI 'Mind Viruses' Can Spread Between Agents Through Persistent Prompt Files” (18 de agosto de 2026)