Memoria Persistente para Agentes Ofensivos
Un pentest no cabe en una ventana de contexto. Una campaña real cruza reconocimiento, explotación y post-explotación durante horas; si el agente olvida lo que vio en la fase 1 cuando llega a la 4, repite trabajo, pierde hallazgos y toma malas decisiones. La memoria persistente es lo que convierte a un LLM en un operador.
Tres tipos de memoria, no uno
- Episódica: el log inmutable de qué se ejecutó, cuándo y con qué salida. Base de la trazabilidad y del replay.
- De trabajo: el estado vivo de la campaña — hosts, credenciales, rutas de pivote, hipótesis abiertas. Se compacta y resume entre fases.
- Semántica: conocimiento reutilizable (TTPs, writeups) servido por Beorn vía RAG, no específico del objetivo.
Recuperar con disciplina
El error típico es volcar toda la memoria en cada prompt. Recuperamos por relevancia y fase: el agente pide "credenciales válidas para 10.0.0.0/24" y recibe solo eso, con su procedencia. Cada fragmento lleva su origen para que el razonamiento sea auditable.
memory.query({ scope: "10.0.0.0/24", kind: "credential",
phase: "lateral-movement", max_tokens: 800 })
Memoria con scope, no fuga de datos
La memoria es una superficie de exfiltración si no se controla. Toda escritura pasa por Sentinel: nada fuera del scope aprobado se persiste, y el kill-switch purga la memoria de trabajo al instante. La episódica se conserva cifrada para forense; la de trabajo es efímera por diseño.
Lo que enviamos
En Gandalf, la memoria persistente es de primera clase: cada agente arranca una fase con un resumen reconstruido de la anterior, no con una ventana en blanco. Menos trabajo repetido, decisiones con contexto y un rastro completo de por qué el agente hizo lo que hizo.