PROJETO 3.1

🚀 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.

6
Tópicos
~40
Minutos
Médio
Nível
Projeto
Tipo

🎯 O projeto em uma tela

ObjetivoUm projeto real seu passa a ser lido igualmente pelo Claude Code e pelo Codex CLI, com o Codex ganhando uma base global de instruções.
Você sai com~/.codex/AGENTS.md, um projeto com AGENTS.md enxuto + context/ + tasks/ + handoffs/, dois relatórios de readback e um handoff.
Critério de aceiteSessão nova em cada runtime responde as 5 perguntas citando AGENTS.md, tasks/current.md e handoffs/latest.md. Setup Claude continua funcionando.
1

🎯 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.

Fase 0 · base global ~/.codex/AGENTS.md + MCP Fase 1 · skill piloto session-handoff (Trilha 2) Fase 2 · 13 projetos trusted sem AGENTS.md Fases 3–6 próximos projetos ESTE PROJETO ESTE PROJETO

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.

wifi portal inemapro-mono timesmkt2 timesmkt3 inemacert promoavatar2 skool-roast imkt4 iccmonit ATIA claude-session-kit agentes-fronteiros

✓ 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

Trusted sem AGENTS.md

O Codex confia na pasta mas não recebe nenhuma instrução dela.

Menor piloto

O que preserva uma tarefa real com o mínimo de arquivos.

Tarefa representativa

O fluxo que tem que continuar funcionando depois da migração.

Um dono por repo

Duas sessões no mesmo repo corrompem a working tree.

2

🌐 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.

1

Gerar as propostas

O script lê o CLAUDE.md global e separa o portátil do resíduo Claude, sem tocar no original.

2

Revisar os dois arquivos

Você lê AGENTS.proposto.md e CLAUDE.proposto.md. Nada entra sem seus olhos.

3

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

Instrução global

Regras que valem em qualquer pasta: autor, keys, versionamento.

@AGENTS.md

O Claude importa o portátil; o resíduo fica só no CLAUDE.md.

.proposto.md

Saída do script que espera revisão; nunca é aplicada sozinha.

Backup datado

Antes de trocar o original, uma cópia com a data no nome.

3

🧹 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.

CLAUDE.md 1.391 linhas AGENTS.md · ~60 linhas context/overview.md context/decisions/ context/sources.md CLAUDE.md (resíduo) @AGENTS.md + 5 linhas

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.md e 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

Depósito vs instrução

Instrução é o que muda o comportamento hoje; depósito é o que explica o passado.

Briefing de boot

O que o agente lê sempre tem que ser curto; o resto é recuperado sob demanda.

Destino nomeado

Toda seção removida ganha um arquivo com dono em context/.

Mover, não apagar

Faxina é mudança de camada, não perda de informação.

4

🛠️ 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.

1

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.

2

adapt-instructions.sh no piloto

Gera os .proposto.md do projeto. Você aplica a faxina do tópico 3 na revisão e renomeia.

3

init-core.sh

Copia o template sem sobrescrever. Preencha context/overview.md e tasks/current.md com a tarefa representativa.

4

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.

5

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

Ordem importa

Diagnóstico → instruções → núcleo → skills → prova.

Reversível

Cada passo deixa o original ou um backup ao lado.

[criado] / [mantido]

O init-core diz o que fez; nunca sobrescreve.

check.sh

Sete arquivos obrigatórios, não vazios. É o mínimo, não a prova.

5

✅ 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

Sessão nova

Sem histórico de conversa; só o que está nos arquivos.

Citar a fonte

Resposta sem caminho de arquivo não conta como evidência.

Sandbox vs conteúdo

"Não li" pode ser infra; distinga antes de mexer nos arquivos.

Readback audita

Inconsistências que ele aponta são trabalho pra você, não ruído.

6

🏁 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.md existe e codex exec em ~ 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, e context/, 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 -sb limpo.

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.md volta ao estado anterior (nada).
  • Núcleo: git checkout -- . antes do commit, ou git revert depois.

Conceitos-chave

Aceite com evidência

Cada critério aponta para um arquivo ou saída de comando.

Handoff

O resumo estruturado que qualquer runtime retoma.

Publicar = push

O trabalho termina quando entra no origin.

Rollback nomeado

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

Piloto pequeno e usado — um dos 13 trusted sem AGENTS.md, com tarefa representativa clara.
Fase 0~/.codex/AGENTS.md derivado do CLAUDE.md global, com revisão e backup.
Faxina — instrução estável no AGENTS.md; fatos, decisões e runbooks em context/, movidos e não apagados.
Prova e handoff — readback nos dois runtimes com fonte citada, aceite com evidência, push no origin.

Próximo projeto:

3.2 — MCP e hooks entre Claude e Codex: ferramentas viajam, eventos não