Base: anatomía del loop|INEMA.CLUB-PRO

Clase 7 · 17 min

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.

Empezar la lección
Panel industrial con temporizador, botón rojo de emergencia, módulo de memoria y un indicador en el límite.

En esta lección vas a

  1. 1Turnos, tiempo, memoria, estancamiento y costo
  2. 2timeout, MemoryMax y conteo de ciclos sin avance, en ejecución
  3. 3Lo que siempre pide un humano, incluso dentro del tope
  4. 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.

01Cinco topes alrededor del ciclo

Haz clic en cada tope: qué limita y dónde ya existe en las herramientas.

Desplázate por la página: cada etapa de abajo ilumina su parte del diagrama.

  1. 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. 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. 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. 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. 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/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.

02Tres topes deteniendo procesos de verdad

Ejecútalo en tu máquina; ninguno gasta cuota. El de memoria necesita Linux con systemd de usuario.

Terminal · tiempo
timeout 2 sleep 5; echo "rc=$?"
Terminal · memoria (Linux, systemd de usuario)
systemd-run --user --scope -q -p MemoryMax=50M -p MemorySwapMax=0 \
  python3 -c "x=bytearray(300*1024*1024); x[::4096]=b'1'*len(x[::4096]); print('alocou')"
echo "rc=$?"
estagnacao.sh · ciclos sin avance
#!/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
Ejemplo del repositorio
$ timeout 2 sleep 5; echo "rc=$?"
rc=124

$ systemd-run --user --scope -q -p MemoryMax=50M -p MemorySwapMax=0 python3 -c "..."
Killed
rc=137

$ echo 41 > passando.txt; bash estagnacao.sh; echo "rc=$?"
ciclo 1: 41 passando (melhor 41, sem avanço 1)
ciclo 2: 41 passando (melhor 41, sem avanço 2)
ciclo 3: 41 passando (melhor 41, sem avanço 3)
PARADO: 3 ciclos sem avanço
rc=2

03Lo 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.

04Conversació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.

    05Prá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.

    06Prueba 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

    07En tres frases

    Cinco topesTurnos, tiempo, memoria, estancamiento y costo: cada uno atrapa una forma distinta en que el loop no termina.
    Primero el estancamiento3 ciclos sin avance medido = parar, registrar y llamarte a ti; no se negocia.
    Tope no es puertaGasto, acción irreversible o externa, credencial ausente y decisión de negocio siempre piden a un humano.

    Para ir más allá

    Clase anteriorPróxima clase