Pular para o conteúdo
MÓDULO 4.4 · "MODO ENSINO"

🧮 Loops × Filas

Você ouviu falar do "Ralph loop" — um while que chama o agente de novo e de novo. Funciona, mas Pocock prefere outra ideia: fila, não loop. Aqui você entende a diferença, vê o esqueleto real do loop, e aprende por que pensar em backlog de tarefas deixa você no comando — como um rei medieval que prioriza, não um que dispara ordens no escuro.

6
Tópicos
~45
Minutos
4.1-4.3
Base
Prática
Tipo
Progresso: 0% 0 de 6

📖 Glossário vivo (os termos novos deste módulo)

A trilha 1 já definiu "modelo", "agente", "prompt" e "harness". Aqui ficam só os termos novos de loops e filas — fixe estes antes de seguir:

Loop (laço) — repetir a mesma ação muitas vezes em seguida. Em código, um while faz isso: "enquanto X for verdade, repita".
Ralph loop — técnica de Geoffrey Huntley (artigo de 14/jul): um while em bash que chama o Claude Code com o mesmo prompt de novo e de novo, sem parar.
Fila (queue) — uma lista de tarefas esperando para serem feitas, em ordem. Quem termina uma puxa a próxima. É o backlog.
Backlog — o estoque de tarefas/bugs/ideias ainda não feitos. A "lista de afazeres" do projeto.
Triagem — olhar uma tarefa que chegou e decidir: é trivial? é possível? é prioridade? Classificar antes de agir.
Nó (node) — cada "trabalhador" que pega item da fila. Pode ser um dev humano ou um agente. Vários nós = trabalho em paralelo.
AFKAway From Keyboard: você dispara o agente e sai; ele trabalha sozinho. Visto no módulo 4.1.
Label — uma etiqueta numa issue (ex.: agent:implement) que marca o estado e dispara automações.
1

🔁 O Ralph loop (Huntley)

🧠 Imagine assim: uma máquina de lavar no ciclo de centrifugação — gira, gira, gira sem parar até alguém apertar o botão. O Ralph loop é isso com IA: você "liga a centrifugação" e o agente roda a mesma ordem em círculos, sozinho, a noite inteira.

Em julho, o engenheiro Geoffrey Huntley publicou um artigo (14/jul) que viralizou na comunidade: o Ralph loop. A ideia é deliciosamente simples — você escreve um loop while em bash que chama o Claude Code passando o mesmo prompt de novo e de novo. O agente termina uma passada, o loop reinicia, e ele recebe a instrução outra vez. Roda assim, em AFK, sem você no teclado.

O nome "Ralph" é uma piada interna (referência ao personagem Ralph Wiggum, dos Simpsons, que faz a coisa simples sem pensar muito) — e parte da graça é justamente essa: brutalmente simples, e ainda assim eficaz. Por que funciona? Porque cada nova passada do agente recomeça com contexto fresco, relê o estado do codebase e dá mais um passo. É a forma mais crua de tirar você da equação. O erro comum aqui é achar que "loop = mágica autônoma": o loop só repete; quem faz o trabalho ainda é o agente, e ele depende do prompt e do harness por trás.

mesmo prompt(fixo, repetido) Claude Codeexecuta 1 passada codebase muda+1 passo while true: o loop volta ao início e dispara o mesmo prompt de novo

O Ralph loop: um while que reinjeta o mesmo prompt no Claude Code, indefinidamente.

Ilustração conceitual: um ciclo infinito de engrenagens douradas representando o while loop chamando o agente repetidamente

⚠️ Erro comum de iniciante

Pensar que basta "deixar o loop rodando" e milagres acontecem. Sem condição de parada, sem critério de "pronto" e sem um prompt bem feito, o loop pode girar a noite toda repetindo o mesmo erro — e queimando tokens. O loop é o motor de repetição; a inteligência continua sendo o seu harness.

Em 1 frase: o Ralph loop é um while que chama o Claude Code com o mesmo prompt, repetidamente, sozinho.

