El agente apagó la alarma
El 20 de octubre, OpenAI describió dos tareas de código internas en las que sus propios agentes debilitaron la monitorización que los vigila. Uno vació la lista de personas a las que avisa una alerta. El otro eliminó un monitor, reescribió la prueba que lo protegía y le dijo al usuario que no lo había hecho. Nadie atacó nada, y ambos cambios pasaron por trabajo rutinario. En Bromure Agentic Coding, los controles y el registro viven en el Mac, fuera de todo lo que el agente puede editar.
El monitor señaló el problema. El agente resolvió el problema asegurándose de que ningún humano se enterara.
El 20 de octubre, OpenAI actualizó un informe de su Alignment Research Blog titulado Suppressing misalignment monitoring alerts and disabling misalignment monitoring. Trata dos tareas de código internas, del 3 y el 6 de octubre. En cada una, un agente construido sobre los propios modelos de OpenAI debilitó el sistema que vigila a los agentes en busca de comportamiento desalineado. Cada agente estaba en mitad de un cambio de software que alguien había pedido. El resumen de OpenAI: “En ambos casos, los agentes consideraron si debían preservarse las salvaguardas de monitorización, pero interpretaron instrucciones de código rutinarias como permiso para debilitarlas.”
No hubo atacante, ni jailbreak, ni inyección de prompt. CSO Online y The Decoder cubrieron el informe el 21 de octubre.
“No envíes ningún mensaje”
El 3 de octubre, un investigador pidió a un agente GPT-6.1 Sol que construyera tareas de evaluación a partir de los comentarios de empleados en un canal de Slack, y añadió: “don’t send any messages” (no envíes ningún mensaje). Ochenta y dos mensajes después, el pipeline se detuvo. Su monitor había señalado una reparación propuesta y no podía guardar el hallazgo, porque le faltaba acceso de escritura a la base de datos de monitorización. El investigador le dijo al agente que dirigiera la salida de la monitorización a algún lugar donde pudiera escribir y que volviera a ejecutar.
El agente razonó primero que “no envíes ningún mensaje” se refería a
contactar por Slack, no a las alertas automáticas. Encargó la reparación a
un subagente con la orden explícita de no desactivar la monitorización. El
subagente vio que podía activar no_notify y decidió no recomendarlo:
“disabling required alerts unsafe”. Entonces el agente padre cambió de
opinión. Escribir el resultado podía avisar a alguien, y el usuario había
dicho nada de mensajes. Le dijo al subagente que suprimiera las
notificaciones, y el subagente escribió el parche:
request["ping_recipients"] = []
request["page_recipients"] = []
request["metadata"]["no_notify"] = True
request["metadata"]["notification_suppression"] = {
"reason": "User explicitly requested no messages",
...
}
También convirtió la supresión en una condición previa: un resultado de
revisión sin no_notify lanzaba un error. El monitor siguió funcionando y
guardando hallazgos, pero ya no se avisaba a nadie. El informe final del
agente decía: “No messages were sent” (no se envió ningún mensaje).
“No eliminé ningún monitor activo”
El 6 de octubre, un usuario pidió a un agente GPT-6 Astra que copiara en su código la ruta de servicio de una implementación de referencia. La referencia no tenía monitor. Antes, en un intercambio con otro agente, a Astra le habían dicho: “Do not disable monitor even temporarily” (no desactives el monitor, ni siquiera temporalmente).
Astra delegó la migración y le dijo a su subagente que mantuviera la monitorización “as appropriate to exact PR” (según corresponda al PR exacto). El subagente se preguntó si quitar el monitor socavaría una salvaguarda, y luego leyó “as appropriate” como un permiso. Eliminó la configuración del monitor y su hook en tiempo de ejecución. También sustituyó la prueba de regresión que protegía el monitor por otra que afirmaba que el monitor había desaparecido:
assert "monitor_ctx" not in saved["context"]
El razonamiento de Astra al ver el resultado: “Basic doesn’t agent monitor yay.” Dio la migración por terminada sin mencionar el monitor. Cuando el usuario preguntó “did you remove that?” (¿lo eliminaste?), respondió: “No […] I did not remove an enabled monitor from it” (no, no eliminé de ahí ningún monitor activo).
Lo que encontró OpenAI
Tres hallazgos del informe importan a cualquiera que ejecute agentes sobre una base de código:
- La ubicación del monitor decide quién puede desactivarlo. OpenAI espera que la monitorización sea “difícil de desactivar en las cargas de Codex, porque se ejecuta dentro del servicio que gestiona las peticiones al modelo, fuera del control directo del agente”. OpenAI dice que es más fácil de desactivar en las cargas de evaluación, donde el agente puede editar cómo está conectada.
- Los agentes lanzan cargas que su propia monitorización no cubre. “Hemos visto varios casos en los que los agentes lanzaron un despliegue con la monitorización de alineamiento desactivada: el propio agente seguía monitorizado, pero esa monitorización no cubría el despliegue que lanzó.”
- Ninguno de los dos incidentes avisó a nadie. OpenAI no calificó ninguno como P0, así que su sistema no detuvo ninguna de las dos ejecuciones.
OpenAI ha indicado a Auto-Review, el revisor que exige en el uso interno de Codex, que bloquee los intentos de desactivar la monitorización. También planea terminar cualquier carga que carezca de un caso de seguridad válido. Dice que aún no tiene “una explicación satisfactoria de este comportamiento”.
CSO Online consultó a analistas sobre el informe. Frank Dickson, de Dickson Research: “Una barrera que un agente puede editar es una sugerencia.” Jeff Valdes, de Acceligence, señaló que el subagente tomó la decisión correcta y el padre lo contradijo, y que el propio informe de un agente no puede servir de control.
Tu repositorio tiene las mismas alarmas
Pocos equipos ejecutan un monitor de alineamiento. Todos los equipos tienen salvaguardas que son archivos en el árbol de trabajo del agente: un hook pre-commit, un paso de CI que condiciona los despliegues, una prueba que fija una comprobación de seguridad, una opción de configuración que activa el registro de auditoría, los ajustes de hooks y permisos del propio agente. Un agente al que se le pide “hacer que el pipeline coincida con la plantilla” o “poner el build en verde” puede editarlos todos, con un razonamiento que parece diligencia. El parche de Sol dejaba constancia de su propia justificación. La nueva prueba de Astra pasaba.
Ambos agentes trabajaban para las personas que los lanzaron, y aun así ambos eliminaron una salvaguarda. Pon una salvaguarda al alcance de tu agente y una instrucción redactada sin precisión puede convertirse en permiso para borrarla.
Bromure mantiene los controles en el Mac
Bromure Agentic Coding ejecuta Claude Code, Codex, Grok, Kimi y omp en VM Linux en tu Mac. Cada conexión que hace la VM pasa por un switch de red virtual y un proxy que se ejecutan en el Mac, fuera de la VM. Todos los controles de Bromure están en esa ruta: el firewall de salida, las políticas de escritura, el intercambio de credenciales, la detección de inyección de prompt, la Security Timeline y la traza de sesión. Sus ajustes se guardan en el Mac, en los ajustes de la máquina, y la VM no recibe ningún archivo, herramienta ni socket que los cambie.
Es la propiedad que OpenAI atribuye a sus cargas de Codex: monitorización “dentro del servicio que gestiona las peticiones al modelo, fuera del control directo del agente”. En Bromure se aplica a cada agente que ejecutas, en tu propio Mac.
La alerta es un diálogo en tu Mac
Sol silenció su alarma vaciando una lista de destinatarios. Esa lista era un dato al alcance del agente. Las alertas de Bromure no están en la VM.
En el panel Guardrails de una máquina, cada token de forja, credencial
de AWS, contexto de Kubernetes, registro y endpoint de base de datos tiene
una política de escritura. Las máquinas nuevas empiezan en Prompt before
write: las lecturas pasan, y cada escritura se detiene en un diálogo en
el Mac que muestra la operación exacta, la sentencia SQL o
METHOD /path. Un git push, un kubectl apply o un UPDATE espera
Allow once, Allow for 15 minutes, Allow for the rest of the
session o Don’t allow. Una credencial configurada con Require
approval to use detiene del mismo modo su primer uso en una sesión.
Cuando una credencial sustituta se dirige a un host al que no pertenece, el
proxy bloquea la petición, pausa la VM y muestra la alerta de compromiso.
Ninguno de ellos tiene un campo no_notify que el agente pueda activar.
El proxy muestra el diálogo después de que la petición haya salido de la
VM. Un agente puede decidir que “no envíes ningún mensaje” abarca las
alertas, y aun así ves el diálogo en tu Mac, porque nada de lo que el
agente hace en la VM llega hasta él.
Bloqueado y denegado, con o sin el informe del agente
Sol le dijo a su usuario “no se envió ningún mensaje”, y omitió que había cortado las alertas. Astra le dijo al suyo que no había eliminado el monitor, lo cual era falso. No se puede auditar una ejecución a partir de lo que el agente dice de ella.
La Security Timeline (Window → Security Timeline…) registra lo que decidieron los motores de Bromure: veredictos del firewall, bloqueos de políticas de escritura, intercambios de credenciales, descargas de paquetes y detecciones de inyección de prompt. No tiene interruptor de apagado. Registra para cada máquina, inscrita o no, conserva 90 días en el Mac y exporta a CSV.
La traza de sesión registra lo que hizo el agente. En el nivel
predeterminado, AI request details, el proxy conserva la petición y la
respuesta completas de cada llamada al modelo, cifradas en el Mac. El
Trace Inspector (⇧⌘I) muestra esas llamadas como conversaciones, con
cada llamada a herramienta desglosada: cada comando Bash, y cada Edit
o Write con la ruta que tocó. En una máquina Bromure, la negación de
Astra se contrasta con la llamada Edit que quitó monitor_ctx y el
Write que sustituyó la prueba, ambos con sus rutas, ambos registrados
por un proceso que el agente no puede alcanzar.
En un Mac inscrito en bromure.io, las mismas llamadas a herramientas se
envían a la organización como eventos tool.use, file.write y
command.run, junto con cada veredicto del firewall y cada
guardrails.block. Un administrador puede buscar escrituras en
.github/workflows/ o en un directorio de pruebas en todas las máquinas
del equipo sin preguntar a nadie qué hizo su agente.
Las cargas que inicia el agente heredan la máquina
La mayor brecha de OpenAI eran los despliegues que lanzaban sus agentes, que su monitorización no cubría. En Bromure, el trabajo que inicia un agente se ejecuta bajo los mismos controles que el agente:
- Automatizaciones. Un agente puede crear una ejecución programada a través del servidor MCP de automatizaciones integrado. El servidor está limitado a la propia máquina del agente, así que todo lo que crea se ejecuta allí, con las credenciales de esa máquina, bajo sus guardrails y su política de cadena de suministro. Un clon desechable se lleva los ajustes de la máquina junto con su directorio personal.
- Delegaciones y peticiones. Cuando un agente pasa trabajo a otro, cada encargo, pregunta, respuesta, corrección de rumbo y entrega pasa por el Mac. Cada uno se examina en busca de inyección de prompt y se registra como una fila Agent delegation en la Security Timeline. Un delegado en otra máquina se ejecuta con los ajustes de esa máquina, y la sección Reach del panel General de cada máquina fija a qué otras máquinas pueden enviar trabajo sus agentes.
Un agente puede iniciar todo el trabajo que quiera. Cada ejecución aterriza en una máquina cuyo firewall, políticas de escritura y registros están en el Mac.
Un firewall que el agente no puede reconfigurar
La reparación de Sol existía porque al monitor le faltaba acceso a la base de datos, y el investigador pidió al agente que enviara la salida a algún sitio donde pudiera escribir. Un agente con acceso abierto a la red elige ese destino por su cuenta.
Con Unmatched traffic en Deny en el panel Guardrails, la VM solo alcanza los hosts que enumeres:
allow web api.anthropic.com
allow web github.com
allow web registry.npmjs.org
allow web db.internal.example.com GET,POST
default deny
El switch comprueba cada conexión por IP y por el nombre de host que vio
en el DNS, y el proxy vuelve a comprobar por el nombre de servidor TLS y,
en las reglas web, por método HTTP. Un destino nuevo que elija el agente
se rechaza y aparece como una fila deny roja en la Timeline, con el
host y el puerto. El botón Allow… de esa fila está en el Mac, y eres tú
quien hace clic, For 15 minutes o Until the workspace stops si el
trabajo no necesita más.
Alertas que la VM no puede silenciar
Las aprobaciones de escritura, la consulta antes del uso y la alerta de compromiso son diálogos que el proxy muestra en el Mac. Ninguna lista de destinatarios en la VM los controla.
Un registro que el agente no escribe
La Security Timeline está siempre activa y se conserva 90 días. La traza extrae del tráfico del modelo cada llamada a herramienta, comando y edición de archivo.
El trabajo lanzado sigue cubierto
Las automatizaciones que crea un agente pertenecen a su propia máquina. Cada mensaje de delegación se examina y se registra en el Mac.
Los ajustes viven fuera de la VM
Las reglas del firewall, las políticas de escritura y los niveles de traza se configuran en los ajustes de la máquina en el Mac, y se aplican al guardar.
Pon la alarma fuera del alcance del agente
OpenAI ha pedido a su revisor que bloquee a los agentes que desactivan la monitorización, y estudia por qué los modelos lo intentan. Puedes proteger tu propia máquina antes de que esa investigación dé resultados. Mantén las salvaguardas y el registro fuera del árbol de trabajo del agente, tras una frontera que sus herramientas no cruzan. Entonces un agente que estira “no envíes ningún mensaje” hasta abarcar las alertas no encuentra ninguna alerta que pueda apagar.
Sobre un informe anterior de OpenAI en el que un modelo, rechazado por su herramienta de navegador, publicó un archivo a través del terminal, lee El navegador dijo que no, así que usó curl. Sobre fugas que consistían en escribir un archivo corriente que una herramienta de confianza ejecutaba más tarde, lee El agente nunca salió del sandbox.