Bounded Loops
Effort: free — tetos e checkpoints declarados antes de o loop começar; corta custo na raiz. Remove: gasto de loop descontrolado — cota queimada, rotas bloqueadas por 429 e progresso que um crash apaga.
Um loop sem limite é o bug mais caro que um agente pode entregar. Ele queima
orçamento, martela provedores até ser bloqueado, e esconde a própria falha dentro
do giro. Todo loop ganha um teto, um checkpoint e um jeito barulhento de morrer —
antes de começar.
Quando rodar
Antes de iniciar qualquer loop: um loop de conserto, um wrapper de retry, um
poller, um agendador, uma execução autônoma multi-passo, qualquer coisa que possa
reemitir uma chamada ou tentar um passo de novo.
Os passos
- Declare o orçamento primeiro. Tokens, custo, tempo de relógio e máximo de
tentativas — por escrito, antes da primeira iteração. Loop sem orçamento
declarado é sem limite por definição e não começa.
- Limite as rodadas internas. Um episódio interno (um ciclo LLM/tool sobre um
problema) ganha um teto pequeno e fixo de rodadas (por volta de 4). O teto limita
o episódio, não a missão — trabalho inacabado sobe de nível, não fica moendo.
- Checkpoint em cada iteração. Estado durável em disco — manifesto da
execução, log de evidências, passo atual — nunca memória de chat. Qualquer um
(incluindo uma sessão nova) consegue retomar do último checkpoint.
- Na exaustão: checkpoint, depois escale. Entregue o checkpoint ao loop
externo ou ao seu humano com o que foi feito, o que falta e o bloqueio. Nunca
continue em silêncio depois do orçamento. Nunca pare em silêncio, também —
exaustão é barulhenta.
- Respeite toda API externa. Antes da primeira chamada, aprenda o rate limit e
a quota do provedor; quando desconhecidos, trate como estritos — uma chamada,
espaçamento largo — até medir. Faça throttle em toda chamada, cacheie e reuse
respostas, e segure um teto duro por janela.
- Recue exponencialmente quando levar pushback. Um 429 ou 503 significa
esperar, depois esperar mais. Zero retry instantâneo no mesmo endpoint. Um retry
apertado contra um endpoint é como uma rota que funciona morre: queima quota e
pode fazer bloquearem seu endereço de saída inteiro.
- Carregue um kill-switch barulhento e limitado. Qualquer loop que possa
reemitir uma chamada tem um número máximo de tentativas; quando bate, o loop
para ALTO com a evidência — nunca um giro infinito ou silencioso.
- Pare e enfileire só em pontos seguros. Parar significa checkpoint-depois-
cancelar. Trabalho novo entra na fila para o próximo ponto seguro (uma fronteira
de estado entre passos) — nunca injetado no meio de um passo. Uma instância de
loop, um escritor, escritas de estado atômicas.
Regras duras (o que reprova esta skill)
- Um loop que começa sem orçamento declarado de tokens / custo / tempo / tentativas.
- Continuar depois de um orçamento esgotado, em silêncio ou não, sem escalar.
- Retry instantâneo contra o mesmo endpoint, ou qualquer caminho de retry sem backoff.
- Loop de retry sem teto de tentativas, ou um teto que falha quieto quando bate.
- Estado de progresso guardado só na memória da conversa — um crash apaga a execução.
- Duas instâncias de loop escrevendo o mesmo estado, ou escritas de estado não atômicas.
- Escapar do loop enfraquecendo os próprios cheques de saída — um verde produzido
abaixando a barra, apagando dados ou engolindo erros é falso verde, não saída.
Combina bem com
- optimus — carregue o piso antes de qualquer loop começar.
- repair-loop — o principal consumidor destes tetos.
- fleet-ladder — fallback limitado entre modelos, não martelar um só.
- session-handoff — aquilo em que um checkpoint escala.
1---2name: bounded-loops-63description: Use antes de iniciar qualquer loop que possa fazer retry, poll, iterar ou chamar uma API externa — loops de agente, loops de conserto, agendadores, watchers. Declara tetos de orçamento, faz checkpoint na exaustão e torna martelar estruturalmente impossível. Trigger words: bounded loop, budget, ceiling, retry, backoff, rate limit, throttle, kill-switch, checkpoint, runaway, infinite loop, spin, budget exhaustion, loop limitado, orçamento, teto, limite de taxa, loop infinito, exaustão de orçamento, loop descontrolado.4license: MIT5---67# Bounded Loops8**Effort:** free — tetos e checkpoints declarados antes de o loop começar; corta custo na raiz. Remove: gasto de loop descontrolado — cota queimada, rotas bloqueadas por 429 e progresso que um crash apaga.910Um loop sem limite é o bug mais caro que um agente pode entregar. Ele queima11orçamento, martela provedores até ser bloqueado, e esconde a própria falha dentro12do giro. Todo loop ganha um teto, um checkpoint e um jeito barulhento de morrer —13antes de começar.1415## Quando rodar1617Antes de iniciar qualquer loop: um loop de conserto, um wrapper de retry, um18poller, um agendador, uma execução autônoma multi-passo, qualquer coisa que possa19reemitir uma chamada ou tentar um passo de novo.2021## Os passos22231. **Declare o orçamento primeiro.** Tokens, custo, tempo de relógio e máximo de24 tentativas — por escrito, antes da primeira iteração. Loop sem orçamento25 declarado é sem limite por definição e não começa.262. **Limite as rodadas internas.** Um episódio interno (um ciclo LLM/tool sobre um27 problema) ganha um teto pequeno e fixo de rodadas (por volta de 4). O teto limita28 o episódio, não a missão — trabalho inacabado sobe de nível, não fica moendo.293. **Checkpoint em cada iteração.** Estado durável em disco — manifesto da30 execução, log de evidências, passo atual — nunca memória de chat. Qualquer um31 (incluindo uma sessão nova) consegue retomar do último checkpoint.324. **Na exaustão: checkpoint, depois escale.** Entregue o checkpoint ao loop33 externo ou ao seu humano com o que foi feito, o que falta e o bloqueio. Nunca34 continue em silêncio depois do orçamento. Nunca pare em silêncio, também —35 exaustão é barulhenta.365. **Respeite toda API externa.** Antes da primeira chamada, aprenda o rate limit e37 a quota do provedor; quando desconhecidos, trate como estritos — uma chamada,38 espaçamento largo — até medir. Faça throttle em toda chamada, cacheie e reuse39 respostas, e segure um teto duro por janela.406. **Recue exponencialmente quando levar pushback.** Um 429 ou 503 significa41 esperar, depois esperar mais. Zero retry instantâneo no mesmo endpoint. Um retry42 apertado contra um endpoint é como uma rota que funciona morre: queima quota e43 pode fazer bloquearem seu endereço de saída inteiro.447. **Carregue um kill-switch barulhento e limitado.** Qualquer loop que possa45 reemitir uma chamada tem um número máximo de tentativas; quando bate, o loop46 para ALTO com a evidência — nunca um giro infinito ou silencioso.478. **Pare e enfileire só em pontos seguros.** Parar significa checkpoint-depois-48 cancelar. Trabalho novo entra na fila para o próximo ponto seguro (uma fronteira49 de estado entre passos) — nunca injetado no meio de um passo. Uma instância de50 loop, um escritor, escritas de estado atômicas.5152## Regras duras (o que reprova esta skill)5354- Um loop que começa sem orçamento declarado de tokens / custo / tempo / tentativas.55- Continuar depois de um orçamento esgotado, em silêncio ou não, sem escalar.56- Retry instantâneo contra o mesmo endpoint, ou qualquer caminho de retry sem backoff.57- Loop de retry sem teto de tentativas, ou um teto que falha quieto quando bate.58- Estado de progresso guardado só na memória da conversa — um crash apaga a execução.59- Duas instâncias de loop escrevendo o mesmo estado, ou escritas de estado não atômicas.60- Escapar do loop enfraquecendo os próprios cheques de saída — um verde produzido61 abaixando a barra, apagando dados ou engolindo erros é falso verde, não saída.6263## Combina bem com6465- [optimus](../optimus/SKILL.md) — carregue o piso antes de qualquer loop começar.66- [repair-loop](../repair-loop/SKILL.md) — o principal consumidor destes tetos.67- [fleet-ladder](../fleet-ladder/SKILL.md) — fallback limitado entre modelos, não martelar um só.68- [session-handoff](../session-handoff/SKILL.md) — aquilo em que um checkpoint escala.