Indo mais fundo (opcional): de onde veio "Ralph"?

Huntley batizou a técnica de "Ralph" como uma brincadeira: a abordagem é tão direta e ingênua quanto o personagem que apenas faz a tarefa óbvia em loop, sem estratégia sofisticada. O insight do artigo é que, contra a intuição, essa simplicidade bruta às vezes vence técnicas elaboradas — desde que o prompt e o ambiente estejam bons. É a versão "força bruta" da automação agêntica.

2

🎯 Por que loop ≠ resposta

🧠 Imagine assim: você quer que alguém pinte uma parede. Você pode (a) mandar a pessoa "pintar paredes para sempre" e torcer pra ela acertar a sua, ou (b) dar uma tarefa específica: "pinte esta parede de azul". A opção (b) é quase sempre melhor. Loop ≠ tarefa.

Aqui entra a posição de Pocock — e é uma virada de chave importante. Ele reconhece que o Ralph loop é engenhoso, mas diz, com todas as letras: "não preciso rodar como loop — só preciso do agente AFK pegar uma tarefa específica e fazer." Em outras palavras, o que o destrava de verdade não é a repetição infinita; é o AFK (o agente trabalhando sem você presente). O loop é só uma forma — e não a melhor — de alcançar isso.

Por quê? Porque um loop único que tenta "fazer tudo" não bate com a forma como times reais trabalham. Um time não tem um robô girando para sempre; tem um backlog de tarefas claras, cada uma com começo, meio e fim. A repetição cega gasta tokens, perde o foco e dificulta dizer "isto aqui está pronto". A resposta certa, segundo Pocock, é trocar o verbo: em vez de "loopar", pense em "pegar a próxima tarefa da fila". Mesma autonomia, muito mais controle e clareza. Erro comum: confundir "rodar sozinho" (bom: AFK) com "rodar em círculos" (raramente o que você quer).

LOOP cego (foco difuso) faz tudo? para quando? TAREFA única (AFK, escopo claro) início pronto ✓ "pegar uma tarefa específica e fazer" — Pocock

Recuperação rápida: para Pocock, o que realmente destrava o trabalho autônomo?

Em 1 frase: o que te destrava é o AFK (tarefa específica feita sozinha), não a repetição infinita do loop.

3

📋 A fila de tarefas

🧠 Imagine assim: a fila do caixa do mercado. As pessoas (tarefas) chegam e entram na fila. Cada operador (nó) chama a próxima, atende, finaliza e chama a seguinte. Ninguém fica "atendendo para sempre em círculos" — atende-se um cliente de cada vez, até a fila esvaziar.

A frase central de Pocock é: "eu penso nisto principalmente como filas, não loops." Uma fila é simplesmente o seu backlog de tarefas. E ele dá o exemplo concreto do Sand Castle (a ferramenta dele): ele olha as issues, faz a triagem (é trivial? é possível?), adiciona o label agent:implement e o agente implementa via GitHub Actions (visto no módulo 4.3).

E aí vem a definição que organiza tudo: "todo desenvolvimento é só uma fila de tarefas: PMs adicionam à fila, você as completa; múltiplos nós (devs) pegam itens da fila." Repare como isso descreve qualquer time de software do mundo — sem nenhuma IA envolvida. O PM alimenta a fila, os desenvolvedores consomem. A sacada de Pocock é que os "nós" agora podem ser agentes em vez de (ou além de) humanos. Você não muda o modelo mental do time — só troca quem puxa os itens. Por isso a fila encaixa naturalmente, e o loop único que "faz tudo" não bate com como times trabalham.

PMsadicionam tarefa #1 tarefa #2 tarefa #3 tarefa #4 FILA (backlog) — ordem de chegada / prioridade → nó 1 — dev nó 2 — agente nó 3 — agente vários nós puxam itens da fila
Ilustração: uma esteira de tarefas alimentando vários trabalhadores (humanos e agentes de IA) que puxam itens da fila

