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

Claude Code

opencodex обслуживает POST /v1/messages (а также count_tokens) наряду с /v1/responses, поэтому Claude Code может использовать все маршрутизируемые провайдеры — включая OAuth-входы, пулы аккаунтов, отказоустойчивое переключение (failover) ключей и сайдкары — без какой-либо дополнительной работы по аутентификации.

На маршрутах Devin (включая SWE-2), доступных через Messages API, отправка текста и вызовов инструментов откладывается до завершения хода у провайдера, чтобы поздно поступившая подпись рассуждений могла предшествовать ответу. Это предотвращает пустой итоговый результат в Claude Code; рассуждения и уведомления keepalive продолжают поступать во время генерации. Буфер использует общий с запросом лимит преобразования в 32 MiB, а отмена запроса останавливает генерацию. Это исправление порядка вывода не решает отдельную проблему отказа Cognition принимать некоторые сгенерированные системные тексты. Системные инструкции и ограничения безопасности сохраняются.

Модели по уровням для CLI и внешних приложений

Заголовок раздела «Модели по уровням для CLI и внешних приложений»

На странице Claude Code выберите модели Opus, Sonnet, Haiku или Fable и нажмите Сохранить. Значения claudeCode.tierModels передаются новым запускам ocx claude, не изменяя текущую основную модель, уровень рассуждения или назначения семейств Desktop.

Приложения, запускающие claude напрямую, не получают окружение ocx. После сохранения выберите Предпросмотр настроек Claude, проверьте изменения ANTHROPIC_DEFAULT_*_MODEL, затем Применить к настройкам Claude. Изменяется конфигурация пользователя Claude на хосте OpenCodex, а не на компьютере браузера. Для новых значений нужен новый процесс Claude; существующие сеансы не перезапускаются. Маршрутизация и аутентификация не настраиваются: прямое приложение должно быть уже подключено к OpenCodex.

Применяются только явно выбранные уровни. Не задано сохраняет существующую настройку Claude, а не возвращает нативную модель. Отсутствующий файл поддерживается, существующий пустой или повреждённый файл отклоняется. Изменение после предпросмотра требует нового предпросмотра.

При применении фактический файл временно перемещается в приватный каталог model-default-backups/apply-*/settings.json внутри каталога Claude, проверяется и заменяется публикацией только в свободный путь. Чужой новый файл не перезаписывается даже при откате. На короткое время файл отсутствует: не редактируйте настройки и не запускайте Claude в этот момент. Нужны перемещение в пределах одного тома и жёсткие ссылки; небезопасной перезаписью ошибки не обходятся. После прерывания или ошибки восстановления сопоставьте резервную копию с новыми правками. Windows и Linux требуют отдельных проверок. Реальную модель проверяйте по журналам запросов; функция полезна и для внешних классификаторов, запрашивающих Sonnet.

Terminal window
ocx claude

ocx claude убеждается, что прокси запущен, а затем запускает Claude Code с уже настроенным окружением:

Переменная Значение
ANTHROPIC_BASE_URL http://127.0.0.1:<port>
ANTHROPIC_AUTH_TOKEN Только когда прокси требует API-ключ — иначе переменная НЕ устанавливается, поэтому ваш вход в claude.ai (подписка + коннекторы) остаётся активным
CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY 1 (обнаружение моделей в нативном селекторе /model)
CLAUDE_CODE_AUTO_COMPACT_WINDOW Порог автосжатия контекста (по умолчанию 829800); внедряется только при включённом автоконтексте
ANTHROPIC_MODEL claudeCode.model (необязательно)
ANTHROPIC_DEFAULT_HAIKU_MODEL claudeCode.tierModels.haiku ?? claudeCode.smallFastModel (необязательно; поддерживается и устаревшая ANTHROPIC_SMALL_FAST_MODEL)
ANTHROPIC_DEFAULT_{OPUS,SONNET,FABLE}_MODEL claudeCode.tierModels.* (при запуске по подписке, если не задано: нативные claude-opus-5-5[1m] / claude-sonnet-5-5[1m] / claude-fable-5-1[1m])
ANTHROPIC_DEFAULT_{OPUS,SONNET,FABLE,HAIKU}_MODEL_NAME Подпись /model для слота уровня, которому OpenCodex назначил маршрутизируемый псевдоним (например, ocx-claude-native--gpt-6.1-sol → gpt-6.1-sol (native)). Та же пара записывается в системное окружение launchd и в shell-хук. Идентификатор модели остаётся псевдонимом. Слоты и подписи, заданные вами, не изменяются
CLAUDE_CODE_ALWAYS_ENABLE_EFFORT 1, когда включён alwaysEnableEffort (условно)
ENABLE_TOOL_SEARCH claudeCode.toolSearch, когда задан (условно; по умолчанию выключено)
CLAUDE_CODE_MAX_CONTEXT_TOKENS Устаревшее переопределение контекста, когда задан maxContextTokens (условно)
Переменные, которые вы экспортируете сами, всегда имеют приоритет. Дополнительные аргументы передаются как есть: ocx claude -p "hello".

Нативный запасной запуск, когда маршрутизация Claude выключена

Заголовок раздела «Нативный запасной запуск, когда маршрутизация Claude выключена»

Раньше ocx claude завершался с ошибкой, если маршрутизация Claude была выключена. Теперь вместо этого запускается нативный бинарник claude, поэтому команда остаётся полезной и с выключенной маршрутизацией:

Где выключена маршрутизация Что происходит
claudeCode.enabled: false в конфигурации Нативный запуск с уведомлением, что маршрутизация выключена
Запущенный прокси возвращает enabled: false из GET /api/claude-code Нативный запуск и совет перезапустить службу после включения
claudeCode.enabled отсутствует или равен true Маршрутизация через прокси, без изменений

Запасной запуск включает только явное false, поэтому прокси, не знающий об этом поле, остаётся маршрутизируемым. Отсутствие прокси тоже не является триггером — при включённой маршрутизации ocx claude по-прежнему запускает прокси.

Нативная сессия не должна наследовать состояние прокси, поэтому запасной запуск удаляет только те значения, принадлежность которых OpenCodex может доказать: ANTHROPIC_BASE_URL — лишь когда он указывает на собственный локальный адрес и настроенный порт этого прокси, а парный admission-токен выдан самим прокси; переключатели обнаружения и автоконтекста CLAUDE_CODE_*; и слоты моделей, которые разрешаются только через прокси (маршрутные псевдонимы и форма provider/model). Всё остальное — ваше и сохраняется: посторонний шлюз http://localhost:8080 и ваши собственные учётные данные sk-ant- остаются на месте.

Если сохранённый выбор в селекторе /model — модель только для прокси, нативная сессия перейдёт на claudeCode.model, когда та доступна нативно, а иначе предупредит передать --model <модель Anthropic>. Явный аргумент --model всегда имеет приоритет.

