Миграция с Claude Code на Codex (2026): 12 конфигов, 1 тупик

Codex 0.142 /import переносит почти всю конфигурацию Claude Code. Разбор всех 12 областей: что переносится, что ломается, единственный тупик и его обход.

Миграция с Claude Code на Codex (2026): 12 конфигов, 1 тупик

Миграция с Claude Code на Codex — это в основном работа по переименованию и переформатированию, а в Codex теперь есть импортёр в одну команду, который делает бóльшую часть за вас. Проблема кроется в том, что он оставляет за бортом, и один из этих пунктов вообще не является файлом конфигурации.

Вердикт по миграции за 30 секунд

Почти всю свою настройку Claude Code можно перенести в Codex примерно за 20 минут. Вот решение ещё до того, как вы начнёте прокручивать:

ВопросОтвет
Можно ли перенести бóльшую часть конфига?Да. 9 из 12 областей переносятся или чисто переформатируются.
Самый быстрый путь?codex/import (Codex 0.140+), затем вручную поправить 3 пункта.
Что переносится автоматически?Файлы памяти, MCP-серверы, skills, slash-команды, кастомные эндпоинты.
Что требует ручной работы?Модель разрешений, формат hooks, обёртки subagent.
Единственный тупик?Модели Anthropic Claude. Ванильный Codex работает только с OpenAI.
Обход тупика?Добавить шлюз как model_provider и продолжать запускать Claude внутри Codex.

Версии, на которых тестировалось это руководство: Codex CLI 0.142.5 (1 июля 2026) и Claude Code 2.1.178. Если у вас Codex постарше — сначала обновитесь, потому что команды /import до 0.140.0 не существовало.

Что можно перенести уже сегодня (и что нельзя)

