No es el comité simulado de cultura framework-first. Esta vez el panel son las personas que construyen los agentes de coding del mundo: Boris Cherny (Claude Code / Anthropic — el motor sobre el que corre Agent Squad), Alexander Embiricos (Codex / OpenAI), Harrison Chase (LangChain / LangGraph) y Charity Majors (Honeycomb). Sus posiciones están investigadas y citadas; las citas marcadas ⚠ son recaps de terceros, las ✓ son verbatim de fuente propia. Cada lente emite un veredicto honesto.
FECHA 2026-06-13BAJO FUEGO agent-squad-app · as-built en mainEJE "¿es n8n + un nodo de vector?"FUENTES código verificado file:line · 849 tests
El cargo que motivó la sesión
"Esto no es más que una plantilla de n8n con un nodo de base de datos vectorial, y ya."
Lo que el crítico ve
Lo que el código muestra
"Un DAG de nodos"
Un DAG, sí — pero generado por un LLM (Nova) desde lenguaje natural y validado formalmente: validate.ts:26 contra catálogo, isAcyclic Kahn en nova-compose.ts:670, cap de 10 pasos, gate humano con fallback:'fail'. No dibujado a mano.
"Un nodo de vector DB"
text-embedding-3-large (3072d) + índice DiskANN + recall L2 <=> real en claims.ts:103. Memoria semántica viva, no decorativa.
"Y ya"
17 operations (11 deterministas + 6 LLM), separación planificar→validar→ejecutar, e inversión identidad↔capacidad: las personas son etiquetas, la capacidad vive en el catálogo.
🟡
Boris Cherny
Claude Code · Anthropic
Minimalismo del harness. "Apostá al modelo, no al andamiaje." The Bitter Lesson, grep > RAG.
🟡
Alexander Embiricos
Codex · OpenAI
Autonomía asíncrona, flotas de agentes. "El humano es el cuello de botella."
🟢
Harrison Chase
LangChain · LangGraph
Orquestación explícita + context engineering. "Controlá qué entra al LLM en cada paso."
🔴
Charity Majors
Honeycomb
Resiliencia y operabilidad. "¿Cómo sabés que no se rompe a las 3am?"
Filtrar
Harrison Chase — el error de categoría
Es quien mejor desarma la acusación, porque n8n ES su terreno: orquestación.
Cuestionanivel del espectro
"El crítico comete un error de categoría y se lo nombro con mi espectro de autonomía. n8n es nivel 1: un flujo hard-coded que un humano dibuja. Tus operations sueltas también son nivel 1. Pero Nova es nivel 4-5: un router/state-machine donde el LLM decide qué pasos existen y en qué orden, con guardrails. Generar la cognitive architecture desde lenguaje natural y validarla no es lo mismo que ejecutarla. Mi pregunta real: validás estructura — ¿controlás el contexto que entra a cada handler?"
Defensa
validatePlanAgainstCatalog valida refs, edges y deprecación — estructura. Decir "es n8n" porque el resultado es un DAG es como decir que un compilador es "un archivo de texto con instrucciones": ignora cómo se generó. El asterisco es justo: el contexto que reciben los 6 handlers text.* no tiene validación de contenido equivalente; se confía en lo que Nova pasó.
✓ verbatim, blog 20-abr-2025: "The hard part of building reliable agentic systems is making sure the LLM has the appropriate context at each step."
🟢 SÓLIDA
Esto demuele la acusación. La separación composición/validación/ejecución es una cognitive architecture deliberada de nivel 5, no una plantilla. El context engineering en los handlers queda como 🟡 aparte, no descalifica el verde.
Boris Cherny — el escéptico del andamiaje
Aprueba lo esencial, pero pincha dos cosas: el motor y el vector.
Cuestionapgvector + el motor
"Dos cosas me pican. Una: tu motor es claude -p --max-turns 1 --disallowed-tools '*' — usás mi producto como un endpoint de completion barato, sin agencia, sin tools. Es pragmático y es $0, pero entonces no tenés un sistema agéntico: tenés un catálogo determinista con seis llamadas de texto. Dos: pgvector. En Claude Code descartamos los vector stores; la agentic search con grep nos ganó en benchmarks. ¿Probaste que a tu escala un grep sobre el log de decisiones no hace el mismo trabajo con una décima de la infra?"
Defensa
El recall semántico no es text-matching: busca por significado ("¿qué decidimos sobre precios?" recupera la decisión aunque no diga "precio"). A escala de un workspace es defendible. Pero Boris tiene razón: nadie midió el contrafactual grep. Y el andamiaje que sí importa — catálogo determinista + Nova que solo compone — es exactamente "darle al modelo herramientas y un objetivo": eso sobrevive al próximo modelo.
⚠ recap, no transcripción oficial: "You get better results by giving the model tools and a goal… scaffolding gains get wiped out by the next model."
🟡 TRADE-OFF
Pasa su test más duro (el andamiaje esencial sobrevive al modelo). El 🟡 es por pgvector sin contrafactual y por vender como "agentes" lo que corre como completions.
Alexander Embiricos — ¿dónde está la flota?
Va por el lado opuesto a Harrison: demasiado humano en el centro.
Cuestionael human_gate
"Tenés un human_gate.approve obligatorio en cada plan (nova-compose.ts:546, y si falta lo inyectás con fallback:'fail'). Mi tesis es que el humano es el cuello de botella, y acabás de institucionalizarlo en el centro del sistema. ¿Dónde está la flota? ¿Por qué un plan a la vez, síncrono, esperando aprobación?"
Defensa
El usuario de Agent Squad no es un ingeniero — es un founder/manager. Para esa persona, el gate de aprobación no es fricción: es el producto. Y vos mismo decís que revisar el output del agente es el problema sin resolver. Lo resolvieron poniendo al humano dueño en el gate, conscientemente. Lo que no hay: flota, async, auto-validación.
⚠ transcript no-oficial: "Reviewing agent written code is a place that today is less fun."
🟡 TRADE-OFF
Para el caso real (no-ingenieros aprobando trabajo de su squad) el gate es 🟢 producto. Como apuesta de escalabilidad de autonomía es 🟡: el techo es la velocidad de aprobación humana — un techo elegido.
Charity Majors — las preguntas de las 3am
El golpe de realidad operacional. Aquí viven los huecos reales.
Cuestionamotor · tenancy · observabilidad
"Tres preguntas. Uno: tu motor de producción es un CLI atado a una sesión OAuth de un plan de suscripción (llm.ts:1). ¿Qué pasa cuando rate-limitee o expire un domingo? ¿El fallback de llm.ts:40 está probado o es teoría? Dos: tu aislamiento entre tenants es un WHERE workspace_id a nivel aplicación, no RLS. Un query mal filtrado y un workspace ve a otro. Tres: Langfuse traza las llamadas LLM y el plan, pero no los 11 steps deterministas. ¿Y un SLO sobre la calidad de los planes que pasan el gate, o solo sobre uptime?"
Defensa
El fallback existe en código pero el runbook Max→API no está probado bajo fuego. El aislamiento app-level funciona pero sin la red de RLS. Lo que sí brilla: 849 tests + un harness de 34 pasos que corre el journey completo en producción con usuario efímero y limpieza quirúrgica — eso es test-in-prod de verdad, justo lo que ella predica.
✓ verificada (su cuenta): "Nines don't matter if users aren't happy."
🔴 ROADMAP
No por mal diseño — por huecos operacionales reales: motor sin failover probado, multi-tenancy sin RLS, observabilidad sin cobertura de steps, sin SLO de calidad. El harness le sube la nota; el CLI-Max se la baja a rojo.
El debate entre ellos
Lo que pediste: que no opinen aislados, que choquen. Cuatro tensiones reales, sin consenso forzado.
⚔ Boris vs Harrison — el catálogo fijo
Boris: "Tu catálogo de 17 ops es andamiaje. El próximo modelo compone libre sin que le des una lista cerrada. Lo construís porque el modelo de hoy no llega."
Harrison: "Al revés. El catálogo acotado es lo que te da fiabilidad. Autonomía total no es más sofisticada — es menos confiable. La sofisticación vive en los guardrails, no en quitarlos."
Sin consenso. La tensión es real y es la correcta para un sistema que mueve trabajo con aprobaciones.
⚔ Embiricos vs Charity — el gate humano
Embiricos: "Sacá al humano del gate, es el cuello de botella."
Charity: "Ni se te ocurra. El gate es tu única red de seguridad mientras no tengas un eval offline que juzgue la calidad de los planes. Primero el eval, después hablamos."
Charity gana el round en lo empírico: no se quita la red antes de tejer la otra.
🤝 Boris + Charity — coinciden sobre pgvector (raro)
Boris desde simplicidad ("¿lo necesitás o es cargo-cult?").
Charity desde operación ("no operes en prod lo que no medís que aporta").
Los dos piden el mismo experimento: medir recall semántico vs grep antes de quedarse con la infra vectorial.
🔁 Los cuatro — sobre "son agentes"
El hecho: las personas son ACTOR_DISPLAY strings; Nova asigna actores desde COMPOSABLE_OPS, nunca lee el squad. Es inverso a lo que un crítico espera de un "sistema multi-agente".
Doble filo: es la sofisticación real (las personas siguen al catálogo) y es munición para el crítico ("entonces tus agentes son etiquetas"). El panel coincide: decisión correcta, pero mal contada invita la crítica de n8n.
Peer review ciego
Los argumentos juzgados sin saber de quién son. Es lo que separa un panel de un coro.
A"Es n8n + vector": se apoya en mirar el artefacto de runtime (un DAG con un nodo vectorial). Gap: ignora la capa de composición-y-validación, donde vive la diferencia. Mira la capa equivocada.
B"El catálogo fijo es andamiaje temporal": elegante, pero asume que el próximo modelo elimina la necesidad de garantías de fiabilidad. En dominios con dinero y aprobaciones, las garantías no son andamiaje que el modelo borre. No demostrado.
C"Sacá el humano del gate": asume una auto-validación del agente que hoy no existe en el sistema (no hay eval offline). Gap lógico: quita la red antes de tejer la otra.
D"Hueco operacional: motor CLI-Max, sin RLS, sin SLO de calidad": se apoya en evidencia concreta de archivos. Es la crítica con mejor base empírica de la sesión.
🎯 Veredicto del moderador
¿Es "una plantilla de n8n con un nodo de vector y ya"? No — y la razón es precisa, no defensiva. n8n es un flujo dibujado a mano (nivel 1). Agent Squad genera el flujo desde lenguaje natural y lo valida formalmente contra un catálogo, con separación composición/validación/ejecución, gate con fallback:'fail' e inversión identidad↔capacidad. Es categóricamente otra cosa. El crítico está mirando la capa de ejecución y sacando conclusiones sobre la de diseño.
Pero el panel es honesto en dónde la crítica pica: (1) si solo mirás el runtime, sí se parece a correr un workflow — la distancia con n8n vive en composición y gobernanza, no en ejecución; por eso la defensa nunca es enseñar el DAG, es enseñar cómo se generó. (2) La sofisticación está donde NO la critican (composición-validada, inversión catálogo↔personas, derivación del squad desde el trabajo) y no donde sí (que exista un DAG, que exista un vector). (3) Los huecos de Charity son reales y preceden esta sesión.
La acusación es técnicamente ignorante del proceso, pero es un regalo: te dice exactamente qué historia no estás contando y qué flancos operacionales siguen abiertos.
El marcador honesto
1
Sólida Harrison: desmonta la acusación
2
Trade-offs Boris y Embiricos: defendibles
1
Roadmap Charity: huecos operacionales
8
Compromisos que salen de la sesión
Acta — los 8 compromisos
1pgvector vs grep — experimento de contrafactual. Medir recall semántico real contra agentic search a la escala actual de un workspace. Quedarse con pgvector solo si gana.dueño-lente: Boris + Charity
2Runbook Max→API probado bajo fuego. Simular expiración/rate-limit de la sesión CLI y verificar que el fallback de llm.ts:40 toma el relevo.dueño-lente: Charity · era R5 del red-team previo
3Eval offline de calidad de planes (LLM-judge) antes de relajar el human_gate. La red que falta para discutir autonomía.dueño-lente: Charity + Embiricos · era R4
4SLO sobre calidad de planes aprobados, no solo uptime; + alerting sobre el motor.dueño-lente: Charity · era R3
5Decidir RLS en el substrato vs. aceptar conscientemente el filtrado app-level y blindarlo con tests de fuga entre tenants.dueño-lente: Charity · era R1
6Trazar los steps deterministas en Langfuse (spans por step), no solo las llamadas LLM, para reconstrucción post-hoc completa.dueño-lente: Charity
7Auditar el contexto que reciben los 6 handlers LLM — validar contenido, no solo estructura del plan.dueño-lente: Harrison
8Reescribir la narrativa de arquitectura alrededor de composición-validada + inversión catálogo↔personas. Dejar de mostrar el DAG al frente.dueño-lente: el moderador
"No es n8n — es un compositor-validador de planes sobre un catálogo determinista, que es una categoría más difícil y más interesante. Lo construido aguanta el cuestionamiento de diseño. Lo que no aguanta todavía es el de operación. Y lo que invita a la crítica es cómo se cuenta: el DAG al frente, en vez de la composición."