CTRL NODE
Ingeniería · 2 jul 2026 · 12 min de lectura

Ejecutamos una tarea compleja: un análisis del repo de LangChain con cinco modelos Claude

Ejecutamos una tarea compleja: un análisis del repo de LangChain con cinco modelos Claude

Anthropic acaba de lanzar Claude Fable. Queríamos una respuesta real a una pregunta práctica:

Si ejecutas la misma tarea de ingeniería compleja en Opus, Fable, Sonnet y Haiku, ¿qué obtienes realmente?

No un puntaje de benchmark. No una impresión superficial. Una auditoría completa de nivel principal engineer de un monorepo de código abierto en producción, con evidencia, etiquetas de severidad y un plan de ejecución.

Ejecutamos ese experimento dentro de CTRL NODE: un prompt, cinco agentes, cinco modelos, un repositorio clonado.


1. El objetivo: una tarea difícil, cinco modelos

LangChain principal-engineer audit prompt in a CTRL NODE task

Qué probamos

Dimos a cada modelo el mismo prompt de auditoría de cuatro fases y el mismo objetivo: el monorepo de Python de LangChain (un ecosistema de librería grande y maduro, no un repo de juguete).

El prompt pide:

  1. Mapa del repositorio — explorar primero, juzgar después
  2. Informe de auditoría — arquitectura, seguridad, tests, rendimiento, dependencias, DX, documentación (con citas file:line)
  3. Estrategia de mejora — temas, trade-offs, criterios medibles de "hecho"
  4. Plan de tareas — hitos M0–M3, quick wins, esfuerzo/riesgo/dependencias en cada ítem

Todo hallazgo debe estar basado en evidencia. Adivinar está explícitamente prohibido.

Esa es una tarea genuinamente pesada: miles de archivos, configuraciones de CI reales, rutas de deserialización sensibles a la seguridad y módulos god-class en rutas de código críticas. Es el tipo de trabajo que normalmente se reparte entre varios ingenieros senior.

Por qué Fable frente al resto

Fable se posiciona como un modelo de razonamiento sólido para trabajo largo y estructurado. Lo incluimos junto a:

Modelo Rol en el experimento
Claude Opus 4.8 Nivel premium — línea base de threat modeling
Claude Fable 5 Nivel nuevo — estrategia y planificación de ejecución
Claude Sonnet 5 Sonnet actual — pase de auditoría principal
Claude Sonnet 4.6 Sonnet anterior — lente de ops / CI
Claude Haiku 4.5 Nivel rápido — exploración y mapa

La hipótesis no era "Fable gana en todo". Era: cada nivel ve cosas distintas, y Fable podría ser el mejor convirtiendo hallazgos en un backlog listo para entregar.

El prompt

El prompt completo vive en nuestro catálogo como langchain-prompt.md. Instrucción central (abreviada):

You are a world-class, principal-engineer-level software engineer and technical audit expert.
Perform an in-depth analysis of this code repository, provide an honest audit report,
and offer a prioritized, actionable improvement plan.

Follow four phases in order: Discovery → Audit → Strategy → Task Plan.
All judgments must cite real file paths and line numbers. Do not guess.

Entregables solicitados por ejecución:

  • audit-report-<model>.md — informe completo en Markdown
  • audit-report-<model>.html — dashboard interactivo con tema oscuro (pestañas: Overview, Map, Audit, Strategy, Tasks)

Resumen del prompt: resumen-langchain-prompt.md.


2. Cómo lo configuramos en CTRL NODE

CTRL NODE project configured for the LangChain audit experiment

No pegamos el prompt en cinco pestañas del navegador. Lo ejecutamos como lo haría un equipo: Bridge en una máquina real, un directorio de trabajo del proyecto apuntando al clon, un agente por nivel de modelo.

Requisitos previos

  1. Bridge (ctrlnode) instalado y emparejado — ver Bridge setup.

  2. Clave de API del SDK de Claude configurada en ~/.ctrlnode/.env (los proveedores se cargan automáticamente, no se necesita el flag PROVIDERS):

    ANTHROPIC_API_KEY=sk-ant-...
    BASE_PATH=/home/you/workspace
    
  3. LangChain clonado en el host de Bridge bajo BASE_PATH (CTRL NODE no clona el repo por ti; el directorio de trabajo apunta a una carpeta existente).

Proyecto

En la web app: + NEW PROJECT

Campo Valor
NAME langchain-audit-experiment
AGENT TYPE Claude
WORK DIRECTORY Browse → seleccionar el clon de LangChain → USE THIS DIRECTORY
DESCRIPTION Benchmark de auditoría con cinco modelos

El directorio de trabajo es lo que permite a los agentes leer el árbol completo en modo tarea WORK DIRECTORY — el mismo alcance que necesitaría un staff engineer.

Agentes (uno por modelo)

Team → + ADD AGENT — creamos cinco agentes en el mismo proyecto:

