Base: anatomia do loop|INEMA.CLUB-PRO

Aula 8 · 20 min

Seu primeiro loop: objetivo pequeno com critério nível 3

Hora de juntar as peças num loop de verdade, pequeno de propósito: uma função de contar palavras, seis testes congelados com hash e uma condição de /goal nível 3 com teto de turnos. Pequeno o bastante para terminar em minutos; completo o bastante para ter as cinco peças. No fim, o mapa da formação e o seu plano com datas.

Começar a aula
Uma placa de circuito pequena sobre bancada escura, com um cabo fino fechando um laço em volta dela.

Nesta aula você vai

  1. 1Montar o projeto com testes congelados e hash
  2. 2Escrever a condição do /goal no nível 3, com teto
  3. 3Conferir por conta própria, sem acreditar no resumo
  4. 4O mapa dos seis cursos e o seu plano datado

Objetivo: rodar seu primeiro loop com /goal num projeto pequeno, com testes congelados, critério nível 3 e teto de turnos, e sair com o plano da formação.

01O que você montou neste curso

Quatro entregas que viram o seu primeiro loop. Clique num exercício para ver o "pronto quando".

Aula 1Peças

objetivo, estado, ação, verificação, parada

3 exercícios

Um loop que para pelo teste ou pelo teto.

Ver a aula
Aula 5Estado

arquivos e git

3 exercícios

Ciclo descartável que retoma sem refazer.

Ver a aula
Aula 6Critério

escala 0–4

3 exercícios

Critério nível 3 que roda e trava o atalho.

Ver a aula
Aula 7Tetos

turnos, tempo, memória, estagnação, custo

3 exercícios

Loop que para sozinho quando empaca.

Ver a aula
Ao final do curso 0Um loop pequeno rodando com as cinco peças, critério nível 3 e teto, e o vocabulário dos outros cinco cursos.
24 exercícios
Clique num exercício para ver o que fazer e o "pronto quando".
  1. 1/5

    Peças

    O esqueleto: as cinco peças num laço de bash, com duas portas de saída e código de saída diferente para cada uma.

  2. 2/5

    Estado

    A memória fora do modelo: lista com passes, progresso e um commit por item verificado.

  3. 3/5

    Critério

    A verificação que não se burla: comando, contagem mínima e arquivo congelado.

  4. 4/5

    Tetos

    A porta de segurança: cada teto pega um jeito de o loop não terminar, e o portão humano pega o que não pode ser feito sem você.

  5. 5/5

    As quatro entregas juntas

    Peças, estado, critério e tetos são o que você usa a seguir. O resto das aulas (harness, motores, LOOP-R) diz onde cada peça mora e qual curso aprofunda.

Os exercícios das aulas 2, 3 e 4 entram no plano abaixo.

02O projeto do primeiro loop

Uma pasta, um arquivo de testes congelado por hash e nenhuma linha da função. Quem escreve a função é o agente.

Terminal · criar a pasta e congelar os testes
mkdir -p ~/ensaio-loop/conta/tests && cd ~/ensaio-loop/conta && git init -q
# cole o arquivo de testes do próximo bloco em tests/test_conta.py, depois:
sha256sum tests/test_conta.py > tests.sha256
git add -A && git commit -qm "testes congelados"
python3 -m pytest -q -p no:cacheprovider tests/ | tail -1   # ainda falha: conta.py não existe
tests/test_conta.py
from conta import conta_palavras


def test_vazio():
    assert conta_palavras("") == 0


def test_uma():
    assert conta_palavras("loop") == 1


def test_espacos_repetidos():
    assert conta_palavras("  o   loop  para ") == 3


def test_quebra_de_linha_e_tab():
    assert conta_palavras("objetivo\nestado\tação") == 3


def test_pontuacao_nao_e_palavra():
    assert conta_palavras("pronto , quando - passa") == 3


def test_acentos():
    assert conta_palavras("verificação e parada") == 3
