CAL-091 · LABORATORIO DE INGENIERÍA DE AGENTES

Agentes que proponen.
Un sistema que gobierna.

Researcher, Coder y Reviewer resuelven una tarea. El orquestador en Go decide qué puede ejecutarse; TypeScript + Zod verifica los contratos. Una persona aprueba el código y Docker lo ejecuta con límites y sin acceso a red.

Explorar la arquitectura ↘IMPLEMENTACIÓN LOCAL · EVIDENCIA AL 04 NOV 2026
3 rolesResearcher → Coder → Reviewer
1 aprobación humanaSlack real → ejecución única de prueba
0,000464 USDsmoke LLM · costo conservador registrado
Sin egressPython en Docker con red deshabilitada
01 / DIAGRAMA DE COMPONENTES

Del pedido a la evidencia, en ocho piezas.

Selecciona un componente

Sigue los números del recorrido. Cada pieza explica qué hace, dónde vive y qué control evita que una propuesta del modelo se convierta directamente en una acción.

ARQUITECTURA DEL LABORATORIO
Autoridad Go Roles de modelo Validación TS Decisión humana Ejecución aislada
01

1 / 8
QUÉ HACE

DÓNDE VIVE

CONTRATO Y CONTROL

CÓMO SE COMPRUEBA

Controles transversales. El guard se aplica en todos los intercambios entre roles. Cada llamada de modelo pasa por el ledger USD. SQLite registra checkpoints durante todo el recorrido; el paso 8 representa esa evidencia acumulada.

02 / DIAGRAMA DE SECUENCIA

¿Por dónde hago la petición?

Ejemplo: sumar del 1 al 10

El flujo real empieza en la terminal de tu Mac, con bin/lab start --agents y la configuración del modelo, las tarifas y Docker. Slack recibe las propuestas para que las apruebes; esta web solo explica y simula el recorrido.

01 · ARRANCARTerminal → Go

Escribes la tarea: «Calcula la suma de los números del 1 al 10».

02 · AUTORIZARSlack → Approve / Reject

Revisas el código propuesto. Slack aún no tiene un comando para crear tareas.

03 · EJECUTARDocker dentro de tu Mac

Python corre en Colima, sin red. El ejemplo devuelve 55.

LEE DE ARRIBA HACIA ABAJOAbrir diagrama completo ↗

En móvil, desliza el diagrama horizontalmente para ver los participantes.

Diagrama de secuencia: petición por terminal, aprobación en Slack y ejecución Docker Lee de arriba hacia abajo. Tú pides la suma en la terminal. Go coordina Researcher y Coder y valida con TS/Zod. Slack recibe la propuesta. Solo después de tu aprobación, Docker ejecuta Python y devuelve 55. Reviewer evalúa el resultado y Slack confirma la finalización. TúPersona TerminalEn tu Mac GoOrquestador Roles IAProveedor LLM TS + ZodContrato + guard SlackAprobación DockerColima · tu Mac DECISIÓN HUMANA · SIN APROBACIÓN NO HAY EJECUCIÓN 01 · Pides: sumar del 1 al 10 02 · start --agents + tarea 03 · Researcher: analiza la tarea 04 · Devuelve análisis y requisitos 05 · Valida schema y mensaje 06 · Coder: propón Python 07 · print(sum(range(1, 11))) 08 · Valida la propuesta Python 09 · Publica propuesta + hash + botones 10 · Tú pulsas Approve 11 · Callback firmado de aprobación 12 · Ejecuta el código aprobado 13 · stdout: 55 · exit: 0 14 · Reviewer: evalúa el resultado 15 · Veredicto: approve 16 · Aviso: Ejecución completada 17 · Recibes la confirmación
RECORRIDO GUIADO

01 · Pides: sumar del 1 al 10

La petición real empieza en la terminal de tu Mac. La web es explicativa y Slack todavía no recibe tareas nuevas.

1 / 17

Ejemplo ilustrativo del flujo completo. Las llamadas al proveedor LLM salen del Mac; el código Python se ejecuta localmente en Docker. Go persiste checkpoints y controla el presupuesto durante el recorrido. TS/Zod y el guard validan los intercambios, incluido el veredicto final. No se inicia una ejecución real al recorrer este diagrama.

03 / UNA TAREA, PASO A PASO

Qué pasa cuando alguien pulsa Approve.

Prueba el recorrido con una tarea pequeña. Esta simulación vive en tu navegador: no llama a modelos, no envía mensajes y no ejecuta Python.

