Um time de agentes cabe numa página: a decisão da aula 1 e, para cada papel, nível, ferramentas, o que escreve, isolamento, entrada, retorno, quem verifica e teto. Escrito assim, um script confere se falta campo ou se dois papéis gravam no mesmo lugar sem isolamento. Nesta aula você escreve o time.md do seu loop, confere e roda.
2Dono de arquivo: quem escreve onde, e isolado como
3Um conferidor que acusa campo faltando e colisão
4O mapa do curso e o seu plano com datas
Objetivo: escrever o time.md do seu loop (papel, nível, ferramentas, dono dos arquivos, isolamento, retorno, verificação, teto) e rodá-lo.
01 · Do pedido ao time
Cada etapa usa uma aula do curso. Clique para ver qual.
Clique em cada bloco do diagrama para ver o que ele faz.
Comece com o menor time que faz o trabalho. Papel novo só entra quando você souber dizer o que ele devolve e quem confere.
02 · O time.md e o conferidor
Copie o modelo, troque pelos papéis do seu loop e rode o conferidor. Nenhum modelo é chamado.
time.md · modelo com quatro papéis
# Time do loop — [nome do loop]
Decisão (aula 1): híbrido — planejar e revisar no centro; executar em paralelo só os itens independentes.
## papel: planejador
- nível: topo
- ferramentas: Read, Grep, Glob
- escreve em: nada
- isolamento: nenhum (só lê)
- entrada: goal.md
- retorno: plano em até 5 passos + critérios comando → saída (quem grava em plans/ é o orquestrador)
- verificado por: você (portão humano antes de executar)
- teto: 1 rodada
## papel: executor
- nível: executor
- ferramentas: Read, Write, Edit, Bash, Grep, Glob
- escreve em: src/ tests/novos/
- isolamento: worktree
- entrada: plano aprovado
- retorno: lista de arquivos mudados + saída dos testes
- verificado por: avaliador
- teto: 3 rodadas, 600 s cada
## papel: avaliador
- nível: menor
- ferramentas: Read, Bash, Grep, Glob
- escreve em: nada
- isolamento: sandbox read-only
- entrada: goal.md + diff + saída dos testes
- retorno: OK/FALHA por critério + APROVADO ou FALTA
- verificado por: script verificar.mjs
- teto: 1 rodada por entrega
## papel: revisor-codex
- nível: executor
- ferramentas: codex exec -s read-only
- escreve em: nada
- isolamento: sandbox read-only
- entrada: mesmo briefing + diff real
- retorno: até 6 linhas, última APROVADO ou FALTA
- verificado por: você reconcilia (aceito, rejeitado com evidência, em aberto)
- teto: 2 rodadas
confere-time.py · salve ao lado do time.md
# confere-time.py — confere o time.md: todo papel tem os 8 campos, e nenhum
# arquivo tem dois donos sem isolamento (a colisão das aulas 5 e 6).
# Uso: python3 confere-time.py time.md
import re, sys
CAMPOS = ["nível", "ferramentas", "escreve em", "isolamento", "entrada",
"retorno", "verificado por", "teto"]
NIVEIS = {"menor", "executor", "topo", "super"}
texto = open(sys.argv[1], encoding="utf-8").read()
papeis = re.findall(r"^## papel: *(.+?)\n(.*?)(?=^## |\Z)", texto, re.M | re.S)
problemas = 0
donos = {}
for nome, corpo in papeis:
campos = dict(re.findall(r"^- ([^:]+): *(.+)$", corpo, re.M))
faltam = [c for c in CAMPOS if not campos.get(c, "").strip()]
if faltam:
print(f"{nome}: falta {', '.join(faltam)}"); problemas += 1
if campos.get("nível") and campos["nível"] not in NIVEIS:
print(f"{nome}: nível '{campos['nível']}' não é menor/executor/topo/super"); problemas += 1
escreve = campos.get("escreve em", "nada")
if escreve != "nada" and campos.get("isolamento", "nenhum").startswith("nenhum"):
for alvo in escreve.split():
donos.setdefault(alvo, []).append(nome)
if escreve != "nada" and "ferramentas" in campos and not re.search(r"Write|Edit|Bash|workspace-write", campos["ferramentas"]):
print(f"{nome}: escreve em {escreve}, mas as ferramentas só leem"); problemas += 1
for alvo, quem in donos.items():
if len(quem) > 1:
print(f"colisão: {alvo} tem {len(quem)} donos sem isolamento ({', '.join(quem)})"); problemas += 1
print(f"papéis: {len(papeis)} · problemas: {problemas}")
sys.exit(1 if problemas or not papeis else 0)
Terminal · conferir
cd ~/treino-multi
python3 confere-time.py time.md; echo "saída: $?"
Exemplo do repositório
papéis: 4 · problemas: 0
saída: 0
O modelo passa. O planejador escreve "nada": quem grava o plano em disco é o orquestrador. Na primeira versão do modelo, o planejador dizia "escreve em: plans/" com ferramentas só de leitura, e o conferidor acusou a contradição.
O mesmo time com o executor sem worktree e um segundo executor, sem teto, também gravando em src/:
executor-2: falta teto
colisão: src/ tem 2 donos sem isolamento (executor, executor-2)
papéis: 5 · problemas: 2
saída: 1
Duas saídas: dar um worktree a cada executor (aula 5) ou dividir as pastas por dono (o que a doc de agent teams pede).
03 · Prática final
O seu time no papel, conferido, e uma rodada de verdade.
E17 · O time.md do seu loop
30 min
Rode a matriz (aula 1) para o loop que você quer montar. Escreva o time.md com os papéis que a decisão pede, troque [nome do loop] e rode o conferidor.
Pronto quando:python3 confere-time.py time.md; echo "saída: $?" → papéis: N · problemas: 0 e saída: 0, com N igual ao número de papéis que você escreveu.
E18 · Uma rodada do time
45 min
Escolha uma tarefa pequena do seu projeto. Escreva o goal com 2 ou 3 critérios e faça commit dele. O executor roda pelo gera-avalia.sh num worktree (git worktree add) e o revisor Codex lê o diff pela ponte. Reconcilie os achados no revisao.md.
Pronto quando:./gera-avalia.sh goal.md "[pedido]" termina em → APROVADO e saída: 0; tail -1 revisao-codex.txt | grep -cE '^-? ?(APROVADO|FALTA:)' → 1; grep -cE "^(aceito|rejeitado|aberto):" revisao.md é igual ao número de achados.
04 · O mapa do curso
Quatro entregas, na ordem. Clique num exercício para ver o "pronto quando".
Aula 804 · O mapa do cursoQuatro entregas, na ordem. Clique num exercício para ver o "pronto quando".
Por que o campo "verificado por" é obrigatório para todo papel?
Correto
Aula 4: quem decide é outro processo, olhando o artefato. Sem esse campo, o time volta a confiar no relato.
Não é essa
Aula 4: quem decide é outro processo, olhando o artefato. Sem esse campo, o time volta a confiar no relato.Rever: Do pedido ao time
Pergunta 4 de 4
No modelo, o planejador escreve "nada". Quem grava o plano em disco?
Correto
O planejador só tem ferramentas de leitura. Dizer que ele escreve em plans/ foi a contradição que o conferidor pegou na primeira versão.
Não é essa
O planejador só tem ferramentas de leitura. Dizer que ele escreve em plans/ foi a contradição que o conferidor pegou na primeira versão.Rever: O time.md e o conferidor
Teste concluído
Você acertou {a} de {n}. Acertando todas, a aula é marcada como concluída.
Escolha uma alternativa. A explicação aparece depois da sua tentativa.
07 · Em três frases
Uma páginaDecisão e, por papel, nível, ferramentas, onde escreve, isolamento, entrada, retorno, verificação e teto.
Conferido por scriptCampo faltando, nível sem sentido e dois donos sem isolamento aparecem antes de rodar.
Rodado uma vezExecutor num worktree, avaliador por código, revisão cruzada reconciliada.