Claude Code · a condição do /goal (nível 3, com teto)
/goal python3 -m pytest -q -p no:cacheprovider tests/ imprime 6 passed, sha256sum -c tests.sha256 imprime OK e git diff --exit-code -- tests/ sai com código 0, com as três saídas impressas na conversa, ou pare depois de 8 turnos
Terminal · você confere, sem acreditar no resumo
cd ~/ensaio-loop/conta
python3 -m pytest -q -p no:cacheprovider tests/ | tail -1
sha256sum -c tests.sha256
git diff --exit-code -- tests/; echo "rc=$?"
loop-codex.sh · o mesmo loop com codex exec (exercício 3)
#!/usr/bin/env bash
# Laço seu: no máximo 3 ciclos de codex exec; quem decide parar são os três comandos.
set -u
cd ~/ensaio-loop/conta
passes() {
  python3 -m pytest -q -p no:cacheprovider tests/ 2>&1 | tail -1 | grep -q '^6 passed' &&
  sha256sum -c --quiet tests.sha256 &&
  git diff --quiet -- tests/
}
for ciclo in 1 2 3; do
  if passes; then echo "PRONTO no ciclo $((ciclo - 1))"; exit 0; fi
  echo "ciclo $ciclo: codex exec"
  timeout 15m codex exec --sandbox workspace-write \
    "Crie conta.py com conta_palavras(texto) que faça os testes de tests/ passarem. Não altere nada em tests/."
done
if passes; then echo "PRONTO no ciclo 3"; exit 0; fi
echo "PARADO: teto de 3 ciclos"; exit 2
Exemplo do repositório

Com a mesma condição, em modo sem interface (claude -p "/goal …"), o agente escreveu conta.py e terminou imprimindo:

- python3 -m pytest -q -p no:cacheprovider tests/ → 6 passed in 0.01s
- sha256sum -c tests.sha256 → tests/test_conta.py: OK
- git diff --exit-code -- tests/ → saiu com código 0

A função dele e a sua podem ser diferentes; o que tem de bater são as três saídas.

03Prática

Na sua máquina. O exercício 2 gasta pouco da sua cota.

E1 · O projeto pronto para o loop

10 min

Crie a pasta, o arquivo de testes, o hash e o primeiro commit. Rode o pytest antes de existir a função.

Pronto quando: sha256sum -c tests.sha256 → tests/test_conta.py: OK, git log --oneline | wc -l → 1, e o pytest ainda falha (a função não existe).

E2 · O primeiro loop rodando

15 min

Abra o Claude Code na pasta e cole a condição do /goal. Deixe rodar sem interferir; se o Claude pedir permissão para rodar o pytest, aprove.

Pronto quando: O status do goal mostra a condição atingida, e os três comandos de conferência, rodados por você, dão 6 passed, tests/test_conta.py: OK e rc=0.

E3 · O mesmo loop com o Codex

15 min

Apague conta.py e rode o mesmo pedido pelo codex exec com sandbox de escrita, com o loop-codex.sh do bloco acima: no máximo 3 ciclos, parando quando os três comandos passam.

Pronto quando: Seu laço termina antes do 3º ciclo, e os mesmos três comandos dão 6 passed, OK e rc=0; git diff --stat -- tests/ sai vazio.

04Gere o seu plano com datas

Escolha a data de início e quanto tempo você tem por semana. O plano lista os exercícios das oito aulas na ordem.

05Teste da aula

Pergunta 1 de 4

Por que a condição do /goal pede "as três saídas impressas na conversa"?competência

06Em três frases

Pequeno e completoO primeiro loop tem as cinco peças num problema que termina em minutos.
Congelar antes de soltarTestes com hash e commit antes de o agente começar: é o que torna o critério nível 3.
Você fechaO avaliador julga a conversa; você roda a conferência na máquina.

Para ir além

Aula anteriorVoltar ao início do curso