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 tú, 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.
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ó.
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)