Bounded Loops
Effort: free — techos y checkpoints declarados antes de que el bucle arranque; recorta el costo neto directamente. Elimina: el gasto de bucles desbocados — cuota quemada, rutas bloqueadas por 429 y progreso que un crash borra.
Un loop sin límites es el bug más caro que un agente puede publicar. Quema
presupuesto, martilla a los proveedores hasta que te bloquean, y esconde su propio
fracaso dentro del giro. Cada loop recibe un techo, un checkpoint y una forma
ruidosa de morir — antes de arrancar.
Cuándo ejecutarla
Antes de arrancar cualquier loop: un loop de reparación, un envoltorio de
reintentos, un poller, un scheduler, una corrida autónoma de varios pasos,
cualquier cosa que pueda re-emitir una llamada o reintentar un paso.
Los pasos
- Declara el presupuesto primero. Tokens, costo, tiempo de reloj y máximo de
intentos — por escrito antes de la primera iteración. Un loop sin presupuesto
declarado es ilimitado por definición y no arranca.
- Ponle tope a las rondas internas. Un episodio interno (un ciclo LLM/
herramienta sobre un problema) recibe un techo fijo y chico de rondas
(alrededor de 4). El techo acota el episodio, no la misión — el trabajo sin
terminar sube de nivel, no se queda moliendo.
- Checkpoint en cada iteración. Estado durable en disco — manifiesto de la
corrida, log de evidencia, paso actual — nunca la memoria del chat. Cualquiera
(incluida una sesión fresca) puede retomar desde el último checkpoint.
- Al agotarse: checkpoint, y luego escala. Entrega el checkpoint al loop
externo o a tu humano con lo que se hizo, lo que falta y el bloqueo. Nunca
sigas en silencio pasado un presupuesto. Tampoco te detengas en silencio — el
agotamiento es ruidoso.
- Respeta cada API externa. Antes de la primera llamada, aprende el límite de
tasa y la cuota del proveedor; cuando no se conocen, trátalos como estrictos —
una llamada, espaciado amplio — hasta medirlos. Ponle throttle a cada llamada,
cachea y reutiliza respuestas, y sostén un techo duro por ventana.
- Retrocede exponencialmente ante el rechazo. Un 429 o un 503 significa
espera, y luego espera más. Cero reintentos instantáneos contra el mismo
endpoint. Un reintento apretado contra un endpoint es como muere una ruta que
funcionaba: quema cuota y puede hacer que bloqueen toda tu dirección de salida.
- Lleva un kill-switch ruidoso y acotado. Todo loop que pueda re-emitir una
llamada tiene un conteo máximo de intentos; cuando lo alcanza, el loop se
detiene CON RUIDO y con la evidencia — nunca un giro infinito o silencioso.
- Detente y encola solo en puntos seguros. Detenerse significa checkpoint y
luego cancelar. El trabajo nuevo se encola para el siguiente punto seguro (una
frontera de estado entre pasos) — nunca inyectado a mitad de un paso. Una sola
instancia del loop, un solo escritor, escrituras de estado atómicas.
Reglas duras (lo que reprueba esta skill)
- Un loop que arranca sin presupuesto declarado de tokens / costo / tiempo / intentos.
- Seguir pasado un presupuesto agotado, en silencio o no, sin escalar.
- Un reintento instantáneo contra el mismo endpoint, o cualquier ruta de reintento sin backoff.
- Un loop de reintentos sin tope de intentos, o un tope que falla calladito al alcanzarse.
- Estado de progreso guardado solo en la memoria de la conversación — un crash borra la corrida.
- Dos instancias del loop escribiendo el mismo estado, o escrituras de estado no atómicas.
- Escapar del loop debilitando sus propios chequeos de salida — un verde producido
bajando la barra, borrando datos o tragándose errores es un verde falso, no una
salida.
Combina bien con
- optimus — carga el piso antes de que arranque cualquier loop.
- repair-loop — el consumidor principal de estos techos.
- fleet-ladder — fallback acotado entre modelos, no martillar a uno.
- session-handoff — aquello en lo que un checkpoint se convierte al escalar.
1---2name: bounded-loops-33description: Úsala antes de arrancar cualquier loop que pueda reintentar, hacer polling, iterar o llamar a una API externa — loops de agente, loops de reparación, schedulers, watchers. Declara techos de presupuesto, hace checkpoint al agotarse, y vuelve estructuralmente imposible martillar a un proveedor. Trigger words: bounded loop, budget, ceiling, retry, backoff, rate limit, throttle, kill-switch, checkpoint, runaway, infinite loop, spin, budget exhaustion. Disparadores: loop acotado, presupuesto, techo, reintento, límite de tasa, loop infinito, desbocado, agotamiento de presupuesto.4license: MIT5---67# Bounded Loops8**Effort:** free — techos y checkpoints declarados antes de que el bucle arranque; recorta el costo neto directamente. Elimina: el gasto de bucles desbocados — cuota quemada, rutas bloqueadas por 429 y progreso que un crash borra.910Un loop sin límites es el bug más caro que un agente puede publicar. Quema11presupuesto, martilla a los proveedores hasta que te bloquean, y esconde su propio12fracaso dentro del giro. Cada loop recibe un techo, un checkpoint y una forma13ruidosa de morir — antes de arrancar.1415## Cuándo ejecutarla1617Antes de arrancar cualquier loop: un loop de reparación, un envoltorio de18reintentos, un poller, un scheduler, una corrida autónoma de varios pasos,19cualquier cosa que pueda re-emitir una llamada o reintentar un paso.2021## Los pasos22231. **Declara el presupuesto primero.** Tokens, costo, tiempo de reloj y máximo de24 intentos — por escrito antes de la primera iteración. Un loop sin presupuesto25 declarado es ilimitado por definición y no arranca.262. **Ponle tope a las rondas internas.** Un episodio interno (un ciclo LLM/27 herramienta sobre un problema) recibe un techo fijo y chico de rondas28 (alrededor de 4). El techo acota el episodio, no la misión — el trabajo sin29 terminar sube de nivel, no se queda moliendo.303. **Checkpoint en cada iteración.** Estado durable en disco — manifiesto de la31 corrida, log de evidencia, paso actual — nunca la memoria del chat. Cualquiera32 (incluida una sesión fresca) puede retomar desde el último checkpoint.334. **Al agotarse: checkpoint, y luego escala.** Entrega el checkpoint al loop34 externo o a tu humano con lo que se hizo, lo que falta y el bloqueo. Nunca35 sigas en silencio pasado un presupuesto. Tampoco te detengas en silencio — el36 agotamiento es ruidoso.375. **Respeta cada API externa.** Antes de la primera llamada, aprende el límite de38 tasa y la cuota del proveedor; cuando no se conocen, trátalos como estrictos —39 una llamada, espaciado amplio — hasta medirlos. Ponle throttle a cada llamada,40 cachea y reutiliza respuestas, y sostén un techo duro por ventana.416. **Retrocede exponencialmente ante el rechazo.** Un 429 o un 503 significa42 espera, y luego espera más. Cero reintentos instantáneos contra el mismo43 endpoint. Un reintento apretado contra un endpoint es como muere una ruta que44 funcionaba: quema cuota y puede hacer que bloqueen toda tu dirección de salida.457. **Lleva un kill-switch ruidoso y acotado.** Todo loop que pueda re-emitir una46 llamada tiene un conteo máximo de intentos; cuando lo alcanza, el loop se47 detiene CON RUIDO y con la evidencia — nunca un giro infinito o silencioso.488. **Detente y encola solo en puntos seguros.** Detenerse significa checkpoint y49 luego cancelar. El trabajo nuevo se encola para el siguiente punto seguro (una50 frontera de estado entre pasos) — nunca inyectado a mitad de un paso. Una sola51 instancia del loop, un solo escritor, escrituras de estado atómicas.5253## Reglas duras (lo que reprueba esta skill)5455- Un loop que arranca sin presupuesto declarado de tokens / costo / tiempo / intentos.56- Seguir pasado un presupuesto agotado, en silencio o no, sin escalar.57- Un reintento instantáneo contra el mismo endpoint, o cualquier ruta de reintento sin backoff.58- Un loop de reintentos sin tope de intentos, o un tope que falla calladito al alcanzarse.59- Estado de progreso guardado solo en la memoria de la conversación — un crash borra la corrida.60- Dos instancias del loop escribiendo el mismo estado, o escrituras de estado no atómicas.61- Escapar del loop debilitando sus propios chequeos de salida — un verde producido62 bajando la barra, borrando datos o tragándose errores es un verde falso, no una63 salida.6465## Combina bien con6667- [optimus](../optimus/SKILL.md) — carga el piso antes de que arranque cualquier loop.68- [repair-loop](../repair-loop/SKILL.md) — el consumidor principal de estos techos.69- [fleet-ladder](../fleet-ladder/SKILL.md) — fallback acotado entre modelos, no martillar a uno.70- [session-handoff](../session-handoff/SKILL.md) — aquello en lo que un checkpoint se convierte al escalar.