Topes y parada: turnos, tiempo, memoria, estancamiento y costo
Un buen criterio garantiza que el loop no termine antes de tiempo; no garantiza que termine. Objetivo imposible, agente atascado en el mismo error, proceso que se come la memoria de la máquina: solo un tope lo detiene. En esta clase conoces los cinco topes, ves a cada uno detener un proceso de verdad y practicas la decisión más difícil: cuando el agente pide solo un intento más.
2timeout, MemoryMax y conteo de ciclos sin avance, en ejecución
3Lo que siempre pide un humano, incluso dentro del tope
4Una conversación simulada con un agente que quiere continuar
Objetivo: poner los cinco topes en un loop y decidir, frente a un agente que insiste, entre continuar, parar y llamar al humano.
01 · Cinco topes alrededor del ciclo
Haz clic en cada tope: qué limita y dónde ya existe en las herramientas.
Clase 701 · Cinco topes alrededor del cicloHaz clic en cada tope: qué limita y dónde ya existe en las herramientas.
¿Ningún tope se activó y el criterio no se cumplió? Un ciclo más.
1/6
Turnos
La doc de /goal manda incluir un tope en la propia condición, como "o detente después de 20 turnos"; y Claude Code ya detiene el goal si el agente responde varios turnos seguidos sin usar herramientas. En tu loop, es una variable: MAX_CICLOS. El /loop tiene el suyo: una tarea recurrente expira en 7 días.
Desplázate por la página: cada etapa de abajo ilumina su parte del diagrama.
1/6
Turnos
La doc de /goal manda incluir un tope en la propia condición, como "o detente después de 20 turnos"; y Claude Code ya detiene el goal si el agente responde varios turnos seguidos sin usar herramientas. En tu loop, es una variable: MAX_CICLOS. El /loop tiene el suyo: una tarea recurrente expira en 7 días.
2/6
Tiempo
Un ciclo que se trabó (esperando entrada, en un bucle infinito, en un servidor que no levanta) retiene todo el loop. El timeout de coreutils mata el comando después del plazo y devuelve 124, y el loop lo trata como ciclo fallido.
3/6
Memoria
Un agente que levanta un proceso pesado puede trabar toda la máquina. En Linux, systemd-run --user --scope con MemoryMax pone un tope al proceso y a sus hijos: si lo pasa, el kernel mata solo a ese (código 137). Es lo que usa el kit execucao-longa en cada ciclo.
4/6
Estancamiento
El tope que más ahorra. Mide un número en cada ciclo (pruebas que pasan, ítems con passes) y cuenta cuántos ciclos seguidos no subió. La regla del kit execucao-longa: 3 ciclos sin avance medible = parar, registrar en failures.md y llamarte. También es señal de contexto degradado: el mismo plan repetido sin cerrar, un ítem ya hecho reabierto.
5/6
Costo
Los tokens son cuota (en la suscripción) o dinero (en la API). En el LOOP-R, el tope de costo por ciclo es una de las cinco respuestas obligatorias de la ficha del loop, y el Guardián interrumpe el ciclo cuando lo alcanza; la primera métrica del Meta-agente es el costo por hipótesis promovida. Sin tope, el loop puede costar más que la ganancia que persigue.
6/6
Dos puertas de salida
La puerta buena es el criterio de terminado cumpliéndose. La puerta de seguridad es cualquiera de los cinco topes. Un loop que solo tiene la primera depende de que el objetivo sea posible y de que el agente nunca se atasque.
Aquí va el concepto; la implementación headless con todos los topes juntos (loop-longrun.sh, flock, systemd) es la clase 6 del curso 2.
02 · Tres topes deteniendo procesos de verdad
Ejecútalo en tu máquina; ninguno gasta cuota. El de memoria necesita Linux con systemd de usuario.
#!/usr/bin/env bash
# Tope de estancamiento: N ciclos seguidos sin que suba el número de tests pasando = parar.
set -u
ESTAGNACAO=3; MAX_CICLOS=10
medir() { cat passando.txt; } # en el loop real: el test rápido, ej. pytest -q | grep -oE '[0-9]+ passed'
melhor=$(medir); sem_avanco=0
for ((i = 1; i <= MAX_CICLOS; i++)); do
# acción del agente aquí (timeout + MemoryMax alrededor)
agora=$(medir)
if [ "$agora" -gt "$melhor" ]; then melhor=$agora; sem_avanco=0; else sem_avanco=$((sem_avanco + 1)); fi
echo "ciclo $i: $agora passando (melhor $melhor, sem avanço $sem_avanco)"
if [ "$sem_avanco" -ge "$ESTAGNACAO" ]; then echo "PARADO: $ESTAGNACAO ciclos sem avanço"; exit 2; fi
done
echo "PARADO: teto de $MAX_CICLOS ciclos"; exit 2
/goal · tope de turnos en la propia condición
/goal python3 -m pytest -q tests/ imprime 48 passed y git diff --stat -- tests/ sale vacío, o detente después de 20 turnos
La memoria solo cuenta cuando se usa de verdad. bytearray(300 MB) por sí solo reserva páginas en cero que el sistema aún no entregó, y el proceso pasa por el tope sin morir. Por eso la prueba escribe en cada página. En un agente real, el proceso que se pasa es el que de verdad llena la memoria.
03 · Lo que pide a un humano incluso dentro del tope
Lista del kit execucao-longa (bloque PARE E ME CHAME del prompt de goal). El tope limita cuánto; la puerta limita qué.
1. Gasto
Cualquier llamada paga o que gaste crédito fuera de lo acordado. El loop se detiene y pregunta.
2. Irreversible o externo
Push a producción, mensaje a alguien, borrar datos. No se deshace con git revert.
Cómo cercar esto con permisos y hooks es el curso 4.
3. Falta algo
El agente no debe buscar la clave en otro lugar ni esquivar el problema. Se detiene y dice qué falta.
4. Decisión tuya
Requisitos que se contradicen o una elección de negocio. El agente presenta las opciones; quien elige eres tú.
04 · Conversación simulada: el agente quiere solo un intento más
Ficción para entrenar la decisión. Elige lo que responderías; el comentario aparece justo después.
Agente en loop (simulado)ciclo 9 de 15 · migrar el parser
Elige tu respuesta. El comentario aparece justo después y la conversación sigue según tu elección.
05 · Práctica
En tu máquina. Ningún ejercicio gasta cuota.
E1 · Tiempo y memoria
10 min
Ejecuta los dos primeros bloques: el timeout y el tope de memoria. Si no estás en Linux, ejecuta solo el timeout (en macOS, gtimeout de coreutils).
Listo cuando: El timeout imprime rc=124; el de memoria imprime Killed y rc=137.
E2 · Estancamiento y avance
10 min
Ejecuta estagnacao.sh con 41 en passando.txt. Después, en una segunda ventana, cambia el número a 42 mientras corre con un sleep 5 dentro del ciclo, y mira cómo el contador se reinicia a cero.
Listo cuando: Sin cambio: PARADO: 3 ciclos sem avanço y rc=2. Con el cambio: aparece una línea con melhor 42, sem avanço 0.
E3 · Los topes de tu próximo loop
10 min
En un archivo tetos.md, escribe el valor de cada tope para un loop tuyo y qué es lo que siempre te va a pedir a ti, una línea para cada uno: turnos:, tempo:, memória:, estagnação:, custo: y humano:.
Listo cuando:grep -cE '^(turnos|tempo|memória|estagnação|custo|humano):' tetos.md → 6, y la línea de estancamiento tiene un número de ciclos.
06 · Prueba de la lección
Pregunta 1 de 4
El loop tiene MAX_CICLOS=50 y criterio nivel 3. Los tests llevan 4 ciclos en 41 de 48. ¿Qué tope debería haber parado?competencia
Correcto
Turnos todavía no se alcanzó (50). Quien detecta al agente atascado en el mismo lugar es el conteo de ciclos sin avance medido. Sin él, los 46 ciclos restantes giran en vano.
No es esa
Turnos todavía no se alcanzó (50). Quien detecta al agente atascado en el mismo lugar es el conteo de ciclos sin avance medido. Sin él, los 46 ciclos restantes giran en vano.Repasar: Cinco topes alrededor del ciclo
El agente está dentro de todos los topes y quiere hacer push a la rama de producción para terminar la tarea. ¿Qué hacer?competencia
Correcto
El tope limita cuánto gasta el loop; no limita lo que hace. Push a producción, correo, borrar datos y gasto pago siempre se detienen en la puerta humana.