SIMULACIÓN DIDÁCTICA
“Calcula la suma de los números del 1 al 10 y muestra el resultado.”
PROPUESTA PYTHONprint(sum(range(1, 11)))
ESTADO DEL WORKFLOWSin iniciar
    0ejecuciones de la tool
    —salida de la simulación

    La prueba humana real de Slack usó print(55), con roles stub y cero llamadas pagadas. El smoke LLM de la suma fue otra prueba y utilizó aprobación automatizada. No son la misma corrida.

    04 / LÍMITES EXPLÍCITOS

    La autonomía tiene condiciones.

    Los controles se aplican fuera del modelo. Una respuesta convincente no sustituye una validación, una reserva de presupuesto o una aprobación.

    01

    Forma antes que acción

    Zod exige el schema versionado. Un campo extra o un tipo incorrecto devuelve feedback acotado al rol. Hasta tres retries, con backoff.

    schema → validate → repair
    02

    Aprobar una propuesta concreta

    La decisión vincula actor, canal, operación, hash, schema y caducidad. Si cambia el código, hace falta una aprobación nueva.

    hash + actor + expiry
    03

    Aislar lo que sí se ejecuta

    Docker sin red, usuario no root, raíz de solo lectura, capabilities vacías y recursos limitados. Nunca usa el host como alternativa.

    128 MiB · 0,5 CPU · 32 PIDs
    04

    No repetir lo incierto

    Un efecto sin resultado confirmado exige reconciliación. Un request de modelo con uso desconocido retiene su reserva y detiene el run.

    uncertain ≠ retry
    ¿Qué no garantiza el laboratorio? +

    El guard usa heurísticas: no detecta toda prompt injection. El sandbox confía en el kernel, el daemon y la imagen. SQLite no convierte cualquier efecto externo en exactly-once. Las pruebas muestran comportamientos concretos, no una garantía general de seguridad.

    05 / CONSTRUIDO Y COMPROBADO

    La evidencia, con su alcance.

    Snapshot · 04 nov 2026
    PRUEBARESULTADOQUÉ DEMUESTRAEVIDENCIA
    Aprobación humana en SlackTransporte real + Docker realPASS
    1 decisión · 1 ejecución
    Callback firmado, salida 55, exit 0, cleanup confirmado y aviso de resultado entregado.Abrir JSON ↗
    Researcher → Coder → ReviewerProveedor LLM real · DeepSeek FlashPASS
    464 microUSD
    Roles reales, salida 55 y revisión aprobada. Aprobación de tool automatizada y sintética.Abrir JSON ↗
    Trayectorias goldModelo HTTP determinístico + Docker real12 / 12Seis casos con dos repeticiones; verificadores de costo, permisos y evidencia. CI remoto pendiente.Abrir JSON ↗
    Trazas OTLPCollector HTTP local real120 spans
    23 spans de modelo
    Hops correlacionados y metadata permitida. Incluye llamadas con uso incierto; sin prompts ni credenciales.Recepción local
    input-guard-proxyPaquete TS extraído con procedencia41 testsEncuadre aleatorio, límites de entrada y cuarentena de patrones adversarios cubiertos por las pruebas.Pruebas del paquete
    Implementado ≠ validado externamente.

    Telegram cuenta con adaptador y pruebas de callbacks sintéticos; falta su prueba humana real. Langfuse cloud, CI en GitHub, protección de PR, publicación del repositorio y los tres artículos siguen pendientes. OTLP y eval-gate sí tienen evidencia local.

    06 / DECISIONES DE ARQUITECTURA

    Por qué Go + un servicio TS con Zod.

    DECISIÓN ACEPTADA · ADR-0001

    La autoridad vive
    en el orquestador.

    Go concentra estados, permisos, presupuesto y ejecución. TypeScript conserva la validación con Zod y el guard reutilizable detrás de una API versionada.

    GoTypeScriptZodSQLite

    Frente a un harness completamente TS

    Se eligió Go para el plano de control. El costo de esa elección es mantener contratos entre dos procesos y tratar la indisponibilidad del validador como un bloqueo.

    Frente a LangGraph

    La implementación actual usa una máquina de estados propia. LangGraph se consideró como alternativa; no es una dependencia del runtime elegido.

    Frente a ejecutar código en el host

    La tool Python requiere un daemon y una imagen fijados. Si Docker no está disponible, la ejecución falla cerrada y no cambia de entorno.

    07 / PRESUPUESTO Y RECUPERACIÓN

    Cada llamada tiene que caber en el presupuesto.

    Antes del request se reserva un máximo conservador. Después se liquida con el uso reportado. El umbral blando alerta y el duro bloquea nuevas reservas; el kill externo cancela llamadas en vuelo.

    SMOKE LLM VERIFICADO · UNA CORRIDA
    0,000464 USD
    Researcher216 microUSD
    Coder126 microUSD
    Reviewer122 microUSD

    Contabilidad conservadora con tokens reportados. No es una factura ni una estimación del costo de cualquier tarea.

    EXPLORA LA REGLA · EJEMPLO ILUSTRATIVO

    ¿Se admite la siguiente llamada?

    Gasto acumulado ilustrativo
    464 microUSD
    Reserva máxima solicitada
    200 microUSD

    La reserva del ejemplo es ilustrativa. El cálculo real depende del prompt, el tope de salida y las tarifas configuradas.

    SI EL PROCESO SE REINICIA

    Respuesta de modelo guardada: se recupera sin volver a pagar. Resultado de tool persistido: se recupera sin volver a ejecutarla. Envío de aviso incierto: se conserva para reconciliación, sin reenviarlo automáticamente.