Когда claudeCode.systemEnv установлен в true (по умолчанию: выключено), ocx start использует launchctl setenv, чтобы внедрить ANTHROPIC_BASE_URL и связанные переменные окружения Claude Code на уровне всей системы. Поэтому новые окна и вкладки терминала направляют обычные команды claude через прокси без обёртки ocx claude. Уже открытые оболочки не затрагиваются — их нужно открыть заново.

ocx stop и остановка прокси снимают внедрённые ключи (прежние значения не восстанавливаются — удаляются только ключи, внедрённые opencodex). Прокси также записывает ~/.opencodex/claude-env.sh; ocx start устанавливает source-хук в .zshrc только когда исполняемый Claude Code CLI найден в PATH. При запуске и выполнении ocx ensure хук, принадлежащий OpenCodex, удаляется, если файл Claude Code CLI не найден в PATH, не имеет права на выполнение или системная интеграция окружения выключена. Claude Desktop использует отдельный профиль и не вызывает установку shell-хука.

Отключить можно параметром claudeCode.systemEnv: false в конфигурации или переключателем в GUI. Функция доступна только на macOS; на других платформах используйте ocx claude.

Нативный проброс Claude (прямое подключение подписки)

Заголовок раздела «Нативный проброс Claude (прямое подключение подписки)»

Если переопределение аутентификации не задано, Claude Code сохраняет свой OAuth-вход в claude.ai и отправляет его прокси. Запросы к настоящим моделям claude*/anthropic*, на которые не претендует ни один алиас или запись карты моделей, пересылаются дословно на api.anthropic.com с вашими учётными данными — беты, подписи thinking, кеширование промптов и платёжная идентичность остаются полностью нативными, а маршрутизируемые модели продолжают работать в той же сессии через алиасы селектора.

Обработка заголовков: hop-by-hop-заголовки, а также host, content-length, accept-encoding, x-opencodex-api-key и origin всегда удаляются перед пересылкой. На non-loopback bind нативный passthrough также требует валидный proxy credential именно в x-opencodex-api-key; после этого Authorization и x-api-key принадлежат только Anthropic. Proxy admission secret в любом provider-заголовке удаляется, а настоящий provider credential в другом заголовке сохраняется. Неоднозначные credential-заголовки, объединённые запятыми, не пересылаются.

Проброс срабатывает, когда выполнены все условия: nativePassthrough не равен false; имя модели начинается с claude или anthropic; bearer-токен или x-api-key начинается с sk-ant-; разрешение алиасов и карты моделей возвращает ту же модель без изменений; а на non-loopback bind валиден dedicated proxy admission-header. Это также означает, что предупреждение «claude.ai connectors are disabled» с ocx claude больше не появляется.

В этом пробросе с учётными данными вызывающей стороны изменение тела касается только идентификаторов вызовов инструментов. tool_use.id или tool_result.tool_use_id, которые Anthropic отклонил бы (символы вне a-zA-Z0-9_- или длина больше 64), например созданные маршрутизируемой моделью раньше в сессии, переписываются в допустимые с сохранением пары вызов/результат. Допустимые идентификаторы отправляются без изменений, а на пустой идентификатор локально возвращается 400.

В управляемых нативных запросах с сохранёнными OAuth-данными прокси также согласует имена объявленных пользовательских инструментов в отложенных ссылках и встроенных добавлениях/удалениях. Аргументы, схемы и маркеры кеша сохраняются. Для встроенных изменений в системных сообщениях передавайте inline-tools-2026-09-15: при наличии соответствующих типизированных блоков построитель сохраняет этот заголовок для API Anthropic.

Отключается параметром claudeCode.nativePassthrough: false; другой адрес задаётся через claudeCode.anthropicBaseUrl.

Режимы Claude Desktop: шлюз (по умолчанию) и first-party

Заголовок раздела «Режимы Claude Desktop: шлюз (по умолчанию) и first-party»

Выберите один из взаимоисключающих режимов в Подключение → Claude Desktop → Режим подключения или командой ocx claude desktop apply --first-party|--gateway.

При новой установке применяется профиль шлюза: всё приложение, включая вкладку Chat, работает через OpenCodex. Функции, доступные только через claude.ai, при этом недоступны. Старые флаги --static, --hybrid и --discovery-only также выбирают шлюз.

Режим first-party Desktop направляет вкладку Code и её субагентов через OpenCodex. У отдельного Claude Code CLI есть собственный переключатель. Оба читают одни настройки прокси и CA в settings.json: когда включён только один режим, другой клиент всё равно проходит через локальный прокси с локальным завершением TLS, но его запросы Messages без изменений пересылаются Anthropic.

Режим сохраняется в claudeCode.desktopMode. Установки, ранее применившие first-party явно или до этого выпуска, сохраняют его; существующий шлюз также остаётся шлюзом. Без явного выбора приоритет имеют выбранная строка шлюза OpenCodex, сохранённый отпечаток шлюза, затем принадлежащие OpenCodex настройки first-party в settings.json; при отсутствии этих признаков выбирается шлюз. Окружение, записанное только для first-party CLI, не доказывает, что Desktop работает в режиме first-party. Синхронизация каталога и обновление списка моделей никогда не записывают профиль шлюза поверх установки first-party. При claudeCode.intercept.enabled: false применение на такой установке отклоняется с intercept_disabled, а новая установка применяет шлюз. Чужие настройки прокси не перезаписываются. После переключения полностью закройте и снова откройте Desktop.

