Codex CLI
Провайдер в config.toml, ключ из переменной окружения — и Codex CLI работает через шлюз, не меняя ни одной вашей привычки.
Быстро
Codex CLI — OpenAI-совместимый клиент, поэтому base URL у него заканчивается на /v1.
Добавьте в конфигурацию провайдера и выберите его. Ключ в файл не кладите — Codex читает его из переменной окружения, имя которой вы называете сами.
# ~/.codex/config.toml
model = "<model>"
model_provider = "kumo"
[model_providers.kumo]
name = "Kumo"
base_url = "https://api.kumorouter.com/v1"
env_key = "KUMO_API_KEY"
wire_api = "responses"Где живёт конфигурация
Файл — ~/.codex/config.toml. Если его нет, создайте. Если задана переменная окружения CODEX_HOME, конфигурация лежит там, а не в домашнем каталоге.
Провайдеров в файле может быть несколько. Блок [model_providers.kumo] добавляется к тому, что уже есть; model_provider = "kumo" только выбирает, кто из них используется по умолчанию.
base_url— адрес шлюза,https://api.kumorouter.com/v1, вместе с/v1.env_key— имя переменной окружения, из которой Codex возьмёт ключ. Не сам ключ.wire_api— форма запроса;responsesозначает протокол Responses, единственный, который допускает актуальный справочник Codex CLI.model— идентификатор из каталога,<model>в примере выше.
Имена ключей в разных выпусках отличаются. Если ваш выпуск называет их иначе, следуйте документации установленного выпуска — смысл полей тот же.
Более старые выпуски Codex принимали и wire_api = "chat". Ориентируйтесь на справочник установленного у вас выпуска: если он всё ещё называет chat, шлюз ответит и на нём — оба протокола у Kumo живые.
Проверка
# 1. Шлюз отвечает и ключ жив
curl https://api.kumorouter.com/v1/responses \
-H "Authorization: Bearer $KUMO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<model>",
"max_output_tokens": 64,
"input": [
{
"type": "message",
"role": "user",
"content": [{ "type": "input_text", "text": "reply with OK" }]
}
]
}'
# 2. Клиент ходит туда же — в новом терминале, в пустом каталоге
codex exec --skip-git-repo-check "reply with OK"Второй шаг делайте в пустом каталоге: так Codex нечего читать и нечего править, и вы проверяете только подключение. Флаг --skip-git-repo-check нужен здесь именно поэтому: вне Git-репозитория Codex останавливается со словами Not inside a trusted directory and --skip-git-repo-check was not specified и до шлюза не доходит. Либо оставьте флаг, либо запустите проверку из Git-репозитория, которому вы доверяете.
Если не работает
- 401 — ключ не дошёл. Переменная, названная в
env_key, не экспортирована в той оболочке, из которой вы запускаете Codex; или ключ отозван. - 404 — адрес. В
base_urlнет/v1или, наоборот, есть лишний сегмент пути. - Модель не найдена — идентификатор не из каталога. Спросите список у шлюза по адресу
https://api.kumorouter.com/v1/models. - Работает старый провайдер —
model_providerне переключён либо перекрыт профилем или флагом командной строки.