🩺 Diagnóstico do ambiente
Antes de mover uma vírgula: saber o que existe. Neste módulo você clona o kit, roda o doctor.sh pra saber se a máquina está pronta e o audit.sh pra inventariar o que o Claude tem e o Codex não. Tudo somente leitura, com a saída real desta máquina como exemplo.
📦 Clonar o kit
O kit agente-claude-codex é o "nível 2, um comando" que a newsletter imaginou: um repositório com cinco scripts bash, os mega-prompts em texto copiável e um template de núcleo portátil. Ele não instala nada no sistema, não pede senha e não toca em ~/.claude nem em ~/.codex sem você mandar. O primeiro passo é só trazer a pasta pra sua máquina.
🎯 Objetivo
Ter o kit numa pasta local, com os scripts executáveis, pronto pra rodar o diagnóstico.
git clone https://github.com/inematds/agente-claude-codex
cd agente-claude-codex
ls scripts/
# adapt-instructions.sh audit.sh doctor.sh init-core.sh readback-test.sh sync-skills.sh
Como verificar: o ls lista os seis scripts. Se algum não tiver permissão de execução, chmod +x scripts/*.sh.
Novo aqui? "Clonar" é baixar uma cópia completa de um repositório git, com histórico. "Script bash" é um arquivo de texto com comandos de terminal que rodam em sequência. Nenhum dos scripts do kit precisa de sudo.
Os seis comandos: diagnosticar, auditar, adaptar, instalar núcleo, portar skill, provar.
Prompt A, Prompt B, readback e handoff em texto pra colar num agente.
AGENTS.md, context/, tasks/, handoffs/ pra copiar em qualquer projeto.
Conceitos-chave
Scripts + prompts + template, sem instalação global.
doctor e audit não alteram nada; só leem.
Tudo roda como seu usuário, na sua pasta.
Apagar a pasta desfaz tudo que este módulo faz.
🩺 doctor.sh: ok / aviso / falta
O doctor responde a pergunta que vem antes de qualquer outra: meu ambiente está pronto? Ele confere git, python3, node, o Claude Code (skills, CLAUDE.md, hooks), o Codex CLI (skills, config, sandbox, MCP), o polyskill e os próprios arquivos do kit. Cada item sai em uma de três categorias, e o script termina com código 1 se faltar algo essencial, o que serve pra automatizar.
Da esquerda pra direita: o doctor examina cada item e o classifica em ok, aviso ou falta. Só o vermelho muda o código de saída, então um script de CI pode barrar a migração quando falta algo essencial.
💻 Rode o diagnóstico
Objetivo: saber, em 2 segundos, se falta algo antes de auditar.
scripts/doctor.sh
echo "exit=$?"
Como verificar: a última linha diz Pronto. Próximo passo: scripts/audit.sh e exit=0. Se disser Faltam itens essenciais, corrija o que está em [FALTA] e rode de novo.
Esta é a saída real na máquina onde o kit foi construído, em 2026-09-14. Repare que os dois avisos não impedem nada: só dizem que skills dependentes de MCP não vão funcionar no Codex até você registrar o servidor, e que o Codex CLI não tem o comando de import (o "um clique" é só no app desktop).
== Sistema ==
[ok] Linux aarch64, shell bash 5.2.21(1)-release
[ok] git 2.43.0
[ok] python3 3.12.3
[ok] node v24.13.0
== Claude Code (fonte) ==
[ok] claude 2.1.270 (Claude Code)
[ok] ~/.claude/skills: 117 skills
[ok] ~/.claude/CLAUDE.md existe (72 linhas)
[ok] settings.json: 2 hooks, 7 plugins
== Codex CLI (destino) ==
[ok] codex codex-cli 0.154.0
[ok] /home/<usuario>/.codex/skills: 27 skills
[ok] /home/<usuario>/.agents/skills: 29 skills
[ok] config.toml: sandbox_mode=danger-full-access
[aviso] nenhum MCP no Codex: skills marcadas 'adaptador' só funcionam após 'codex mcp add'
[aviso] Codex CLI sem comando import (o import 'um clique' é só no app desktop); use os scripts deste kit
== polyskill (passo 4) ==
[ok] polyskill 0.1.0
== Este kit ==
[ok] scripts/audit.sh
[ok] scripts/adapt-instructions.sh
[ok] scripts/init-core.sh
[ok] scripts/sync-skills.sh
[ok] scripts/readback-test.sh
[ok] template/AGENTS.md
[ok] prompts/01-migrate-claude.md
[ok] pasta gravável (relatorios/ será criada aqui)
Pronto. Próximo passo: scripts/audit.sh
exit=0
✓ O que o doctor faz
- ✓Lê versões e pastas; nunca escreve.
- ✓Diz o comando pra resolver cada falta.
- ✓Avisa se o AppArmor vai quebrar o sandbox do Codex.
- ✓Marca runtime ausente como aviso, não como erro.
✗ O que ele NÃO faz
- ✗Instalar Claude, Codex ou polyskill por você.
- ✗Editar
config.tomlousettings.json. - ✗Inventariar skill por skill (isso é o audit).
- ✗Garantir que uma sessão vai ler seus arquivos (isso é o readback).
Conceitos-chave
Item presente e no estado esperado.
Funciona, mas com limitação conhecida.
Essencial ausente; muda o código de saída pra 1.
0 = pronto; 1 = corrija antes. Serve pra CI.
🔍 audit.sh: inventário somente leitura
Se o doctor pergunta "está pronto?", o audit pergunta "o que existe?". Ele lê as duas casas, ~/.claude e ~/.codex, conta skills, comandos, subagentes, hooks, plugins e MCP, e produz um relatório em Markdown com a matriz origem → destino: cada skill que só existe no Claude recebe uma classificação. É exatamente o passo 2 do Prompt A ("Inventory the working system"), automatizado.
O audit compara as listas de skills das duas casas (à esquerda), passa cada skill exclusiva do Claude por uma heurística de grep (no centro) e grava a matriz em quatro classes (à direita). Os números são desta máquina em 2026-09-14: 89 skills só no Claude.
💻 Rode a auditoria
Objetivo: gerar o relatório em relatorios/auditoria-<data>.md com a matriz de skills.
scripts/audit.sh
# Relatório: relatorios/auditoria-2026-09-14.md
# reutilizável: 72
# adaptador: 15
# nativo: 2
# não resolvido: 1
Como verificar: a soma das quatro linhas tem que bater com "Só no Claude" dentro do relatório (aqui, 72+15+2+1 = 90 linhas de tabela, 89 skills mais 1 sem SKILL.md). Se não bater, veja o tópico 5.
💡 Dica prática
Rode o audit antes E depois de cada rodada de migração e compare os dois relatórios com diff. É o jeito mais barato de ver o que mudou de verdade, sem confiar na memória de ninguém.
Conceitos-chave
Lista do que existe, com origem e quantidade.
O que está em um runtime e não no outro.
Cada ativo com sua classificação e o que fazer.
Evidência que dá pra comparar amanhã.
📊 Ler a matriz de skills
A matriz é uma heurística por grep, não um veredito. O audit abre o SKILL.md de cada skill exclusiva do Claude e procura pistas: menção a ferramenta MCP (mcp__, magnific, heygen) vira adaptador; menção a AskUserQuestion, subagentes ou plugins do Claude também vira adaptador; menção a hook (SessionStart, PreToolUse) vira nativo; o resto é reutilizável, ou seja, Markdown e scripts comuns que o Codex lê igual.
Reutilizável
Porta via polyskill sem alteração. Ex.: formato-curso-v5, roteirista-inema, video-explicativo, pixflow-motion, inemaref-serie.
Adaptador
Depende de MCP ou plugin do Claude. Só funciona no Codex depois de codex mcp add. Ex.: avatar-heygen-nei, heygen-cli, espiona-ads, ugc-seedance25, website-intelligence, as 8 variantes de printing-press.
Nativo
Depende de hook SessionStart, que o Codex não tem. fable-mindset e silver-platter viram texto no AGENTS.md.
Não resolvido
inemaref-referencias: pasta sem SKILL.md. Decida à mão: arquivar ou completar.
✓ Como usar a matriz
- ✓Comece pelas reutilizáveis mais usadas; vitória rápida.
- ✓Agrupe as de adaptador pelo MCP que exigem.
- ✓Abra 3 ou 4 SKILL.md por amostragem pra conferir a heurística.
✗ Erros comuns
- ✗Tratar "reutilizável" como "testado": é só formato.
- ✗Portar as 72 de uma vez; faça lotes de 10.
- ✗Esquecer que subagentes e plugins nem entram na matriz: não migram.
Conceitos-chave
Regra prática por grep; acerta na maioria, revise o resto.
Markdown e scripts comuns: porta sem mudar.
Precisa de MCP ou equivalente no destino.
Preso a um evento do runtime; vira texto ou fica.
🛡️ Sandbox do Codex e AppArmor: a falha real
O Codex CLI roda comandos dentro de um sandbox feito com bwrap (bubblewrap), que isola o processo usando user namespaces do Linux. Em Ubuntu recente, o AppArmor restringe esses namespaces pra processos sem privilégio, e o bwrap morre na hora com loopback: Failed RTM_NEWADDR: Operation not permitted. Nada roda, nem um ls. Foi a primeira falha real do kit, e a correção foi de uma linha.
⚠️ O que aconteceu
O primeiro readback no Codex (módulo 2.5) forçava -s read-only na chamada. O sandbox tentou subir, o AppArmor barrou, e o Codex respondeu "não consegui ler nenhum arquivo". A sessão inteira foi perdida.
bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted
Diagnosticar
sysctl kernel.apparmor_restrict_unprivileged_userns retorna 1. O doctor já checa isso e avisa.
Decidir
Máquina pessoal confiável: desligar o sandbox no config do Codex. Máquina compartilhada: liberar o namespace no sysctl (exige root) e manter o sandbox.
Corrigir a menor coisa
No kit: remover o -s read-only do script e respeitar o sandbox_mode do config. Registrado em FALHAS.md como prompt e infra.
💻 Conferir e ajustar o sandbox
Objetivo: garantir que o Codex consegue executar comandos nesta máquina.
# 1. o AppArmor restringe user namespaces?
sysctl -n kernel.apparmor_restrict_unprivileged_userns
# 2. se retornou 1 e a máquina é só sua, no ~/.codex/config.toml:
sandbox_mode = "danger-full-access"
# 3. teste rápido
codex exec --skip-git-repo-check "rode 'echo sandbox-ok' e responda só a saída"
Como verificar: a resposta contém sandbox-ok. Se aparecer bwrap na saída, o config não foi lido: confira o caminho e a grafia da chave.
Novo aqui? "Sandbox" é uma caixa isolada onde um programa roda sem acesso ao resto do sistema. "AppArmor" é o módulo de segurança do Linux que decide o que cada programa pode fazer. danger-full-access desliga a caixa: o Codex passa a ter o mesmo poder que você no terminal. Aceitável em máquina pessoal, perigoso em servidor compartilhado.
Conceitos-chave
Bubblewrap, o isolador que o Codex usa por padrão.
Recurso do kernel que o AppArmor pode bloquear.
Chave do config.toml; scripts não devem sobrescrever.
Uma flag removida, não um script reescrito.
📄 O relatório e o que fazer com ele
O audit deixa um arquivo em relatorios/auditoria-<data>.md com seis seções: versões e raízes, gap de skills com a matriz, comandos e subagentes e hooks e plugins, hooks do Codex, MCP (só nomes, nunca valores de chave) e uma seção "não rodado" que lembra que nenhum comportamento foi testado. Esse arquivo é a evidência do Prompt A: você entrega a matriz, não uma promessa.
📊 As seis seções do relatório
- 1.Versões e raízes: claude, codex, polyskill, contagens por pasta, se existe import nativo.
- 2.Skills: quantas nos dois, quantas só no Claude, e a matriz linha a linha.
- 3.Comandos, subagentes, hooks, plugins, runbooks, CLAUDE.md, memória: destino e classificação de cada um.
- 4.Hooks do Codex hoje: quais eventos já têm handler.
- 5.MCP: nomes registrados em cada lado, sem valores.
- 6.Não rodado: o lembrete de que isso é inventário, não prova.
💻 Extrair só o que precisa
Objetivo: tirar do relatório a lista de skills de adaptador pra planejar os MCP.
grep '| adaptador |' relatorios/auditoria-<data>.md | cut -d'|' -f2
# avatar-heygen-nei, heygen-cli, heygen-mcp, espiona-ads, ...
Como verificar: a lista tem 15 nomes nesta máquina. Troque <data> pela data do seu relatório.
💡 Dica prática
Uma vez tive o resumo do audit somando 94 quando o gap era 89. O grep contava linhas da seção 3 (subagentes, hooks) junto com a seção 2. Menor correção: restringir o grep à seção 2.1. Está no FALHAS.md como "prompt". Se os seus números não fecharem, desconfie do contador antes de desconfiar dos dados.
Conceitos-chave
Arquivo datado que qualquer um pode reler.
O relatório cita nomes de MCP, nunca chaves.
Inventário não é teste; a prova vem no 2.5.
Compare relatórios pra medir progresso real.
Auto-checagem (opcional): o audit classificou uma skill como "reutilizável". O que isso garante?
🎯 Resumo do módulo
Próximo módulo:
2.2 — CLAUDE.md → AGENTS.md: portátil de um lado, resíduo do outro