Включите переключатель в Подключение → Claude или выполните ocx claude config set --first-party on; для выключения используйте off. Включение отклоняется при недоступном прокси, ошибке подготовки CA, нечитаемых настройках или чужих ключах прокси. Выключение сохраняется и при недоступном прокси. Если активен только first-party Desktop, задайте NO_PROXY='*' в оболочке для полностью нативного терминала. Описанный выше риск для аккаунта относится и к CLI. Пока first-party включён, OpenCodex также добавляет 127.0.0.1, localhost, ::1 и 0.0.0.0 в NO_PROXY в ~/.claude/settings.json, чтобы локальные MCP-серверы (включая имена *.localhost) обходили прокси; другие адреса 127.x добавьте сами. К существующему значению NO_PROXY дописываются только недостающие записи, а при выключении восстанавливается прежнее значение, если OpenCodex смог его сохранить и вы его с тех пор не меняли; иначе текущее значение, включая добавленные записи, остаётся без изменений. Отключение маршрутизации Claude сохраняет управляемые настройки прокси. Пока listener работает, все запросы Messages пересылаются без изменений; после его остановки обычный claude не подключится до запуска OpenCodex или выключения first-party Desktop/CLI. Нативный запуск через ocx claude задаёт NO_PROXY=* только при управляемых настройках без унаследованного чужого HTTPS-прокси. Иначе он сохраняет чужой прокси и предупреждает, что перехват в настройках остаётся активным: выключите first-party или удалите настройку. Интерфейс различает нечитаемые настройки (unknown), URL opencodex с токеном и чужим CA (foreign: исправьте HTTPS_PROXY / NODE_EXTRA_CA_CERTS вручную) и выключенную маршрутизацию Claude при ещё работающем listener, который передаёт запросы без изменений (disabled: выключите first-party до перезапуска). Без listener состояние stopped; с управляемым CA, но неверным портом или токеном — broken. При включённом first-party и недоступном перехвате stopped и broken показывают routingOff: маршрутизация Claude или перехват отключены либо этот компьютер является клиентом другого хаба opencodex; включите перехват здесь или выключите first-party, чтобы удалить настройки. Только если перехват доступен, stopped предлагает запустить opencodex, а broken — выполнить ocx ensure или перезапустить его. Включённая CLI без прокси показывает отсутствие применения, один включённый клиент с работающим прокси — общий ретранслятор, оба выключенных при оставшемся прокси — остаточную настройку. unknown означает, что opencodex не может определить, указывают ли настройки на его прокси. Прокси без токена на 127.0.0.1 вместе с чужим CA получает состояние local: принадлежность не подтверждена; если он больше не нужен, удалите HTTPS_PROXY из ~/.claude/settings.json. disabled возможно только при совпадении настроек с работающим listener; другой порт или токен даёт broken даже при выключенной маршрутизации.

Режим picker: модели opencodex в селекторе Code first-party

Заголовок раздела «Режим picker: модели opencodex в селекторе Code first-party»

Режим picker входит в режим first-party. В macOS и Windows он включён по умолчанию при выборе first-party, если не задано claudeCode.intercept.picker: false. Он изменяет селектор моделей во вкладке Code first-party Desktop и показывает доступные модели opencodex по именам. При первом включении macOS может попросить доверить локальному центру сертификации в связке ключей для входа, а Windows — в хранилище корней текущего пользователя. Этот центр ограничен claude.ai и его поддоменами. Экспортируемая идентичность подписи защищена хранилищем учётных данных ОС и повторно используется при обычных перезапусках. Ключ подписи picker не хранится открытым текстом в каталоге конфигурации OpenCodex. Полная проверка ограниченного CA и доверия ОС сохраняется, в Windows — по точному отпечатку с проверенным листом. Если одобренная идентичность не изменилась и хранилище доступно, перезапуск не добавляет и не удаляет настройки доверия сертификатам macOS. Восстановление при запуске и проверка состояния никогда не устанавливают доверие: если оно отсутствует, отозвано или неизвестно, picker остаётся в ожидании. Для предоставления доверия явно выполните ocx claude desktop picker on или ocx claude desktop picker trust, включая подтверждение Windows при необходимости.

При однократной миграции со старой идентичности может потребоваться согласие на удаление прежнего доверия. Пока очистка не завершена, picker недоступен, а применённый профиль использует туннель без расшифровки. macOS отдельно может попросить разблокировать связку ключей или разрешить приложению доступ к учётным данным, в том числе после перезапуска или обновления. В Windows явные on или trust могут запросить подтверждение добавления корня. Linux по-прежнему не поддерживает picker: работа с его CA, хранилищем и прокси не запускается. Основной перехват Claude остаётся доступен; для его локальных файлов CA проверяются владелец, символические ссылки, права доступа и ACL Windows.

Пока режим picker включён, Claude Desktop выходит в сеть через OpenCodex. Если OpenCodex остановится, Desktop будет офлайн, пока вы полностью не перезапустите его или не отключите режим picker. Проверьте состояние командой ocx claude desktop picker status, повторите доверие командой ocx claude desktop picker trust, а для отключения используйте ocx claude desktop picker off. В панели управления есть такой же переключатель в Подключение → Claude Desktop. После выбора профиля picker полностью закройте и снова откройте Claude Desktop.

Режим picker входит в first-party, поэтому к нему также применяется риск для аккаунта first-party.

На подключённой машине ocx claude desktop apply или ocx claude desktop получает снимок Desktop с хаба и записывает его origin и точные выданные им ID моделей в локальную конфигурацию. Локальные псевдонимы заново не создаются. Режимы static/hybrid копируют список моделей; discovery-only использует origin хаба без встроенного списка.

Профиль, распределение по семействам и значения по умолчанию принадлежат хабу. Измените их на хабе, повторите применение на клиенте и заново выберите модель в Desktop. Это нужно и для старых псевдонимов, созданных только на клиенте. show, локальное редактирование и import/export остаются локальными операциями. При подключении ocx claude desktop import <path> --apply не поддерживается и отклоняется до сохранения; import без --apply остаётся локальным.

Снимок читается с учётными данными существующего подключения для доступа к данным, без администраторского токена и загрузки профиля на хаб. Старый несовместимый хаб, некорректный ответ или пустой список Desktop приводят к отказу применения, без подстановки локального каталога или loopback-адреса. Обновите или настройте хаб и повторите применение.

Это изменение псевдонимов не исправляет отдельный запрос #3719 о повторной передаче thinking / redacted_thinking и кеше промптов. Сам по себе доступ к прокси не включает нативный проброс Anthropic, но преобразованные маршруты Anthropic могут использовать кеш. Сохранение блоков при повторной передаче и сравнение попаданий в кеш остаются отдельной работой.

Модели opencodex на вкладке Code в Desktop (привязки first-party)

Заголовок раздела «Модели opencodex на вкладке Code в Desktop (привязки first-party)»

В режиме first-party селектор моделей вкладки Code принадлежит claude.ai: его строки (Opus 5.5, Sonnet 5, Haiku 4.5 и более старые модели под More models) приходят из вашего аккаунта, и никакая локальная настройка не может добавить строку opencodex. В OpenCodex при каждом запросе приходит Anthropic ID модели из селектора, поэтому вместо этого строку селектора привязывают к маршруту opencodex:

Terminal window
ocx claude desktop bind claude-sonnet-4-6 xai/grok-4.7
ocx claude desktop bind claude-opus-4-6 native/gpt-6.1-sol
ocx claude desktop unbind claude-opus-4-6

или используйте Подключение → Claude Desktop → Привязки моделей вкладки Code в панели управления. Тогда выбор Sonnet 4.6 на вкладке Code обслуживается xai/grok-4.7. Селектор сохраняет имя Anthropic, а системный промпт Claude Code по-прежнему представляет модель как эту Claude-модель, поэтому предпочитайте строки, которыми вы иначе не пользуетесь (записи More models — хорошие кандидаты). Привязки действуют со следующего запроса; перезапуск Desktop не нужен.

  • Маршруты используют нотацию маршрутов Desktop: provider/model или native/<slug> для нативного пула OpenAI. Маршрут должен быть из числа доступных в панели управления.
  • Датированный ID селектора (claude-haiku-4-5-20251001) соответствует недатированной привязке (claude-haiku-4-5), а выборы [1m] и быстрого режима следуют той же привязке.
  • Привязки хранятся в claudeCode.intercept.modelMap и применяются только к трафику Claude Code, проходящему через локальный прокси перехвата: вкладка Code в Desktop и отдельный CLI claude в режиме first-party. Сессии ocx claude и публичная точка /v1/messages их игнорируют; глобальный claudeCode.modelMap продолжает действовать везде, и привязка имеет приоритет над ним для того же ID.
  • ocx claude desktop status --json показывает действующие привязки в firstParty.modelBindings.

