Codex CLI
Codex CLI работает по Responses API и другого формата не понимает. Роутер Waibee принимает этот формат на POST /v1/responses, поэтому Codex подключается к нему через свой конфиг, без изменений в самом клиенте.
Конфигурация
Заголовок раздела «Конфигурация»Добавьте провайдера в ~/.codex/config.toml:
model = "openai/gpt-5.1-codex"model_provider = "waibee"model_reasoning_effort = "low"
[model_providers.waibee]name = "Waibee"base_url = "https://api.waibee.com/v1"env_key = "WAIBEE_API_KEY"wire_api = "responses"model_reasoning_effort здесь обязателен, и вот почему. Часть рассуждающих моделей работать с выключенными рассуждениями не умеет. Codex глубину не задаёт, если её нет в конфиге, а запрос без неё читается как просьба рассуждения выключить, и модель его отклоняет:
{"error": {"code": "provider_bad_request", "message": "Reasoning is mandatory for this endpoint and cannot be disabled."}}Подходит любое значение, кроме none. Если рассуждения вам не нужны, берите модель, которая умеет без них, например openai/gpt-5.3-codex.
export WAIBEE_API_KEY="sk_live_..."codexВ Windows переменная задаётся один раз через setx WAIBEE_API_KEY "sk_live_...", после чего Codex нужно перезапустить целиком.
| Поле | Что в нём |
|---|---|
base_url |
Базовый URL с суффиксом /v1. Путь /responses клиент добавит сам. |
env_key |
Имя переменной окружения, из которой Codex возьмёт ключ. Сам ключ в конфиг не пишется. |
wire_api |
Только "responses". Значение "chat" из Codex удалено, и без этой строки клиент не стартует. |
Если раньше вы входили в Codex через OpenAI, выполните codex logout перед переключением.
Выбор модели
Заголовок раздела «Выбор модели»model принимает идентификатор из каталога в форме provider/model. Доступны все модели каталога, не только OpenAI.
model = "anthropic/claude-sonnet-5"Разово модель задаётся флагом:
codex --model anthropic/claude-sonnet-5Глубину рассуждения меняет model_reasoning_effort из конфигурации выше: low, medium или high, значение доезжает до модели как есть.
Окно контекста
Заголовок раздела «Окно контекста»Своей таблицы окон для моделей каталога у Codex нет, и вместо настоящего окна он берёт значение по умолчанию. От этого значения зависит, когда клиент начнёт сжимать историю сессии, поэтому окно стоит объявить самому, взяв context_length модели из каталога:
model = "google/gemini-3.8-flash"model_context_window = 1048576Значение применяется: с заведомо маленьким окном Codex урезает собственную служебную часть промпта и пишет об этом при старте.
Других ключей для этого нет: запуск с полем вида model_max_output_tokens падает с unknown configuration field. Предельную длину ответа задавайте в запросе через max_output_tokens.
Проверка
Заголовок раздела «Проверка»codex exec "Скажи OK и больше ничего"Ответ от модели означает, что связка настроена. Расход появится в статистике с пометкой поверхности responses.
Расход токенов
Заголовок раздела «Расход токенов»Codex присылает весь диалог заново каждым ходом: роутер не хранит историю на своей стороне, а Codex не пользуется серверным состоянием и без него. Поэтому длинная сессия оплачивается как множество запросов с растущим входом.
Смягчает это кеширование промпта: неизменившееся начало диалога на втором и следующих ходах считается по сниженной цене. В обычной сессии кешируется большая часть входа, и её видно в ответе:
"usage": { "input_tokens": 9492, "input_tokens_details": {"cached_tokens": 9344}, "output_tokens": 10}Ставить max_output_tokens полезно по той же причине: он ограничивает длину ответа сверху, а значит и его цену.
Веб-поиск
Заголовок раздела «Веб-поиск»Codex кладёт встроенный тул web_search в каждый запрос, и убрать его настройкой нельзя. Выполняет этот поиск роутер: Codex получает найденное следующим ходом и отвечает по нему, ничего настраивать не нужно.
Внутренние ходы Codex не видит, ему приходит готовый ответ и рядом элемент waibee:web_search с запросом и списком источников. Свои инструменты Codex вызывает как обычно, поиск им не мешает.
Сколько поисков сделает модель, сколько это стоит и что будет, если поиск недоступен: Веб-поиск.
Если что-то не работает
Заголовок раздела «Если что-то не работает»Model metadata for ... not found при старте. Codex ведёт собственную таблицу известных моделей, и наши идентификаторы в неё не входят. Предупреждение относится к его таблице, а не к ответу роутера: запросы проходят, инструменты вызываются, ответы приходят. Вместе с метаданными Codex теряет и настоящее окно контекста, по которому решает, когда сжимать историю сессии. Объявите окно самостоятельно, см. Окно контекста.
Убрать его, заменив env_key на блок [model_providers.waibee.auth] с командой, не выйдет: Codex тогда пытается обновить каталог моделей в своём формате, не разбирает наш ответ и печатает его целиком в лог. Предупреждение при этом остаётся. Оставляйте env_key.
codex exec отказывается запускаться вне git-репозитория. Добавьте --skip-git-repo-check или запускайте внутри репозитория.
HTTP 400 с feature_not_supported. Запрос просит серверное состояние, которого у роутера нет. Поле, из-за которого запрос отклонён, названо в param. Подробности: Формат Responses.
HTTP 402. На балансе недостаточно средств для запроса такого размера. Пополните баланс или уменьшите max_output_tokens.
Что дальше
Заголовок раздела «Что дальше»- Формат Responses: сам формат, стриминг, вызов инструментов
- Ошибки: коды и что с ними делать
- Лимиты: предельные размеры и частота