BlogTooling
Tooling15 min de lectura· 3 jul 2026

Migra de Claude Code a Codex (2026): 12 configs, 1 callejón sin salida

Carolina Fogliato

Publicado 3 jul 2026 · actualizado 3 jul 2026

El /import de Codex 0.142 mueve automáticamente la mayor parte de tu config de Claude Code. Aquí están las 12 superficies mapeadas: qué transfiere, qué se rompe, el único callejón sin salida y el arreglo que mantiene tus modelos Claude corriendo dentro de Codex.

Migrar de Claude Code a Codex es sobre todo un trabajo de renombrar y reformatear, y Codex ahora trae un importador de un comando que hace la mayor parte por ti. El problema se esconde en lo que deja atrás — y uno de esos elementos no es un archivo de config en absoluto.

Las dos herramientas resuelven el mismo problema con dialectos de archivo distintos. Claude Code se apoya en JSON y Markdown; Codex se apoya en un único archivo TOML más AGENTS.md. La migración es en gran parte una traducción entre esos dos dialectos, con un desajuste estructural que la mayoría de guías omite.

Este recorrido mapea cada superficie de config, nombra la única que genuinamente se rompe y te da el arreglo vendor-neutral para el único callejón sin salida: mantener los modelos de Anthropic por los que migraste.

Versiones con las que se probó esta guía: Codex CLI 0.142.5 (1 de julio de 2026) y Claude Code 2.1.178. Si estás en un Codex más antiguo, actualiza primero — el comando /import no existía antes de 0.140.0.


Veredicto en 30 segundos

Veredicto de migración en 30 segundos

Puedes mover casi toda tu configuración de Claude Code a Codex en unos 20 minutos. Aquí está la decisión antes de seguir scrolleando:

PreguntaRespuesta
¿Puedo mover la mayor parte de mi config?Sí. 9 de 12 superficies se transfieren o se reformatean limpiamente.
¿Camino más rápido?Ejecuta codex → /import (Codex 0.140+), luego arregla a mano 3 elementos.
¿Qué se transfiere automáticamente?Archivos de memoria, servidores MCP, skills, slash commands, endpoints custom.
¿Qué necesita trabajo manual?El modelo de permisos, el formato de hooks y los wrappers de subagentes.
¿El único callejón sin salida?Los modelos Claude de Anthropic. Codex vanilla es solo OpenAI.
¿El arreglo del callejón?Registra un gateway como model_provider y sigue corriendo Claude dentro de Codex.

Mapa de superficies

Qué puedes mover hoy (y qué no)

Casi todo se mueve, porque las dos herramientas resuelven el mismo problema con formatos de archivo distintos. La migración es en gran parte una traducción entre dos dialectos.

Lo que puedes mover:

  • Instrucciones de repo y personales (contenido de CLAUDE.md)
  • Servidores MCP, comando y args verbatim
  • Skills, que ya siguen la convención compartida de Agent Skills
  • Slash commands y prompts reutilizables
  • Endpoints y API keys custom

Lo que no puedes mover sin un workaround:

  • La allowlist de permisos por comando de Claude Code, que no tiene un análogo directo en Codex
  • El evento de hook ConfigChange (Codex tiene PreCompact/PostCompact, pero nada que dispare ante un cambio de archivo de config)
  • Los output styles, que Codex no modela
  • Los modelos de Anthropic en sí — el verdadero bloqueador y la razón de la última sección

Aquí está el mapa completo de superficies. Guarda esta tabla; es toda la migración en una pantalla.

