Codex App-Server Runtime
Hermes может опционально передавать обработку запросов openai/* и openai-codex/* Codex CLI app-server вместо использования собственного цикла инструментов. При включении терминальные команды, редактирование файлов, песочница и вызовы MCP-инструментов выполняются внутри рантайма Codex — Hermes становится оболочкой вокруг него (база сессий, слеш-команды, шлюз, память и обзор навыков).
Это только опционально. Поведение Hermes по умолчанию не меняется, пока вы не включите флаг. Hermes никогда не перенаправляет вас на этот рантайм автоматически.
Зачем
- Запускать запросы агента OpenAI с использованием вашей подписки ChatGPT (без необходимости в API-ключе), используя тот же поток аутентификации, что и Codex CLI.
- Использовать собственный набор инструментов и песочницу Codex —
shellдля терминала/чтения/записи/поиска,apply_patchдля структурированных правок,update_planдля планирования, всё работает внутри песочницы seatbelt/landlock. - Нативные плагины Codex — Linear, GitHub, Gmail, Calendar, Canva и т.д. — установленные через
codex plugin, автоматически переносятся и активны в вашей сессии Hermes. - Более богатые инструменты Hermes также доступны — web_search, web_extract, автоматизация браузера, vision, генерация изображений, навыки и TTS работают через MCP-колбэк. Codex вызывает Hermes для инструментов, которых у него нет.
- Напоминания о памяти и навыках продолжают работать — события Codex проецируются в формат сообщений Hermes, так что цикл самоулучшения видит обычную стенограмму.
Какие инструменты на самом деле есть у модели
Это та часть, которую большинство пользователей хотят знать заранее. Когда этот рантайм включен, модель, выполняющая ваш запрос, имеет три независимых источника инструментов:
1. Встроенный набор инструментов Codex (всегда включен)
Они поставляются с codex app-server — без участия Hermes, без MCP, без плагинов. Все пять доступны сразу после запуска рантайма:
shell— выполняет произвольные команды оболочки внутри песочницы. Так модель читает файлы (cat,head,tail), записывает их (echo > foo, heredocs), ищет (find,rg,grep), перемещается по каталогам (ls,cd), запускает сборки, управляет процессами и всё остальное, что вы делаете в bash.apply_patch— применяет структурированный многофайловый diff в формате патча Codex. Модель использует его для нетривиальных правок кода (добавление функции, рефакторинг в нескольких файлах); heredocs оболочки по-прежнему доступны для одноразовых записей.update_plan— внутренний трекер задач/планов Codex. Аналог инструментаtodoв Hermes, но управляется полностью внутри рантайма Codex.view_image— загружает локальный файл изображения в разговор, чтобы модель могла его увидеть.web_search— у Codex есть собственный встроенный веб-поиск при настройке. Hermes также предоставляетweb_search(на базе Firecrawl) через колбэк ниже; модель выбирает тот, который предпочитает.
Таким образом, всё, что вы делаете через терминал — чтение/запись/поиск/запуск — Codex делает нативно. Профиль песочницы (:workspace по умолчанию при включении рантайма) контролирует, что доступно для записи.
2. Нативные плагины Codex (автоматически переносятся из вашей установки codex plugin)
Когда вы включаете рантайм, Hermes запрашивает RPC plugin/list у Codex и записывает запись [plugins."<name>@openai-curated"] для каждого установленного плагина. Сами плагины управляются Codex и авторизуются один раз через собственный UI Codex.
Примеры (те, что в обсуждении OpenClaw были названы "достойными видео на YouTube"):
- Linear — поиск/обновление задач
- GitHub — поиск кода, просмотр PR, комментарии
- Gmail — чтение/отправка почты
- Google Calendar — создание/поиск событий
- Outlook calendar/email — то же самое через коннектор Microsoft
- Canva — генерация дизайнов
-...и всё остальное, что вы установили через
codex plugin marketplace add openai-curated+codex plugin install...
Что НЕ переносится:
- Плагины, которые вы ещё не установили — сначала установите их в Codex.
- Записи маркетплейса приложения ChatGPT (app/list) — они уже включены внутри Codex благодаря аутентификации вашей учётной записи.
3. Колбэк инструментов Hermes (MCP-сервер, зарегистрированный в ~/.codex/config.toml)
Hermes регистрирует себя как MCP-сервер, чтобы Codex мог вызывать инструменты, которых нет в поставке Codex. Доступны через колбэк:
web_search/web_extract— на базе Firecrawl; обычно чище для структурированного контента, чем скрапинг.browser_navigate/browser_click/browser_type/browser_press/browser_snapshot/browser_scroll/browser_back/browser_get_images/browser_console/browser_vision— полная автоматизация браузера через Camofox или Browserbase.vision_analyze— вызов отдельной vision-модели для анализа изображения (отличается отview_imageв Codex, который загружает изображение в разговор).image_generate— генерация изображений через цепочку плагинов image_gen в Hermes.skill_view/skills_list— чтение из библиотеки навыков Hermes.text_to_speech— TTS через настроенного провайдера Hermes.
Когда модель хочет использовать один из этих инструментов, Codex запускает подпроцесс hermes_tools_mcp_server через stdio MCP, вызов обрабатывается через model_tools.handle_function_call() (тот же путь кода, что и в рантайме Hermes по умолчанию), и результат возвращается в Codex как любой другой MCP-ответ.
Что НЕДОСТУПНО в этом рантайме
Эти четыре инструмента Hermes требуют контекста работающего AIAgent (состояние внутри цикла) для диспетчеризации, и статический MCP-колбэк не может их запустить. Переключитесь обратно на рантайм по умолчанию (/codex-runtime auto), когда они понадобятся:
delegate_task— порождение подагентовmemory— постоянное хранилище памяти Hermessession_search— поиск по сессиямtodo— хранилище задач Hermes (аналогupdate_planв Codex — это эквивалент внутри рантайма)
Возможности рабочего процесса (/goal, канбан, cron)
/goal (цикл Ralph)
Работает в этом рантайме. Цели сохраняются в state_meta по идентификатору сессии, подсказка продолжения возвращается как обычное сообщение пользователя через run_conversation(), и Codex нативно выполняет следующий шаг. Судья целей работает через вспомогательный клиент (настраивается через auxiliary.goal_judge в config.yaml), независимо от активного рантайма. Вердикт судьи "заблокировано, требуется ввод пользователя" является чистым выходом, если Codex застрял на одобрениях.
Стоит учитывать: каждая подсказка продолжения — это новый шаг Codex, что означает, что Codex заново оценивает политику одобрения команд. Если вы выполняете долгосрочную цель с множеством записей, ожидайте больше запросов на одобрение, чем при одной задаче в сессии. Установите default_permissions = ":workspace" (Hermes делает это автоматически при включении рантайма), чтобы простые записи в рабочем пространстве не требовали подтверждения.
Канбан (многоагентная диспетчеризация worktree)
Работает в этом рантайме, с одной тонкой зависимостью. Диспетчер канбана запускает каждого рабочего как отдельный подпроцесс hermes chat -q, который читает конфигурацию пользователя — это означает, что если model.openai_runtime: codex_app_server установлен глобально, рабочие также запускаются на рантайме Codex.
Что работает внутри рабочего на рантайме Codex: - Полный набор инструментов Codex (shell, apply_patch, update_plan, view_image, web_search) — рабочий выполняет свою фактическую задачу нативно - Перенесённые плагины Codex — Linear, GitHub и т.д. - Колбэк инструментов Hermes для browser_*, vision, image_gen, skills, TTS
Что также работает, потому что MCP-колбэк их предоставляет:
- kanban_complete / kanban_block / kanban_comment / kanban_heartbeat — инструменты передачи управления рабочим. Они читают HERMES_KANBAN_TASK из окружения (устанавливается диспетчером), правильно проверяют доступ и записывают в ~/.hermes/kanban.db. Без них в колбэке рабочий на этом рантайме мог бы выполнить задачу, но не смог бы сообщить о результате, зависнув до тайм-аута диспетчера.
- kanban_show / kanban_list — запросы доски только для чтения, чтобы рабочий мог проверить свой контекст.
- kanban_create / kanban_unblock / kanban_link — операции только для оркестратора. Доступны для агентов-оркестраторов, работающих на рантайме Codex, которым нужно диспетчеризировать новые задачи.
Инструменты канбана защищены переменной окружения HERMES_KANBAN_TASK, которую устанавливает диспетчер — эта переменная передаётся в подпроцесс Codex (Codex наследует окружение), а оттуда в запущенный подпроцесс MCP-сервера hermes-tools. Таким образом, инструменты видят правильный идентификатор задачи и правильно проверяют доступ.
Cron-задачи
Специально не тестировались. Cron-задачи запускаются через cronjob → AIAgent.run_conversation, тот же путь кода, что и CLI. Если в конфигурации cron-задачи установлено openai_runtime: codex_app_server, она будет выполняться на Codex. Применяются те же правила доступности инструментов — встроенные инструменты Codex + плагины + MCP-колбэк работают, инструменты цикла агента (delegate_task, memory, session_search, todo) — нет. Если ваша cron-задача полагается на них, ограничьте cron профилем, использующим рантайм по умолчанию.
Компромиссы
| Рантайм Hermes по умолчанию | Codex app-server (опционально) | |
|---|---|---|
Подагенты delegate_task |
да | недоступно — требуется контекст цикла агента |
memory, session_search, todo |
да | недоступно — требуется контекст цикла агента |
web_search, web_extract |
да | да (через MCP-колбэк) |
| Автоматизация браузера (Camofox/Browserbase) | да | да (через MCP-колбэк) |
vision_analyze, image_generate |
да | да (через MCP-колбэк) |
skill_view, skills_list |
да | да (через MCP-колбэк) |
text_to_speech |
да | да (через MCP-колбэк) |
shell Codex (терминал/чтение/запись/поиск/запуск) |
— | да (встроенный в Codex) |
apply_patch Codex (структурированные многофайловые правки) |
— | да (встроенный в Codex) |
update_plan Codex (todo внутри рантайма) |
— | да (встроенный в Codex) |
view_image Codex (загрузка изображения в разговор) |
— | да (встроенный в Codex) |
| Песочница Codex (seatbelt/landlock, профили) | — | да (встроенная в Codex) |
| Аутентификация через подписку ChatGPT | — | да (через провайдер openai-codex) |
| Нативные плагины Codex (Linear, GitHub и т.д.) | — | да (автоматически переносятся) |
| Пользовательские MCP-серверы | да | да (автоматически переносятся в Codex) |
| Фоновый обзор памяти + навыков | да | да (через проекцию элементов) |
| Многошаговые разговоры | да | да |
/goal (цикл Ralph) |
да | да |
| Диспетчеризация рабочих канбана | да | да (через колбэк) |
| Инструменты оркестратора канбана | да | да (через колбэк) |
| Все платформы шлюза | да | да |
| Провайдеры, отличные от OpenAI | да | н/д — ограничено OpenAI/Codex |
Предварительные требования
- Установлен Codex CLI:
bash npm i -g @openai/codex codex --version # 0.130.0 или новее -
Вход в Codex по OAuth. Подпроцесс Codex читает
~/.codex/auth.json. Два выхода обойти его:bash codex login # записывает токены в ~/.codex/auth.jsonСобственныйкод входа в систему аутентификации Гермесав Гермесе записывает в~/.hermes/auth.json— это отдельная сессия. Запуститеcodex loginотдельно, если ещё не сделали этого. -
(Необязательно) Установите нужные плагины Codex. Когда вы загрузите рантайм, Hermes автоматически перенесёт курируемые плагины, которые вы уже установили через интерфейс командной строки Codex:
bash codex plugin marketplace add openai-curated # затем через TUI Codex установите Linear / GitHub / Gmail и т.д.Hermes подключит их и автоматически запишет записи[plugins."<name>@openai-curated"]в~/.codex/config.toml.
Включение
В сессии Гермес:
/codex-runtime codex_app_server
Эта команда:
- Проверяет, установлен ли CLI codex (блокирует с подсказкой по установке, если нет).
- Сохраняет model.openai_runtime: codex_app_server в вашем config.yaml.
- Переносит пользовательские MCP-серверы из ~/.hermes/config.yaml в ~/.codex/config.toml.
- Обнаруживает и переносит установленные собственные плагины Codex (Linear, GitHub, Gmail, Calendar, Canva и т.д.), запрашивая RPC plugin/list в Codex.
- Регистрирует собственные инструменты Hermes как MCP-сервер, чтобы выполнять обработку Codex мого инструментов, которых нет в поставке Codex.
- Записывает default_permissions = ":workspace", чтобы песочница разрешила запись в рабочее пространство без запроса для каждой операции.
- Сообщает, что было перенесено. Вступает в силу в следующей сессии — данный кэшированный агент сохраняет предыдущий рантайм, чтобы кэши подсказок оставались действительными.
Синонимы: /codex-runtime on, /codex-runtime off, /codex-runtime auto.
Чтобы проверить текущее состояние без изменений:
/codex-runtime
Вы также можете установить это вручную в ~/.hermes/config.yaml:
model:
openai_runtime: codex_app_server # по умолчанию "auto" (= рантайм Hermes)
Цикл самоулучшения (напоминания о памяти + навыках)
Фоновое самоулучшение Hermes реализовано по пороговым значениям счётчиков:
- Каждые 10 подсказок пользователя → разветвлённый агент наблюдает за разговором и решает, нужно ли что-то сохранить в памяти.
- Каждые 10 итераций инструментов в рамках одного шага → то же самое, но для навыков (запись
skill_manage).
Оба продолжают работать на рантайме Кодекса. Путь Кодекс проецирует каждый завершённый элемент commandExecution / fileChange / mcpToolCall / dynamicToolCall в синтетическое сообщение assistanttool_call + результат tool, так что к моменту запуска обзора он видит ту же самую форму, что и на тайме Гермеса по умолчанию.
Как соединение эквивалентным:
| Рантайм по умолчанию | Рантайм Кодекс | |
|---|---|---|
_turns_since_memory увеличивается |
на каждую подсказку пользователя, в предварительном цикле run_conversation | тот же путь кода, до раннего возврата |
_iters_since_skill увеличивается |
инструмент для каждой итерации в цикле чат-завершений | по turn.tool_iterations после возврата шага Кодекса |
Триггер памяти (_turns_since_memory >= _memory_nudge_interval) |
происходит в предварительном цикле, с после выполнения ответа | происходит в предварительном цикле, передаётся в хелпер Codex |
Триггер навыка (_iters_since_skill >= _skill_nudge_interval) |
возвращается после цикла | возвращается после шага Кодекса |
_spawn_background_review(messages_snapshot=..., review_memory=..., review_skills=...) |
возникает при разработке любого триггера | возникает идентично при разработке любого триггера |
Одна деталь: сам разветвлённый обзор должен включать инструменты цикла агента Hermes («memory», «skill_manage»), которые требуют собственной диспетчеризации Hermes. Поэтому, когда родительский агент находится на codex_app_server, разветвлённый обзор понижается до codex_responses — те же учётные данные OAuth, тот же провайдер openai-codex, но общается напрямую с API ответов OpenAI, так что Hermes использует цикл, и инструменты обработки агента работают. Это незаметно для пользователя.
Итоговый эффект: включается рантайм Кодекса, и ваши воспоминания о памяти + навыки будут продолжать создавать точно так же, как иначе.
Как работают одобрения
Кодекс запрашивает рекомендации перед выполнением команд или применением обновлений. Они преобразуются в стандартное приглашение Hermes "Опасная команда":
╭───────────────────────────────────────╮
│ Опасная команда │
│ │
│ /bin/bash -lc 'echo hello > foo.txt' │
│ │
│ ❯ 1. Разрешить один раз │
│ 2. Разрешить на эту сессию │
│ 3. Отклонить │
│ │
│ Codex запрашивает выполнение в /your/cwd │
╰───────────────────────────────────────╯
- Разрешить один раз → одобрить эту единственную команду.
- Разрешить на эту сессию → Кодекс не будет повторно запрашивать ни одну команду.
- Отклонить → команда отклонения; Кодекс продолжает работать в режиме только чтения.
Для одобрения apply_patch (правка файла) Hermes показывает сводку изменений (1 добавление, 1 обновление: /tmp/new.py, /tmp/old.py), когда Кодекс предоставляет данные через соответствующий элемент fileChange.
Профили разрешений
В Кодексе есть три встроенных профиля:
- :read-only — никаких записей; сертификат требует команды одобрения
- :workspace — записи в текущем рабочем пространстве разрешены без запроса (по умолчанию в Гермесе при включении рантайма)
- :danger-no-sandbox — вообще без песочницы (не викор, если не понимаете последствия)
Вы можете переопределить значение по умолчанию в ~/.codex/config.toml вне управляемого блока Hermes:
default_permissions = ":read-only"
(Гермес сохранит ваше переопределение при повторном переносе, если оно находится вне маркеров # под управлением агента Гермеса.)
Вспомогательные задачи и стоимость токенов подписки ChatGPT
Когда этот рантайм включен с провайдером openai-codex, ** вспомогательные задачи (генерация заголовков, сжатие контекста, автоопределение видения, обобщение поиска по сессиям, разветвленный обзор самоулучшения), а также по умолчанию передача через вашу подписку ChatGPT**, потому что вспомогательный клиент Hermes использует основного провайдера/модель, если не задано переопределение для конкретной задачи.
Это не специфично для codex_app_server — это верно и для Существующего пути codex_responses — но здесь это более заметно, потому что вы явно соглашаетесь на биллинговую подписку.
Чтобы редактировать последующие вспомогательные задачи на более дешёвую/другую модель, установите явные переопределения в ~/.hermes/config.yaml:
auxiliary:
title_generation:
provider: openrouter
model: google/gemini-3-flash-preview
context_compression:
provider: openrouter
model: google/gemini-3-flash-preview
vision_detect:
provider: openrouter
model: google/gemini-3-flash-preview
session_search:
provider: openrouter
model: google/gemini-3-flash-preview
goal_judge:
provider: openrouter
model: google/gemini-3-flash-preview
Разветвленный обзор самоулучшения наследует основной рантайм через _current_main_runtime(), и Hermes автоматически понижает его с codex_app_server до codex_responses (чтобы разветвлённый обзор мог использовать memory и skill_manage — собственные инструменты агента цикла Hermes). Этот разветвлённый обзор ещё использует аутентификацию вашей подписки, если вы не перенаправили вспомогательные задачи в другое место.
Безопасное редактирование ~/.codex/config.toml
Гермес оборачивает всё, что командует, между двумя маркерными замечаниями:
# managed by hermes-agent — `hermes codex-runtime migrate` regenerates this section
default_permissions = ":workspace"
[mcp_servers.filesystem]...
[plugins."github@openai-curated"]...
# end hermes-agent managed section
Всё, что находится вне этого блока, принадлежит вам. Повторный запуск запуска (через /codex-runtime codex_app_server или при включении рантайма) заменяет управляемый блок на месте, но сохраняет пользовательский контент выше и ниже него без изменений. Это означает, что вы можете:
- Добавить свои собственные MCP-серверы, о которых Hermes не знает.
- Переопределить
default_permissionsна:read-only, если вы предпочитаете запрос. - Настройка параметров, специфичных для Кодекса (модель, провайдеры, отели и т.д.)
- Добавление пользовательских профилей разрешений в таблицах
[permissions.<name>]
Всё, что вы добавите внутри управляемого блока, будет перезаписано при такой ситуации. Если вам нужна настройка, требующая редактирования управляемого блока, создайте проблему и добавим соответствующий рычаг.
Многопрофильные/мультитенантные настройки
По умолчанию Гермес направляет подпроцесс Кодекса на ~/.codex/ независимо от того, какой профиль Гермеса активирован. Это означает, что hermes -p work и hermes -p Personal используют одну и ту же аутентификацию Кодекса, плагины и конфигурацию. Для большинства пользователей это правильное поведение — оно соответствует тому, что делает прямой запуск CLI codex.
Если вы хотите изолировать Кодекс по профилям (отдельная аутентификация, установленные плагины, отдельные компоненты), установите CODEX_HOME явно для каждого профиля. Самый чистый способ — указать каталог внутри вашего HERMES_HOME:
# Внутри рабочего профиля вы можете обернуть hermes:
CODEX_HOME=~/.hermes/profiles/work/codex hermes chat
Вам нужно будет один раз запустить codex login с установленным CODEX_HOME, чтобы токены OAuth попали в место, соответствующее профилю. После этого hermes -p work будет работать с изолированным состоянием Кодекса.
Мы не делаем этого автоматически, потому что перемещение существующего ~/.codex/ пользователя молчанием аннулировалось его аутентификацией Codex CLI — любой, кто уже запустил codex login, должен был повторно аутентифицироваться. Опциональный подход кажется безопаснее, чем неожиданные сюрпризы для пользователей.
Передача переменного окружения HOME
Hermes НЕ перезаписывает HOME при запуске подпроцесса codex app-server (мы используем os.environ.copy() и накладываем только CODEX_HOME и RUST_LOG). Это означает:
- Команды, которые Кодекс запускается через свой инструмент
shell, продвигают соответствующего пользователяHOMEи правильно находят~/.gitconfig,~/.gh/,~/.aws/,~/.npmrcи т.д. - Внутреннее состояние Кодекса остается изолированным через
CODEX_HOME(который по умолчанию указывает на~/.codex/).
Это соответствует границе, к которой пришёл OpenClaw после нескольких экспериментов: изолировать состояние Кодекса, оставить домашний каталог пользователя в каком-то месте. (См. openclaw/openclaw#81562.)
Перенос MCP-серверов
Конфигурация mcp_servers в Hermes автоматически переводится в формат TOML, ожидаемый Codex. Миграция запускается каждый раз при включении рантайма и является идемпотентной — повторные запуски заменяют управляемый раздел, но сохраняют все отредактированные пользовательские настройки Codex.
Что переводится:
Гермес (config.yaml) |
Кодекс (config.toml) |
|---|---|
команда + args + env |
студия транспорта |
url + заголовки |
потоковый_http транспорт |
тайм-аут |
tool_timeout_sec |
connect_timeout |
startup_timeout_sec |
включено: ложь |
включено = ложь |
Что не переносится:
- Специальные для Гермеса ключи, такие как выборка (у MCP-клиента Codex нет эквивалента — они выбрасываются с предупреждением для каждого сервера).
Перенос нативных плагинов Codex
Плагины, установленные через «плагин кодекса» (Linear, GitHub, Gmail, Calendar, Canva и т.д.), обнаруживаются через RPC «плагин/список» Codex. Для каждого плагина, где installed: true, Hermes записывает блок [plugins."<name>@openai-curated"], включая его в вашу сессию Hermes.
Это означает: когда ваш друг говорит «У меня настроены Calendar и GitHub в моем Codex CLI» и включает рантайм Codex в Hermes, Hermes активирует их автоматически. Никакой перенастройки не требуется.
Что НЕ переводится:
- Плагины, которые вы ещё не установили — сначала установите их в Кодексе.
- Плагины, для которых Кодекс сообщает availability!= AVAILABLE (сломанная установка, истёкший OAuth, удален из маркетплейса и т.д.). Они предлагают не записывать конфигурацию, которая не сработает при активации.
- Запись маркетплейса приложения ChatGPT (результаты app/list для каждой учётной записи — они уже включены внутри Кодекса благодаря аутентификации вашей учётной записи).
- Плагины OAuth — вы исследуете каждый плагин один раз в самом Кодексе; Гермес не трогает учётные данные.
Колбэк-инструменты Hermes (новый MCP-сервер)
Встроенный набор инструментов Кодекса отвечает за операции с оболочками/файлами/патчами, но не включает веб-поиск, автоматизацию браузера, видение, генерацию изображений и т.д. Чтобы они выбрали доступными в шаге Кодекса, Hermes регистрирует себя как MCP-сервер в ~/.codex/config.toml:
[mcp_servers.hermes-tools]
command = "/path/to/python"
args = ["-m", "agent.transports.hermes_tools_mcp_server"]
env = { HERMES_HOME = "/your/.hermes", PYTHONPATH = "...", HERMES_QUIET = "1" }
startup_timeout_sec = 30.0
tool_timeout_sec = 600.0
Когда модель вызывает web_search (или другой предоставленный инструмент Hermes), Кодекс запускает подпроцесс hermes_tools_mcp_server через stdio, запрос обрабатывается через model_tools.handle_function_call(), и результат проецируется обратно в Кодекс как любой другой MCP-ответ.
Инструменты, доступные через колбэк: web_search, web_extract, browser_navigate, browser_click, browser_type, browser_press, browser_snapshot, browser_scroll, browser_back, browser_get_images, browser_console, «browser_vision», «vision_analyze», «image_generate», «skill_view», «skills_list», «text_to_speech».
Инструменты НЕ доступны: delegate_task, memory, session_search, todo. Для них требуется контекст работающего AIAgent (состояние внутри цикла), и статический MCP-колбэк не может их запустить. Используйте рантайм Hermes по умолчанию (/codex-runtime auto), когда они нужны.
Отключение
Переключитесь обратно в любое время:
/codex-runtime auto
Вступает в силу в следующую сессию. Управляемый блок Codex остается в ~/.codex/config.toml, так что вы можете повторно включить его позже без потери конфигурации или удалить вручную, если предпочитаете.
Ограничения
Этот рантайм является опциональной бета-версией. Работает на Hermes Agent 2026.5 + Codex CLI 0.130.0:
- Многошаговые разговоры
- Одобрения
commandExecutionиfileChange(apply_patch) через UI Hermes - Вызовы MCP-инструментов (проверено с
@modelcontextprotocol/server-filesystemи новым колбэкомhermes-tools) - Перенос собственных плагинов Codex (проверено в инвентаре Linear / GitHub / Calendar)
- Пути отклонений/отмены
- Цикл включения/выключения
- Счетчики напоминаний о памяти и навыках (проверено в первую очередь через интеграционные тесты)
- Веб-поиск Hermes через Codex (проверено в первое время: «OpenAI Codex CLI – Начало работы» возвращено из конца в конец)
Известные ограничения:
- Аутентификация Hermes и аутентификация Codex — это организация сессии. Вам нужны оба:
codex loginиhermes auth Login codexдля наилучшего UX (рантайм использует сессию Codex для вызова LLM). Это осознанный выбор дизайна в_import_codex_cli_tokensHermes — Hermes не будет делиться состоянием OAuth с CLI Codex, чтобы не перезаписывать друга при обновлении токенов. delegate_task,memory,session_search,todoдоступны в этом рантайме. Для них требуется контекст работающего AIAgent, который не может рассчитать статический MCP-колбэк. Используйте/codex-runtime auto, когда они нужны.- Нет встроенного патча предварительного просмотра в запрос на одобрение, когда Кодекс не отслеживает набор изменений. Параметры одобрения
fileChangeв Кодексе не всегда содержат набор изменений. Hermes кэширует данные из оранжевых уведомлений «item/start», когда это возможно, но если одобрение приходит до того, как элемент был передан, приглашение возвращается к такому, что обеспечивает Кодекс по «причине». - Отмена за долю секунды не гарантируется. Прерывания в среднем потоке (Ctrl+C, пока Кодекс отвечает) отправляются через
turn/interrupt, но если Кодекс уже сбросил итоговое сообщение, ответ всё равно будет получен.
Если вы обнаружили ошибку, откройте проблему с выводом hermes logs --since 5m. Упомяните codex-runtime в заголовке, чтобы было легко сортировать.
Архитектура
┌─── Оболочка Hermes (CLI / TUI / шлюз) ───┐
│ БД сессий · слеш-команды · память │
│ и обзор навыков · cron · выбор сессий │
└──┬──────────────────────────────────────┬┘
│ user_message final │
▼ text + │
┌──────────────────────────────────┐ projected │
│ AIAgent.run_conversation() │ messages │
│ if api_mode == codex_app_server │ │
│ → CodexAppServerSession │ │
│ else: chat_completions / codex_responses (default)
└────┬─────────────────────────────┘ │
│ JSON-RPC over stdio │
▼ │
┌──────────────────────────────────┐ │
│ codex app-server (subprocess) │──────────────┘
│ thread/start, turn/start │
│ item/* notifications │
│ shell + apply_patch + update_plan│
│ view_image + sandbox │
│ ┌─────────────────────────┐ │
│ │ MCP client │ │
│ │ ├─ user MCP servers │ │
│ │ ├─ native plugins │ │
│ │ │ (linear, github, │ │
│ │ │ gmail, calendar, │ │
│ │ │ canva,...) │ │
│ │ └─ hermes-tools ───────┼─────────────────┐
│ │ (callback to │ │ │
│ │ Hermes' richer │ │ │
│ │ tools) │ │ │
│ └─────────────────────────┘ │ │
└──────────────────────────────────┘ │
│
▼
┌──────────────────────────────────────────────────────────┐
│ hermes_tools_mcp_server.py (subprocess on demand) │
│ web_search, web_extract, browser_*, vision_analyze, │
│ image_generate, skill_view, skills_list, text_to_speech│
└──────────────────────────────────────────────────────────┘
Для реализации деталей см. PR #24182 и README протокола App-Server Codex.