Nombre del agente Campo MODEL Propósito
audit-opus claude-opus-4-8 Revisión de amenazas y diseño
audit-fable claude-fable-5 Estrategia y plan de tareas
audit-sonnet-5 claude-sonnet-5 Auditoría principal
audit-sonnet-46 claude-sonnet-4-6 Pase de CI / ops
audit-haiku claude-haiku-4-5 Mapa rápido

Los modelos se seleccionan en el combobox MODEL (sincronizado desde Bridge cuando está online) o se escriben manualmente. Fable aparece como claude-fable-5 en el manifiesto de modelos de Bridge (v2026.2.4+).

Las AGENT SYSTEM INSTRUCTIONS opcionales se dejaron mínimas — queríamos que el prompt de la tarea llevara la especificación, no que hubiera deriva de persona por agente.


3. Cómo ejecutamos el prompt

Five audit agents — one per Claude model tier — in CTRL NODE Team

Para cada agente, el mismo procedimiento:

  1. + NEW TASK en el proyecto
  2. TITLE: LangChain principal audit — <model>
  3. INSTRUCTIONS: pegar el contenido completo de langchain-prompt.md
  4. ASSIGN TO AGENT: elegir el chip del agente correspondiente
  5. OUTPUT MODE: WORK DIRECTORY (alcance completo del repo; rutas de foco opcionales dejadas vacías)
  6. NEW TASK → la tarea aterriza en Backlog
  7. RUN → se despacha a Bridge → el agente pasa a In progress

Bridge entrega la tarea con repositoryPaths y contexto de despacho de repo, de modo que el SDK de Claude se ejecuta contra el árbol de LangChain en disco. Los outputs (audit-report-*.md / .html) se recolectaron del directorio de trabajo del agente y se copiaron a nuestra carpeta de catálogo de marketing.

Consejo para reproducibilidad: usa el mismo commit SHA en cada ejecución. Nuestros informes referencian master de LangChain en 2b47357 donde se indica.


4. Qué devolvió Fable

Audit deliverables in CTRL NODE Files — report and dashboard output

Fable calificó el repo con A− — la misma calibración que Opus, más honesta que la A que Haiku se autoadjudicó.

Resumen ejecutivo (Fable)

Top 3 riesgos

  1. Concentración de complejidad — cinco archivos superan las 1.800 líneas; runnables/base.py tiene 6.574 LOC. Alto radio de impacto en cada ruta de invoke/stream.
  2. Deserialización insegura por defectolangchain_core.load usa por defecto allowed_objects='core', documentado como inseguro para manifiestos no confiables. Existen opciones seguras, pero son opt-in.
  3. Escapes de type-safety208 comentarios type: ignore solo en langchain-core; disallow_any_generics=false debilita el contrato de la API pública.

Top 3 oportunidades

  1. Cambiar el valor por defecto de deserialización a una lista permitida segura ('messages') en la próxima versión mayor.
  2. Resolver los TODOs de lint pendientes (BLE, ANN401, ERA) — la infraestructura de enforcement ya existe.
  3. Descomponer los principales archivos god-file detrás de fachadas públicas sin cambios (cero ruptura de API).

Qué destacó

El diferenciador de Fable no fue una toma más candente sobre titulares de seguridad. Fue la Fase 3 y la Fase 4:

  • Cuatro temas estratégicos (complejidad, guardrails desactivados, límites de confianza seguros por defecto, higiene del workspace)
  • No-objetivos explícitos (p. ej., no reescribir el mustache.py vendorizado en este ciclo — añadir tests de propiedades en su lugar)
  • Hitos M0–M3 con etiquetas de carga de trabajo (S/M/L/XL), riesgo, dependencias y criterios de aceptación
  • Quick wins que podrías entregar en una tarde (.gitignore para artefactos de auditoría, logger.debug en el AttributeError silenciado en callbacks/usage.py, ratchet de CI sobre el conteo de type: ignore)

Hallazgos casi exclusivos de Fable:

  • Motor Mustache vendorizado de 704 líneas (mustache.py) con su propia superficie de seguridad
  • Lint de complejidad McCabe C90 explícitamente deshabilitado — sin contrapresión automatizada sobre el crecimiento de god-files
  • Cobertura de tests delgada frente a la complejidad de langchain_v1/agents/factory.py (56 archivos de test frente a una factory de 1.891 líneas)

Qué no enfatizó Fable

Fable no sacó a la luz varios problemas que otros modelos sí detectaron:

  • TOCTOU / DNS rebinding en rutas SSRF (Opus)
  • Ejecución de host por defecto en ShellToolMiddleware (Opus)
  • Transporte SSRF adoptado en solo dos call sites + fetch desprotegido en graph_mermaid.py (Sonnet 5)
  • Chequeo de lockfile comentado en el CI _lint.yml (Sonnet 4.6)
  • Ejemplo de modelo roto en el README / falta de SECURITY.md (Sonnet 4.6)

Esa brecha es el punto: Fable no es un reemplazo de un pipeline multi-modelo.