Ротация ключей, восстановление и отключение

Заголовок раздела «Ротация ключей, восстановление и отключение»

Ротация и восстановление обновляют ключ в управляемом подключением профиле Desktop вместе с локальными учётными данными. Повторять apply вручную ради смены ключа не нужно. ID моделей, семейства, значения по умолчанию и текущий выбор профиля сохраняются; ротация не выбирает управляемый профиль заново и не включает отключённую интеграцию. В JSON CLI rotation: "committed" означает, что новый ключ активен, а rotation: "rolled_back" — что предыдущий сохранён или восстановлен, а не отозван. Неопределённое или неполное восстановление не выдаётся за успешную ротацию.

Первое применение при подключении сохраняет прежние управляемые настройки и выбор профиля. Повторное применение и ротация не заменяют эту исходную запись. ocx disconnect восстанавливает настройки подключения, сохраняя добавленные пользователем поля и другие профили. Прежний выбор возвращается только если управляемый профиль всё ещё выбран; более поздний выбор другого действительного профиля сохраняется. Созданный профиль с пользовательскими добавлениями остаётся читаемым в стандартном режиме. --keep-catalog сохраняет каталог, а не ключ подключения в Desktop.

Старый управляемый профиль без исходной записи можно мигрировать, если он однозначно относится к текущему хабу и распознанному ключу подключения. Это делают apply, ротация/восстановление или прямое отключение, без нового флага и предварительного apply. Предупреждение объясняет, что при отключении будет использован стандартный режим, поскольку прежние настройки не записаны. Удаляются только настройки шлюза, принадлежащие подключению; пользовательские поля и отдельный действительный выбор сохраняются. Это стандартный fallback, а не восстановление оригинала.

Конфликты управляемых настроек, неизвестные ключи и повреждённые записи восстановления сохраняются и сообщаются пользователю. Прерванная очистка продолжается только для того же подключения, не удаляя новое и не объявляя неполное восстановление завершённым. До отключения завершите восстановление ротации; при повторе отключения сохраняйте тот же выбор сохранения каталога.

После применения, ротации/восстановления или возврата настроек полностью закройте и снова откройте Claude Desktop: работающий процесс может хранить прежний ключ. Автоматического перезапуска нет. Локальное отключение не отзывает ключ хаба и не стирает внешние копии; при необходимости отзовите ключ на хабе отдельно.

Claude Code 2.1.129+ обнаруживает модели шлюза через GET /v1/models?limit=1000 и показывает их в нативном селекторе /model. Строка без description подписана «From gateway»; opencodex отправляет её для каждой строки Claude Code CLI (Routed by OpenCodex to <provider>/<model>; для нативных строк — Routed by OpenCodex to native <model>, строки Fast добавляют · Fast, строки 1M сохраняют базовое описание), и Claude Code 2.1.257+ показывает этот текст вместо подписи. Claude Code 2.1.278 принимает id, содержащий claude или anthropic. Неизвестный id, начинающийся с claude-, учитывается как 200k, если compact не отключён. Поэтому opencodex публикует маршрутизируемые модели как стабильные обратимые алиасы, которые содержат claude, но не начинаются с claude-:

Интерфейс Формат Пример
Claude Code CLI ocx-claude-<provider>--<model> (plain) или ocx-claude2-… (escaped) ocx-claude-native--gpt-5.6-sol
Claude Desktop 3P claude-fable-5-p<code> (3-символьный слот профиля base36) claude-fable-5-p01q

