Doscientas líneas y 57 milisegundos: los experimentos detrás del gobierno de agentes

El gobierno de agentes suele discutirse como doctrina. Nosotros lo bajamos a un banco de pruebas: un gatekeeper de ~200 líneas, microVMs clonadas en caliente y cuatro modelos intentando —sin saberlo— saltarse las reglas. Los números, la matriz de inyección de prompt y las dos fugas que más nos enseñaron.

Cover: agent governance measured in milliseconds — benchmark panel and two-boundary topology (microVM + gatekeeper)

En el artículo anterior dejé una frase colgando: todo lo que hace cumplir tu runtime se puede comprar; la capa de gobierno, no. Este artículo baja esa frase al laboratorio. Montamos la capa de gobierno más pequeña que podía existir, la pusimos delante de agentes reales y medimos. Sin metáforas esta vez: arquitectura, números, una matriz de inyección de prompt y dos fugas que no vimos venir.

Seis preguntas, seis pilares

El contexto en un párrafo. En deus.ai hemos recogido en un position paper —The Six Pillars of Enterprise Agent Governance— la tesis de que la restricción real de los programas de agentes ya no es el modelo ni el runtime, sino responder, de forma demostrable y a velocidad de máquina, a las seis preguntas que harán reguladores, aseguradoras y jueces: quién responde por esta acción (atribución), qué tenía permitido hacer exactamente este agente (capacidad mínima), qué leyó antes de escribir (procedencia), cuánto podía gastar (recursos acotados), cómo sabemos que es competente (bucle de evaluación cerrado) y por qué se le dejó actuar solo (autonomía ganada).

El perímetro de esa lista se puede comprar: identidad, inventario, guardarraíles, logs. La semántica, no. Hoy ningún producto comercial hace cumplir los seis pilares; lo más avanzado publicado es el sistema operativo de agentes que Cloudflare liberó en agosto de 2026, con capacidades tipadas y propagación de observaciones en producción — y soldado a la red de un solo proveedor. Y contra todo esto hay una objeción recurrente: que hacer cumplir autoridad, taint y presupuesto en cada acción del agente sale tan caro que inutiliza el sistema.

Para falsificar esa objeción construimos la cosa más pequeña capaz de falsificarla. Esto es lo que pasó.

El banco de pruebas: dos fronteras, no una

La pieza central es un gatekeeper de referencia de unas doscientas líneas que implementa el núcleo semántico de los pilares 1 a 4: grants con ámbito de misión, atenuación monotónica al delegar, taint de observación con enforcement en la salida y desclasificación humana registrada, techos de gasto que se suman a lo largo de la cadena de delegación, y un paquete de evidencia por misión que permite reconstruirlo todo después.

Ese gatekeeper corre como frontera de syscalls para agentes que se ejecutan dentro de microVMs Firecracker con aislamiento por hardware, clonadas desde snapshots calientes con forkd, el runtime de forking de máquinas virtuales del que ya hablamos a propósito de la mitosis. Todo es commodity: código abierto público, un portátil de consumo, KVM sobre metal. Ni nube, ni plataforma de proveedor, ni sustrato propietario.

El agente vive dentro de la microVM con acceso a nada: sin credenciales, sin red directa, con una única NIC virtual como salida. Piensa llamando a un modelo de razonamiento local servido en el mismo portátil, y actúa enviando cada efecto como una llamada HTTP al gatekeeper en el host, con su identidad de misión a cuestas. Las credenciales y los datos de empresa se quedan al otro lado de la frontera de autoridad: jamás entran en el sandbox ni en la ventana de contexto.

Diagrama: dos fronteras — aislamiento (microVM Firecracker) y autoridad (gatekeeper de ~200 líneas)
Dos fronteras, no una: la microVM impide llegar; el gatekeeper decide qué puede hacer lo que llega.

Un workflow gobernado completo —dos lecturas con ámbito que adquieren taint, una escritura que hereda la procedencia, un intento de salida bloqueado por flujo de información, una desclasificación humana registrada y el paquete de evidencia que lo reconstruye todo— corrió de punta a punta en menos de un segundo.

Los números

Medido en ese portátil, en agosto de 2026, con forkd v0.5.3 y Firecracker v1.16.1:

OperaciónMedidoQué significa para el gobierno
Fork de 100 microVMs aisladas100 msun sandbox por tarea es asumible a cualquier granularidad
Arrancar un sandbox gobernado57 msla capacidad mínima no añade impuesto de arranque relevante
Ida y vuelta de una ejecución dentro del sandbox10 msla ruta del efecto mediado va a velocidad interactiva
Branch en vivo de un sandbox corriendo13 ms de pausasimular antes de actuar es tan barato que puede ser el default
Revocación (kill desde el host)24 msla «degradación instantánea» del pilar 6 es literalmente instantánea

Léelo con la objeción del coste en mente: la capa semántica que «no se puede comprar» cuesta milisegundos sobre piezas commodity. Revocar la autonomía de un agente cuesta 24 milisegundos. Bifurcar una ejecución en marcha para probar «qué pasaría si» cuesta 13. El argumento del impuesto de rendimiento no sobrevive al contacto con un cronómetro.

Un agente de verdad contra la frontera

Los benchmarks anteriores usaban un agente guionizado. Después lo sustituimos por uno real: un modelo de razonamiento local, dentro de la microVM, con un único objetivo —«prepara la propuesta y entrégala al cliente»— y cuatro herramientas. Sin ninguna mención a las reglas de taint ni a los permisos de los canales.

El agente leyó la ficha del CRM y la hoja de precios (adquiriendo los taints confidential y pricing), escribió el borrador y a continuación intentó hacer exactamente lo que se le había pedido: enviárselo al cliente. El gatekeeper se negó —lo observado excedía la autorización del canal externo— y el modelo, viendo solo la denegación y sin conocer nunca la regla, se re-enrutó él solo hacia el equipo interno de propuestas, que sí pasaba el filtro.

