Temario · lección 54 de 74
1Por qué fallan los agentes
2Qué es un harness
3Patrones de agentes
4Herramientas
5Ingeniería de contexto
6El repositorio como memoria
7Tareas largas
8Alcance y “hecho” de verdad
9Observabilidad y estado limpio
10Loops y grafos
11Harness reales
12Proyecto final
- Proyecto 1, solo prompt contra harness mínimo
- Proyecto 2, un workspace legible
- Proyecto 3, continuidad entre sesiones
- Proyecto 4, feedback de runtime e indexado
- Proyecto 5, que el agente verifique su trabajo
- Proyecto 6, el harness completo (capstone)
- Proyecto 7, tu primer loop automático
- Proyecto 8, dibuja tu flujo como un grafo
- Checklist final y plantillas
Del prompt al loop
Un loop sustituye a la persona que escribe cada instrucción. El más simple, /goal, tiene tres partes: un objetivo, una forma de verificarlo y una condición de parada.
Tú eres el motor
Hasta aquí del curso, todo suponía que estás delante del teclado: terminas una función, lees el progreso, piensas qué toca, escribes la siguiente instrucción. Tienes un buen harness, pero cada paso arranca contigo. Si te vas a dormir, el agente se para.
Un loop (bucle autónomo) le pasa ese botón de inicio al sistema. No pierdes el control: lo subes un nivel. Ya no escribes la instrucción de cada paso; diseñas el sistema que las escribe.
/goal, el loop más pequeño
Claude Code y Codex ofrecen un comando /goal. Le das un estado final en lugar de un siguiente paso:
/goal "Todos los tests pasan, cero avisos de lint, cambios fusionados en main"
El agente prueba, falla, cambia de enfoque y repite hasta cumplirlo o agotar su presupuesto. La diferencia con un prompt normal:
| Prompt tradicional | /goal | |
|---|---|---|
| Das | El siguiente paso | Cómo es el estado final |
| El agente | Ejecuta una vez | Itera hasta lograrlo |
| Quién juzga si terminó | Tú | Una condición de parada comprobable |
| ¿Puedes irte? | No | Sí |
Cuatro tipos de loop
Se distinguen por cómo arrancan y cómo paran:
| Tipo | Arranca | Para | Ejemplo en Claude Code |
|---|---|---|---|
| Por turnos | Escribes cada mensaje | Tú o el agente deciden que basta | Chat normal |
| Por objetivo | Das un objetivo | Un evaluador independiente confirma, o se agotan los turnos | /goal |
| Por tiempo | Un intervalo programado | Lo paras tú | /loop |
| Por eventos | Algo externo (PR abierto, CI fallida) | Maneja el evento o agota reintentos | Routines |
No compiten: son herramientas para distintos trabajos.
/goal no es /loop
Aunque suenan parecido, resuelven cosas opuestas. /goal es una tarea grande que avanza hacia una meta, como un maratón. /loop es una acción pequeña repetida cada cierto tiempo, como un despertador: cada ejecución es independiente y no recuerda la anterior.
La prueba de una frase: ¿esto tiene un final? Si lo tiene, /goal. Si solo quieres vigilar algo, /loop. Meter «sigue implementando los pagos» en un /loop es el error clásico: cada vuelta empieza de cero.
Dentro y fuera del loop
Estar dentro es lo que hacías hasta ahora: tú inspeccionas, tú corriges la instrucción, tú pasas a lo siguiente. Estar fuera es que el sistema descubre trabajo, lo reparte, lo verifica, apunta el estado y decide el siguiente paso. Tu papel se reduce a tres cosas: fijar el objetivo y la parada antes, revisar la salida después y ajustar las reglas cuando algo se desvía. El apalancamiento pasa de «escribir el prompt perfecto» a «diseñar el loop correcto».
Esto no sustituye al harness: lo necesita. El harness hace fiable una ejecución; el loop encadena ejecuciones sin ti.
Plantilla mínima de objetivo
El material del curso trae una plantilla de objetivo. Su esqueleto:
## Objetivo
Implementar la función X con tests.
## Criterios de aceptación (comprobables con un comando)
- [ ] `npm test` pasa completo
- [ ] `npm run lint` sin errores
## Alcance
- Se puede tocar: src/x/, tests/
- No se toca: el archivo de entrada, migraciones, versiones de dependencias
## Condiciones de parada
- Se cumplen todos los criterios
- Máximo 20 turnos
- 3 rondas seguidas sin avanzar (mismo error)
- Bloqueo que no puede resolver solo
¿Qué tres partes tiene un loop de tipo /goal?
Fuentes: Learn Harness Engineering, lección 13