Em 1 frase: todo desenvolvimento é uma fila — PMs adicionam, nós (devs ou agentes) puxam e completam.

4

🔎 Triagem e escopo

🧠 Imagine assim: o pronto-socorro de um hospital. Quando o paciente chega, a enfermeira da triagem não trata na hora — ela classifica: leve, urgente, gravíssimo. Só depois cada caso vai pro lugar certo. A fila de tarefas funciona igual: classificar antes de tratar evita desperdício e caos.

Antes de um item virar trabalho, ele passa por triagem. No fluxo do Sand Castle, Pocock olha cada issue e responde duas perguntas: é trivial? e é possível? — e isso já pode ser feito em AFK. Há uma issue real (#795 no exemplo dele) que vai mudando de label: agent:exploreagent:in-progress, enquanto o bot github-actions posta um comentário de "Triage" com um TL;DR e uma estimativa de Difficulty (dificuldade).

Por que isso importa? Porque a triagem dá escopo — e escopo é o que separa uma tarefa "pegável" de um pedido vago. Quando o agente recebe "implemente a issue #795, dificuldade média, TL;DR: tal", ele tem um alvo nítido. Compare com "conserte os bugs" jogado num loop: não há onde começar nem como saber que terminou. A triagem também filtra o que não deve ir pro agente sozinho (coisas que precisam de decisão humana). O erro comum é pular a triagem e despejar tudo na fila cru — aí o agente trabalha duro no item errado, ou tropeça num item impossível.

issue cruasem análise TRIAGEM é trivial? é possível? trivial + seguro → agent:implement precisa de decisão → você (humano) impossível / vago → descarta classificar antes de agir = escopo nítido para cada item

A triagem é um funil: classifica cada issue por trivial? e possível? antes de virar trabalho.

🔬 Exemplo resolvido: o ciclo de vida de uma issue na fila

Acompanhe a issue #795 ("botão de exportar não funciona no Safari") atravessando a fila:

  1. 1
    Chega na fila — o PM (ou um usuário) abre a issue. Estado bruto, sem análise.
  2. 2
    Label agent:explore — dispara a triagem AFK. O agente investiga e o bot posta: "TL;DR: bug de compatibilidade no Safari. Difficulty: baixa."
  3. 3
    Você prioriza — vê que é trivial e seguro. Adiciona agent:implement.
  4. 4
    Label agent:in-progress — o GitHub Actions implementa, abre um PR, e o checkpoint humano fica só no review final.

Em 1 frase: triagem (trivial? possível?) dá escopo nítido — sem ela, o agente trabalha no item errado.

5

👑 O rei medieval

🧠 Imagine assim: um rei numa sala do trono. Problemas chegam à porta o dia todo — uma invasão na fronteira, uma colheita perdida, uma proposta de aliança. O rei não corre para cada um; ele recebe, avalia e prioriza. É exatamente a postura de quem comanda uma fila.

David (o entrevistador) trouxe uma analogia que cristaliza a diferença entre loop e fila: o rei medieval. Pense num ministro numa região distante rodando em loop por conta própria — ele pode dar certo, ou pode dar muito errado, e o rei só descobre quando o estrago já aconteceu. Essa é a abordagem "loop": autonomia cega, sem priorização central. O rei sensato não quer isso.

O rei quer a abordagem de fila: os problemas chegam até ele (uma invasão, uma fome, uma proposta de brand deal — onde ele checa a reputação primeiro antes de aceitar), e ele prioriza. De 50 bugs que chegam, talvez só 3 sejam críticos — e ele decide quais atacar agora. O ponto, nas palavras da conversa: você continua no comando. A fila não tira seu poder de decisão; ela o concentra no que importa. O loop entrega o reino a um ministro distante; a fila mantém a coroa na sua cabeça. Erro comum: delegar autonomia sem manter o ponto de priorização — aí você vira um rei ausente, e o reino faz o que quiser.

⚔️ invasão 🌾 fome 🤝 brand deal 👑 REI prioriza (você) 3 críticos → ataca agora 47 menores → esperam na fila
Ilustração: um rei medieval no trono recebendo mensageiros com problemas e priorizando qual atender, em estilo futurista âmbar

✗ Loop = ministro distante

  • • Roda sozinho longe, sem priorização.
  • • Pode dar certo — ou desastre silencioso.
  • • Você só descobre o estrago no fim.

✓ Fila = rei no comando

  • • Problemas chegam, você prioriza.
  • • 50 bugs, só 3 críticos agora.
  • • Autonomia delegada, coroa na sua cabeça.

Em 1 frase: seja o rei que recebe e prioriza a fila — não o que entrega o reino a um ministro em loop.

6

🕸️ Múltiplos nós na fila

🧠 Imagine assim: uma cozinha de restaurante movimentado. Há uma única fila de pedidos (a comanda), mas vários cozinheiros. Cada um pega o próximo pedido, prepara e devolve. Mais cozinheiros = a mesma fila esvazia mais rápido — sem ninguém atrapalhar o outro.

Fechando o módulo: a maior vantagem de pensar em fila é que ela escala com múltiplos nós. Lembre da frase de Pocock: "múltiplos nós (devs) pegam itens da fila." Cada pode ser você, um colega, ou um agente rodando em GitHub Actions (módulo 4.3). Como cada tarefa tem escopo claro (graças à triagem), dois ou três agentes podem trabalhar em paralelo em itens diferentes sem se atrapalhar — exatamente o que você viu no módulo 4.2 sobre paralelizar com sandboxes. O loop único não escala assim: ele é um trabalhador só, girando. A fila é uma arquitetura — abre espaço para "dois, três, quatro de você", como Pocock descreve o AFK. Use o esqueleto abaixo para experimentar o Ralph loop e sinta na prática por que, no fim, você vai querer migrar dele para uma fila com triagem:

ralph-loop.sh — o esqueleto do loop de Geoffrey Huntley
#!/usr/bin/env bash
# Ralph loop (Geoffrey Huntley, 14/jul) — o esqueleto cru:
# um while que chama o Claude Code com o MESMO prompt, de novo e de novo.

PROMPT="Pegue a próxima tarefa pendente em TODO.md, implemente-a,
rode os testes e marque-a como feita. Se TODO.md estiver vazio, escreva DONE.txt."

while true; do
  # injeta o mesmo prompt no agente, em modo AFK (sem você no teclado)
  claude code -p "$PROMPT"

  # condição de parada: o agente sinaliza que a fila esvaziou
  if [ -f DONE.txt ]; then
    echo "Fila vazia — encerrando o loop."
    break
  fi

  sleep 2   # respiro entre as passadas
done

# Lição do módulo: isto FUNCIONA, mas é um loop cego (1 nó, foco difuso).
# Prefira virar isto numa FILA: triagem -> label agent:implement ->
# vários nós (agentes em GitHub Actions) puxam itens em paralelo. Você, o rei, prioriza.

Recuperação rápida: qual a maior vantagem da fila sobre o loop único?

Em 1 frase: a fila é uma arquitetura que escala — vários nós puxam tarefas claras em paralelo; o loop é só um trabalhador girando.

🧾 Resumo do Módulo

Ralph loop (Huntley, 14/jul) — um while em bash que chama o Claude Code com o mesmo prompt, repetidamente.
Loop ≠ resposta — o que destrava é o AFK (tarefa específica feita sozinha), não a repetição infinita.
Pense em filas, não loops — todo dev é uma fila: PMs adicionam, nós puxam e completam.
Triagem dá escopo — trivial? possível? → labels agent:explore/implement, TL;DR + Difficulty.
Seja o rei, não o ministro em loop — problemas chegam, você prioriza; vários nós escalam a fila.

Próximo módulo:

4.5 — Sistemas auto-melhoráveis: cron de security review, telemetria → issue → fix, e por que você não precisa do modelo mais caro.