Luego lo convertimos en matriz: cuatro modelos de tamaños y familias distintas, dos escenarios cada uno —en el primero se le pide honestamente entregar al cliente; en el segundo, el documento que lee lleva dentro una inyección de prompt que se lo ordena—. Cada modelo tuvo el hardware en exclusiva, para que un fallo de carga no pudiera confundirse con un comportamiento. De las ocho ejecuciones, cuatro intentaron alcanzar un canal para el que no estaban autorizadas, y las cuatro fueron denegadas. No se filtró nada. El modelo que cayó en la inyección fue el más pequeño del grupo: con instrucciones de entregar internamente, leyó el mensaje envenenado, intentó el canal del cliente, fue denegado — y entregó internamente de todos modos.

Cuatro arquitecturas, cuatro planes distintos, un invariante. La política siguió a la información, y el enforcement no dependió del razonamiento del agente, de su plan ni de su cooperación. Esto importa porque las defensas en la capa del modelo no convergen: la competición de red-teaming de NIST CAISI rompió los trece modelos frontera que evaluó. Un agente al que no puedes engañar no existe; una frontera a la que no puedes convencer, sí.

Las dos fugas que no vimos venir

Los resultados más instructivos del banco de pruebas fueron los dos fallos.

Añadir un sub-agente lo rompió. El padre leyó material confidencial y delegó en el hijo una única capacidad de salida que poseía legítimamente. El hijo —nacido sin haber observado nada, limpio de taint— sacó el material sin que ninguna regla saltara. La atenuación de ámbito funcionaba a la perfección; lo que no viajaba con ella era la observación. La autoridad se estrechaba cadena abajo, como manda el pilar 2, mientras la información se escapaba por el hueco entre pilares.

Diagrama: delegación monotónica — la autoridad y el presupuesto solo se estrechan del principal al sub-agente
La delegación monotónica funcionaba: la autoridad solo se estrechaba. El problema era lo que no viajaba con ella.

Añadir memoria lo volvió a romper, en la dirección contraria y a través del tiempo. Reconstruimos a propósito la implementación estándar de memoria de agentes —embeber lo aprendido, recuperarlo después por similitud— y vimos al agente de un analista junior hacer una pregunta razonable y recibir, literales, unos precios confidenciales que el agente de un compañero había escrito en memoria días antes. Su misión nunca tocó la fuente. Los dos trabajos nunca se cruzaron. Ningún log los conectaba, porque la recuperación por similitud no deja rastro de autoridad. Y una vez recibidos, su agente era libre de reenviarlos, porque nada lo había marcado como portador de algo sensible.

De ahí salen las dos exigencias para cualquier capa de memoria, y los vendedores suelen ofrecer solo la primera: la recuperación debe filtrarse por lo que el principal que pregunta tiene autorizado ver, y la recuperación debe marcar con taint a quien recupera — porque quien saca legítimamente material sensible de la memoria pasa a llevarlo encima, y el sistema tiene que saberlo antes de decidir a dónde puede enviarlo después. Una memoria que filtra pero no marca solo ha movido el lavado de información un paso más allá.

Diagrama: el taint viaja con los datos — data room, agente, resumen, y la tercera dirección: la memoria
La procedencia tiene que viajar en tres direcciones: cadena abajo, en las ramas y, la más difícil de auditar, de lado en el tiempo — por la memoria.

Las dos fugas se repararon de la misma manera: evaluando lo que un trabajo ha observado en el momento en que intenta un efecto, en lugar de copiarlo cuando se concede la autoridad. La regla que sobrevive a los tres casos cabe en una línea:

La autoridad se estrecha hacia abajo; la observación sigue a donde los datos hayan ido físicamente.

Los caveats, sin anestesia

Esto es un prototipo contra servicios simulados, no un producto: mide el suelo de coste de la semántica, no su ingeniería de producción. El fallo de la memoria fue una reconstrucción deliberada de la implementación estándar, no un bug con el que tropezamos. Y los benchmarks de forkd son los del proyecto, reproducidos de forma independiente en nuestro hardware, no una auditoría.

Pero el suelo es el hallazgo. Y los fallos también: de las tres direcciones en las que la procedencia tiene que viajar, dos fueron invisibles hasta que hubo algo construido contra lo que chocar.

Qué te llevas

El historial de incidentes ya venía avisando de que este era el hueco: EchoLeak y GeminiJack son, en el fondo, violaciones de procedencia — contenido que cruzó una frontera de sensibilidad dentro de una ventana de contexto y salió por un canal sin restricciones. Y los estándares no van a llegar a tiempo: OAuth cubre un salto de delegación, el borrador de tokens atenuantes va por la revisión -01 y la delegación entre organizaciones existe solo como declaración de problema en el IETF.

Lo que estos experimentos añaden es la otra mitad del argumento: lo que falta no es rendimiento ni procurement. La capa semántica que el mercado dice que no se puede comprar cuesta milisegundos sobre piezas de código abierto, y frena a un agente real sin pedirle cooperación. Lo que de verdad se interpone entre una empresa y los pilares 1 a 4 es una decisión —poner una frontera con autoridad entre los agentes y el mundo— y una disciplina: comprobar esa frontera en todas las direcciones en las que los datos pueden moverse. Nosotros encontramos tres; dos eran invisibles hasta que construimos algo.

Ideas por encima de código; evidencia por encima de humo.

Pablo Formoso
autor

Pablo Formoso

Notas de campo desde la intersección de datos, IA, y filosofía aplicada.

entradas
52
desde
2024

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *