Перейти к содержимому

Codex CLI

Codex CLI работает по Responses API и другого формата не понимает. Роутер Waibee принимает этот формат на POST /v1/responses, поэтому Codex подключается к нему через свой конфиг, без изменений в самом клиенте.

Добавьте провайдера в ~/.codex/config.toml:

~/.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 модели из каталога:

~/.codex/config.toml
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.