Хак OpenAI Codex: любые модели через подмену имени и провайдера - гайд 2026 | AiManual
AiManual Logo Ai / Manual.
31 Май 2026 Гайд

Взламываем Codex: гайд по использованию любых LLM в OpenAI Desktop App через подмену конфига

Пошаговая инструкция, как в OpenAI Codex Desktop App использовать любые opensource модели, локальные LLM и альтернативные API. Модификация config.json, настройк

Проблема: Codex - красивый, но слепой

OpenAI Codex Desktop App — идеальный интерфейс для чата с LLM: быстрый, нативный, с поддержкой файлов и инструментов. Но есть беда: из коробки он работает только с моделями OpenAI. Никакого Claude, никакого Qwen или DeepSeek, даже если вы хотите запустить у себя локальную модель для конфиденциального кода. Разработчики упорно не добавляют кастомные провайдеры, хотя пользователи просят это годами. К 2026 году ситуация не изменилась.

Почему так? Маркетинговая привязка к собственному API. Но как Senior DevOps я знаю: любой закрытый клиент можно заставить говорить с любым сервером, если подменить адрес. Это как перерезать шнурок от наушников и припаять новый разъём — только в мире JSON.

💡 Суть хака: Codex под капотом использует обычный OpenAI HTTP API. Мы перенаправляем его на свой сервер (локальный или облачный) который говорит на том же языке, но отвечает любой моделью. Всё что нужно — разрезать один config.json.

Решение: anatomy of a handshake

Codex при запуске читает конфиг в ~/.config/codex/config.json. Там лежат три ключа: model, baseUrl и apiKey. Стандартно: model: "gpt-4", baseUrl: "https://api.openai.com/v1". Мы меняем baseUrl на адрес своего сервера, а model — на имя модели, которую тот обслуживает. Дальше Codex шлёт запросы, наш сервер отвечает, и всё работает.

Нюанс: Codex может проверять, что модель из его белого списка, или требовать поддержки функций (function calling). Если модель не поддерживает functions, Codex либо упадёт, либо не покажет результат. Поэтому часто приходится указывать model: "gpt-4" не меняя, но прокси сервер должен маппить её на реальную модель. Или выбирать opensource модель с хорошей поддержкой инструментов, например Qwen3-32B-Instruct или DeepSeek-R2 (на 31.05.2026 последние версии).

Пошаговый план: от 0 до локального Codex на своей нейронке

1 Выбираем и запускаем сервер

Нам нужен OpenAI-совместимый API сервер. Топ-3 варианта на 2026 год:

  • llama.cpp (v3.0+) — лёгкий, запускает GGUF-модели. Отлично подходит для одного пользователя.
  • vLLM (v0.9+) — тяжёлый, но поддерживает continuous batching и PagedAttention. Для продакшна.
  • LocalAI — обёртка, но часто отстаёт по скорости.

Запускаем llama.cpp сервер с моделью Qwen3-32B (или любой GGUF):

./llama-server -m Qwen3-32B-Instruct-GGUF/qwen3-32b-instruct-q4_k_m.gguf -c 8192 --port 8080 --host 0.0.0.0

Сервер ответит по адресу http://localhost:8080/v1. Он умеет только одну модель, но это и нужно.

2 Правим конфиг Codex

Закрываем Codex (если запущен). Открываем файл конфига:

nano ~/.config/codex/config.json

Меняем поля:

{
  "baseUrl": "http://localhost:8080/v1",
  "apiKey": "not-needed",
  "model": "gpt-4"
}

⚠️ Оставляем model как gpt-4 — иначе Codex может отказаться слать запрос или не распарсить ответ. Наш сервер все равно вернёт то, что загружено.

Запускаем Codex — теперь он шлёт запросы в localhost. Если сервер работает, видим ответы от Qwen3.

3 Тестируем и фиксим функции

