
Cada rodada = 6 passos. Cada passo na ordem certa.
📝 Passo 1 — Claude termina o turno
O Claude acabou de fazer alguma coisa. Pode ser o primeiro turno (escreveu PLAN.md inicial), ou um turno de revisão (atualizou PLAN.md depois de ler findings). Em qualquer caso, ele declara "terminei meu turno".
Estado do sistema neste ponto
.claude/claudex/state.yaml: phase: drafting (ou reviewing) round: 1 (ou rodada atual) PLAN.md: existe (rascunho ou versão revisada) findings-round-N.md: existe (se rodada >= 2)
🚦 Passo 2 — Stop Hook dispara
O Claude Code, vendo que o Claude declarou fim de turno, executa o hook registrado: .claude/claudex/hooks/stop.sh.
[stop.sh] Lendo .claude/claudex/state.yaml... [stop.sh] phase=drafting, round=1 [stop.sh] PLAN.md existe? sim [stop.sh] Decisão: BLOCK + agendar rodada 1
📋 Passo 3 — Hook atualiza o estado
Antes de devolver controle, o hook atualiza o YAML pra refletir o que vai acontecer e gera o runner.sh pra próxima rodada.
# state.yaml atualizado: phase: drafting → reviewing round: 1 # runner.sh gerado: codex exec --persona "engineer" << 'EOF' [prompt completo da rodada 1] EOF
🛑 Passo 4 — Hook retorna BLOCK com instruções
O hook sai com exit 2 (BLOCK) e imprime a mensagem que o Claude vai ler. Essa mensagem é a instrução do próximo turno.
[hook → Claude] "Execute .claude/claudex/runner.sh. Quando ele terminar, leia .claude/claudex/findings-round-1.md e revise o PLAN.md integrando os achados de severidade alta e média."
Note: a mensagem é específica e prescritiva. Não deixa espaço pra Claude interpretar errado.
🏃 Passo 5 — Claude executa o runner
Claude obedece a instrução. Executa runner.sh. Codex roda. findings-round-1.md é gerado.
$ bash .claude/claudex/runner.sh [codex] Persona: engineer [codex] Lendo PLAN.md... [codex] Buscando falhas de design... [codex] Encontrei 2 alto, 2 médio, 2 baixo [codex] Salvando findings-round-1.md ✓ $ Done.
✏️ Passo 6 — Claude revisa e retorna ao passo 2
Claude lê findings-round-1.md, atualiza PLAN.md integrando os achados, e declara fim de turno. Aí... voltamos ao passo 2.
A "dança" se repete
Hook dispara de novo. Decide. Rodada 2 começa. Cada rodada usa persona diferente. Quando round > max_rounds, hook entra na fase de sumarização e retorna ALLOW. O ciclo termina.
Rodada 1: passos 1-6 com persona engineer Rodada 2: passos 1-6 com persona security Rodada 3: passos 1-6 com persona ops Rodada 4: hook chega aqui → ALLOW + sumário
📌 Resumo
Próximo Módulo:
2.7 — 🔒 As Seis Camadas de Segurança