Trocar o Codex pelo Claude Code: o que você precisa reconfigurar?

Migrar do Codex para o Claude Code (ou o contrário) é troca de configuração, não de instalação. O que muda de lugar: instruções de projeto (AGENTS.md no Codex, CLAUDE.md no Claude Code), config global (~/.codex/config.toml contra ~/.claude/settings.json), permissões (approval_policy e sandbox_mode contra os blocos allow, deny e ask), MCP, skills, comandos, subagentes e hooks. O Claude Code não lê AGENTS.md por padrão: a documentação recomenda um CLAUDE.md que importe esse arquivo, ou um symlink. Tem também o comando /import, que traz instruções, servidores MCP, comandos, subagentes e skills de um agente suportado (Claude Code v2.1.213 ou posterior)
Fala aí, beleza? Instalar o agente novo leva um minuto, reconstruir a configuração leva a tarde…
Se você já tem um agente rodando de verdade, o npm install -g é a parte boba da história
O que dói é o resto: o arquivo de instruções do projeto que você foi lapidando por semanas, as permissões afinadas do seu jeito, um ou dois servidores MCP conectados, as skills que você escreveu na mão, os subagentes, os hooks
Nada disso viaja junto sozinho
Então bora tratar essa migração pelo que ela é: um trabalho de configuração
Aqui embaixo tem o mapa de onde cada coisa mora nos dois lados, o checklist com 7 passos e o erro comum de cada passo 🙂
Onde mora cada configuração no Codex e no Claude Code
Antes de mexer em qualquer arquivo, se liga nesse mapa: ele serve nos dois sentidos da migração
| Configuração | Codex | Claude Code |
|---|---|---|
| Instruções de projeto | AGENTS.md (e AGENTS.override.md na mesma pasta) |
CLAUDE.md ou .claude/CLAUDE.md |
| Instruções de usuário | AGENTS.override.md no home do Codex (~/.codex, ou o que estiver em CODEX_HOME) |
~/.claude/CLAUDE.md |
| Config global | ~/.codex/config.toml |
~/.claude/settings.json |
| Config por projeto | .codex/config.toml (projetos confiáveis) |
.claude/settings.json e .claude/settings.local.json |
| Permissões e autonomia | approval_policy e sandbox_mode no config.toml |
blocos allow, deny e ask no settings.json, mais os modos de permissão |
| MCP | blocos [mcp_servers.nome] no config.toml, comando codex mcp add |
.mcp.json, ~/.claude.json, comando claude mcp add |
| Skills | .agents/skills no repo e $HOME/.agents/skills |
.claude/skills/ no projeto e ~/.claude/skills/ |
| Comandos e prompts | ~/.codex/prompts/*.md, chamados com /prompts:nome (marcado como deprecated) |
.claude/commands/ e ~/.claude/commands/ (legado), hoje o recomendado é .claude/skills/<nome>/SKILL.md |
| Subagentes | arquivos .toml em ~/.codex/agents/ e .codex/agents/ |
arquivos .md com frontmatter YAML em ~/.claude/agents/ e .claude/agents/ |
| Hooks | hooks.json ou a seção hooks do config.toml |
bloco hooks dentro dos arquivos de settings |
Domine o Claude Code do básico ao avançado
Você vai aprender a criar sistemas completos com Claude Code, sem precisar ser programador. Inscreva-se para ter acesso a um desconto de lançamento e bônus especiais!
Repara numa coisa: quase nada tem o mesmo nome, o mesmo formato E a mesma pasta ao mesmo tempo
Subagente de um lado é TOML, do outro é markdown com frontmatter
Skill é markdown nos dois, mas o diretório muda, e nenhuma das duas documentações confirma que uma ferramenta lê a pasta da outra
Antes de migrar: o que ter instalado e em mãos
Instalando o Claude Code:
npm install -g @anthropic-ai/claude-code
Ou pelo instalador nativo, no macOS, Linux e WSL:
curl -fsSL https://claude.ai/install.sh | bash
No PowerShell:
irm https://claude.ai/install.ps1 | iex
Tome cuidado: a documentação alerta pra NÃO usar sudo npm install -g
E se o caminho for o inverso:
npm install -g @openai/codex
brew install codex
Depois é rodar codex no terminal e fazer login com conta ChatGPT ou chave de API, em macOS, Windows ou Linux
O inventário que salva a sua tarde:
Antes de digitar qualquer comando, abre e olha o que existe hoje:
~/.codex/config.tomle o.codex/config.tomldo repositório, se tiver- o
AGENTS.mddo projeto (e qualquerAGENTS.override.md) - as skills em
.agents/skillse em$HOME/.agents/skills - os subagentes em
~/.codex/agents/e.codex/agents/ - os hooks, no
hooks.jsonou na seçãohooksdoconfig.toml - os prompts customizados em
~/.codex/prompts/
E confere a versão do Claude Code: o comando /import, que é o atalho do passo 2, pede a v2.1.213 ou posterior
Checklist de migração: 7 passos para reconfigurar o agente
1. Instruções de projeto: do AGENTS.md ao CLAUDE.md
Primeiro o porquê, que aqui muda tudo: os dois leem instrução de jeitos diferentes
O Codex percorre da raiz do projeto (normalmente a raiz do Git) até o diretório atual e, em cada pasta, checa AGENTS.override.md, depois AGENTS.md, depois os nomes listados em project_doc_fallback_filenames, no máximo um arquivo por diretório
Os arquivos são concatenados da raiz pra baixo, então o mais próximo do diretório atual prevalece
E tem teto: ele para de somar quando o tamanho combinado atinge project_doc_max_bytes, 32 KiB por padrão (detalhe documentado no guia de AGENTS.md do Codex)
O Claude Code é mais direto: os CLAUDE.md são lidos no início de toda sessão, com a versão de usuário em ~/.claude/CLAUDE.md e a de projeto em CLAUDE.md ou .claude/CLAUDE.md no diretório de trabalho
Pra repositório que já usa AGENTS.md, a documentação de memória do Claude Code recomenda criar um CLAUDE.md que IMPORTE esse arquivo, assim as duas ferramentas leem a mesma instrução sem duplicar
Quando não tem nada específico do Claude no meio, o symlink resolve:
ln -s AGENTS.md CLAUDE.md
Ah, e tem um segundo canal de contexto do lado do Claude Code: a memória automática, em que ele mesmo escreve notas entre sessões
As primeiras 200 linhas do MEMORY.md, ou os primeiros 25KB (o que vier antes), entram no começo de cada conversa
O erro comum deste passo: esperar que o Claude Code leia o AGENTS.md sozinho
Ele não carrega por padrão: o /init só passa a ler AGENTS.md (além de .devin/rules/, .windsurf/rules/ ou .windsurfrules e .clinerules) com a variável de ambiente CLAUDE_CODE_NEW_INIT=1
E no sentido inverso vale o espelho: se o seu repositório usa um nome de arquivo diferente, o Codex ignora até você listar o nome em project_doc_fallback_filenames, no ~/.codex/config.toml
project_doc_fallback_filenames = ["TEAM_GUIDE.md", ".agents.md"]
2. O atalho: rode o /import antes de fazer na mão
Antes de sair copiando arquivo, testa o caminho curto
O Claude Code tem o comando /import, que traz a configuração de um agente de código suportado: ele anexa uma cópia única de arquivos de instrução como o AGENTS.md ao CLAUDE.md correspondente e leva junto servidores MCP, comandos, subagentes e skills
Lembrando: v2.1.213 ou posterior
O erro comum deste passo: rodar o /import e achar que acabou
A lista do que ele leva é essa aí de cima
Permissão e hook não estão nela, então esses dois continuam por sua conta (passos 3 e 7)
3. Permissões e autonomia: duas chaves viram três blocos
No Codex, autonomia é assunto de duas chaves separadas: approval_policy (quando ele para e pergunta, aceitando untrusted, on-request, never e a forma granular) e sandbox_mode (o que ele pode tecnicamente fazer no disco e na rede, com read-only, workspace-write e danger-full-access)
Pasta gravável fora do workspace? Isso vive em sandbox_workspace_write.writable_roots
No Claude Code o desenho é outro: as permissões são regras no formato Tool ou Tool(specifier) dentro do settings.json, organizadas em deny, ask e allow
{
"permissions": {
"deny": ["Read(./.env)"],
"ask": ["Bash(curl *)"],
"allow": ["Bash(npm run lint)"]
}
}
E a parte de "quando ele para e pergunta" vira modo de permissão: default, acceptEdits (aceita edições de arquivo automaticamente), bypassPermissions (sem prompts), plan (explora sem editar), dontAsk e auto
O plan é o mais próximo do espírito de um sandbox só de leitura, e o acceptEdits é o que mais lembra a rotina de deixar o agente editar sem interromper
Detalhe importante: mesmo em bypassPermissions, uma regra de deny bloqueia a ferramenta
O erro comum deste passo: assumir que a regra mais específica ganha
Não ganha, e aqui vale separar as duas coisas pra não embolar
Primeiro vem a ordem dos blocos: a avaliação passa pelo deny, depois pelo ask, depois pelo allow
Dentro dessa varredura, quem decide é a PRIMEIRA regra que casar, independente de ser mais específica que as outras
Ou seja: o que manda é a posição na varredura, não o nível de detalhe do specifier
4. MCP: o mesmo servidor, em outro arquivo
No Codex a configuração de MCP fica no próprio config.toml, em blocos [mcp_servers.nome], com um comando dedicado pra gerenciar:
codex mcp list
codex mcp add nome --url https://exemplo.com/mcp
Ele aceita launcher stdio ou URL HTTP streamable, e variáveis com --env KEY=VALUE
No Claude Code o caminho é JSON: .mcp.json, ~/.claude.json ou o comando claude mcp add
O erro comum deste passo: conectar o servidor em escopo de projeto e achar que ele nasceu ativo
Servidores declarados nesse escopo passam por aprovação por servidor, então se a ferramenta "sumiu", desconfia disso antes de mexer na config
5. Skills e comandos: o formato viaja, a pasta não
As skills do Codex ficam em .agents/skills dentro do repositório (ele varre do diretório atual até a raiz) e em $HOME/.agents/skills pras pessoais, cada uma sendo uma pasta com SKILL.md contendo name e description, invocáveis por /skills ou digitando $
As do Claude Code ficam em ~/.claude/skills/, no .claude/skills/ do projeto (que você versiona no git) ou no .claude/skills/ de um diretório passado em --add-dir
E tem um mimo: o Claude Code monitora essas pastas e aplica as mudanças na sessão em curso, sem reiniciar
O SKILL.md segue o padrão aberto Agent Skills, que roda em várias ferramentas de IA, e o Claude Code estende esse padrão com coisas próprias (controle de invocação, execução em subagente e injeção dinâmica de contexto)
Ou seja: o conteúdo em si é bem portável, o endereço é que muda
Já os comandos customizados são o ponto mais bagunçado dos dois lados
No Codex, os prompts vivem em ~/.codex/prompts/, só no nível raiz da pasta, chamados como /prompts:nome, e a documentação marca o recurso como deprecated indicando skills no lugar
No Claude Code, .claude/commands/ e ~/.claude/commands/ são o formato legado: o recomendado hoje é .claude/skills/<nome>/SKILL.md, que aceita a mesma invocação por barra e ainda pode ser acionado pelo próprio Claude
O erro comum deste passo: migrar pro formato legado
Se você vai reescrever mesmo assim, reescreve como skill de uma vez
6. Subagentes: TOML vira markdown
No Codex, subagente é arquivo .toml em ~/.codex/agents/ (pessoal) ou .codex/agents/ (projeto), com os campos obrigatórios name, description e developer_instructions, e ele já traz o default, o worker e o explorer
No Claude Code é markdown com frontmatter YAML em ~/.claude/agents/ ou .claude/agents/, com campos como description, tools, model e permissionMode
---
description: Revisa o diff atual em busca de bug de correção
tools: Read, Grep, Bash
model: sonnet
---
Aqui vai a instrução do subagente, o que era o developer_instructions do lado do Codex
O erro comum deste passo: converter só a casca
O texto do developer_instructions é o miolo do subagente, ele precisa virar o corpo do markdown, não uma linha perdida no frontmatter
7. Hooks: revise evento por evento
O Codex carrega hooks de um hooks.json ou da seção hooks inline no config.toml, com eventos como PreToolUse, PermissionRequest, PostToolUse, PreCompact, PostCompact, SessionStart, SessionEnd, SubagentStart, SubagentStop, UserPromptSubmit e Stop
O Claude Code configura hooks dentro dos arquivos de settings, nos escopos gerenciado, usuário (~/.claude/), projeto (.claude/) e local (.claude/settings.local.json), e recarrega os settings ao detectar mudança, sem reiniciar a sessão
O erro comum deste passo: olhar os nomes de evento parecidos e concluir que é só copiar e colar
Nenhuma das duas documentações confirma compatibilidade entre os formatos
Trata como reescrita e testa hook por hook, com calma
O que a prática mostra: os hábitos de prompt que não viajam junto
Agora a parte que nenhum /import resolve
No vídeo abaixo eu gravei um curso gratuito de Codex e, montando aquilo, ficou escancarado o quanto a nossa rotina fica colada na ferramenta
O primeiro sinal foi o arquivo de contexto: no Codex, o AGENTS.md cumpre exatamente o papel do arquivo de instruções que eu já uso no Claude Code, e é aquele arquivo que segura a régua do projeto inteiro
O segundo foi as skills
Eu já tinha skills instaladas numa pasta genérica, sobra do uso em outras ferramentas de IA, e o Codex simplesmente passou a usar essas skills sozinho no primeiro projeto, sem eu pedir
Parece massa, mas se liga: excesso de skill atrapalha
A ferramenta aciona skill quando ninguém pediu, e isso aumenta o consumo
É o mesmo problema que eu já tinha comentado nos vídeos de Claude Code e Antigravity, e ele reaparece exatamente igual do outro lado
Outro hábito que não viaja: o SEU jeito de deixar o agente solto
Eu não gosto de rodar vários agentes em paralelo, pelo risco de conflito de edição nos mesmos arquivos, e só libero quando as tarefas são bem diferentes entre si
Esse tipo de decisão não mora em arquivo nenhum, mora na sua cabeça, e é ela que você tem que reescrever em forma de permissão e de modo quando muda de ferramenta
O mesmo vale pra escolha de modelo (eu preferi o de uso geral ao otimizado pra programação, porque nem toda tarefa é código: tem regra de negócio, tem pesquisa pro projeto) e pra forma de pedir
O Codex lê e entende o codebase existente, edita arquivos, roda comando com permissão e aceita screenshot como input, print de um layout de referência ou de um erro na tela
No teste prático eu criei uma landing page do zero em HTML, CSS e JS a partir de um único prompt e abri o resultado no navegador: ficou bonito, mas o logo eu que teria que fornecer
E teve o que me incomodou: o app não mostra os arquivos sendo construídos em tempo real como outras ferramentas, e pra ver o código eu precisei abrir a pasta ou o painel de git
Besteira? É, mas é o tipo de detalhe que muda o seu ritmo de conferência, e conferência é justamente o que segura o barco em tarefa sensível, tipo quando você vai delegar a escrita de testes pro agente
Migrar de vez, rodar os dois em paralelo ou migrar só um projeto?
Não existe uma resposta só, existem três cenários bem diferentes
Troca definitiva:
Aqui você roda o /import, revisa o CLAUDE.md gerado, traduz permissões e hooks na mão e só DEPOIS apaga o legado
A ordem importa: apagar ~/.codex/config.toml antes de validar MCP e permissão é pedir pra ficar sem referência quando algo não funcionar
E se a dúvida ainda é se vale a pena virar a chave, dá uma olhada no que o Claude Code entrega na prática antes de queimar as pontes
Os dois agentes no mesmo repositório:
Esse é o cenário mais comum de quem trabalha em time
A regra de ouro é fonte única de instrução: um CLAUDE.md que importa o AGENTS.md, ou o symlink, pra ninguém editar um arquivo e esquecer o outro
Skill, aí, é duplicação consciente: os diretórios são diferentes e leitura cruzada não é confirmada em documentação nenhuma, então mantém a versão do repo nos dois lugares e trata isso como manutenção, não como acidente
Migração de um projeto só:
Esse é o teste barato, e é o que eu faria primeiro
Mexe SÓ no escopo de projeto (.claude/settings.json, .claude/skills/, .claude/agents/, .mcp.json) e deixa o escopo de usuário intacto
Se der ruim, o estrago fica dentro de um repositório
Conclusão
O custo real de migrar do Codex para o Claude Code (ou de voltar) não está na instalação, que é npm install -g e login
Está em traduzir instrução, permissão, MCP, skill, comando, subagente e hook de um endereço pro outro, sabendo que os formatos mudam e que compatibilidade parecida não é compatibilidade confirmada
O próximo passo concreto é este: pega um repositório pequeno, roda o inventário do checklist, aplica os 7 passos ali, valida permissão e MCP na prática e só então encosta no projeto principal
Faz o teste com calma que a segunda migração leva um terço do tempo da primeira 😀
até o próximo post!
Perguntas frequentes
O Claude Code lê o AGENTS.md do projeto sem nenhuma configuração extra?
Não, essa é a pegadinha mais comum de quem está migrando do Codex para o Claude Code. Por padrão o Claude Code não carrega o AGENTS.md, o /init só passa a lê-lo (junto com .devin/rules/, .windsurf/rules/ ou .windsurfrules e .clinerules) quando a variável CLAUDE_CODE_NEW_INIT=1 está habilitada. Sem isso, suas instruções ficam simplesmente ignoradas.
O comando /import substitui todo o checklist de migração?
Ele resolve boa parte, mas não é mágica: o /import anexa uma cópia do AGENTS.md ao CLAUDE.md correspondente e leva junto servidores MCP, comandos, subagentes e skills. Exige a versão v2.1.213 ou posterior do Claude Code, então vale conferir isso antes de rodar.
As skills que eu escrevi para o Codex funcionam direto no Claude Code?
O formato de arquivo é parecido (SKILL.md segue o padrão aberto Agent Skills), mas o endereço muda. O Codex procura em .agents/skills no repo e em $HOME/.agents/skills, enquanto o Claude Code olha para .claude/skills/ do projeto e ~/.claude/skills/ pessoal, e nenhuma das duas documentações confirma leitura cruzada das pastas.
Dá para usar o mesmo arquivo de instruções nas duas ferramentas em vez de duplicar?
Dá, com symlink: ln -s AGENTS.md CLAUDE.md funciona quando não há nada específico do Claude no meio das instruções. Para quem quer manter os dois arquivos separados, a documentação de memória do Claude Code recomenda um CLAUDE.md que importe o AGENTS.md.
Os subagentes e hooks configurados no Codex migram sozinhos para o Claude Code?
Fora do /import, não. Subagentes do Codex são arquivos .toml em ~/.codex/agents/ e .codex/agents/, enquanto no Claude Code são .md com frontmatter YAML em ~/.claude/agents/ e .claude/agents/. Hooks seguem a mesma lógica: no Codex moram no hooks.json ou na seção hooks do config.toml, no Claude Code ficam dentro dos arquivos de settings.json, então o formato precisa ser recriado.
As permissões do Codex (approval_policy e sandbox_mode) têm equivalente direto no Claude Code?
Não é uma tradução 1 para 1. No Codex, approval_policy decide quando ele para pra perguntar e sandbox_mode decide o que ele pode tecnicamente fazer no disco e na rede. No Claude Code isso vira regras allow, deny e ask no settings.json: a varredura passa por deny, depois ask, depois allow, e a primeira regra que casar decide, independente de ser mais específica. Some a isso os modos default, acceptEdits, bypassPermissions, plan, dontAsk e auto.
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares
As diferenças de var, let e const
Como fazer redirecionamento com PHP
Neste artigo você vai aprender a como fazer redirecionamento com PHP, utilizaremos abordagens fáceis de entender e de aplicar Fala programador(a), beleza? Bora aprender mais […]
Checklist de segurança n8n VPS pública: guia essencial para proteger sua instalação
Checklist de segurança n8n VPS pública: guia essencial para proteger sua instalação A popularidade da automação de processos com o n8n está em alta, principalmente […]