#Claude CodeEquivalente en CodexVeredicto
1Memoria CLAUDE.mdAGENTS.md (o nombre fallback)Transfiere
2.mcp.json (JSON)[mcp_servers.*] en config.tomlTransfiere, reformatea
3.claude/skills/Codex skills ([[skills.config]])Transfiere
4.claude/commands/Slash commands / prompts de CodexTransfiere, reescribe
5.claude/agents/ (Markdown)archivos .codex/agents/*.tomlReformatea
6settings.json (JSON)config.toml + profiles (TOML)Reformatea
7permissions.allow/ask/denyapproval_policy + sandbox_modeSe rompe
8hooks (PreToolUse, Stop, …)[[hooks.*]] en config.tomlReformatea
9hook ConfigChangeningunoSin equivalente
10endpoint ANTHROPIC_BASE_URL[model_providers.*]Transfiere
11outputStyleningunoSin equivalente
12Modelos Claude de AnthropicSolo modelos OpenAICallejón sin salida (ver arreglo)

Las filas 9 y 11 son cosméticas. No vas a extrañar outputStyle, y ConfigChange solo importa si construiste automatización que reacciona a un archivo de config cambiando a mitad de sesión. La fila 12 es la que detiene a la gente, y tiene un arreglo limpio que la mayoría de guías de migración omite.


Marco de decisión

Cuándo migrar (y cuándo quedarte)

Migra cuando tu trabajo tenga forma de tarea y quieras sandboxing más estricto; quédate en Claude Code cuando tu trabajo tenga forma de conversación y esté guiado por hooks. Las dos herramientas cargan modelos mentales distintos, y las diferencias de config siguen de ahí.

Cuándo migrar

  • Corres agentes de forma no interactiva en CI y quieres un sandbox de solo lectura o de escritura en el workspace como postura por defecto.
  • Tu equipo quiere un único config.toml commiteado con profiles por nivel de riesgo, en lugar de un settings.json más una pila de overrides en settings.local.json.
  • Quieres los modelos actuales de Codex de OpenAI (gpt-5.5) como driver por defecto. El viejo gpt-5.3-codex quedó deprecado como modelo seleccionable el 2026-05-26, así que elige gpt-5.5 o gpt-5.4.

Cuándo NO migrar

  • Dependes de hooks ConfigChange u output styles. Esos no tienen lugar en Codex, así que presupuesto rework o quédate.
  • Todo tu flujo es una sesión larga de pairing interactivo. El modelo conversacional de Claude Code encaja mejor que el bucle de tarea-y-revisión de Codex.
  • Tienes una allowlist de permisos larga y ajustada a mano. Los tiers de sandbox gruesos de Codex van a sentirse contundentes, y portar la intención requiere pensamiento real (ver Paso 5).

La regla de parada: Si tu único objetivo es probar los modelos de Codex contra tu repo existente, no necesitas migrar la config en absoluto. Apunta Codex a tu repo, corre /import y para. El resto de esta guía es para gente que hace de Codex su herramienta principal.


Prerrequisitos

Requisitos del sistema

Antes de tocar la config, confirma los cuatro prerrequisitos de abajo. Un Codex desactualizado es la razón más común de que /import y los bloques [features] no hagan nada en silencio.

  • Codex CLI 0.140.0 o más nuevo. Verifícalo con codex --version. El comando /import llegó en 0.140.0; esta guía se probó en 0.142.5.
  • Tu proyecto de Claude Code existente, con su directorio .claude/ y CLAUDE.md intactos. No lo borres hasta que la migración esté verificada.
  • Una API key del proveedor que vaya a manejar Codex. OpenAI por defecto, o una key de gateway si vas a mantener los modelos Claude.
  • Acceso de escritura a ~/.codex/. Codex lee ~/.codex/config.toml en cada invocación y, en proyectos confiables, .codex/config.toml en la raíz del repo.

El camino de migración se ve así de extremo a extremo:

  1. 1Auditar CLAUDE.md + settings.json
  2. 2Correr codex /import
  3. 3Revisar el reporte de conflictos
  4. 4Arreglar a mano permisos + hooks
  5. 5Agregar un model_provider para los modelos Claude
  6. 6Probar con un profile de solo lectura

Paso a paso

Mapeando cada superficie de config

Corre primero el importador automatizado, luego recorre las cinco superficies que no puede manejar del todo. No te saltes los pases manuales — el importador es honesto sobre lo que deja atrás, pero sí deja cosas atrás.

Paso 1: Corre el importador

Inicia Codex en tu proyecto e importa. Codex 0.140 agregó /import para traer selectivamente setup, configuración de proyecto y chats recientes desde Claude Code. Elige las superficies que quieras.

cd mi-proyecto
codex
# luego, dentro de la sesión:
/import

Resultado esperado: un ~/.codex/config.toml poblado, un borrador de AGENTS.md y un reporte corto listando lo que se saltó o marcó como conflicto.

Paso 2: Instrucciones, de CLAUDE.md a AGENTS.md

Codex lee AGENTS.md, no CLAUDE.md. Si el importador no creó uno todavía, renombra tu archivo o dile a Codex que siga leyendo el nombre viejo.

# ~/.codex/config.toml
project_doc_fallback_filenames = ["AGENTS.md", "CLAUDE.md"]
project_doc_max_bytes = 32768

Resultado esperado: tus instrucciones a nivel de repo cargan en el contexto de Codex en la próxima corrida. El contenido pasa sin cambios; solo el nombre de archivo y la ruta de carga difieren — que es justo por qué la convención AGENTS.md existe entre herramientas.

Paso 3: Servidores MCP, de JSON a TOML

Los procesos MCP son idénticos. Solo cambia la forma de la declaración. Una entrada de .mcp.json de Claude Code así:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"]
    }
  }
}

se vuelve una tabla TOML en ~/.codex/config.toml:

[mcp_servers.github]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-github"]

Resultado esperado: codex lista las herramientas MCP de github al arrancar. Si un servidor necesita variables de entorno, agrégalas inline: env = { "GITHUB_TOKEN" = "..." }. Ambos transportes se mantienen: Codex acepta los mismos servidores STDIO basados en comando que corrías en Claude Code, y también toma servidores HTTP streaming en la misma tabla, así que un endpoint MCP alojado remotamente se mueve sin levantar un proceso local.

Paso 4: Subagentes a .codex/agents/

Claude Code guarda los subagentes como Markdown en .claude/agents/. Codex guarda cada subagente en su propio archivo TOML, uno por agente, bajo ~/.codex/agents/ (personal) o .codex/agents/ (scoped al proyecto). Los subagentes vienen habilitados por defecto, así que no hay feature flag que voltear.

# .codex/agents/reviewer.toml
name = "reviewer"
description = "Reviews diffs for correctness and style"
developer_instructions = """
Review the diff for correctness and style. Cite file and line for each issue.
"""

Resultado esperado: el rol reviewer queda disponible a través del flujo de subagentes de Codex, que Codex invoca solo cuando se lo pides explícitamente. El cuerpo del prompt de tu viejo archivo Markdown pasa a developer_instructions; lo que cambia es el wrapper. Si tenías muchos subagentes, este es el pase manual más tedioso, pero es mecánico.

Paso 5: Permisos a Sandbox y Approval

Esta es la superficie que genuinamente se rompe, porque las dos herramientas modelan la seguridad distinto. Claude Code usa una allowlist por comando con reglas glob. Codex usa dos diales gruesos: un sandbox de filesystem y una approval policy. No hay un mapeo uno a uno limpio, así que portas intención, no reglas.

Claude CodeIntención en CodexSetting de Codex
allow: ["Bash(npm run test *)"]correr comandos en el repo sin preguntarsandbox_mode = "workspace-write", approval_policy = "on-request"
ask: ["Bash(python *)"]preguntar antes de comandos riesgososapproval_policy = "on-request"
deny: ["Read(./.env)"]bloquear acceso fuera del workspacesandbox_mode = "workspace-write" (bloquea escrituras fuera de cwd)
Plan modemirar, no tocarsandbox_mode = "read-only"
--dangerously-skip-permissionsautonomía totalapproval_policy = "never", sandbox_mode = "danger-full-access"

# ~/.codex/config.toml, un default sano

approval_policy = "on-request"
sandbox_mode = "workspace-write"

Resultado esperado: Codex corre libre dentro del repo y pregunta antes de tocar algo fuera de él o llegar a la red. El control granular por comando que tenías en Claude Code no sobrevive; si dependías de una allowlist larga y precisa, acepta que el modelo de Codex es más contundente por diseño.

Paso 6: Hooks

Codex ya tiene hooks, habilitados por defecto, y cubren la mayoría de los eventos de Claude Code. Los declaras como bloques array-of-tables en config.toml; para apagar todo el sistema setearías [features] hooks = false.

# ~/.codex/config.toml
[[hooks.PreToolUse]]
matcher = "^Bash$"          # misma idea que el matcher PreToolUse de Claude Code

  [[hooks.PreToolUse.hooks]]
  type = "command"
  command = "$(git rev-parse --show-toplevel)/.codex/hooks/pre_tool_use.sh"

Resultado esperado: PreToolUse, PostToolUse, SessionStart, Stop e incluso PreCompact/PostCompact disparan como lo hacían en Claude Code, una vez que traduces el handler de JSON a TOML. La única brecha es ConfigChange, que no tiene evento en Codex — cualquier automatización que hayas construido para reaccionar a un archivo de config cambiando a mitad de sesión es la única parte de tu setup de hooks que no viene.


El callejón sin salida

Lo que no tiene equivalente: modelos Claude (y el arreglo)

El único paso de migración sin respuesta nativa es mantener tus modelos Claude, porque Codex vanilla autentica contra OpenAI y maneja modelos de OpenAI como gpt-5.5 y gpt-5.4. No hay un switch integrado que seleccione Claude Opus o Sonnet. Si migraste a Codex por su sandbox y flujo pero aún quieres Opus escribiendo tu código, necesitas un puente.

El puente es un model_provider custom. Codex habla con cualquier gateway compatible con OpenAI, así que registras uno y apuntas un profile a un modelo Claude. Agrega el provider a ~/.codex/config.toml:

# ~/.codex/config.toml — registra un gateway compatible con OpenAI

[model_providers.gateway]
name = "tu gateway"
base_url = "https://tu-gateway.ejemplo/v1"
env_key = "GATEWAY_API_KEY"
wire_api = "responses"
requires_openai_auth = false

Dos detalles hacen tropezar a la gente. Ambos son sobre cómo Codex negocia el protocolo de comunicación, no sobre el gateway en sí.

Setea wire_api = "responses".

Codex eliminó el soporte para el viejo protocolo chat en febrero de 2026, así que un provider dejado en wire_api = "chat" ahora falla al arrancar. Un endpoint compatible con Responses bajo la misma base URL /v1 es lo que realmente conecta.

Setea requires_openai_auth = false.

Esto detiene a Codex de esperar un prefijo de key sk-, así que el formato propio de key de tu gateway se acepta sin fricción.

Luego crea un archivo de profile en ~/.codex/claude.config.toml:

model = "anthropic/claude-opus-4.8"
model_provider = "gateway"

Córralo con codex --profile claude. Ahora el bucle de tarea y el sandbox de Codex manejan el anthropic/claude-opus-4.8 de Anthropic, y cambiar model = "openai/gpt-5.5" en un segundo profile te deja hacer A/B entre los dos sin cambiar la auth. Esta es la única superficie de migración donde un gateway no es una conveniencia sino la única forma de mantener lo que viniste a buscar.

El pricing de cualquier modelo fluye por tu gateway elegido a las tarifas publicadas de ese proveedor; FACTA es vendor-neutral y no recomienda ningún gateway en particular.


Troubleshooting

Errores comunes durante la migración (y arreglos)

Seis fallos cubren casi toda migración atascada. El patrón es el mismo cada vez: un supuesto de Claude Code que Codex no comparte.

SíntomaCausaArreglo
Codex ignora tu CLAUDE.mdCodex lee AGENTS.mdRenómbralo, o setea project_doc_fallback_filenames
Provider custom devuelve 401Codex espera una key sk-Agrega requires_openai_auth = false
Codex falla al arrancar: chat wire API deprecatedwire_api = "chat" se removió en feb 2026Setea wire_api = "responses"
Los subagentes no hacen nadaNo hay archivo de agente, o nunca pediste unoAgrega un archivo .codex/agents/NAME.toml; Codex lanza subagentes solo bajo petición explícita
Los hooks nunca disparanNombre de evento o regex de matcher equivocadoArregla el nombre de evento / matcher; los hooks vienen on por defecto, así que no hace falta flag
Un comando que tu allowlist permitía ahora se detieneSandbox más estricto que la regla viejaAmplía sandbox_mode o usa approval_policy = "on-request"

Si un .codex/config.toml de proyecto se ignora por completo, verifica que el proyecto esté marcado como confiable. Codex solo carga config scoped al proyecto en directorios confiables, y no deja que un archivo de proyecto sobreescriba provider, auth o selección de profile.


Migración en equipo

Migración para equipo / multi-desarrollador

Para un equipo, la migración es más limpia que el caso individual, porque Codex colapsa dos archivos de Claude Code en una config commiteada. En Claude Code mandabas un .claude/settings.json para el equipo y dejabas a cada dev mantener un .claude/settings.local.json gitignored. En Codex, commiteas un único .codex/config.toml en la raíz del repo y dejas que cada dev elija un profile.

InquietudClaude CodeCodex
Config compartida del equipo.claude/settings.json (commiteado).codex/config.toml (commiteado, repos confiables)
Overrides personales.claude/settings.local.jsonun archivo de profile personal en ~/.codex/
Instrucciones compartidasCLAUDE.mdAGENTS.md
Postura de riesgo por corridaallowlist de permisos--profile strict vs --profile fast

El beneficio de equipo es el mismo truco de gateway de la sección del callejón, aplicado una vez. Registra un model_provider en la config commiteada, entrega a cada dev el mismo esquema de key de gateway vía tu secret manager, y todo el equipo rutea por un endpoint con una sola vista de billing — ya corran openai/gpt-5.5 o anthropic/claude-opus-4.8. Ese ruteo de un solo endpoint es la razón concreta por la que un gateway compartido le gana a keys de provider por desarrollador.


Avanzado

Profiles para CI, local y review

Los profiles son donde Codex devuelve el esfuerzo de migración, porque reemplazan el hábito de Claude Code de hacer malabares con settings.json contra settings.local.json. Un profile es un archivo separado bajo ~/.codex/, y lo eliges por corrida con --profile. Nada cambia globalmente hasta que tú decidas.

Crea tres archivos para tres posturas de riesgo. El config.toml base guarda las piezas compartidas — providers, servidores MCP y hooks; cada profile sobreescribe solo las dos o tres keys que difieren. Esa disciplina de un solo archivo es lo que hace al setup de Codex más fácil de razonar que la pila de scopes de Claude Code, una vez que la migración queda atrás.

# ~/.codex/ci.config.toml

model = "gpt-5.5"
approval_policy = "never"
sandbox_mode = "read-only"

Corre review automatizado en CI con codex --profile ci, y puede leer todo pero no cambiar nada. Mantén un local.config.toml en workspace-write para el trabajo del día a día, y el claude.config.toml de la sección del callejón que cambia el driver a anthropic/claude-opus-4.8 cuando quieras el modelo de Anthropic en un problema difícil.


Por qué importa

Lo que esto realmente enseña

La mayoría de guías de migración venden el rename. La lección real es que tu config de tooling no es la herramienta — es un contrato, y el contrato de Codex es más contundente y más componible que el de Claude Code.

Cuando una superficie "se rompe", suele significar que la herramienta nueva eligió una abstracción más gruesa a propósito. El sandbox de dos diales de Codex reemplaza una allowlist por comando porque los diales gruesos sobreviven a un equipo de veinte devs tocando el mismo repo; una allowlist ajustada a mano no. Eso es un trade-off, no un bug.

El callejón sin salida es la parte honesta. Ningún vendor va a hacer trivial correr el modelo de un competidor dentro de su CLI. Que el arreglo sea un único bloque model_provider — y no un fork ni un script wrapper — te dice que Codex trata a los providers como enchufables. La migración que importa es la que mantiene tus opciones abiertas.

Migrar tu tooling a Codex no debería significar renunciar a los modelos por los que migraste, y con un bloque de provider no lo hace.

Porta intención, no reglas

Cuando una config no tiene equivalente 1:1, la regla nunca fue el punto — la intención detrás sí lo era. Un tier de sandbox que captura la intención es una mejor migración que una traducción literal que se la pierde.

Mantén el modelo enchufable

La única superficie de config que vale la pena clavar es el model_provider. Clávalo una vez y puedes cambiar el cerebro sin reescribir el cuerpo — la diferencia entre una migración y un lock-in.

Verifica antes de borrar

Mantén el viejo directorio .claude/ hasta que el setup nuevo esté probado en una tarea real. Config que "transfiere" y config que "funciona bajo carga" no son la misma cosa.

La migración que importa no es el rename — es la que mantiene tus modelos enchufables, tu sandbox honesto y tus opciones abiertas.


FAQ

Preguntas frecuentes

¿Puedo usar modelos Claude en Codex CLI?+

No con Codex vanilla, que es solo OpenAI. Registra un gateway compatible con OpenAI como model_provider y apunta un profile a anthropic/claude-opus-4.8. Esa es la única superficie sin equivalente nativo.

¿Codex CLI lee CLAUDE.md?+

No por defecto. Lee AGENTS.md. Agrega project_doc_fallback_filenames = ["AGENTS.md", "CLAUDE.md"] para mantener el archivo viejo, o renómbralo.

¿Cómo importo mis settings de Claude Code a Codex?+

Corre codex, luego /import. Codex 0.140 agregó un importador selectivo para setup, config de proyecto y chats recientes. Hace la mayor parte del trabajo y reporta el resto.

¿Codex CLI tiene hooks como Claude Code?+

Sí, y vienen on por defecto. Declara bloques [[hooks.Event]] para eventos que incluyen PreToolUse, PostToolUse, SessionStart, Stop, PreCompact y PostCompact. El único hook de Claude Code sin equivalente es ConfigChange.

¿Claude Code y Codex pueden compartir los mismos servidores MCP?+

Sí. Los procesos MCP son idénticos. Solo se mueve la declaración, de JSON en .mcp.json a TOML bajo [mcp_servers.NAME].

¿Tengo que reescribir mis subagentes de Claude Code para Codex?+

Re-declaras, no reescribes. El cuerpo del prompt pasa; el wrapper se mueve de Markdown en .claude/agents/ a un archivo TOML standalone en .codex/agents/. Los subagentes vienen on por defecto, así que no hay flag que habilitar.

¿El archivo AGENTS.md es lo mismo que CLAUDE.md?+

Mismo trabajo, distinto nombre. AGENTS.md es una convención entre herramientas; CLAUDE.md es el archivo de memoria propio de Claude Code. El contenido transfiere directo.


Referencias

Referencias

  • OpenAI Codex Configuration Reference
  • OpenAI Codex Changelog
  • OpenAI Codex Hooks Reference
  • Claude Code Settings Reference

Sobre FACTA

FACTA es una consultora de IA. Diseñamos sistemas de agentes, construimos los flujos a su alrededor y ayudamos a los equipos a adoptar IA sin apostar todo a un solo vendor.

Escribimos estas guías porque la parte más difícil del tooling de IA rara vez es el modelo — es la config, el sandboxing y los contratos que firmas con tus herramientas. Una migración es buen momento para mirar esos contratos en vez de solo renombrarlos.

Si estás evaluando una migración Claude Code → Codex, o quieres un stack de agentes vendor-neutral que mantenga tus opciones abiertas, podemos ayudar.

Vendor-neutral por diseño. Enchufable por hábito.


¿Necesitas ayuda para migrar tu tooling de agentes?

Migrar de Claude Code a Codex es un problema de config disfrazado de rename. FACTA construye stacks de automatización de IA vendor-neutral y enchufables — manteniendo tus modelos, sandboxes y flujos portables. Podemos correr la migración contigo y dejar a tu equipo con una config que sobreviva al próximo cambio de herramienta.

Explorar AI Automation
Habla con FACTA →

Migra sin lock-in. Contáctanos.

Mantente afilado

Ingeniería de IA práctica, sin hype de vendor.

Un email cuando publicamos. Sin spam, nunca.