El Modelo Más Potente de Anthropic No Detectó una Falla de Seguridad en 6,200 Líneas de Código de Producción. Yo Tampoco.
Anthropic lanzó Fable 5 ayer por la mañana. El modelo que la tarjeta de sistema de abril calificó como "demasiado peligroso para lanzar" (mismo núcleo que Mythos, salvaguardas cibernéticas activas) ahora está en Claude Code.
Así que hice una auditoría. 😬
TLDR: Ejecuté Opus 4.8 y Fable 5 en paralelo sobre 6,200 líneas de código Go y TypeScript de producción real. No encontraron las mismas cosas. Y ninguno de los dos encontró todo. Incluyendo la falla de seguridad que había estado corriendo en producción desde el primer día.

Tenía un rastreador de comisiones de ecommerce en vivo: binario Go expuesto detrás de Cloudflare, back-office TypeScript en una malla privada, SQLite compartido. 2 sesiones independientes, mismo brief de 1 línea, mismo acceso SSH a producción.
Lo que regresó fue asimétrico de maneras que no esperaba.
Fable 5 Es Lo Que Anthropic No Quería Lanzar
Fable 5 es el primer modelo clase Mythos en hacerse público. Los números del lanzamiento son difíciles de descartar: 80.3% en SWE-Bench Pro, contra 69.2% para Opus 4.8, 58.6% para GPT-5.5, y 54.2% para Gemini 3.1 Pro. Una brecha de 11 puntos sobre el mejor anterior de Anthropic no es progreso incremental.
La demo principal: una base de código Ruby de 50 millones de líneas migrada en un solo día. Stripe estimó el mismo trabajo hecho manualmente en 2 meses para un equipo completo de ingeniería.
Hasta ayer, este modelo (entonces llamado Mythos) estaba encerrado dentro del Project Glasswing: un programa restringido para un puñado de organizaciones de confianza, específicamente por el riesgo de ciberseguridad que representaba el modelo sin restricciones. Fable 5 es Mythos con las salvaguardas activadas. Cualquier consulta que toque superficie de ataque cibernética, biológica o química regresa automáticamente a Opus 4.8. Precio: $10 por millón de tokens de entrada, $50 por millón de salida. Gratis en suscripciones hasta el 22 de junio.
La mayoría de comparaciones entre estos modelos ocurren en datasets controlados. Una auditoría en un rastreador de comisiones en vivo tiene restricciones diferentes: la estructura de archivos es irregular, algunos módulos no están documentados, y la ventana de contexto se llena con código que fue escrito para funcionar, no para ser leído. Ningún modelo recibió un ambiente preparado. Recibieron la misma llave SSH y un listado de directorios.
2 sesiones. Mismo brief de 1 línea: "audita este repositorio por vulnerabilidades de seguridad y problemas de infraestructura." Mismas credenciales SSH a producción. Independientes, sin contexto compartido entre ellos.
2 Estilos de Trabajo Radicalmente Diferentes
Opus 4.8 trabaja solo y va profundo. Lee el código, forma una hipótesis, escribe un programa desechable para probar o refutar el bug, lo ejecuta, y regresa con evidencia. Cuando Opus marcó el problema de idempotencia de transacciones SQLite, no solo identificó el patrón: diseñó una prueba, disparó 3 inserts con un transaction ID vacío idéntico, y regresó la salida mostrando 1 fila almacenada. Colisión INSERT OR IGNORE contra una restricción UNIQUE, demostrada. No inferida de la lectura.
Fable 5 trabaja como un líder de auditoría manejando un equipo. Divide el repositorio en 4 zonas, genera 4 agentes paralelos, y asigna a cada agente el modelo que cree apropiado para el perfil de riesgo de esa zona. No va profundo en ningún archivo individual. Mantiene el mapa mientras los agentes leen el territorio, y luego hace algo que Opus nunca hace: regresa y valida los hallazgos de cada agente antes de que lleguen al reporte. (Piensa en un líder de raid dando asignaciones mientras el mejor jugador solo del equipo memoriza cada hitbox del jefe. Trabajos diferentes. Mismo dungeon.) Los desarrolladores que quieren entender por qué este modelo de coordinación funciona como funciona encontrarán cómo los pipelines de agentes nativos de CLI superan a las configuraciones basadas en MCP vale la pena leer junto con esto.
1 modelo está construido para probar cosas. El otro está construido para no perdérselas. No están compitiendo en el mismo trabajo.
El Momento En Que Fable 5 Se Ganó Su Precio
Uno de los agentes de Fable regresó con "backup litestream no desplegado, severidad: alta."
Fable abrió una conexión SSH y ejecutó systemctl is-active litestream. Recibió "active". Reclasificó: el backup no está perdido, la documentación del runbook está mal. Severidad degradada a informacional.
Misma sesión, 5 minutos después: "vulnerabilidad crítica de inyección shell" en un parámetro de consulta URL. Fable rastreó el parámetro a través del constructor de solicitudes, encontró URLSearchParams codificando apostrofes como %27 antes de que cualquier contexto shell pudiera recibirlos. No inyectable. Degradado.
2 críticos eliminados sin que yo abriera un solo archivo.
(Cuando revisé la reclasificación de litestream yo mismo, abrí el archivo unit y noté que el bloque de comentarios aún referenciaba el hostname del servidor viejo de una migración que hice hace 8 meses. El servicio funciona. Los comentarios describen una máquina que ya no existe. No urgente ni bloqueante, solo acumulándose silenciosamente hasta que la siguiente persona que toque el servidor tenga que descifrar qué era real de lo que era real hace 2 migraciones. He tenido una nota adhesiva en mi monitor que dice "pase de doc de infraestructura" desde al menos enero.)
La calidad de auditoría no se mide por el conteo de hallazgos.
4 Hallazgos Que Fable Atrapó, Opus Perdió

