Веб-дашборд
opencodex включает локальный веб-дашборд (Vite/React-приложение в каталоге gui/), который раздаёт
сам прокси. Это кратчайший путь к управлению провайдерами, аккаунтами Codex/ChatGPT, моделями
каталога, сайдкарами, настройками подагентов и трафиком запросов.
Как открыть
Заголовок раздела «Как открыть»ocx guiКоманда открывает http://localhost:<port> в браузере, при необходимости сначала автоматически
запуская прокси. При разработке dev-сервер GUI можно запускать отдельно поверх работающего прокси:
ocx startbun run dev:guiПри открытии дашборда через loopback-адрес, например localhost или 127.0.0.1, он автоматически получает краткоживущую GUI-сессию, поэтому ввод токена обычно не требуется. Для дашборда на любом другом хосте нужен административный токен из OPENCODEX_ADMIN_AUTH_TOKEN или автоматически созданного файла ~/.opencodex/admin-api-token.
Удалённый дашборд показывает стандартную форму пароля, поэтому менеджер паролей браузера может предложить сохранить и автозаполнять токен. Сам дашборд хранит токен только в памяти и не записывает его в localStorage или sessionStorage; решение о сохранении полностью остаётся за браузером или менеджером паролей.
Возможности
Заголовок раздела «Возможности»| Раздел | Что делает |
|---|---|
| Сводка Dashboard | Мультиагентный режим, состояние онлайн, версия, время работы, число провайдеров, сумма токенов за 30 дней, активные провайдеры и доступные нативные/маршрутизируемые модели. |
| Sub-agent delegation | Выбор нативной/маршрутизируемой модели и необязательного уровня рассуждений, общих для руководства OpenCodex по делегированию и опциональных нативных значений подагентов Codex по умолчанию. Это не маршрутизатор отдельных порождений; см. ниже. |
| Сайдкары | Выбор модели и уровня рассуждений для веб-поиска, а также модели описания изображений. Изменения применяются со следующего запроса. |
| Maintenance | Пересинхронизация каталога моделей Codex, просмотр предупреждений об обходе через проектную локальную конфигурацию, проверка последнего или предварительного выпуска и запуск обновления с необязательным перезапуском прокси. |
| Безопасность запуска | Показывает, сохранит ли внедрённая маршрутизация Codex работоспособность после перезагрузки, отдельно отображая службу, launcher shim и точные команды исправления. |
| Трей Windows | Устанавливает пользовательский значок входа для запуска, остановки, перезапуска, панели и состояния прокси одним щелчком. Трей не является службой перезапуска. |
| Автозапуск Codex | Разрешает уже установленному launcher shim Codex выполнять ocx ensure. Переключатель не устанавливает shim или фоновую службу. |
| Providers | Добавление, редактирование, назначение провайдера по умолчанию (только включённые), включение/отключение и удаление провайдеров; управление пулами OAuth-аккаунтов и пулами API-ключей там, где они поддерживаются. При удалении текущего провайдера по умолчанию выбирается первый оставшийся включённый провайдер, если он есть; иначе удаление отклоняется и текущий default сохраняется. Для пулов Claude (Anthropic) OAuth у каждого вошедшего аккаунта свои полосы 5-часового и недельного лимита (использование по учётным данным); при сбое опроса сохраняются последние известные значения с пометкой недоступности. Обзор Providers, который показывается, когда провайдер не выбран, содержит кнопку Обновить все квоты: она принудительно перечитывает на сервере все настроенные провайдеры за один раз. Провайдер с неудачным опросом сохраняет последнее известное значение, поэтому статус сообщает лишь о завершении проверки, а не о том, что все значения свежие; время проверки в каждой строке остаётся признаком актуальности для конкретного провайдера. |
| Add provider | Поиск по пресетам из реестра: вход по аккаунту, сервисы с API-ключом, локальные серверы или пользовательская конечная точка. |
| Codex Auth | Добавление аккаунтов пула ChatGPT/Codex, выбор аккаунта для следующей сессии, обновление квот 5 ч / недельных / 30-дневных, включение или отключение автопереключения, настройка его порога 1–100% и failover при временных сбоях. |
| Subagents | Выделение до пяти «голых» нативных или маршрутизируемых моделей с пространством имён в списке переопределений spawn_agent. |
| Models | Включение и отключение нативных GPT и маршрутизируемых моделей, настройка списков разрешённых провайдеров и лимитов контекста, выбор v1/base/v2 и настройка лимита потоков v2. |
| Logs | Автообновляемый список недавних запросов: токены, запрошенный и, когда доступен, фактически отправленный уровень рассуждений, фактическая модель, провайдер, статус, id запроса, длительность и подробности ошибок. Если адаптер отправляет параметр рассуждений, в подробностях также отображается точное wire-поле. Можно фильтровать по непрозрачному id диалога/сессии (если клиент его передаёт) и суммировать токены и оценочную стоимость по прайс-листу в пределах загруженного кольца Logs. |
| Usage / Debug | Просмотр покрытия и трендов расхода токенов либо включение опциональной диагностики транспорта провайдеров и извлечения данных об использовании. |
| Storage | Только чтение разбивки диска CODEX_HOME (сессии, архивы, БД, вложения). Опциональная очистка архива: предпросмотр самых старых N%, затем карантин в CODEX_HOME/.trash (по умолчанию) или безвозвратное удаление по явному флажку. Политика автоочистки — opt-in и по умолчанию ВЫКЛ (storageCleanupPolicy.enabled); порог/цель/расписание/режим на странице Storage или Запустить сейчас. Записи карантина можно восстановить со страницы Storage (JSONL + threads). Активные сессии только для чтения. Очистка и восстановление отклоняются, пока Codex держит блокировку новейшего/активного state_*.sqlite. |
| Stop | Корректная остановка прокси и установленного фонового сервиса, восстановление нативного Codex и выход (POST /api/stop). На Windows с бэкендом планировщика заданий дашборд отказывает и просит выполнить ocx stop: обёртка может перезапустить прокси после завершения задачи, и проверить это окно перезапуска до восстановления клиентской конфигурации способен только stop, работающий вне прокси. При отказе ничего не изменяется. |
Фильтрация запросов
Заголовок раздела «Фильтрация запросов»Фильтры объединяют источник, перехваченные запросы, провайдера, точную модель, статус, время, скорость и ID диалога в загруженном журнале. Варианты включают резервные попытки; модель сравнивается без учёта регистра и крайних пробелов, но не по подстроке. Исчезнувший вариант сбрасывается на все записи.
Периоды 15 минут, час и сутки обновляются каждые 30 секунд на вкладке Logs даже при выключенном автообновлении. Скорость — выходные токены в секунду за полную длительность запроса: меньше 15, от 15 до менее 50, не менее 50; недоступные значения исключаются при активном фильтре скорости. Успех — 2xx, ошибки — 4xx/5xx.
Счётчик показывает совпадения из загруженного общего числа; сброс возвращает все строки. Нет совпадений и пустой журнал различаются. Источник выбирается стрелками и Home/End. История вне загруженного журнала не запрашивается.
Ссылки на разделы
Заголовок раздела «Ссылки на разделы»Макет теперь один, поэтому переключать нечего. Зато у разделов Dashboard есть собственные адреса: #dashboard открывает Overview, а #dashboard/providers и #dashboard/models — два других раздела. Перезагрузка, закладка и кнопка «Назад» сохраняют выбранный раздел. Logs работает так же — #logs и #logs/debug. Старая закладка #providers/workspace теперь ведёт на #providers.
Значения стоимости в Logs и Usage — это эквиваленты стоимости по прайс-листу API, рассчитанные на основе сообщённых токенов. Они не являются счётом и не подтверждают фактическое списание; расходы могут покрываться подпиской или кредитами провайдера.
Видимость моделей
Заголовок раздела «Видимость моделей»Переключатели Models показывают итоговую видимость в Codex. Маршрутизируемая модель включена, только если она входит в allowlist провайдера (или allowlist отсутствует) и не отключена. Включение атомарно согласует оба фильтра, а Включить все удаляет allowlist и включает новые модели.
Управление моделями в рабочей области провайдера
Заголовок раздела «Управление моделями в рабочей области провайдера»На вкладке Модели провайдера действие Удалить удаляет сохранённое пользовательское определение. Исходная нативная или обнаруженная модель может появиться снова, поэтому счётчик моделей может не измениться. Скрыть меняет только видимость в каталоге, не удаляя определение и не меняя политику прямой маршрутизации. Кнопка Управлять видимостью в разделе «Модели» открывает страницу Модели, где можно восстановить видимость, даже если вкладка провайдера пуста.
Добавить сохраняет пользовательское определение, но не отменяет существующее скрытие или правила выбора провайдера. Сохранённая модель может остаться скрытой. Если модель уже известна, управляйте её видимостью в разделе Модели. Подтверждённое сохранение остаётся действительным при сбое обновления каталога: следуйте сообщению об обновлении, не добавляя модель повторно. Если изменение не подтверждено, обновите состояние моделей перед повторной попыткой.
Счётчик провайдера показывает число уникальных неотключённых записей в текущем списке моделей, полученном от сервера, до поиска и ограничения числа отображаемых строк. Это не размер списка разрешений, не число моделей из живого обнаружения и не доказательство происхождения записи. Метки выбора и сведения об обнаружении учитываются отдельно.
Селектор делегирования и маршрутизация порождений
Заголовок раздела «Селектор делегирования и маршрутизация порождений»Селектор Sub-agent delegation в дашборде сохраняет injectionModel и, при желании,
injectionEffort. Выбранные значения используются в добавляемом OpenCodex руководстве по
делегированию, которое отдельно управляется полем multiAgentGuidanceEnabled. Очистка модели также
очищает сохранённый уровень и отключает синхронизацию нативных значений по умолчанию.
Если включить Использовать как нативные значения подагентов Codex по умолчанию, следующая
синхронизация или перезапуск применит выбранные модель и уровень как нативные значения [agents],
когда активной маршрутизацией Codex управляет OpenCodex. Внешняя пользовательская конфигурация
провайдера остаётся неизменной. Они действуют только для вновь создаваемых задач Codex, и эта настройка сама по себе не запускает
делегирование. Существующие пользовательские значения [agents] не перезаписываются, а сохраняются,
поэтому запрошенные и фактические значения Codex по умолчанию могут различаться.
Сессии, ключи и статистика Remote Hub
Заголовок раздела «Сессии, ключи и статистика Remote Hub»Контур управления панели отделён от прямого трафика client→hub. Integrations → API Keys показывает ожидающую ротацию, отображает новый секрет один раз и требует явного подтверждения или отмены. Logout браузера отзывает только текущую сессию. При подключении статистика hub фильтруется по apiKeyId; после отключения используется локальная, без зеркалирования.
Селектор предлагает включённые нативные и маршрутизируемые модели, а также глобальную шкалу уровней рассуждений Codex. API валидирует выбранный уровень глобально; Codex дополнительно валидирует уровень порождения по целевой записи каталога.
Codex Auth и пулы аккаунтов
Заголовок раздела «Codex Auth и пулы аккаунтов»Страница Codex Auth управляет нативным маршрутом ChatGPT/Codex:
- Ручной выбор аккаунта применяется сразу: уже привязанный поток переходит на выбранный аккаунт со следующего запроса, а захваченный аккаунт сохраняют только уже отправленные запросы. Выбранный вручную аккаунт также закрепляется: на карточке появляется бейдж ЗАКРЕПЛЁН, и более высокий порядок выбора не может вытеснить этот аккаунт, пока он не исчерпан, пока вы не выберете другой аккаунт или пока не измените порядок выбора любого аккаунта. Закрепление также снимается при исключении или удалении аккаунта, а также при явном failover/promotion.
- На карточке каждого аккаунта есть элемент управления Порядок выбора (Первым, Раньше,
По умолчанию, Позже, Последним). Аккаунты с более высоким порядком используются раньше, а на более
низкий порядок пул опускается лишь тогда, когда все аккаунты выше исчерпаны или недоступны.
Изменённый порядок действует начиная со следующего непривязанного запроса и никогда не
перемещает уже привязанный поток. Аккаунт Codex Desktop (основной) упорядочивается наравне с
остальными, поэтому его можно поставить Последним и держать в резерве. Порядок, заданный через
ocx account priorityвне этих пяти пресетов, остаётся видимым и выбираемым на карточке. - Привязка потока предотвращает метание между аккаунтами на каждом запросе. При включённом автопереключении по квоте долгоживущий поток периодически переоценивается и может перепривязаться, когда его релевантное использование достигает порога и существует подходящий аккаунт со строго меньшим использованием.
- Новые сессии могут выбирать подходящий аккаунт с наименьшим использованием. Платные тарифы оцениваются по самому загруженному из известных окон — 5-часового, недельного или 30-дневного; тарифы Go/Free используют только 30-дневное окно.
- Refresh quotas немедленно перечитывает использование аккаунтов, чтобы маршрутизация и карточки аккаунтов опирались на одни и те же значения.
- Логи запросов пула используют непрозрачные метки вида
p3fa91cи никогда — email аккаунтов. - Выбирать конкретный аккаунт Codex в списке моделей — явная opt-in настройка. После включения
обычные пункты GPT заменяются отдельным пунктом для каждого публичного selector’а. Выбор закрепляет
разговор за сопоставленным аккаунтом: без Pool-ротации, fallback и изменения active Pool account.
Для встроенного логина Codex App используется отдельный selector; в созданных map он обычно
называется
main, а при коллизии получает безопасный суффикс вродеmain-2. Добавленные аккаунты получают стабильные privacy-safe метки. Существующие разговоры и сохранённые варианты моделей продолжают маршрутизироваться. Отключение не удаляет аккаунты, selector’ы и exact routes, а обычные GPT id продолжают использовать настроенный режим Pool или Direct. - Добавление/удаление аккаунта и picker-настройка сохраняются до catalog refresh. Если refresh не
завершился, дашборд показывает amber-предупреждение с восстановлением. Изменение уже сохранено;
выполните
ocx sync, чтобы повторить refresh.
Обзор Providers дополнительно сводит использование Pool-режима в оценочную взвешенную ёмкость только для отображения, рядом с исходной квотой текущего активного аккаунта и следующим восстановлением ёмкости. Поля, значение неполного покрытия и границы маршрутизации описаны в разделе ёмкость пула в обзоре провайдеров.
Как дашборд взаимодействует с прокси
Заголовок раздела «Как дашборд взаимодействует с прокси»GUI — это тонкий клиент поверх JSON-API управления прокси. Полезные эндпоинты:
| Эндпоинт | Назначение |
|---|---|
GET / PUT /api/settings |
Чтение настроек и изменение автозапуска Codex, stream/memory и видимости account-targeting picker. |
GET /api/startup-health |
Чтение безопасной диагностики маршрутизации, службы, shim и устойчивости к перезагрузке. |
GET / POST /api/windows-tray |
Чтение или изменение установки и видимости трея Windows; POST поддерживает install, start, stop, uninstall. |
POST /api/sync |
Пересборка общего каталога моделей и инвалидация кэша моделей Codex. |
GET /api/update/check · POST /api/update/run · GET /api/update/status |
Проверка, запуск и мониторинг задач самообновления. |
GET / PUT /api/sidecar-settings |
Чтение или настройка моделей сайдкаров поиска/vision. |
GET / PUT /api/injection-model |
Чтение или настройка модели/уровня руководства по делегированию, его переключателя и переключателя синхронизации нативных значений подагентов Codex по умолчанию. |
GET / PUT /api/v2 |
Чтение или настройка режима поверхности, фиче-флага Codex и лимита потоков v2. |
GET /api/providers · POST /api/providers · PATCH /api/providers?name=... · DELETE /api/providers?name=... |
Список, добавление/замена, включение/отключение, назначение default или удаление. PATCH задаёт default отдельным { "setDefault": true } для включённого провайдера; POST может включать setDefault при создании/замене (тоже только для включённых). Удаление текущего default переназначает на первый оставшийся включённый провайдер, если он есть; иначе API возвращает 409 с code: "last_provider" и сохраняет текущий default. |
GET /api/models · PUT /api/disabled-models |
Список строк нативных/маршрутизируемых моделей и обновление общего набора отключённых моделей. |
GET /api/selected-models · PUT /api/model-visibility |
Чтение allowlist провайдера и атомарное изменение итоговой видимости модели или группы провайдера. |
GET /api/key-providers · GET /api/oauth/providers |
Чтение каталогов провайдеров с API-ключом и OAuth. |
POST /api/oauth/login · GET /api/oauth/status |
Запуск OAuth-процесса провайдера и опрос его завершения. |
GET /api/codex-auth/accounts?refresh=1 |
Список основного и пуловых аккаунтов с принудительным обновлением квот и состояниями hasCredential / terminal needsReauth основного аккаунта. |
PUT /api/codex-auth/active · PUT /api/codex-auth/auto-switch · PUT /api/codex-auth/failover |
Выбор аккаунта для следующего запроса и настройка маршрутизации пула. |
GET /api/codex-auth/active · PUT /api/codex-auth/accounts/priority |
Чтение эффективного аккаунта (включая признак закрепления pinned и закреплённый аккаунт pinnedAccountId) и установка порядка выбора для одного аккаунта. |
POST /api/codex-auth/login · GET /api/codex-auth/login-status |
Добавление аккаунта пула через вход в браузере. |
GET /api/logs?tail=50&limit=20&offset=0&provider=...&status=5xx |
Чтение метаданных недавних запросов с необязательными фильтрами tail, провайдера и точного/классового статуса. limit/offset листают назад от самой новой строки (offset=0 — последняя страница). Ответ: { timeZone, generatedAt, total, logs }, где total — число совпадений до пагинации. |
GET / PUT /api/subagent-models |
Чтение или настройка пяти выделенных моделей переопределения spawn_agent. |
POST /api/stop |
Остановка прокси/сервиса, восстановление нативного Codex и выход. Отклоняется с respawnable_service на бэкенде планировщика заданий Windows и с service_state_unknown, когда это состояние не удаётся прочитать; в обоих случаях ничего не изменяется. |

