🚀 Projeto 1: migrar seu primeiro projeto real
Até aqui você entendeu a filosofia (Trilha 1) e treinou cada script isoladamente (Trilha 2). Agora é a Fase 0 e a Fase 2 do plano de verdade: dar uma base global ao Codex, escolher um projeto que o Codex hoje abre "cego", fazer a faxina do CLAUDE.md, rodar os cinco scripts em ordem e provar com readback nos dois runtimes. No fim, um handoff que qualquer um dos dois retoma.
🎯 O projeto em uma tela
~/.codex/AGENTS.md, um projeto com AGENTS.md enxuto + context/ + tasks/ + handoffs/, dois relatórios de readback e um handoff.🎯 Escolher o piloto
O diagnóstico de 2026-09-14 encontrou 13 projetos marcados como trusted no Codex que não têm AGENTS.md. Isso significa que o Codex entra neles sem nenhuma instrução: cada sessão começa do zero. São os candidatos naturais a piloto, porque o ganho é imediato e mensurável. A regra do Prompt B vale aqui: o menor piloto que preserve uma tarefa representativa. Não comece pelo maior, comece pelo que você mais usa.
Leia como uma escada: os degraus com brilho são os que este projeto sobe. A Fase 0 dá ao Codex uma base global; a Fase 2 aplica o núcleo portátil a um dos 13 projetos que ele hoje abre sem instrução. A Fase 1 (skill piloto) você já fez na Trilha 2.
📊 Os 13 candidatos, em ordem de uso
Ordem sugerida pelo diagnóstico, do mais usado ao menos usado. Quanto mais sessões o projeto recebe, mais cedo o AGENTS.md se paga.
✓ Um bom piloto
- ✓Você abre nele toda semana, nos dois runtimes.
- ✓Tem um CLAUDE.md que já diz algo útil (regras, caminhos, autor de commit).
- ✓Tem uma tarefa representativa clara: "publicar no portal", "rodar o backup", "gerar o relatório".
- ✓Working tree limpa no momento de começar.
✗ Um piloto ruim
- ✗O maior CLAUDE.md da máquina (ruflo, 1.391 linhas) só porque "é o mais completo".
- ✗Projeto que outra sessão está editando agora (as edições se atropelam, já aconteceu no portal).
- ✗Projeto de cliente misturado com conhecimento pessoal (isso é o Projeto 5).
- ✗Projeto que ninguém abre há meses: sem uso, sem evidência.
Sugestão concreta: comece pelo wifi. É o hub de monitoramento, tem CLAUDE.md próprio, recebe sessões quase todo dia e já guarda o próprio diagnóstico deste curso. Se preferir algo menor e isolado, skool-roast ou iccmonit.
Conceitos-chave
O Codex confia na pasta mas não recebe nenhuma instrução dela.
O que preserva uma tarefa real com o mínimo de arquivos.
O fluxo que tem que continuar funcionando depois da migração.
Duas sessões no mesmo repo corrompem a working tree.
🌐 Base global: ~/.codex/AGENTS.md
Esta é a Fase 0. O Claude tem um ~/.claude/CLAUDE.md global de 72 linhas com regras que valem para todos os projetos: conta de autor por repo, onde estão as API keys, versionamento, modelo de imagem padrão. O Codex não tem nada equivalente: o arquivo ~/.codex/AGENTS.md não existe. Derivar um do outro é o passo mais barato de toda a migração, e é o que faz o Codex parar de ignorar regras que você considera óbvias.
Gerar as propostas
O script lê o CLAUDE.md global e separa o portátil do resíduo Claude, sem tocar no original.
Revisar os dois arquivos
Você lê AGENTS.proposto.md e CLAUDE.proposto.md. Nada entra sem seus olhos.
Gravar no Codex e ligar o import no Claude
O portátil vira ~/.codex/AGENTS.md. O CLAUDE.md global passa a começar com @AGENTS.md apontando para uma cópia local.
Objetivo: criar o ~/.codex/AGENTS.md a partir do CLAUDE.md global, com revisão humana no meio.
# 1. gerar as propostas (não sobrescreve nada)
cd ~/projetos/agente-claude-codex
scripts/adapt-instructions.sh ~/.claude
# saída esperada: ~/.claude/AGENTS.proposto.md (71 linhas) e ~/.claude/CLAUDE.proposto.md (7 linhas)
# 2. revisar (abra os dois, corrija o que o grep errou)
less ~/.claude/AGENTS.proposto.md
less ~/.claude/CLAUDE.proposto.md
# 3. gravar: o portátil vai pro Codex E fica ao lado do CLAUDE.md pra ser importado
cp ~/.claude/AGENTS.proposto.md ~/.codex/AGENTS.md
cp ~/.claude/AGENTS.proposto.md ~/.claude/AGENTS.md
cp ~/.claude/CLAUDE.md ~/.claude/CLAUDE.md.bak-$(date +%Y%m%d) # backup antes de trocar
cp ~/.claude/CLAUDE.proposto.md ~/.claude/CLAUDE.md
rm ~/.claude/*.proposto.md
Como verificar: head -1 ~/.claude/CLAUDE.md mostra @AGENTS.md; wc -l ~/.codex/AGENTS.md dá por volta de 71.
⚠️ A armadilha do rename
O script troca toda menção a CLAUDE.md por AGENTS.md na parte portátil. O seu CLAUDE.md global fala de outros projetos ("ver o CLAUDE.md dele", "cada projeto pode ter seu próprio CLAUDE.md"). Essas frases também são renomeadas, e o sentido muda. Na revisão do passo 2, procure por AGENTS.md dele e devolva o nome certo onde for referência a outro projeto.
Teste de 30 segundos: depois de gravar, rode codex exec "Qual conta de autor devo usar num commit para um repo da conta inematds? Cite a fonte." a partir de ~. Se ele responder inematds <inematds@gmail.com> citando o AGENTS.md, a Fase 0 passou.
Conceitos-chave
Regras que valem em qualquer pasta: autor, keys, versionamento.
O Claude importa o portátil; o resíduo fica só no CLAUDE.md.
Saída do script que espera revisão; nunca é aplicada sozinha.
Antes de trocar o original, uma cópia com a data no nome.
🧹 Faxina: CLAUDE.md gordo vira AGENTS.md enxuto + context/
A newsletter insiste: a maior parte da migração é faxina. O diagnóstico achou CLAUDE.md de 1.391 linhas (ruflo), 542 (rAgentic-cs), 427 (timesmkt2), 401 (ruview). Um arquivo desse tamanho não é instrução, é um depósito: regras misturadas com histórico, decisões antigas, runbooks e "lessons" que já viraram código. Migrar isso cru só transporta ruído para o Codex. A regra é: AGENTS.md tem só instrução estável; o resto vai para o lugar que tem dono.
O arquivo gordo à esquerda se abre em leque: regras estáveis ficam no AGENTS.md enxuto; fatos, decisões e runbooks vão para context/, cada um com dono. O CLAUDE.md sobra pequeno, importando o AGENTS.md.
✓ Fica no AGENTS.md
- ✓Ordem de leitura (AGENTS → context/overview → tasks/current → handoffs/latest).
- ✓Regras de git: remote, autor, "publicar = push".
- ✓Como rodar, testar e reiniciar (3 a 5 comandos).
- ✓Proibições duras: "nunca gerar mídia paga sem confirmar".
✗ Sai do AGENTS.md (e vai para…)
- ✗Histórico de fases e o que foi feito quando →
context/current-state.mde CHANGELOG. - ✗"Lessons" e correções pontuais →
FALHAS.md(uma linha por falha). - ✗Decisões de arquitetura com contexto →
context/decisions/AAAA-MM-DD-*.md. - ✗Runbooks longos, URLs, credenciais de onde vêm →
context/sources.md.
Objetivo: medir o CLAUDE.md do piloto e separar o que é instrução do que é depósito, antes de rodar o adaptador.
P=~/projetos/<seu-piloto>
wc -l $P/CLAUDE.md
# cabeçalhos: o mapa do que tem lá dentro
grep -nE '^#{1,3} ' $P/CLAUDE.md
# candidatos a sair: histórico, lessons, decisões, datas
grep -cniE 'lesson|corrigido em|decidi|fase [0-9]|20[0-9]{2}-[0-9]{2}' $P/CLAUDE.md
Como verificar: se o segundo grep devolve dezenas de linhas, você tem depósito. Meta depois da faxina: AGENTS.md abaixo de 100 linhas, e cada seção removida com um destino nomeado em context/.
Não apague, mova. A faxina não é deletar. É tirar do arquivo que todo agente lê no boot e colocar no arquivo que o agente lê só quando precisa. O conteúdo continua no repo, versionado; só muda de camada.
Conceitos-chave
Instrução é o que muda o comportamento hoje; depósito é o que explica o passado.
O que o agente lê sempre tem que ser curto; o resto é recuperado sob demanda.
Toda seção removida ganha um arquivo com dono em context/.
Faxina é mudança de camada, não perda de informação.
🛠️ Os cinco scripts em ordem
Na Trilha 2 você rodou cada script isolado. Aqui eles rodam em sequência sobre o piloto, e a ordem importa: primeiro o diagnóstico (somente leitura), depois as instruções, depois o núcleo, depois skills, e a prova por último. Cada passo é reversível: nada em ~/.claude é apagado, o adaptador grava .proposto.md, o núcleo não sobrescreve, o install faz backup ao lado.
doctor.sh + audit.sh
Confirma que os dois runtimes estão prontos e gera o relatório de inventário. Se já rodou hoje, pule.
adapt-instructions.sh no piloto
Gera os .proposto.md do projeto. Você aplica a faxina do tópico 3 na revisão e renomeia.
init-core.sh
Copia o template sem sobrescrever. Preencha context/overview.md e tasks/current.md com a tarefa representativa.
sync-skills.sh (só se o piloto usa skill própria)
A maioria dos projetos usa skills globais. Se o piloto tem .claude/skills/ local, importe e instale nos dois.
readback-test.sh
A prova. Tópico 5.
Objetivo: aplicar o kit inteiro no piloto, em uma sessão, sem sobrescrever nada.
K=~/projetos/agente-claude-codex
P=~/projetos/<seu-piloto>
cd $K
# 1. diagnóstico (somente leitura)
scripts/doctor.sh && scripts/audit.sh
# 2. instruções: gera *.proposto.md ao lado do CLAUDE.md do piloto
scripts/adapt-instructions.sh $P
# ... revisar + faxina (tópico 3) ...
mv $P/AGENTS.proposto.md $P/AGENTS.md
cp $P/CLAUDE.md $P/CLAUDE.md.bak-$(date +%Y%m%d) && mv $P/CLAUDE.proposto.md $P/CLAUDE.md
# 3. núcleo portátil (lista [criado] e [mantido])
scripts/init-core.sh $P
# preencher: $P/context/overview.md, $P/tasks/current.md
# 4. só se houver skill local no piloto
ls $P/.claude/skills 2>/dev/null
# 5. checagem mínima do núcleo
bash $P/scripts/check.sh
Como verificar: check.sh imprime [ok] para os 7 arquivos obrigatórios. head -1 $P/CLAUDE.md mostra @AGENTS.md. O .bak existe.
📋 O que preencher em tasks/current.md
- •Objetivo: a tarefa representativa, em uma frase. Ex.: "publicar o item X no portal".
- •Dono: você. O agente executa.
- •Critério de pronto: algo verificável. "Push entrou no origin" é verificável; "ficou bom" não é.
- •Próxima ação concreta: o primeiro comando ou arquivo a tocar.
Conceitos-chave
Diagnóstico → instruções → núcleo → skills → prova.
Cada passo deixa o original ou um backup ao lado.
O init-core diz o que fez; nunca sobrescreve.
Sete arquivos obrigatórios, não vazios. É o mínimo, não a prova.
✅ Readback nos dois runtimes
Arquivo existir não é prova. A prova é uma sessão nova, em cada runtime, respondendo cinco perguntas sem depender de conversa anterior: qual é o objetivo e o critério de pronto, uma regra importante com o arquivo de origem, a última decisão aceita, a próxima ação concreta, e conflitos ou acesso faltando. O script roda claude -p e codex exec dentro do piloto e salva o texto bruto. O veredito é seu, lendo.
Objetivo: obter as duas respostas e julgar se citam os arquivos certos.
cd ~/projetos/agente-claude-codex
scripts/readback-test.sh ~/projetos/<seu-piloto> both
# salva: relatorios/readback-claude-AAAA-MM-DD.md e readback-codex-AAAA-MM-DD.md
# o que procurar nas respostas
grep -cE 'AGENTS.md|tasks/current|handoffs/latest|context/' relatorios/readback-*-$(date +%F).md
Como verificar: as duas respostas citam AGENTS.md, tasks/current.md e handoffs/latest.md, e a "próxima ação" bate com o que você escreveu em tasks/current.md. Se um runtime responde de memória genérica sem citar arquivo, falhou.
✓ Resposta que passa
- ✓"Objetivo: publicar X. Critério: push no origin. Fonte: tasks/current.md."
- ✓"Regra: autor inematds. Fonte exata: AGENTS.md, seção Git."
- ✓Separa o que os arquivos dizem do que ele infere.
- ✓Aponta inconsistência real entre dois arquivos, se houver.
✗ Resposta que falha
- ✗"O objetivo parece ser melhorar o projeto" (sem fonte).
- ✗Cita o CLAUDE.md antigo em vez do AGENTS.md (o import não pegou).
- ✗"Não consegui ler os arquivos" (sandbox: veja abaixo).
- ✗Inventa uma "última decisão" que não está em context/decisions/.
⚠️ A falha real que já aconteceu
Na primeira rodada do readback no próprio kit, o Codex respondeu "não consegui ler os arquivos: bwrap: loopback: Failed RTM_NEWADDR". O script forçava -s read-only, e nesta máquina o AppArmor restringe user namespaces, então o sandbox bwrap do Codex não sobe. A menor correção: remover o flag e respeitar o sandbox_mode do ~/.codex/config.toml. Está registrado em FALHAS.md como prompt | infra. Se você vir esse erro, o problema é o sandbox, não o seu AGENTS.md.
Aproveite o que o readback devolve. Na segunda rodada, o Codex leu tudo e apontou três inconsistências reais no kit: handoff ausente, uma soma errada no relatório, uma frase contraditória. Um readback bom não só passa; ele audita. Corrija o que ele encontrar antes de dar por pronto.
Conceitos-chave
Sem histórico de conversa; só o que está nos arquivos.
Resposta sem caminho de arquivo não conta como evidência.
"Não li" pode ser infra; distinga antes de mexer nos arquivos.
Inconsistências que ele aponta são trabalho pra você, não ruído.
🏁 Aceite, handoff, riscos e rollback
O projeto termina quando os critérios de aceite estão marcados com evidência, não quando "parece pronto". E termina com um handoff: o próximo agente, em qualquer runtime, precisa saber o que foi feito, o que foi verificado e qual é a próxima ação exata. Sem isso, a semana que vem começa do zero de novo, e você volta a depender dos JSONL.
✅ Critérios de aceite (marque com evidência)
- ☐
~/.codex/AGENTS.mdexiste ecodex execem~cita a regra de autor. Evidência: saída do comando. - ☐Piloto tem AGENTS.md com menos de 100 linhas, CLAUDE.md começando com
@AGENTS.md, econtext/,tasks/,handoffs/preenchidos. Evidência:check.sh. - ☐Readback passou nos dois runtimes. Evidência: os dois arquivos em
relatorios/. - ☐A tarefa representativa ainda funciona no Claude. Evidência: rodou uma vez depois da migração.
- ☐Tudo commitado e no origin. Evidência:
git status -sblimpo.
Objetivo: fechar com handoff e commit, em um bloco.
P=~/projetos/<seu-piloto>
cd $P
# handoff: preencha as seções do template (o que mudou, checks rodados e resultado, próxima ação exata)
$EDITOR handoffs/latest.md
# o piloto agora usa o núcleo: registre em tasks/current.md que o aceite passou
$EDITOR tasks/current.md
git add AGENTS.md CLAUDE.md context tasks handoffs scripts
git -c user.name=inematds -c user.email=inematds@gmail.com commit -m "workspace portátil: AGENTS.md + núcleo (context/tasks/handoffs); readback aprovado em Claude e Codex"
git push
git status -sb | head -1 # esperado: ## main...origin/main
Como verificar: abra uma sessão nova no Codex dentro do piloto amanhã e peça "leia handoffs/latest.md e diga a próxima ação". Se ele responder a mesma frase que você escreveu, o ciclo fechou.
⚠️ Riscos deste projeto
- •Rename cego de referências a CLAUDE.md de outros projetos (tópico 2).
- •Faxina que apaga em vez de mover (tópico 3).
- •Outra sessão editando o mesmo repo durante a migração.
- •Cada readback no Codex consome cota OpenAI; rode por projeto, não em loop.
↩️ Rollback em um comando
- ✓CLAUDE.md do piloto:
mv CLAUDE.md.bak-AAAAMMDD CLAUDE.md. - ✓CLAUDE.md global: mesmo padrão em
~/.claude/. - ✓Base do Codex:
rm ~/.codex/AGENTS.mdvolta ao estado anterior (nada). - ✓Núcleo:
git checkout -- .antes do commit, ougit revertdepois.
Conceitos-chave
Cada critério aponta para um arquivo ou saída de comando.
O resumo estruturado que qualquer runtime retoma.
O trabalho termina quando entra no origin.
Antes de começar, você já sabe como desfazer cada passo.
Auto-checagem (opcional): o readback do Codex respondeu "não consegui ler os arquivos: bwrap RTM_NEWADDR". O que você faz primeiro?
🎯 Resumo do projeto
~/.codex/AGENTS.md derivado do CLAUDE.md global, com revisão e backup.Próximo projeto:
3.2 — MCP e hooks entre Claude e Codex: ferramentas viajam, eventos não