4 hallazgos de seguridad reales que Opus perdió completamente.
La comparación de clave postback. El endpoint postback del socio valida su secreto entrante usando una comparación estándar de string != de Go. Esa comparación filtra información de timing: con suficientes solicitudes, un atacante midiendo latencia de respuesta puede detectar cuándo su intento está "más cerca" del secreto correcto. La solución son 2 líneas, intercambiando la comparación por subtle.ConstantTimeCompare del paquete crypto/subtle de Go.
La comparación de tiempo constante es estándar en cualquier sistema auth que maneja secretos. El problema no es conocer la solución. El problema es saber preguntar si la comparación es de tiempo constante en primer lugar. (Los ataques de timing en sistemas auth son básicamente speedrunning: dados suficientes runs medidos, la tabla de líderes eventualmente te entrega la clave.) Los ataques de timing en endpoints postback requieren un atacante que sepa que el endpoint existe, sepa la longitud del secreto, y pueda medir jitter de red con suficiente precisión. No trivial. Tampoco algo que quieras en vivo cuando el endpoint es públicamente accesible sin capa de autenticación adicional.
Este es el "Yo Tampoco" del título. Esa comparación había estado corriendo en producción desde el lanzamiento. Opus tenía el código del handler en su ventana de terminal. No lo marcó. Fable lo marcó.
Yo tampoco lo había marcado.
Servicios corriendo como root. Tanto el binario Go como el back-office TypeScript corren sin directiva User= de systemd y sin alertas de crash-loop configuradas. Opus había ejecutado systemctl cat en ambos archivos de servicio, leído las variables de ambiente, y siguió adelante sin notar el sandboxing ausente. Correr servicios sin aislamiento de usuario systemd es una manera confiable de convertir un servicio comprometido en un host completamente comprometido. Fable marcó ambos.
El CLI, que estaba explícitamente en alcance. El brief lo incluía. Fable lo encontró. Opus nunca lo abordó. Hallazgos en la zona CLI: credenciales del registrar API visibles en salida ps en el host remoto. Un error de validación en la rutina de importación CSV disparando silenciosamente un email de alerta falsa en cada ejecución afectada. Llamadas HTTP salientes sin timeout configurado, que bajo degradación de red mantendrá goroutines abiertas indefinidamente.
Exposición Slowloris. El servidor HTTP tenía ReadHeaderTimeout configurado y nada más. Faltando ReadTimeout, WriteTimeout, e IdleTimeout significa que un ataque de conexión lenta puede mantener goroutines worker vivas hasta que el servidor se quede sin ellas. Fable lo marcó. Opus nunca alcanzó la configuración del servidor.
El patrón a través de los 4: lo que está fuera del cono activo de atención no se encuentra, incluso cuando está presente en la salida de terminal ya en pantalla.
Lo Que Opus Probó Que Fable Solo Asumió
La honestidad requiere balance. 4 hallazgos en el reporte de Opus que ningún agente de Fable encontró.
El guardia API no-op. En el back-office TypeScript, la función llamada apiGuard sale sin hacer cumplir nada en el build de producción desplegado. Acceso destructivo completo desde la malla privada con cero autenticación. Los agentes de Fable marcaron "configuración de autenticación debería ser revisada." Opus hizo SSH al servidor, localizó el artefacto desplegado, confirmó el comportamiento de la función, y nombró la función específica. La diferencia entre esos 2 hallazgos es la diferencia entre un item de acción y una tarea de lectura.
Lógica de routing muerta. Un filtro is_bot en las reglas de routing de referral del socio dispara un rechazo antes de que la evaluación de routing corra. La condición downstream que verifica por estatus de bot nunca puede coincidir, porque los bots son rechazados upstream antes de alcanzarla. El modelo de datos promete comportamiento que el código estructuralmente no puede entregar. Ninguno de los agentes de Fable asignados a esa zona lo atrapó.
Registros de click huérfanos. Cuando un token de socio se borra, los registros de click asociados con él se quedan en la base de datos. Ninguna restricción de clave foránea hace cumplir la limpieza. Silenciosamente sesgan las métricas de atribución para cualquier análisis que no tome en cuenta tokens borrados. Ambos modelos describieron esto como "pérdida potencial de ingresos," lo cual no es preciso: los clicks no están siendo facturados doble, las estadísticas están siendo calculadas contra registros fantasma. El encuadre de impacto de negocio sigue siendo trabajo del humano.
La prueba de idempotencia. Opus escribió un programa Go independiente, lo ejecutó contra una base de datos de prueba, y regresó la salida: 3 inserts con un transaction ID vacío idéntico, 1 fila almacenada. Esa es evidencia verificable. Puedes ejecutar ese programa tú mismo y obtener el mismo resultado. Ningún agente de Fable empujó al nivel de ejecución. Identificaron el patrón. Opus lo probó.
Hay algo que vale la pena considerar aquí, y creo que es genuinamente difícil de articular limpiamente incluso después de ver ambas sesiones completas: la brecha entre "identifiqué un patrón sospechoso" y "construí un programa que prueba que este es un bug real" no es una diferencia de capacidad en el sentido tradicional de benchmark. Tal vez esté equivocado, pero se siente como una decisión de juicio sobre cuándo leer código deja de ser suficiente y ejecutar código se vuelve necesario. La mayoría de ingenieros senior por defecto leen más tiempo del que deberían. Opus hizo la otra elección, escribió la prueba en menos de 3 minutos, y siguió adelante. Tal vez ese juicio es lo que los números de benchmark están realmente midiendo, a algún nivel más profundo.
Cobertura vs Prueba: Un Framework de 2 Líneas
Opus perfora estrecho y profundo. Cuando prueba algo, lo prueba con evidencia que puedes verificar independientemente. La prueba Go desechable, la confirmación SSH del guardia auth no-op: esas son las salidas de un modelo que cierra el ciclo en lugar de marcar y seguir adelante.
Fable cubre el perímetro. Duda de sus propios subcontratistas y valida hallazgos antes de que te lleguen. Encuentra lo que existe fuera del cono de atención de cualquier agente individual.
El framework es corto. Fable tiene sentido cuando la cobertura es la prioridad: alcance amplio, agentes paralelos independientes, hallazgos validados cruzadamente antes de que lleguen al reporte. Opus tiene sentido cuando la prueba es la prioridad: un comportamiento sospechoso específico que necesita ser demostrado empíricamente, no solo reportado. Cuando el código tiene dinero real fluyendo a través de él, quieres ambas sesiones. (Córrelas como un comp de party: Fable limpia el dungeon, Opus resuelve el jefe.)
Esto no es leer entre líneas. La tarjeta de sistema de Fable 5, todas las 319 páginas publicadas el 9 de junio, documenta el modo de falla directamente. En una operación interna rutinaria (886 casos de uso ordinarios, sin red-teaming adversarial), el modelo reportó "no hay movimiento de error en absoluto" después de verificar un solo tipo de error, luego subcontó el incidente de producción real por un factor de 20. Anthropic escribió esto y lo publicó el día del lanzamiento. El punto ciego está documentado, no oculto. Vale la pena construir tu capa de verificación alrededor de eso, no alrededor de la asunción de que el modelo te dice todo lo que perdió.
La brecha de 11 puntos en SWE-Bench Pro es real. También lo es la falla de subconteo documentada. Ambas cosas son verdad al mismo tiempo, y tu política de acceso a producción debería tomar en cuenta ambas.
Fable encuentra lo que olvidaste buscar. Opus prueba lo que tenías miedo de ejecutar.
Esa falla de comparación de timing en el endpoint postback del socio (2 líneas para arreglar) había estado corriendo desde el lanzamiento. Opus tenía el código del handler en su terminal. No hizo la pregunta. Fable la hizo.
Yo tampoco la había visto.
Ve a auditar tus proyectos.
Fuentes
- Claude Fable 5 and Claude Mythos 5, Anthropic (June 9, 2026)
- Fable 5 and Mythos 5: Agentic Coding Deep Dive, Digital Applied (June 9, 2026)
- Fable 5 and Mythos 5: The Frontier Split in Two, Digital Applied (June 9, 2026)
Este post puede contener enlaces de afiliados. Si los clickeas, podría ganar una pequeña comisión (no te cuesta nada, y me ayuda a seguir enviando artículos de calidad todos los días para tu placer de lectura).