Codex активно использует tool calls (вызов функций). Если модель не умеет их возвращать, чат просто не работает. На помощь приходит форсированная поддержка: в llama.cpp можно включить функцию --jinja или использовать специальные промпты. Лучше выбрать модель с встроенным пониманием инструментов: AgentCPM-Explore (4B, о которой мы писали) или Hermes 3.

Если всё равно не работает, поднимите прокси, который переформатирует ответ. Самый простой способ — использовать OpenRouter с MCP в качестве прослойки. OpenRouter понимает, что Codex ожидает конкретную модель, и сам маппит запрос.

4 Альтернативный путь: OpenRouter как прокси

Если не хотите возиться с локальным сервером, просто поставьте в baseUrl https://openrouter.ai/api/v1. В apiKey вставьте ключ OpenRouter. В model — имя модели от OpenRouter, например google/gemini-2.5-pro-0519 или anthropic/claude-4-opus. OpenRouter автоматически переложит формат так, чтобы Codex был доволен.

Этот способ обходит ограничение на поддержку функций — OpenRouter умеет эмулировать tool calls для моделей, которые их нативно не поддерживают. Подробно об этом рассказано в гайде по OpenRouter.

Нюансы и типовые ошибки (собери грабли заранее)

  • Streaming не работает. Проверьте, что сервер возвращает SSE. llama.cpp с флагом --cont-batching должен работать.
  • Codex обновился и перестал читать кастомный baseUrl? Бывает после апдейта конфиг сбрасывается. Сделайте файл config.json read-only (chmod 444).
  • Модель слишком умная или наоборот. Некоторые opensource модели (например, DeepSeek-R2) превосходят GPT-4 в коде, но Codex может неверно интерпретировать ответ. Экспериментируйте с параметрами temperature.
  • Локальная модель тормозит. Используйте llama-swap для быстрого переключения между моделями без перезапуска сервера.
  • Не хватает VRAM. Qwen3-8B в 4-bit квантовании занимает ~6 ГБ — бегите на любой VPS с 12 ГБ RAM, например DigitalOcean Droplet за $24/мес.

FAQ: быстрые ответы на вопросы, которые вы постесняетесь задать

Можно ли использовать Claude в Codex?

Да, через OpenRouter: укажите model: "anthropic/claude-4-opus" и baseUrl: "https://openrouter.ai/api/v1". Но имейте в виду: Claude не умеет function calling в классическом смысле — OpenRouter эмулирует их, но работает нестабильно.

Безопасно ли это? Может ли Codex отправить мой ключ на чужой сервер?

Только если вы сами укажете чужой baseUrl. На локальный localhost ключ не уйдёт. Для OpenRouter — их политика конфиденциальности достаточно прозрачна.

Почему после подмены модели Codex не показывает содержимое файлов?

Скорее всего, модель не обработала prompt с файлом. Убедитесь, что ваш сервер поддерживает контекст хотя бы 8K токенов и использует правильный chat template.

Что делать, если после хака Codex крашится?

Попробуйте запустить сервер с флагом --extended-parameters (в vLLM — --enable-chunked-prefill). Иногда Codex ожидает поля, которых нет в ответе opensource-сервера. Используйте прослойку вроде LiteLLM.

Подмена провайдера — это не взлом, а просто настройка. Как переставить разъём Ethernet из роутера в свитч. Никто не запрещает вам указывать любой baseUrl. OpenAI намеренно не задокументировала эту возможность, но и не блокирует её — слишком много enterprise-клиентов просят именно такую гибкость.

Если хотите пойти ещё дальше — соберите полностью автономную среду: Codex + локальный сервер. Без интернета, без утечек, с открытыми моделями, которые на 31.05.2026 уже обгоняют GPT-4 по коду. Гайд по сборке такого агента мы выкладывали.

💡
Финальный совет: не храните конфиг Codex в ~/.config/codex на машине с общим доступом — кто-то может поменять ваш baseUrl на вредоносный. Lock it.

Подписаться на канал