Informe completo: audit-report-fable.md · Dashboard interactivo: audit-report-fable.html


5. Cómo se comparan los cinco modelos

Modelo Nota Mejor en Débil en
Opus 4.8 A− Threat modeling (TOCTOU, defaults de shell del agente, bypass de env) Lockfile de CI, load() por defecto, faltantes del README
Fable 5 A− Estrategia, hitos, quick wins, deuda de ingeniería Amenazas específicas del agente, mapa de adopción SSRF
Sonnet 5 B+ Infraestructura SSRF vs adopción, except silencioso, higiene del repo CI de lockfile, README, SECURITY.md
Sonnet 4.6 B+ Ops: CI de lockfile, valor por defecto de load(), documentación de onboarding Análisis de adopción SSRF más reciente
Haiku 4.5 A* Mapa rápido de LOC, ciclos de callback, traductores duplicados *Nota inflada; error factual sobre lockfile en CI

*La A de Haiku luce segura en el papel. Verificarla contra Sonnet 4.6 mostró una afirmación incorrecta sobre la validación de lockfile en CI.

Matriz de hallazgos exclusivos (selección)

Hallazgo Op Fb S5 S4.6 Hk
TOCTOU / DNS rebinding
Shell host por defecto
Transporte SSRF ~2 call sites
graph_mermaid.py sin SSRF
load() por defecto inseguro
Plan M0–M3 + no-objetivos
mustache.py / C90 desactivado
Lockfile CI comentado ✗ incorrecto
Ciclos de callback/tracer

El pipeline que realmente usaríamos

Haiku        → fast map & architecture hotspots
Sonnet 5     → primary audit + security adoption gaps
Sonnet 4.6   → CI, docs, onboarding landmines
Opus         → threat review for agent-facing surfaces
Fable        → merge into one prioritized backlog
Human        → verify _lint.yml, load.py, README in your checkout

Ningún modelo por sí solo reemplaza esta cadena. Pagar solo por Opus, o solo por Fable, deja puntos ciegos.

Análisis en profundidad: comparison-models-report.md

Presentación de diapositivas para la historia

También construimos una presentación de 14 diapositivas para videos explicativos: model-comparison-presentation.html (←/→ para navegar, F pantalla completa).


6. Qué significa esto para los usuarios de CTRL NODE

  1. La elección de modelo es una decisión de flujo de trabajo, no un capricho de nivel premium. Usa Haiku para explorar, Sonnet para auditar, Opus para amenazas, Fable para planificar — en el mismo proyecto y directorio de trabajo.
  2. El modo WORK DIRECTORY importa para tareas como esta. Un sandbox de solo salida no habría producido citas file:line a través de CI, core y paquetes de terceros.
  3. Fable se gana un lugar después del descubrimiento, no en lugar de Sonnet u Opus. Su nota A− igualó a Opus; la forma de su entregable (hitos, ratchets, no-objetivos) fue la más accionable.
  4. Repite el experimento en tu propio repo — clona bajo el BASE_PATH de Bridge, apunta un proyecto de Claude a él, duplica la tarea cinco veces con distintos valores de MODEL.

7. Referencias — todos los artefactos

El experimento completo — cada prompt, cada informe por modelo y el deck de comparación — se publica a continuación como material de apoyo para este artículo.

Prompt

Archivo Descripción
langchain-prompt.md Prompt completo de auditoría de cuatro fases (inglés)
resumen-langchain-prompt.md Resumen del prompt (español)

Informes por modelo

Modelo Markdown Dashboard HTML
Claude Fable 5 audit-report-fable.md audit-report-fable.html
Claude Opus 4.8 audit-report-opus.md audit-report-opus.html
Claude Sonnet 5 audit-report-sonnet-5.md audit-report-sonnet-5.html
Claude Sonnet 4.6 audit-report-sonnet-4-6.md audit-report-sonnet-4-6.html
Claude Haiku 4.5 audit-report-haiku.md audit-report-haiku.html

El prompt pide a cada modelo outputs emparejados en .md + .html. Todos los modelos de este lote produjeron ambos formatos.

Comparación y medios

Archivo Descripción
comparison-models-report.md Comparación escrita completa de los cinco modelos
model-comparison-presentation.html Presentación animada de 14 diapositivas (Op · Fb · S5 · S4.6 · Hk)

Pruébalo tú mismo

  1. Empieza gratis — crea un proyecto de Claude y empareja Bridge.
  2. Clona el repo que te interese en la máquina de Bridge; configura WORK DIRECTORY.
  3. Registra agentes con distintos valores de MODEL (claude-fable-5, claude-opus-4-8, …).
  4. Pega el prompt de auditoría en INSTRUCTIONS, asigna, RUN, compara los resultados.

¿Preguntas o quieres que ejecutemos esto en tu stack? info@ctrlnode.ai


Fecha del experimento: 17 de junio de 2026 · CTRL NODE — orquesta Claude, Copilot, Gemini, Cursor y más desde un único panel de control.