Прокси выбирает семейство для каждого запроса: приоритет у ?ids=cli или ?ids=desktop; иначе user-agent claude-code/* получает читаемую CLI-форму, а остальные клиенты — Desktop-код. Оба семейства декодируются бессрочно — модель, сохранённая в settings.json в любой из форм, продолжает работать. Устаревшие id claude-ocx-<provider>--<model> и claude-ocx2-<provider>--<model> из старых конфигураций тоже разрешаются, но Claude Code продолжает считать такой сохранённый id как 200k. Один раз выберите ocx-claude- вместо сохранённого claude-ocx- и ocx-claude2- вместо экранированного claude-ocx2-, чтобы применялись и реальное окно контекста, и compact.

Если нижний селектор Claude Desktop не переключает модель в уже запущенном 3P-диалоге, можно попробовать /model <id>, но в затронутых сборках Desktop этот обходной способ тоже может не сработать. В issue #3782 сообщается, что в Windows с Claude Desktop 1.46388.4 диалог продолжает использовать исходную модель после изменений как через нижний селектор, так и через /model. Это сообщение не устанавливает, какой компонент клиента или маршрутизации вызывает такое поведение.

Можно также попробовать выбрать нужную модель по умолчанию в профиле Claude Desktop в OpenCodex, повторно применить профиль и начать новый диалог. Это шаг по устранению неполадки, а не гарантированное решение. OpenCodex не видит состояние селектора; он маршрутизирует id модели, переданный в каждом запросе. Проверьте, что отправляет клиент, в Logs → requestedModel.

Правила грамматики алиасов: provider не может содержать / или -- и не может быть равен native. Обычные id моделей (без / и ~) остаются с префиксом v1 ocx-claude-…. Id с / или ~ выпускаются с префиксом v2 ocx-claude2-… и экранированием (/ → ~s, ~ → ~t), например openrouter/anthropic/claude-opus-4-8 → ocx-claude2-openrouter--anthropic~sclaude-opus-4-8. Алиасы v1 декодируются литерально (исторические двухсимвольные последовательности ~s / ~t в id модели сохраняются); алиасы v2 раскрывают экранирование. Маршруты, которые невозможно выразить читаемой формой, откатываются на хешированный алиас. Id моделей МОГУТ содержать -- (при разрешении разбиение выполняется только по первому --); нативные слаги с -- откатываются на хешированную форму.

Порядок разрешения модели: удаление маркера [1m] → декодирование читаемого алиаса → декодирование Desktop-хеша → точное совпадение в modelMap → совпадение без даты (удаляется -20250514) → проброс.

Неразрешённый Desktop ID в формате даты может быть реальным нативным модельным ID, отсутствующим в результатах обнаружения. Если имеющихся данных недостаточно для разрешения ID, Messages и count-tokens возвращают HTTP 503 с фиксированной ошибкой desktop_model_mapping_unavailable; это не доказывает недействительность модели. Неизвестные старые хеш-псевдонимы по-прежнему дают HTTP 400. В обоих случаях дата не удаляется и другая маршрутизация не подставляется. Известные ID, зарегистрированные сопоставления и точные записи modelMap, включая распознанные реальные нативные ID, обрабатываются как прежде. Обновите обнаружение моделей или повторно примените профиль подключённого хаба перед новой попыткой; один лишь повтор не гарантирует разрешения.

Каждая запись содержит отображаемое имя вида gemini-3-pro (gemini) и полные возможности модели (шкала уровней рассуждений, типы thinking) в официальном формате ModelInfo. Настоящие модели Anthropic сохраняют канонические id в обоих интерфейсах.

Эти проверки используют эффективное окно из каталога, которое может включать оценку для пользовательского провайдера. Оценка не подтверждает реальную ёмкость посредника.

Модели с эффективным окном в каталоге размером 1M или не меньше порога сжатия по умолчанию (829 800) получают дополнительную строку …[1m] в селекторе. Этот порог фиксирован: изменение значения сжатия его не понижает, а модель Claude на маршруте Anthropic должна действительно иметь 1M. Без автоконтекста учитываются только окна 1M. При выходе за реальное окно приходит ошибка prompt is too long, и Claude Code сам сжимает контекст. Её выбор заставляет Claude Code учитывать полный контекст 1M. Прокси удаляет суффикс [1m] (без учёта регистра) до разрешения алиасов и маршрутизации.

Автоконтекст (модели с большим контекстом без потолка 200k)

Заголовок раздела «Автоконтекст (модели с большим контекстом без потолка 200k)»

Для любой незнакомой модели Claude Code считает контекст равным 200k токенов. Автоконтекст (включён по умолчанию) исправляет это:

  1. Слоты окружения при запуске получают маркер [1m], когда эффективное окно из каталога больше 200k и не меньше настроенного порога автосжатия. Строки обнаружения и селектора Desktop этому порогу не следуют: для них действует фиксированный пол 829 800 токенов (настоящий 1M для моделей Claude на маршруте Anthropic).
  2. Внедряется CLAUDE_CODE_AUTO_COMPACT_WINDOW (по умолчанию 829800, диапазон 100000–1000000), чтобы в этой точке диалог автоматически резюмировался.

Три состояния конфигурации:

  • отсутствует / true: включено (по умолчанию)
  • false: выключено — ни маркеров, ни внедрения окна сжатия
  • задан устаревший maxContextTokens: автоконтекст неявно отключается

Значение сжатия настраивается в Подключение → Claude. Предупреждение: если поднять его выше реального окна модели, эта модель ломается — чат завершится ошибкой раньше, чем успеет сработать резюмирование.

При нормализации ошибок переполнения контекста используются только первые 65 536 единиц кода UTF-16 сообщения провайдера. Диагностические сведения и числа токенов за этой границей могут исчезнуть без отметки об усечении. Точные ограничения и условия переноса чисел токенов описаны в английском руководстве.

Нативные модели Anthropic с окном меньше 1M никогда не помечаются автоматически. Экспортированное вами окно сжатия имеет приоритет при пометке слотов запуска (прокси использует ВАШЕ значение, чтобы решить, какие модели можно безопасно пометить). Строки обнаружения игнорируют этот экспорт и сохраняют фиксированный пол. Некорректные значения, внесённые в конфигурацию вручную, откатываются к 829,800.

Учёт контекста (1M по умолчанию, 200k по выбору)

Заголовок раздела «Учёт контекста (1M по умолчанию, 200k по выбору)»

claudeCode.contextAccounting определяет, что opencodex выбирает по умолчанию. Без значения (1m, по умолчанию) модели с длинным окном предлагаются как 1M в слотах окружения запуска, селекторах Desktop, Desktop 3P (prefer1m) и созданных субагентах. Значение 200k это отключает: маркер [1m] автоматически не ставится, CLAUDE_CODE_AUTO_COMPACT_WINDOW не передаётся, а Desktop 3P убирает prefer1m, оставляя supports1m. Селектор, который вы сами пометили [1m], остаётся доступным (созданные и принудительные субагенты по-прежнему снимают маркер, который окно модели не выдерживает), а в списке обнаружения остаются строки · 1M для моделей с окном каталога не менее 1M. 200k важнее автоконтекста: экспортированное вами значение сжатия не включает автоматическую разметку снова, но opencodex ваш экспорт не трогает.

Terminal window
ocx claude config set --context-accounting 200k

effectiveModelEnv вычисляет шесть слотов, внедряемых ocx claude, системным окружением и shell-файлом: ANTHROPIC_MODEL, четыре ANTHROPIC_DEFAULT_{OPUS,SONNET,HAIKU,FABLE}_MODEL и устаревший ANTHROPIC_SMALL_FAST_MODEL. Эффективное значение Haiku — tierModels.haiku ?? smallFastModel; оно подставляется в обе переменные Haiku.

Когда ocx claude запускается в режиме подписки, собственный вход Claude Code отправляет голый идентификатор Claude, например claude-sonnet-5, прямо в Anthropic, поэтому контекстное окно для таких идентификаторов берётся из реестра провайдеров, что бы ни указывал другой провайдер для того же идентификатора. Незаданный слот Opus, Sonnet или Fable тогда получает нативный идентификатор, в который Claude Code разворачивает этот псевдоним, с маркером [1m]: за шлюзом Claude Code считает идентификатор без маркера равным 200k. Строка anthropic с ограничением ниже 1M или запись claudeCode.modelMap оставляет свой идентификатор без маркера, а Haiku никогда не заполняется и не помечается. При запуске с аутентификацией через прокси или с выключенным nativePassthrough решает маршрутизатор, и учитывается только окно маршрутизируемой строки. Системное окружение и shell-файл оставляют незаданные слоты пустыми, потому что их значения доходят и до запусков через хаб.

Если отсутствуют и tierModels.haiku, и smallFastModel, OpenCodex оставляет обе переменные вспомогательной модели незаданными. Затем Claude Code выбирает нативную вспомогательную модель (сейчас Sonnet), что может привести к расходам у нативного провайдера.

Запуск/ensure прокси, ocx claude и сохранение связанных настроек в панели синхронизируют ваш ростер избранных подагентов (вкладка Subagents, до 5 моделей) плюс ocx-self в ~/.claude/agents/ocx-*.md.

  • ocx-self закрепляет модель по умолчанию из селектора /model (с откатом на claudeCode.model); если нет ни того, ни другого, файл не создаётся. Наследование модели НЕ используется.
  • В теле каждого агента есть директива <!-- ocx-route: <model> --> — по ней прокси закрепляет реальный маршрут. Поэтому аргумент model инструмента Agent не действует; передавайте "haiku" как плейсхолдер.
  • Frontmatter содержит алиас; маршрутизация определяется директивой.
  • Перезаписываются или удаляются только проверенные по маркеру файлы ocx-*.md, содержащие generated-by: opencodex; ваши собственные агенты никогда не затрагиваются.
  • Каждый файл синхронизируется атомарно (write + rename).
  • enabled: false или injectAgents: false удаляет все определения с подтверждённым владением.
  • PUT из GUI и изменения ростера пересинхронизируются немедленно; лаунчер и системное окружение синхронизируются при запуске.

Диспетчеризация: subagent_type: "ocx-gpt-5-6-sol". Цели с поддержкой 1M автоматически получают [1m].

Встроенный в Claude Code скилл claude-api внедряет ~840 КБ (~136k токенов) документации Anthropic и автоматически срабатывает при упоминании моделей Claude. Маршрутизируемые модели на этом пакете не обучались, поэтому по умолчанию opencodex подменяет содержимое скилла короткой заглушкой в маршрутизируемых запросах. Нативный проброс Anthropic не затрагивается.

Обрабатываются два способа доставки:

  1. Через результат инструмента: вызовы Skill(...) со стороны ассистента — парное тело tool_result заменяется заглушкой, когда JSON-ввод в нижнем регистре содержит заблокированное имя.
  2. Через текстовый блок: пользовательский текстовый блок длиной ≥10 000 символов, начинающийся с Base directory for this skill: , — совпадение засчитывается, когда basename каталога равен заблокированному имени (без учёта регистра). Строка каталога проверяется только до 4 096 единиц кода UTF-16; более длинная строка отправляется без изменений, в том числе без завершающего перевода строки.

Настраивается через claudeCode.blockedSkills (по умолчанию ["claude-api"]; [] полностью отключает подмену). Заглушка сохраняет парность вызова инструмента и результата.

claudeCode.modelMap переписывает входящие id моделей Anthropic до маршрутизации:

{
"claudeCode": {
"modelMap": {
"claude-sonnet-4-5": "gemini/gemini-3-pro",
"claude-haiku-4-5": "gemini/gemini-3-flash"
}
}
}

Порядок поиска: алиас обнаружения → точный id → id без датировочного суффикса (-20250514) → проброс.

Неразрешённый Desktop ID в формате даты может быть реальным нативным модельным ID, отсутствующим в результатах обнаружения. Если имеющихся данных недостаточно для разрешения ID, Messages и count-tokens возвращают HTTP 503 с фиксированной ошибкой desktop_model_mapping_unavailable; это не доказывает недействительность модели. Неизвестные старые хеш-псевдонимы по-прежнему дают HTTP 400. В обоих случаях дата не удаляется и другая маршрутизация не подставляется. Известные ID, зарегистрированные сопоставления и точные записи modelMap, включая распознанные реальные нативные ID, обрабатываются как прежде. Обновите обнаружение моделей или повторно примените профиль подключённого хаба перед новой попыткой; один лишь повтор не гарантирует разрешения.

Матрица сайдкаров: веб-поиск и понимание изображений

Заголовок раздела «Матрица сайдкаров: веб-поиск и понимание изображений»

Не у всех маршрутизируемых моделей одинаковый набор серверных (hosted) инструментов и поддержка изображений. opencodex закрывает эти пробелы до того, как ответит основная модель:

  • Сайдкар веб-поиска выполняет настоящий серверный поиск, а затем передаёт маршрутизируемой модели ответ и источники как результат инструмента.
  • Vision-сайдкар описывает вложенное изображение перед вызовом модели из списка noVisionModels, а затем заменяет изображение этим описанием.

Оба сайдкара могут использовать любой из двух бэкендов:

Бэкенд Как работает Что требуется
openai Небольшая GPT-модель через провайдер ChatGPT forward Вход в ChatGPT и включённый провайдер с authMode: "forward"
anthropic Claude через сохранённый Anthropic OAuth; веб-поиск использует web_search_20250305, а vision отправляет изображение Claude для описания Включённый провайдер с adapter: "anthropic", authMode: "oauth", чей активный сохранённый аккаунт не помечен needsReauth

Явно указанный backend всегда имеет приоритет. Если он не задан, opencodex выбирает anthropic, когда существует пригодный сохранённый аккаунт Anthropic OAuth; иначе — openai. Явный выбор anthropic без пригодных учётных данных завершается отказом (fail closed): opencodex не заимствует втихую учётные данные ChatGPT и не переключает бэкенды. Бэкенд OpenAI точно так же не включается без одновременного наличия входа в ChatGPT и forward-провайдера.

При внутреннем повторе маршрутизируемых запросов, пришедших из Claude, к запросу прикрепляется основной вход ChatGPT, поэтому OpenAI-сайдкары остаются доступными, даже если входящий bearer из Claude Code — это лишь учётные данные для доступа к прокси. Этот bearer никогда не пересылается основному маршрутизируемому провайдеру.

{
"webSearchSidecar": {
"backend": "anthropic",
"model": "claude-sonnet-5",
"maxSearchesPerTurn": 3
},
"visionSidecar": {
"backend": "anthropic",
"model": "claude-sonnet-5",
"maxDescriptionsPerTurn": 8
}
}

maxDescriptionsPerTurn ограничивает число новых описаний изображений за один ход основной модели. Попадания в кеш и дублирующиеся описания, уже находящиеся в обработке, лимит не расходуют. Успешные описания data:-изображений кешируются по бэкенду, модели, detail, байтам изображения и контексту запроса, поэтому одна и та же пара «изображение + контекст» не описывается заново при каждом повторе. Удалённые https:-изображения никогда не кешируются, потому что их содержимое может меняться.

Полный список ключей см. в справочнике по конфигурации. Веб-поиск и описание изображений через Anthropic OAuth повторяют уже принятый в репозитории подход к OAuth-отпечатку Claude Code, но, прежде чем полагаться на них в длительных автономных запусках, их стоит обкатать на вашем аккаунте и рабочей нагрузке.

Для запросов, преобразуемых из Messages в Responses, настройка /effort в Claude Code сопоставляется следующим образом:

Формат передачи Сопоставление
thinking.type: "adaptive" + output_config.effort Уровень передаётся напрямую (minimal|low|medium|high|xhigh|max|ultra)
thinking.type: "enabled" + budget_tokens ≤4096→low, ≤16384→medium, выше→high
thinking.type: "disabled" Явно передаётся reasoning: { effort: "none" }, а summary опускается

Для преобразованных запросов полученный уровень отображается в столбце Reasoning effort журнала запросов. Управляемые нативные запросы Messages записывают включённый бюджет thinking как budget:<tokens>, если нет распознанного output_config.effort; запись в журнал не изменяет передаваемое тело запроса.

Прокси преобразует каждый запрос Anthropic Messages API в формат Codex Responses API:

Вход Messages Выход Responses
system верхнего уровня instructions (текстовые блоки объединяются через \n\n)
messages[].role: "system" Также сворачивается в instructions
Текст / изображение пользователя input_text / input_image (base64 → data URL)
Текст ассистента output_text
tool_use ассистента function_call (input → arguments в виде JSON-строки)
tool_result пользователя function_call_output (is_error → префикс [tool error])
Повтор thinking / redacted_thinking Элементы reasoning с ограниченными конвертами ocxr1 для подписей и скрытых данных
Function-инструменты {type: "function"} (web_search* → {type: "web_search"}). На переведённом маршруте к api.anthropic.com типизированные объявления web_search_* и web_fetch_* также передаются Anthropic для выполнения на сервере, если только сайдкар веб-поиска сам не предоставляет web_search. Поиск и загрузка возвращаются клиенту как server_tool_use и соответствующий web_search_tool_result / web_fetch_tool_result
tool_choice auto→auto, none→none, any→required, именованная функция→{type:"function",name}, размещённый WebSearch/web_search→{type:"web_search"}
max_tokens max_output_tokens
stop_sequences stop

Автоматический режим Claude Code всегда отправляет stop_sequences. Для моделей из списка noStopModels маршрутизируемого провайдера OpenCodex опускает stop и в Chat Completions, и в Responses, поэтому модели рассуждения xAI, такие как grok-4.7 и grok-4.6, не возвращают 400 invalid-argument и не помечаются как временно недоступные. См. noStopModels.

На выбранном адаптере Anthropic сохраняются нескрытые подписанные блоки (включая пустой thinking) и непрозрачные блоки redacted. Политика hideThinkingSummary не меняется: локально скрытый подписанный текст не раскрывается клиентам Claude, а воспроизведение без потерь через эту границу пока не подтверждено. Старые объединённые конверты не восстанавливают порядок после отправки потокового текста. claudeCode.compatibility: "enforce" по-прежнему отклоняет thinking replay. Приём реальным Anthropic и улучшение кеша не доказаны; #3719 остаётся открытым.

Случаи ошибок (400): некорректный JSON; отсутствующий или пустой model; отсутствующий или пустой messages; неподдерживаемая роль; tool_result без tool_use_id; tool_use без id/name; именованный tool_choice без имени.

Исходящее преобразование (Responses → Messages SSE)

Заголовок раздела «Исходящее преобразование (Responses → Messages SSE)»
Событие Responses Messages SSE
response.created message_start + ping
Heartbeat ping
Текстовые дельты content_block_start → content_block_delta (text) → content_block_stop
Резюме/текст рассуждений Блок thinking с повторно переданной подписью или ограниченным резервным конвертом ocxr1
Скрытое рассуждение Блоки redacted_thinking, воспроизведённые из конверта рассуждений
Кадры function-call Блок tool_use с input_json_delta
Завершающее событие message_delta → message_stop
EOF до завершающего события api_error в стиле 502

Сопоставление причин остановки: completed → tool_use (если был вызов инструмента) или end_turn; incomplete/max_output_tokens → max_tokens; incomplete/content_filter → refusal.

Таксономия ошибок: 400 invalid_request_error, 401 authentication_error, 402 billing_error, 403 permission_error, 404 not_found_error, 409 conflict_error, 413 request_too_large, 429 rate_limit_error, 504 timeout_error, 529 overloaded_error, прочие 5xx — api_error. Retry-After сохраняется.

Запросы, маршрутизируемые в Anthropic: адаптер управляет точками кеширования для инструментов, системного содержимого и предпоследнего сообщения пользователя, а также автоматическим cache_control верхнего уровня. На стабильных ходах диалога попадание в кеш обычно составляет около 99,9%.

Нативная маршрутизация OpenAI/ChatGPT: формируется сессионный prompt_cache_key (из metadata.user_id, если он есть, иначе — из хеша системного содержимого) и заголовок session_id для привязки к кешу. В ключ кеша входят модель и полные схемы инструментов.

Арифметика токенов: в ответе Anthropic из input_tokens вычитаются cached_tokens и cache_write_tokens, которые выводятся как cache_read_input_tokens и cache_creation_input_tokens. Журнал запросов сводит их обратно в инклюзивный inputTokens: чтения попадают и в cachedInputTokens, и в cacheReadInputTokens, записи — в cacheCreationInputTokens. Страница Usage показывает попадания в кеш и создание кеша по отдельности.

count_tokens: для маршрутизируемых моделей используется приближённая оценка (сериализованные system + messages + tools). Для нативных моделей Anthropic с учётными данными sk-ant- запрос пробрасывается на настоящую конечную точку Anthropic /v1/messages/count_tokens.

Захват входящих запросов управляется командой ocx debug claude on|off|status|reset, переменной OCX_CLAUDE_DEBUG=1 или запросом PUT /api/debug {"claude": true}. GET /api/claude/inbound-debug возвращает {enabled, entries} (сначала новые, кольцевой буфер на 20 записей).

Каждая запись фиксирует: at, endpoint, model, resolvedModel, stream, maxTokens, thinkingType, thinkingBudgetTokens, outputConfigEffort, metadataKeys, hasMetadataUserId, hasSystem, исходный anthropicBeta и восьмисимвольные HMAC-теги равенства для id пользователя и system. Текст промпта, сырой объект и стабильный межзапусковый хеш не сохраняются. Отключение отладки Claude немедленно очищает кольцевой буфер.

Откройте Подключение → Claude в дашборде, чтобы настроить Claude Code. Все настройки собраны на одной странице; Claude Desktop находится на отдельной вкладке в разделе Подключение. Элементы идут в следующем порядке:

  1. First-party для Claude Code CLI — переключатель режима first-party для CLI.
  2. Начало работы — команда ocx claude и блок ручной настройки окружения.
  3. Общие — Fast Mode, автоконтекст, порог сжатия и автоматическая регистрация подагентов.
  4. Фоновая вспомогательная модель — выбор модели для фоновых задач.
  5. Перехват моделей — редактор правил modelMap.
  6. Доступные модели — предпросмотр алиасов селектора /model.
  7. Подключение Claude — общий переключатель маршрутизации, тот же, что на карточке Claude в обзоре раздела Подключение.

Панель сохранения остаётся внизу экрана при прокрутке и показывает Изменений нет или Есть несохранённые изменения. Отменить изменения сбрасывает несохранённые настройки, а Сохранить применяет их. Переключатели Подключение Claude и First-party для Claude Code CLI применяются сразу; Сохранить никогда не меняет их состояние.

GET /api/claude-code возвращает эффективные значения по умолчанию, конфигурацию, реестр контекстных окон, эффективное окружение, доступные id маршрутов, алиасы и порт. PUT /api/claude-code — частичное обновление, пропущенные поля сохраняются; null сбрасывает значения context/blocklist/compact-window.

Claude Code пишет «Did 0 searches» — текущие сборки преобразуют завершённые элементы Responses web_search_call в парные блоки Anthropic server_tool_use и web_search_tool_result, включая usage.server_tool_use.web_search_requests. Если в старой сборке поиск выполнялся, но Claude Code всё равно насчитывал ноль, обновите opencodex.

Сайдкар не активируется — для backend: "openai" проверьте, что выполнен вход в ChatGPT и есть включённый провайдер с authMode: "forward". Для backend: "anthropic" проверьте, что активный сохранённый аккаунт Anthropic OAuth не помечен needsReauth. Явный выбор Anthropic без таких учётных данных намеренно завершается отказом.

«claude.ai connectors are disabled» — в вашей оболочке задан ANTHROPIC_API_KEY или ANTHROPIC_AUTH_TOKEN. ocx claude намеренно НЕ устанавливает ANTHROPIC_API_KEY; если вы экспортировали его сами, снимите переменную. ocx claude внедряет ANTHROPIC_BASE_URL, обнаружение моделей, автоконтекст и настроенные слоты моделей — но никогда ANTHROPIC_API_KEY.

Модели не появляются в селекторе /model — убедитесь, что установлена CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 (с ocx claude — автоматически). Запустите ocx claude, чтобы обновить кеш моделей шлюза в ~/.claude/cache/gateway-models.json. Проверьте, что claudeCode.enabled не равен false.

Устаревшее окружение после смены порта — если порт прокси изменился, в старых оболочках может остаться устаревший ANTHROPIC_BASE_URL. Откройте новый терминал или повторно запустите ocx claude.

Потолок контекста 200k, хотя модель больше — выберите в селекторе вариант [1m] или включите автоконтекст (включён по умолчанию). Если строки [1m] в селекторе нет, эффективное контекстное окно модели из каталога может быть меньше фиксированного пола в 829 800 токенов.

Большой расход токенов при загрузке скиллов — встроенный скилл claude-api (~136k токенов) автоматически загружается при упоминании моделей Claude. Для нативного проброса это нормально; для маршрутизируемых моделей opencodex по умолчанию подставляет заглушку (blockedSkills: ["claude-api"]).

Подагент отправляется не в ту модель — агенты из ростера (ocx-*) используют директивы <!-- ocx-route: ... -->, а не аргумент model инструмента Agent. Убедитесь, что директива соответствует нужному маршруту. В качестве плейсхолдера модели передавайте "haiku".

Параметр claudeCode.stabilizePromptCache: true в config.json отделяет поддерживаемые уведомления Claude от конца системных инструкций на маршрутах с преобразованием. Распознанные блоки вида <total_tokens>N tokens left</total_tokens> удаляются, в том числе при повторении. Напоминания TaskCreate по-прежнему переносятся в пользовательское сообщение в конце; если отделены только блоки с остатком токенов, входное сообщение не добавляется. По умолчанию он выключен (false). Включайте его только когда такое изменение роли допустимо для ваших клиентов. Примеры в блоках кода и нераспознанный текст сохраняются; нативная передача Anthropic не меняется. Без метаданных ключ кэша рассчитывается по стабилизированным инструкциям. Идентификатор разговора не создаётся, попадания в кэш не гарантируются.

На всех преобразованных Chat-маршрутах напоминания в истории сохраняют свою позицию в разговоре — после ожидаемых результатов инструментов. Поэтому добавление нового напоминания не переписывает начальный системный промпт, а инструкция из середины разговора не оказывается раньше тех ходов, после которых она была написана. Роль этой позиции определяется отдельно: напоминание отправляется как system, если провайдер не записал foldDeveloperRoleToSystem: false — эта запись означает, что вышестоящий сервис принимает роль developer, и тогда она передаётся в той же позиции. Сервис, который её не принимает, отвечает 400 role 'developer' is not allowed, и ход не начинается, поэтому незаписанное назначение сворачивается. Это работает независимо от stabilizePromptCache; нативная передача Anthropic остаётся прежней. Для повторного использования кэша по-прежнему нужны стабильный идентификатор сессии и доступный кэш провайдера. Изменения прежних инструкций или инструментов и сжатие разговора также могут влиять на попадания в кэш; само сохранение порядка напоминаний не гарантирует повторного использования.

The Subagents page offers Force all subagents onto one model, off by default. Select an exposed roster-style id, such as combo/tev-auto, then enable the switch. The roster is offered first; unavailable saved roster entries cannot be force targets.

ocx agent subagents force combo/tev-auto sets claudeCode.subagentModelForce; ocx agent subagents force - clears it. ocx agent status reports the setting. GET /api/subagent-models returns force, forceAvailable, and forceStatus; PUT accepts { "force": "combo/tev-auto" } or { "force": null } without changing the roster. Omitting force leaves it unchanged. Invalid or unexposed targets are rejected on write; stale targets are reported and skipped at launch.

This takes effect on the next routed ocx claude launch, injecting CLAUDE_CODE_SUBAGENT_MODEL as an explicit proxy alias (with [1m] when the effective catalog window reaches the fixed 829,800-token floor, and only for a genuine 1M window on Anthropic Claude models and bare claude-* selectors; native Claude targets use a reversible native alias) and CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1. Each nonempty shell-exported variable independently wins. Native launches inject neither variable; plain claude is not affected. No plugin files or settings.json are modified by this setting.

Claude Code 2.1.257 or newer is required for FORCE. Plugin and built-in agents (including Explore/Plan) and per-call model arguments are overridden. Forks and subagent skills with model: inherit keep the main conversation model. The main loop and Haiku/small-fast sidecars are unaffected. Existing roster files remain available.

The dashboard warns about old or unknown CLI versions, unavailable targets, and either variable already present in settings.json → env (which overrides launch env). Detection is read-only and server-local: it cannot inspect another launch shell, another machine, or project-local settings. An unknown result is not proof of force support.

Explicit gateway selectors on a generated agent request take precedence over its legacy ocx-route fallback, even if the saved force setting changes after launch. For shell or settings overrides of generated roster agents, use an explicit gateway alias; bare Claude ids retain the older-client fallback behavior. Native aliases restore their bare model before the existing credential and model-map checks. Connected launches validate force targets against a fresh authenticated gateway catalog; failed discovery skips automatic force injection, and cached context windows alone never prove availability.

Только до начала вывода: Если HTTP 401 содержит authentication_error (без error.code) с точным сообщением “OAuth access token has been revoked.”, отправившая запрос учётная запись OAuth помечается как требующая нового входа, а привязки сессий очищаются. До начала вывода возможен переход к доступной записи того же пула в пределах существующих лимитов отправки. Без замены возвращается исходный 401; запись исключается до нового входа. Обработка других 401 не меняется.