Селектор моделей Codex App
opencodex не патчит Codex App. Он записывает ту же конфигурацию Codex и тот же каталог моделей,
которыми пользуются Codex CLI/TUI. App-server читает это общее состояние, но некоторые версии
Codex Desktop применяют в renderer дополнительный remote allowlist и могут удалить routed-строки
из picker’а. Явная combo с nativeAlias: true — режим совместимости для этой upstream-ошибки.
Записи OpenAI используют два credential-транспорта: нативный вход Codex и namespaced-транспорт
API-ключа openai-apikey/<model>. Само по себе переключение codexAccountMode между Pool и Direct
не меняет id в picker’е. Однако если codexAccountPickerEnabled включает строки picker’а с
указанием аккаунта и в
codexAccountNamespaces есть подходящие селекторы,
opencodex добавляет для сопоставленных аккаунтов отдельные строки
<selector>/<native-openai-model> и скрывает bare native-строки из picker’а. Имена селекторов —
это публичные метки, которые выбирает пользователь; встроенного смысла роли аккаунта у них нет.
Выбор строки с селектором использует только сопоставленный аккаунт, не меняет активный аккаунт Pool
и при недоступности цели завершается ошибкой без переключения на другой аккаунт. Подробнее см.
в разделе Точные селекторы аккаунтов Codex.
Если map codexAccountNamespaces пуста, строки picker’а с указанием аккаунта выключены. Если при
непустой map поле codexAccountPickerEnabled не задано, они считаются включёнными для обратной
совместимости. Значение false скрывает созданные account-qualified строки и возвращает bare
native-строки в picker, не удаляя сопоставления и не отключая точную маршрутизацию
<selector>/<native-openai-model>.
У строк API
GPT-5.6 — контекст 922,000 и максимум входа 922,000; id picker’а вида *-pro разрешаются в
базовую wire-модель с reasoning.mode: "pro", а логи, usage и picker state сохраняют виртуальный
id. Каталог API жёстко ограничен ровно восемью id: gpt-5.5, gpt-5.6, Sol/Terra/Luna и тремя
виртуальными Pro-id; обобщённого alias gpt-5.6-pro не существует. Compact-запросы сохраняют
выбранный tier, но отправляют базовую модель без объекта reasoning.
Выбирайте credential-маршрут по id в picker’е. Pool/Direct переключается на странице Providers;
<selector> ниже — выбранная пользователем публичная метка, сопоставленная через
codexAccountNamespaces:
gpt-5.6-sol # bare-маршрут входа Codex через Pool или Direct<selector>/gpt-5.6-sol # сохранённый аккаунт Codex, сопоставленный с этим селекторомopenai-apikey/gpt-5.6-sol # API keyСвежие установки и конфигурации без сохранённого режима по умолчанию используют Pool. Текущие
конфигурации помечены marker 2 и сохраняют исходник shipped v1 в
~/.opencodex/config.json.pre-openai-tiers-v2.bak; вернуть его можно так:
cp ~/.opencodex/config.json.pre-openai-tiers-v2.bak ~/.opencodex/config.jsonБолее ранние трёхпровайдерные конфигурации v1 автоматически мигрируют в одну строку с переключаемым режимом.
Путь интеграции
Заголовок раздела «Путь интеграции»ocx init, ocx start и ocx sync подключают общий конфиг и каталог Codex к прокси; подробности
о внедрении конфигурации, синхронизации каталога, shim’ах, fallback с WebSocket и механике
восстановления см. в Интеграции с Codex.
Почему появляются маршрутизируемые модели
Заголовок раздела «Почему появляются маршрутизируемые модели»Picker моделей Codex ожидает записи каталога в формате Codex. opencodex строит маршрутизируемые записи, клонируя шаблон нативной модели Codex и затем заменяя идентичность на routed-модель:
slug = "anthropic/claude-sonnet-..."display_name = "anthropic/claude-sonnet-..."visibility = "list"Клон сохраняет поля, нужные строгому парсеру: reasoning level’ы, тип shell, флаги поддержки API и базовые инструкции. После этого opencodex убирает нативные возможности, которые данный маршрут не может честно поддержать, включая service-tier metadata OpenAI.
Текущее покрытие стабильных моделей
Заголовок раздела «Текущее покрытие стабильных моделей»Нативный fallback-набор включает gpt-5.5, gpt-5.4, gpt-5.4-mini,
gpt-5.3-codex-spark и GPT-5.6 Sol/Terra/Luna. Для семейства GPT-5.5/5.4 opencodex сохраняет
более богатые живые записи установленного каталога Codex и синтезирует только отсутствующую
запись. Bundled upstream-snapshot используется только для GPT-5.6, где он даёт настоящую
per-model identity и метаданные вместо приближения по старому шаблону.
| Маршрут | Id в селекторе и метаданные каталога |
|---|---|
| Вход Codex (строки с указанием аккаунта выключены) | Bare native-id, например gpt-5.6-sol, gpt-5.6-terra и gpt-5.6-luna; Pool или Direct выбирается через codexAccountMode. У строк GPT-5.6 окно каталога 922 000 токенов. |
| Вход Codex (строки с указанием аккаунта включены и есть подходящие селекторы) | По одной строке <selector>/<native-openai-model> для каждой пары подходящего селектора и поддерживаемой нативной модели; каждая строка использует только сопоставленный аккаунт, а bare native-строки скрыты из picker’а. Нативные метаданные и окна контекста сохраняются. |
| OpenAI (API key) | Ровно восемь namespaced-строк: gpt-5.5, gpt-5.6, Sol/Terra/Luna и три виртуальных id *-pro (контекст 922,000; максимум входа 922,000 у всех восьми) |
| OpenRouter | openrouter/openai/gpt-5.6-sol, openrouter/openai/gpt-5.6-terra, openrouter/openai/gpt-5.6-luna (922,000) |
| Cursor | Статический fallback включает cursor/gpt-5.6-sol, cursor/gpt-5.6-terra и cursor/gpt-5.6-luna (1,000,000), а также обычные/Fast-строки Grok 4.5 и 4.6 (500,000). Для 4.6 доступен ещё xhigh; какие строки останутся видимыми, решает live-discovery аккаунта. |
| xAI | Live-discovery авторитетно. Fallback-каталог включает xai/grok-4.6, а моделью по умолчанию остаётся xai/grok-4.5; у обеих окно 500,000 токенов. Grok 4.6 поддерживает low / medium / high / xhigh (upstream-default: high), а Grok 4.5 — только до high. |
Закреплённые записи GPT-5.6 сохраняют точную upstream-лестницу. Sol и Terra дают диапазон от
low до ultra; у Luna верхняя ступень — max. По умолчанию у Sol стоит low, а у Terra и
Luna — medium. ultra — это клиентский выбор для максимального reasoning плюс proactive
delegation и на backend он уходит как max. Наличие записи в picker’е означает лишь готовность
каталога: подключённый аккаунт или API-ключ всё равно должен иметь право пользоваться этой
моделью.
Переключатели нативных и маршрутизируемых моделей
Заголовок раздела «Переключатели нативных и маршрутизируемых моделей»Страница Models в дашборде предоставляет переключатели disabledModels для bare native-id и
routed provider-id provider/model. Account-qualified id <selector>/<native-openai-model> тоже
поддерживаются в disabledModels, но дашборд не перечисляет и не переключает точные строки
селекторов; добавляйте их в конфигурацию вручную:
- Routed provider-id имеют namespace (
provider/model). Отключение исключает такую модель из синхронизируемого каталога и/v1/models. - Account-qualified native-id имеют вид
<selector>/<native-openai-model>. Если добавить такой id вdisabledModels, скрывается только строка этого селектора. - Bare native GPT-id — это голые slug. Отключение скрывает bare-строку и все account-selector-клоны этой модели, сохраняя записи каталога для последующего включения.
- Нативные строки берутся из поддерживаемого статического набора, поэтому отключённая нативная модель остаётся видимой в дашборде и её можно включить снова.
Проход по видимости выполняется после обновления snapshot’ов, а management API после такого переключения обновляет каталог и принудительно делает кэш моделей Codex устаревшим.
Режим multi-agent surface
Заголовок раздела «Режим multi-agent surface»Элемент v1/base/v2 на странице Models меняет collaboration surface, которую использует каждая запись picker’а Codex; каноническое описание режима, делегирования, наследования, fallback и поведения encrypted task см. в Поверхности подагентов.
Верхние reasoning-tier’ы
Заголовок раздела «Верхние reasoning-tier’ы»Видимость reasoning-tier’ов не зависит от режима поверхности v1/base/v2. Сгенерированные записи,
умеющие reasoning, объявляют max, чтобы прямые effort-override для подагентов проходили
валидацию; текущие сгенерированные routed-записи и более старые нативные GPT-записи также
объявляют ultra. Точные upstream-лестницы GPT-5.6 сохраняются, поэтому у Luna есть max, но
нет ultra.
На wire-уровне маршрутизирующие адаптеры сопоставляют или ограничивают неподдерживаемые tier’ы.
Для более старых нативных моделей, у которых реальная лестница заканчивается на xhigh,
nativeEffortClamp переводит прямой выбор max или ultra в xhigh (например, у GPT-5.5). У
Sol, Terra и Luna есть настоящая ступень max.
Правила fast-tier
Заголовок раздела «Правила fast-tier»Codex хранит fast-mode так:
service_tier = "fast"
[features]fast_mode = trueНо каталог моделей и id tier’а во время выполнения используют priority. opencodex сохраняет это
разделение. Нативные passthrough-модели OpenAI сохраняют поддержку fast; routed-провайдеры ограничены
capability-гейтом — service_tier удаляется только когда провайдер объявил supportsServiceTier: false (registry классифицирует canonical OpenAI как true, DeepSeek и Volcengine Ark как false); неклассифицированные custom gateway’и сохраняют значения вызывающего без изменений и не получают подстановку.
Так что опция fast не рекламируется там, где её нельзя выполнить, а custom gateway’и могут включить её явно через true.
Выбор подагентов
Заголовок раздела «Выбор подагентов»Codex сортирует видимые в picker’е записи каталога по возрастанию priority и рекламирует первые
пять как model-override для spawn_agent. Страница Subagents в дашборде позволяет выбрать и
сохранить до пяти bare native-id или routed provider-id provider/model. Настроенный вручную
subagentModels также принимает account-qualified id <selector>/<native-openai-model>, но
дашборд не предлагает эти точные id; сохранение страницы заменяет список вариантами, доступными в
дашборде. opencodex назначает им низкие приоритеты каталога в выбранном порядке; при включённых
строках picker’а с указанием аккаунта bare native-выбор разворачивается в группы selector-qualified строк. Остальные
модели всё равно можно вызывать по точному id.
Список featured-моделей отделён от выбора Sub-agent delegation в дашборде. Он только определяет, какие override Codex показывает первыми; он не выбирает модель и не инициирует делегирование сам по себе.
Удалённые серверы Desktop
Заголовок раздела «Удалённые серверы Desktop»В режиме удалённого сервера Codex Desktop фильтрует picker по собственному списку разрешённых
моделей available_models (активируется, когда включена удалённая настройка
use_hidden_models). Записи маршрутизированного каталога по-прежнему загружаются и отдаются —
model/list возвращает их, и встроенный CLI их читает, — но рендерер Desktop отбрасывает всё,
чего нет в этом списке, ограниченном нативными моделями, ещё до отрисовки. opencodex не может
влиять на этот список; соответствующий upstream-баг отслеживается в
openai/codex#19694.
Пока Desktop не предоставит управление этим списком:
- Задайте модель напрямую в
~/.codex/config.tomlна удалённой машине, напримерmodel = "input/grok-4.5". Picker может показыватьCustom, но запросы по-прежнему используют настроенную маршрутизированную модель. - Используйте Codex CLI или TUI вместо picker в Desktop; они не применяют этот список и показывают маршрутизированные модели как обычно.
Обновление состояния моделей
Заголовок раздела «Обновление состояния моделей»Ограничение при откате по нативной квоте
Заголовок раздела «Ограничение при откате по нативной квоте»Когда приложение Codex исчерпывает нативную пятичасовую квоту, оно может переключиться на резервную модель и сделать остальные строки в своём списке недоступными. Судя по #2813, это ограничение скрывает и маршрутизируемые строки opencodex, хотя они используют не связанные с ChatGPT учётные данные провайдеров и не расходуют его квоту.
Ограничение применяет клиент до того, как запрос доходит до прокси, поэтому opencodex не может его снять. Маршрутизируемые строки записываются с visibility: "list", фильтрация каталога смотрит только на disabledModels и selectedModels каждого провайдера, и никакое значение квоты не участвует в видимости маршрутизируемых строк.
Явный выбор маршрутизируемой модели не проходит через список. Укажите модель в config.toml:
model = "anthropic/claude-sonnet-5"или отправьте её напрямую:
ocx access test anthropic/claude-sonnet-5 --protocol responsesОба пути маршрутизируются корректно после того, как запрос дошёл до прокси, и это покрыто тестами. Однако настольное приложение Codex не отправляет настроенную модель в резервном режиме: оно определяет резерв по собственному опросу wham/usage (апселл luna_reserve плюс ещё разрешённый дополнительный лимит gpt-reserve) и принудительно выставляет модель gpt-reserve до отправки, поэтому путь через config.toml перезаписывается внутри приложения. До сброса окна используйте ocx access test, Claude Code через прокси (ocx claude) или любой прямой клиент /v1. См. Маршрутизируемые модели в резервном режиме Codex.
Если picker всё ещё показывает устаревшие записи, обновите каталог и перезапустите нужную поверхность Codex:
ocx syncКаждый раз, когда меняются видимость, priority или metadata каталога, opencodex переписывает
models_cache.json с намеренно устаревшей cache-wrapper, чтобы следующее обновление моделей в
Codex прочитало новый каталог.