Переносится почти всё, потому что оба инструмента решают одну и ту же задачу разными форматами файлов. Claude Code опирается на JSON (settings.json, .mcp.json) и Markdown (CLAUDE.md, .claude/agents/*.md). Codex опирается на один TOML-файл (~/.codex/config.toml) плюс AGENTS.md. Миграция — это по большей части перевод между этими двумя диалектами.

Что можно перенести:

  • Инструкции репозитория и личные (содержимое CLAUDE.md)
  • MCP-серверы, дословно команду и аргументы
  • Skills, которые уже следуют общему соглашению Agent Skills
  • Slash-команды и переиспользуемые промпты
  • Кастомные API-эндпоинты и ключи

Что нельзя перенести без обходного пути:

  • Список разрешений Claude Code по каждой команде, у которого нет прямого аналога в Codex
  • Событие hook ConfigChange (у Codex есть PreCompact/PostCompact, но нет ничего, что срабатывало бы на изменение файла конфигурации)
  • Стили вывода, которые Codex не моделирует
  • Сами модели Anthropic — это и есть настоящий блокер и причина последнего раздела

Вот полная карта областей. Сохраните эту таблицу; это вся миграция на одном экране.

#Claude CodeАналог в CodexВердикт
1CLAUDE.md памятьAGENTS.md (или fallback-имя файла)Переносится
2.mcp.json (JSON)[mcp_servers.*] в config.tomlПереносится, переформатировать
3.claude/skills/Codex skills ([[skills.config]])Переносится
4.claude/commands/Codex slash-команды / промптыПереносится, переписать
5.claude/agents/ (Markdown)файлы .codex/agents/*.tomlПереформатируется
6settings.json (JSON)config.toml + profiles (TOML)Переформатируется
7permissions.allow/ask/denyapproval_policy + sandbox_modeЛомается
8hooks (PreToolUse, Stop, …)[[hooks.*]] в config.tomlПереформатируется
9hook ConfigChangeнетНет аналога
10эндпоинт ANTHROPIC_BASE_URL[model_providers.*]Переносится
11outputStyleнетНет аналога
12Модели Anthropic Claudeтолько модели OpenAIТупик (см. обход)

Строки 9 и 11 косметические. По outputStyle вы скучать не будете, а ConfigChange важен только если вы построили автоматизацию, реагирующую на изменение файла конфигурации в середине сессии. Строка 12 — та, что останавливает людей, и у неё есть чистый обход, который большинство руководств по миграции пропускают.

Рамка для решения: когда мигрировать (и когда остаться)

Мигрируйте, когда ваша работа имеет форму задач и вы хотите более жёсткого sandboxing; оставайтесь на Claude Code, когда ваша работа имеет форму разговора и завязана на hooks. Два инструмента несут разные ментальные модели, и различия в конфигурации следуют из этого.

Когда мигрировать

  • Вы запускаете агентов неинтерактивно в CI и хотите, чтобы read-only или workspace-write sandbox был позицией по умолчанию.
  • Ваша команда хочет один закоммиченный config.toml с profiles по уровням риска вместо settings.json и кучи переопределений settings.local.json.
  • Вы хотите видеть текущие модели Codex от OpenAI (gpt-5.5) как драйвер по умолчанию. Более старая gpt-5.3-codex была выведена из списка выбираемых пользователем моделей Codex 26.05.2026, так что выбирайте gpt-5.5 или gpt-5.4.

Когда НЕ мигрировать

  • Вы зависите от hooks ConfigChange или стилей вывода. Им в Codex места нет, так что закладывайте переработку или оставайтесь на месте.
  • Весь ваш рабочий процесс — это долгая интерактивная сессия парного программирования. Разговорная модель Claude Code подходит для этого лучше, чем цикл «задача-и-ревью» у Codex.
  • У вас большой, вручную настроенный список разрешений. Грубые уровни sandbox у Codex покажутся топорными, а перенос смысла требует реального обдумывания (см. Шаг 5).

Правило остановки

Если ваша единственная цель — попробовать модели Codex на существующем репозитории, вам вообще не нужно мигрировать конфигурацию. Направьте Codex на свой репозиторий, запустите /import и остановитесь. Остальная часть этого руководства — для тех, кто делает Codex своим основным инструментом.

Системные требования

Прежде чем трогать конфигурацию, подтвердите четыре предпосылки ниже. Устаревший Codex — самая частая причина, по которой /import и блоки [features] молча ничего не делают.

  • Codex CLI 0.140.0 или новее. Проверьте через codex --version. Команда /import появилась в 0.140.0; это руководство тестировалось на 0.142.5.
  • Ваш существующий проект Claude Code с нетронутыми каталогом .claude/ и файлом CLAUDE.md. Не удаляйте его, пока миграция не будет проверена.
  • API-ключ для того провайдера, который будет драйвером Codex. По умолчанию OpenAI или ключ шлюза, если вы сохраняете модели Claude.
  • Права на запись в ~/.codex/. Codex читает ~/.codex/config.toml при каждом вызове, а в доверенных проектах — .codex/config.toml в корне репозитория.

Путь миграции от начала до конца выглядит так:

flowchart LR
    A[Audit CLAUDE.md + settings.json] --> B[Run codex /import]
    B --> C[Review conflict report]
    C --> D[Hand-fix permissions + hooks]
    D --> E[Add model_provider for Claude models]
    E --> F[Test with a read-only profile]

Пошагово: сопоставление каждой области конфигурации

Сначала запустите автоматический импортёр, затем пройдитесь по пяти областям, которые он не может полностью обработать. Не пропускайте ручные проходы; импортёр честно сообщает о том, что оставляет за бортом, но за бортом он всё же оставляет.

Шаг 1: Запустите импортёр

Запустите Codex в своём проекте и импортируйте.

cd my-project
codex
# then, inside the session:
/import

В Codex 0.140 добавили /import для выборочного подтягивания setup, конфигурации проекта и недавних чатов из Claude Code — согласно журналу изменений OpenAI Codex. Выберите нужные вам области. Ожидаемый результат: заполненный ~/.codex/config.toml, черновик AGENTS.md и короткий отчёт со списком всего, что было пропущено или помечено как конфликт.

Шаг 2: Инструкции, CLAUDE.md в AGENTS.md

Codex читает AGENTS.md, а не CLAUDE.md. Если импортёр ещё не создал его, либо переименуйте файл, либо скажите Codex продолжать читать старое имя.

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

Ожидаемый результат: ваши инструкции уровня репозитория загружаются в контекст Codex при следующем запуске. Содержимое переносится без изменений; отличаются только имя файла и путь загрузки — именно поэтому соглашение AGENTS.md вообще существует между инструментами.

Шаг 3: MCP-серверы, JSON в TOML

MCP-процессы идентичны. Меняется только форма объявления. Запись .mcp.json из Claude Code вроде такой:

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

превращается в TOML-таблицу в ~/.codex/config.toml:

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

Ожидаемый результат: codex выводит инструменты MCP github при запуске. Если серверу нужны переменные окружения, добавьте их inline: env = { "GITHUB_TOKEN" = "..." }. Оба транспорта переносятся: Codex принимает те же STDIO-серверы на основе команд, что вы запускали в Claude Code, а также берёт потоковые HTTP-серверы в той же таблице, так что удалённо размещённый MCP-эндпоинт переезжает без запуска локального процесса.

Шаг 4: Subagents в .codex/agents/

Claude Code хранит subagents как Markdown в .claude/agents/. Codex хранит каждый subagent как отдельный TOML-файл, один файл на агента, в ~/.codex/agents/ (личные) или .codex/agents/ (в рамках проекта). Subagents включены по умолчанию, так что переключать флаг не нужно.

# .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.
"""

Ожидаемый результат: роль reviewer становится доступна через рабочий процесс subagent в Codex, который Codex вызывает только тогда, когда вы явно об этом просите. Тело промпта из старого Markdown-файла переезжает в developer_instructions; меняется именно обёртка. Если у вас было много subagents, это самый утомительный ручной проход, но механический.

Шаг 5: Разрешения в Sandbox и Approval

Это область, которая по-настоящему ломается, потому что два инструмента моделируют безопасность по-разному. Claude Code использует список разрешений по каждой команде с glob-правилами. Codex использует две грубые ручки: файловый sandbox и политику одобрения. Чистого сопоставления один-к-одному нет, так что вы переносите смысл, а не правила.

Claude CodeСмысл в CodexНастройка Codex
allow: ["Bash(npm run test *)"]запускать команды в репозитории без запросаsandbox_mode = "workspace-write", approval_policy = "on-request"
ask: ["Bash(python *)"]спрашивать перед рискованными командамиapproval_policy = "on-request"
deny: ["Read(./.env)"]блокировать доступ за пределами рабочей областиsandbox_mode = "workspace-write" (блокирует запись вне cwd)
Plan modeсмотреть, не трогатьsandbox_mode = "read-only"
--dangerously-skip-permissionsполная автономияapproval_policy = "never", sandbox_mode = "danger-full-access"
# ~/.codex/config.toml, a sane default
approval_policy = "on-request"
sandbox_mode = "workspace-write"

Ожидаемый результат: Codex свободно работает внутри репозитория и спрашивает перед тем, как тронуть что-либо за его пределами или выйти в сеть. Гранулярный контроль по каждой команде, который был у вас в Claude Code, не выживает; если вы полагались на длинный, точный список разрешений, примите, что модель Codex по замыслу топорнее. Полный набор опций — в справочнике по конфигурации Codex.

Шаг 6: Hooks

В Codex теперь есть hooks, они включены по умолчанию и покрывают большинство событий Claude Code. Вы объявляете их как блоки массива таблиц в config.toml; чтобы отключить всю систему, вы бы задали [features] hooks = false.

# ~/.codex/config.toml
[[hooks.PreToolUse]]
matcher = "^Bash$"          # same idea as Claude Code's PreToolUse matcher

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

Ожидаемый результат: PreToolUse, PostToolUse, SessionStart, Stop и даже PreCompact/PostCompact срабатывают так же, как в Claude Code, как только вы переведёте JSON-обработчик в TOML. Единственный пробел — ConfigChange, у которого нет события в Codex, так что любая автоматизация, которую вы построили для реакции на изменение файла конфигурации в середине сессии, — это единственная часть вашей настройки hooks, которая не переезжает. Чтобы освежить в памяти, что делали эти hooks в Claude Code, см. наше руководство по hooks, subagents и skills в Claude Code.

У чего нет аналога: модели Claude (и обход)

Единственный шаг миграции без нативного ответа — сохранение ваших моделей Claude, потому что ванильный Codex авторизуется в OpenAI и запускает модели OpenAI вроде gpt-5.5 и gpt-5.4. Нет встроенного переключателя, который выбирает Claude Opus или Sonnet. Если вы мигрировали на Codex ради его sandbox и рабочего процесса, но всё ещё хотите, чтобы Opus писал ваш код, вам нужен мост.

Мост — это кастомный model_provider. Codex будет разговаривать с любым OpenAI-совместимым шлюзом, так что вы регистрируете один и направляете profile на модель Claude. Добавьте провайдера в ~/.codex/config.toml:

[model_providers.ofox]
name = "ofox.ai gateway"
base_url = "https://api.ofox.ai/v1"
env_key = "OFOX_API_KEY"
wire_api = "responses"
requires_openai_auth = false

Две детали, на которых люди спотыкаются. Во-первых, задайте wire_api = "responses". Codex убрал поддержку старого протокола chat в феврале 2026, так что провайдер, оставленный на wire_api = "chat", теперь падает с ошибкой при запуске; ofox обслуживает Responses-совместимый эндпоинт под той же базой URL /v1, так что responses — это то, что действительно подключается. Во-вторых, задайте requires_openai_auth = false, чтобы Codex перестал ожидать префикс ключа sk-. Затем создайте файл profile по адресу ~/.codex/claude.config.toml:

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

Запускайте его через codex --profile claude. Теперь цикл задач и sandbox Codex драйвят anthropic/claude-opus-4.8 от Anthropic, а замена на model = "openai/gpt-5.5" во втором profile позволяет провести A/B двух вариантов без смены авторизации. Пошаговое руководство по блоку провайдера, включая ретраи и заголовки, есть в нашем разборе кастомных провайдеров моделей в Codex, а полная документация ofox покрывает настройку ключа. Это единственная область миграции, где шлюз — не удобство, а единственный способ сохранить то, ради чего вы пришли.

Частые ошибки при миграции (и их исправления)

Шесть сбоев покрывают почти любую застрявшую миграцию. Паттерн каждый раз один и тот же: допущение Claude Code, которое Codex не разделяет.

СимптомПричинаИсправление
Codex игнорирует ваш CLAUDE.mdCodex читает AGENTS.mdПереименуйте его или задайте project_doc_fallback_filenames
Кастомный провайдер возвращает 401Codex ожидает ключ sk-Добавьте requires_openai_auth = false
Codex падает при запуске: wire API chat устарелwire_api = "chat" был убран в феврале 2026Задайте wire_api = "responses"
Subagents ничего не делаютНет файла агента, или вы его так и не вызвалиДобавьте файл .codex/agents/NAME.toml; Codex запускает subagents только по явному запросу
Hooks никогда не срабатываютНеверное имя события или regex matcherИсправьте имя события / matcher; hooks включены по умолчанию, так что флаг не нужен
Команда, которую разрешал ваш allowlist, теперь останавливаетсяSandbox строже старого правилаРасширьте sandbox_mode или используйте approval_policy = "on-request"

Если .codex/config.toml проекта полностью игнорируется, проверьте, что проект помечен как доверенный. Codex загружает конфигурацию уровня проекта только в доверенных каталогах и не даст файлу проекта переопределить выбор провайдера, авторизации или profile.

Миграция команды / нескольких разработчиков

Для команды миграция чище, чем в одиночном случае, потому что Codex схлопывает два файла Claude Code в один закоммиченный конфиг. В Claude Code вы поставляли .claude/settings.json для команды и давали каждому разработчику держать gitignored .claude/settings.local.json. В Codex вы коммитите единый .codex/config.toml в корне репозитория и даёте каждому разработчику выбирать profile.

АспектClaude CodeCodex
Общий конфиг команды.claude/settings.json (закоммичен).codex/config.toml (закоммичен, доверенные репозитории)
Личные переопределения.claude/settings.local.jsonфайл личного profile в ~/.codex/
Общие инструкцииCLAUDE.mdAGENTS.md
Позиция риска на запусксписок разрешений--profile strict против --profile fast

Выигрыш команды — тот же трюк со шлюзом из прошлого раздела, применённый один раз. Зарегистрируйте один model_provider в закоммиченном конфиге, раздайте каждому разработчику одну и ту же схему OFOX_API_KEY через ваш менеджер секретов — и вся команда маршрутизируется через один эндпоинт с одним биллингом, будь то openai/gpt-5.5 или anthropic/claude-opus-4.8. Эта маршрутизация через единый эндпоинт и есть конкретная причина, почему общий шлюз побеждает отдельные ключи OpenAI на каждого разработчика; детали конфигурации живут в нашем подробном разборе config.toml, а базовые основы установки — в руководстве по установке Codex.

Миграция вашего инструментария на Codex не должна означать отказ от моделей, ради которых вы мигрировали, и с одним блоком провайдера этого не происходит.

Продвинутое: Profiles для CI, локальной работы и ревью

Profiles — это то, где Codex окупает усилия по миграции, потому что они заменяют привычку Claude Code жонглировать settings.json против settings.local.json. Profile — это отдельный файл в ~/.codex/, и вы выбираете его на запуск через --profile. Глобально ничего не меняется, пока вы сами так не решите.

Создайте три файла для трёх позиций риска:

# ~/.codex/ci.config.toml
model = "gpt-5.5"
approval_policy = "never"
sandbox_mode = "read-only"

Запускайте автоматическое ревью в CI через codex --profile ci — оно может читать всё, но ничего не менять. Держите local.config.toml на workspace-write для повседневной работы и claude.config.toml из прошлого раздела, который переключает драйвер на anthropic/claude-opus-4.8, когда вам нужна модель Anthropic для сложной задачи. Базовый config.toml держит общие части — провайдеров, MCP-серверы и hooks; каждый profile переопределяет только те два-три ключа, что отличаются. Именно эта дисциплина одного файла делает настройку Codex более понятной, чем стек областей действия Claude Code, — как только миграция позади.

FAQ

Можно ли использовать модели Claude в Codex CLI? Нет, если речь о ванильном Codex, который работает только с OpenAI. Зарегистрируйте OpenAI-совместимый шлюз как model_provider и направьте profile на anthropic/claude-opus-4.8. Это единственная область без нативного аналога.

Читает ли Codex CLI файл CLAUDE.md? По умолчанию нет. Он читает AGENTS.md. Добавьте project_doc_fallback_filenames = ["AGENTS.md", "CLAUDE.md"], чтобы сохранить старый файл, или переименуйте его.

Как импортировать настройки Claude Code в Codex? Запустите codex, затем /import. В Codex 0.140 добавили выборочный импортёр для setup, конфигурации проекта и недавних чатов. Он делает бóльшую часть работы и сообщает об остальном.

Есть ли в Codex CLI hooks, как в Claude Code? Да, и они включены по умолчанию. Объявляйте блоки [[hooks.Event]] для событий, включая PreToolUse, PostToolUse, SessionStart, Stop, PreCompact и PostCompact. Единственный hook из Claude Code без аналога — ConfigChange.

Могут ли Claude Code и Codex использовать одни и те же MCP-серверы? Да. MCP-процессы идентичны. Меняется только объявление: с JSON в .mcp.json на TOML под [mcp_servers.NAME].

Нужно ли переписывать мои subagents из Claude Code под Codex? Вы переобъявляете, а не переписываете. Тело промпта переносится; обёртка переезжает с Markdown в .claude/agents/ на отдельный TOML-файл в .codex/agents/. Subagents включены по умолчанию, так что флаг для активации не нужен.

Файл AGENTS.md — это то же самое, что CLAUDE.md? Задача та же, имя другое. AGENTS.md — кросс-инструментальное соглашение; CLAUDE.md — собственный файл памяти Claude Code. Содержимое переносится напрямую.

Источники, проверенные для этого обновления

  • Справочник по конфигурации OpenAI Codex, проверено 03.07.2026. Источник по model_providers, approval_policy, sandbox_mode, [features] и fallback для AGENTS.md.
  • Журнал изменений OpenAI Codex, проверено 03.07.2026. Подтверждает, что /import из Claude Code появился в 0.140.0; последний релиз 0.142.5.
  • Справочник по hooks OpenAI Codex, проверено 03.07.2026. Подтверждает, что hooks включены по умолчанию и что PreCompact/PostCompact — поддерживаемые события.
  • Справочник по настройкам Claude Code, проверено 03.07.2026. Источник по settings.json, permissions, событиям hooks и .mcp.json.
  • Снимок каталога моделей ofox.ai, проверено 03.07.2026. Подтверждает anthropic/claude-opus-4.8, anthropic/claude-sonnet-5, openai/gpt-5.5 и базовый URL https://api.ofox.ai/v1.