Codex harness
Справочник по среде выполнения Codex
Этот справочник содержит подробное описание конфигурации официального плагина codex.
Сведения о настройке и выборе маршрутизации см. сначала в разделе
Среда выполнения Codex.
Параметры конфигурации плагина
Все настройки среды выполнения Codex находятся в plugins.entries.codex.config.
{ plugins: { entries: { codex: { enabled: true, config: { discovery: { enabled: true, timeoutMs: 2500, }, appServer: { mode: "guardian", }, }, }, }, },}Поля верхнего уровня:
| Поле | Значение по умолчанию | Назначение |
|---|---|---|
discovery |
включено | Настройки обнаружения моделей для Codex app-server model/list. |
appServer |
управляемый stdio app-server | Настройки транспорта, команды, аутентификации, подтверждений, песочницы и тайм-аутов. По умолчанию обычная среда выполнения использует состояние на уровне агента. |
codexDynamicToolsLoading |
"searchable" |
Используйте "direct", чтобы добавить динамические инструменты OpenClaw непосредственно в исходный контекст инструментов Codex. |
codexDynamicToolsExclude |
[] |
Дополнительные имена динамических инструментов OpenClaw, которые следует исключить из обращений к Codex app-server. |
codexPlugins |
отключено | Нативная поддержка плагинов и приложений Codex, включая доступ по явному согласию к приложениям подключённых аккаунтов. См. Нативные плагины Codex. |
computerUse |
отключено | Настройка Codex Computer Use. См. Codex Computer Use. |
supervision |
отключено | Каталог неархивированных нативных сеансов, продолжение локальных ветвей и политика инструментов агента. См. Супервизия Codex. |
Супервизия
Супервизия выводит список неархивированных сеансов Codex с компьютера Gateway и подключённых Node, для которых эта функция включена. Включайте её независимо от среды выполнения агента:
{ plugins: { entries: { codex: { enabled: true, config: { supervision: { enabled: true, }, }, }, }, },}Поля supervision:
| Поле | Значение по умолчанию | Назначение |
|---|---|---|
enabled |
false |
Публиковать локальный каталог сеансов, а на Gateway также объединять каталоги подключённых Node, для которых эта функция включена, для страницы Codex Sessions. |
endpoints |
встроенная локальная конечная точка | Целевые конечные точки для совместимости и расширенной настройки сохранённого агента супервизии Codex и автономных инструментов MCP. Каталог для пользователя и поток ветвления игнорируют эти цели и используют App Server супервизии, определённый из appServer. |
allowRawTranscripts |
false |
Если супервизия включена, разрешить автономному агенту или автономному MCP чтение расшифровок и полей списков, полученных из расшифровок. Чтение только метаданных codex_threads остаётся доступным. Не управляет продолжением через аутентифицированный Control UI. |
allowWriteControls |
false |
Если супервизия включена, разрешить автономные операции codex_threads: ветвление, переименование, архивирование и восстановление из архива, а также операции отправки, перенаправления и прерывания через автономный MCP. Не обходит другие проверки привязки, хоста, состояния или подтверждения. |
Записи конечных точек принимают следующие поля:
| Поле | Применяется к | Назначение |
|---|---|---|
id |
ко всем | Стабильный идентификатор конечной точки. |
label |
ко всем | Необязательная отображаемая метка. |
transport |
ко всем | "stdio-proxy" или "websocket". |
command |
stdio-proxy |
Необязательная команда App Server. |
args |
stdio-proxy |
Необязательные аргументы команды. |
cwd |
stdio-proxy |
Необязательный рабочий каталог дочернего процесса. |
url |
websocket |
Обязательный URL WebSocket или поддерживаемого локального сокета. |
authTokenEnv |
websocket |
Необязательная переменная среды, значение которой аутентифицирует конечную точку. |
Страница Codex Sessions использует App Server супервизии плагина и отображает
только неархивированные сеансы. Если параметры подключения appServer явно не заданы,
это подключение управляется через stdio с домашним каталогом пользователя. Для сохранённых или бездействующих локальных строк можно создать
Chat с фиксированной моделью и ограниченной историей пользователя и ассистента вплоть до последнего
сохранённого исходного терминального обращения. Его закрытая привязка сохраняет ответвление снимка,
каноническую ветвь источника appServer, внедрение истории и последующие обращения в рамках этого
подключения. При первом каноническом запуске используется пара, возвращённая операцией ветвления. При последующих
возобновлениях переопределения модели и провайдера OpenClaw не передаются, чтобы Codex восстановил
сохранённую пару канонической ветви; отдельное нативное изменение может обновить эту
пару, но внешняя модель и цепочка резервных вариантов никогда её не заменяют. Сохранённые и бездействующие
строки можно архивировать после подтверждения отсутствия другого исполнителя, если только точная цель или один из её неархивированных
порождённых потомков не принадлежит другой активной привязке OpenClaw.
OpenClaw учитывает пагинацию потомков Codex и при ошибках
перечисления, циклах или исчерпании ограничения безопасности завершает операцию с отказом. Подтверждение по-прежнему
учитывает неизвестные нативные клиенты и состояние гонки между проверкой статуса и архивированием. Контролируемый
Chat с фиксированной моделью нельзя удалить, пока он защищает нативную привязку.
Для активных источников нельзя создать ветвь или архивировать их, но существующий контролируемый
Chat по-прежнему можно открыть. Каждая строка подключённого Node доступна только для чтения; транспорт Node
пока не предоставляет потоковый жизненный цикл, необходимый среде выполнения.
Сам по себе параметр appServer.homeScope: "user" изменяет только домашний каталог Codex, используемый управляемым процессом
среды выполнения; он не публикует каталог парка. Включение супервизии
не изменяет значение по умолчанию для среды выполнения. Вместо этого отдельное подключение супервизии
по умолчанию использует управляемый stdio с домашним каталогом пользователя, если явные параметры подключения appServer
отсутствуют. Явные настройки применяются к этому подключению.
Ожидающие и подтверждённые контролируемые привязки сохраняют это подключение для каждого обращения;
при отключённой супервизии или расхождении подключения либо жизненного цикла операция завершается с отказом вместо
перехода на среду выполнения с домашним каталогом агента. Подключение по умолчанию использует общие сохранённые
сеансы с нативными клиентами Codex, но не их локальное для процесса состояние активности.
Устаревшие настройки plugins.entries.codex-supervisor больше не поддерживаются. Выполните
openclaw doctor --fix, чтобы перенести старую запись, определения конечных точек, флаги
политики и ссылки списков разрешённых и запрещённых плагинов в этот блок. При конфликтах приоритет имеют явно заданные канонические
значения codex.config.supervision.
Транспорт app-server
Для обычных обращений среды выполнения OpenClaw запускает управляемый исполняемый файл Codex, поставляемый
с официальным плагином (сейчас @openai/codex 0.144.3):
codex app-server --listen stdio://Так версия app-server остаётся привязанной к официальному плагину codex, а не к
отдельной версии Codex CLI, которая может быть установлена локально. Задавайте
appServer.command, только если намеренно хотите использовать другой исполняемый файл.
Для обычных управляемых обращений с изолированным домашним каталогом агента по умолчанию предпочтение отдаётся этому закреплённому
пакету, даже если установлен пакет настольного приложения macOS. Когда включён
Computer Use или когда homeScope имеет значение
"user" и может загрузить нативное состояние Computer Use, при управляемом запуске вместо этого предпочтение отдаётся
исполняемому файлу настольного приложения, которому принадлежат необходимые разрешения macOS. То же
правило приоритета настольного приложения применяется, когда эффективная конфигурация Codex в изолированном домашнем каталоге агента
включает нативный Computer Use. Если пакет настольного приложения не установлен, OpenClaw
возвращается к исполняемому файлу закреплённого пакета.
Передача управления исполняемому файлу и изоляция нативной конфигурации координируют клиенты в рамках одного работающего процесса Gateway. Перезапустите Gateway после того, как другой процесс изменит конфигурацию нативного плагина Codex.
Супервизия определяет отдельное подключение. Если явные параметры подключения
appServer отсутствуют, она использует управляемый stdio с homeScope: "user";
обычная среда выполнения продолжает использовать управляемый stdio с homeScope: "agent". Явные
параметры подключения применяются к обоим путям. Задайте homeScope: "user"
явно, если обычная среда выполнения должна совместно использовать $CODEX_HOME (или ~/.codex)
с нативными клиентами. Закрытая контролируемая привязка использует подключение
супервизии независимо от значения по умолчанию для обычной среды выполнения. Независимые процессы App Server
сохраняют отдельные состояния активности и подтверждений.
Для уже запущенного app-server используйте транспорт WebSocket:
{ plugins: { entries: { codex: { enabled: true, config: { appServer: { transport: "websocket", url: "ws://gateway-host:39175", authToken: "${CODEX_APP_SERVER_TOKEN}", requestTimeoutMs: 60000, }, }, }, }, },}Поля appServer:
| Поле | По умолчанию | Значение |
|---|---|---|
transport |
"stdio" |
"stdio" запускает Codex; явное значение "unix" подключается к локальному управляющему сокету; "websocket" подключается к url. |
homeScope |
"agent" |
"agent" изолирует обычное состояние тестового окружения для каждого агента OpenClaw. "user" — явно включаемый режим, который совместно использует нативный $CODEX_HOME или ~/.codex, применяет нативную аутентификацию и разрешает управление потоками только владельцу. Пользовательская область поддерживает локальный stdio- или Unix-транспорт. Для отдельного управляющего подключения неуказанное значение преобразуется в "user" для stdio или Unix и в "agent" для WebSocket. |
command |
управляемый исполняемый файл Codex | Исполняемый файл для транспорта stdio. Оставьте значение неуказанным, чтобы использовать управляемый исполняемый файл. |
args |
["app-server", "--listen", "stdio://"] |
Аргументы для транспорта stdio. |
url |
не задано | URL App Server WebSocket или URL unix://. Явно заданный пустой Unix-путь выбирает канонический управляющий сокет в домашнем каталоге пользователя. |
authToken |
не задано | Bearer-токен для транспорта WebSocket. Принимает строковый литерал или SecretInput, например ${CODEX_APP_SERVER_TOKEN}. |
headers |
{} |
Дополнительные заголовки WebSocket. Значения заголовков принимают строковые литералы или значения SecretInput, например x-codex-client-session-token: "${CODEX_CLIENT_SESSION_TOKEN}". |
clearEnv |
[] |
Имена дополнительных переменных окружения, удаляемых из порождённого процесса app-server stdio после того, как OpenClaw сформирует наследуемое им окружение. |
remoteWorkspaceRoot |
не задано | Корневой каталог рабочей области удалённого app-server Codex. Если он задан, OpenClaw определяет корневой каталог локальной рабочей области из разрешённой рабочей области OpenClaw, сохраняет суффикс текущего cwd под этим удалённым корневым каталогом и отправляет Codex только итоговый cwd app-server. Если cwd находится за пределами разрешённого корневого каталога рабочей области OpenClaw, OpenClaw безопасно завершает операцию с ошибкой, а не отправляет удалённому app-server локальный для Gateway путь. |
requestTimeoutMs |
60000 |
Тайм-аут для вызовов плоскости управления app-server. |
turnCompletionIdleTimeoutMs |
60000 |
Период ожидания без активности после того, как Codex примет ход, или после относящегося к ходу запроса app-server, пока OpenClaw ожидает turn/completed. |
postToolRawAssistantCompletionIdleTimeoutMs |
300000 |
Защитный интервал завершения без активности и прогресса, используемый после передачи управления инструменту, завершения нативного инструмента, необработанного прогресса ассистента после инструмента, завершения необработанного рассуждения или прогресса рассуждения, пока OpenClaw ожидает turn/completed. Используйте его для доверенных или ресурсоёмких нагрузок, где итоговый синтез после инструмента обоснованно может оставаться неактивным дольше, чем допускает бюджет финальной выдачи ответа ассистента. |
mode |
"yolo", если локальные требования Codex не запрещают YOLO |
Предустановка для выполнения в режиме YOLO или под контролем guardian. |
approvalPolicy |
"never" или разрешённая политика одобрения guardian |
Нативная политика одобрения Codex, передаваемая при запуске и возобновлении потока, а также при ходе. |
sandbox |
"danger-full-access" или разрешённая песочница guardian |
Нативный режим песочницы Codex, передаваемый при запуске и возобновлении потока. Активные песочницы OpenClaw ограничивают ходы danger-full-access до песочницы Codex workspace-write; сетевой флаг хода соответствует исходящему сетевому доступу песочницы OpenClaw. |
approvalsReviewer |
"user" или разрешённый рецензент guardian |
Используйте "auto_review", чтобы Codex мог проверять нативные запросы одобрения, когда это разрешено. |
defaultWorkspaceDir |
текущий каталог процесса | Рабочая область, используемая /codex bind, если --cwd не указан. |
serviceTier |
не задано | Необязательный уровень обслуживания app-server Codex. "priority" включает маршрутизацию в быстром режиме, "flex" запрашивает гибкую обработку, а null удаляет переопределение. Устаревшее значение "fast" принимается как "priority". |
networkProxy |
отключено | Включает сетевой доступ профиля разрешений Codex для команд app-server. OpenClaw определяет выбранную конфигурацию permissions.<profile>.network и выбирает её с помощью default_permissions вместо отправки sandbox. |
experimental.sandboxExecServer |
false |
Предварительно доступная функция, которую необходимо явно включить: она регистрирует в поддерживаемом app-server Codex среду Codex на основе песочницы OpenClaw, чтобы нативное выполнение Codex могло происходить внутри активной песочницы OpenClaw. |
appServer.networkProxy задаётся явно, поскольку изменяет контракт песочницы
Codex. Когда этот параметр включён, OpenClaw также задаёт features.network_proxy.enabled и
default_permissions в конфигурации потока Codex, чтобы созданный профиль
разрешений мог запускать сетевое взаимодействие под управлением Codex. По умолчанию OpenClaw создаёт
устойчивое к коллизиям имя профиля openclaw-network-<fingerprint> из
тела профиля; используйте profileName только тогда, когда требуется
стабильное локальное имя.
export default { plugins: { entries: { codex: { config: { appServer: { sandbox: "workspace-write", networkProxy: { enabled: true, domains: { "api.openai.com": "allow", "blocked.example.com": "deny", }, allowUpstreamProxy: true, proxyUrl: "http://127.0.0.1:3128", }, }, }, }, }, },};Если обычная среда выполнения app-server использовала бы danger-full-access, включение
networkProxy вместо этого предоставляет доступ к файловой системе в стиле рабочей области для создаваемого
профиля разрешений. Управляемое Codex применение сетевых ограничений использует изолированную
сеть, поэтому профиль полного доступа не защищал бы исходящий трафик.
Плагин блокирует устаревшие или неверсионированные рукопожатия app-server: Codex app-server
должен сообщать стабильную версию 0.143.0 или новее.
OpenClaw считает URL WebSocket app-server, не относящиеся к loopback-интерфейсу, удалёнными и требует
WebSocket-аутентификацию с идентификационными данными через appServer.authToken или
заголовок Authorization. appServer.authToken и каждое значение appServer.headers.*
могут быть SecretInput; среда выполнения секретов разрешает SecretRef и сокращённые
ссылки на переменные окружения до того, как OpenClaw сформирует параметры запуска app-server, а неразрешённые
структурированные SecretRef приводят к сбою до отправки любого токена или заголовка. Когда настроены нативные
плагины Codex, OpenClaw использует плоскость управления плагинами подключённого app-server,
чтобы установить или обновить эти плагины, а затем обновляет реестр приложений,
чтобы приложения, принадлежащие плагинам, были видны потоку Codex. app/list по-прежнему
является авторитетным источником реестра и метаданных, но политика OpenClaw
определяет, отправляет ли thread/start значение config.apps[appId].enabled = true для
указанного в реестре доступного приложения, даже если Codex в данный момент помечает его как отключённое. Неизвестные или
отсутствующие идентификаторы приложений по-прежнему приводят к отказу по умолчанию; этот путь только активирует плагины
из маркетплейса через plugin/install и обновляет реестр. Подключайте OpenClaw только к
удалённым app-server, которым можно доверять установку управляемых OpenClaw плагинов
и обновление реестра приложений.
Режимы одобрения и песочницы
Локальные сеансы app-server через stdio по умолчанию используют режим YOLO:
approvalPolicy: "never", approvalsReviewer: "user" и
sandbox: "danger-full-access". Такая модель доверия к локальному оператору позволяет
автономным обращениям OpenClaw и Heartbeat продолжать работу без нативных запросов
на одобрение, на которые некому ответить.
Если локальный файл системных требований Codex запрещает неявные значения YOLO для одобрения,
рецензента или песочницы, OpenClaw вместо этого рассматривает неявное значение по умолчанию как guardian
и выбирает разрешённые разрешения guardian. tools.exec.mode: "auto"
также принудительно включает проверяемые guardian одобрения Codex и не сохраняет небезопасные
устаревшие переопределения approvalPolicy: "never" или sandbox: "danger-full-access";
задайте tools.exec.mode: "full", если намеренно требуется режим без одобрения.
Записи [[remote_sandbox_config]] в том же файле требований, соответствующие имени хоста,
учитываются при выборе значения песочницы по умолчанию.
Задайте appServer.mode: "guardian" для проверяемых guardian одобрений Codex:
{ plugins: { entries: { codex: { enabled: true, config: { appServer: { mode: "guardian", serviceTier: "priority", }, }, }, }, },}Предустановка guardian разворачивается в approvalPolicy: "on-request",
approvalsReviewer: "auto_review" и sandbox: "workspace-write", если эти
значения разрешены. Отдельные поля политики переопределяют mode. Более старое
значение рецензента guardian_subagent по-прежнему принимается как псевдоним для совместимости,
но в новых конфигурациях следует использовать auto_review.
Когда активна песочница OpenClaw, локальный процесс Codex app-server всё равно
работает на хосте Gateway. Поэтому для этого обращения OpenClaw отключает нативный Code Mode Codex,
пользовательские серверы MCP и выполнение плагинов на базе приложений, вместо того чтобы
считать песочницу Codex на стороне хоста эквивалентной серверной части песочницы
OpenClaw. Доступ к оболочке предоставляется через динамические инструменты на базе песочницы OpenClaw,
такие как sandbox_exec и sandbox_process, когда доступны обычные инструменты exec/process.
Нативное выполнение в песочнице
Стабильное поведение по умолчанию — отказ по умолчанию: активная песочница OpenClaw отключает нативные
поверхности выполнения Codex, которые иначе работали бы на хосте Codex app-server.
Используйте appServer.experimental.sandboxExecServer: true, только если хотите
опробовать поддержку удалённой среды Codex с серверной частью песочницы OpenClaw.
Этот экспериментальный путь работает со всеми поддерживаемыми версиями Codex app-server.
{ plugins: { entries: { codex: { enabled: true, config: { appServer: { experimental: { sandboxExecServer: true, }, }, }, }, }, },}Когда флаг включён и текущий сеанс OpenClaw работает в песочнице, OpenClaw запускает локальный exec-server на loopback-интерфейсе на базе активной песочницы, регистрирует его в Codex app-server и запускает поток и обращение Codex с этой средой, принадлежащей OpenClaw. Если app-server не может зарегистрировать среду, запуск завершается отказом вместо незаметного отката к выполнению на хосте.
Этот экспериментальный путь работает только локально. Удалённый app-server через WebSocket не может обратиться к exec-server на loopback-интерфейсе, если не работает на том же хосте, поэтому OpenClaw отклоняет такое сочетание.
Изоляция аутентификации и среды
В домашнем каталоге по умолчанию для каждого агента аутентификация выбирается в следующем порядке:
- Явный профиль аутентификации OpenClaw Codex для агента.
- Существующая учётная запись app-server в домашнем каталоге Codex этого агента.
- Только для локальных запусков app-server через stdio:
CODEX_API_KEY, затемOPENAI_API_KEY, если учётная запись app-server отсутствует, а аутентификация OpenAI всё ещё требуется.
Когда OpenClaw обнаруживает профиль аутентификации Codex в стиле подписки ChatGPT (тип учётных данных OAuth или
токен), он удаляет CODEX_API_KEY и OPENAI_API_KEY из
порождаемого дочернего процесса Codex. Благодаря этому API-ключи уровня Gateway остаются доступны
для эмбеддингов или прямых моделей OpenAI, но нативные обращения Codex app-server
случайно не тарифицируются через API.
Явные профили Codex с API-ключом и локальный резервный вариант с ключом из окружения для stdio используют вход через app-server вместо наследования окружения дочернего процесса. Соединения app-server через WebSocket не получают резервный API-ключ Gateway из окружения; используйте явный профиль аутентификации или собственную учётную запись удалённого app-server.
Запуски app-server через stdio по умолчанию наследуют окружение процесса OpenClaw.
OpenClaw управляет мостом учётной записи Codex app-server и задаёт CODEX_HOME как
каталог отдельного агента в состоянии OpenClaw этого агента. Это ограничивает конфигурацию Codex,
учётные записи, кэш и данные плагинов, а также состояние потоков областью агента OpenClaw,
не допуская их утечки из личного домашнего каталога оператора ~/.codex.
Задайте appServer.homeScope: "user", чтобы совместно использовать нативное состояние Codex с Codex
Desktop и CLI. Этот режим локального домашнего каталога пользователя поддерживает управляемый stdio и
явный транспорт Unix. Он использует $CODEX_HOME, если значение задано, и ~/.codex
в противном случае, включая нативную аутентификацию, конфигурацию, плагины и потоки.
OpenClaw пропускает свой мост профилей аутентификации для app-server. Подтверждённые обращения владельца
могут использовать codex_threads, чтобы перечислять (с необязательным фильтром search),
читать, разветвлять, переименовывать, архивировать и разархивировать эти потоки. Разветвите поток перед
продолжением работы с ним в OpenClaw; независимые процессы Codex не координируют
одновременную запись в один поток.
Это явное включение homeScope применяется к обычным сеансам среды выполнения. Чат, созданный
через Codex Sessions, вместо этого использует своё частное контролируемое соединение, которое
сохраняет аутентификацию и конфигурацию провайдера нативного соединения для
канонической ветви и будущих возобновлений.
В контролируемом чате с зафиксированной моделью codex_threads не может присоединить другую
ветвь или архивировать привязанный к чату нативный поток. Получение списка и чтение только метаданных
остаются доступными. Для чтения исходной расшифровки требуется allowRawTranscripts; когда эта
возможность отключена, поиск по списку также отклоняется, поскольку нативный поиск может находить
предпросмотры расшифровок. Для переименования, разархивирования, отдельного разветвления и архивирования
несвязанного потока, не принадлежащего другому чату OpenClaw, требуется
allowWriteControls. Ни один из этих параметров не обходит зафиксированную привязку.
OpenClaw не перезаписывает HOME для обычных локальных запусков app-server.
Подпроцессы, запускаемые Codex, такие как openclaw, gh, git, облачные CLI и команды
оболочки, видят обычный домашний каталог процесса и могут находить конфигурацию и
токены из домашнего каталога пользователя. Codex также может обнаруживать $HOME/.agents/skills и
$HOME/.agents/plugins/marketplace.json; это обнаружение .agents
намеренно использует общий домашний каталог оператора и отделено от изолированного
состояния ~/.codex.
В области агента по умолчанию плагины OpenClaw и снимки Skills OpenClaw
по-прежнему проходят через собственный реестр плагинов и загрузчик навыков OpenClaw; личные
ресурсы Codex ~/.codex — нет. Если в домашнем каталоге Codex есть полезные навыки или
плагины Codex CLI, которые должны стать частью изолированного агента OpenClaw,
явно проведите их инвентаризацию:
openclaw migrate codex --dry-runopenclaw migrate apply codex --yesЕсли развёртыванию нужна дополнительная изоляция окружения, добавьте эти переменные
в appServer.clearEnv:
{ plugins: { entries: { codex: { enabled: true, config: { appServer: { clearEnv: ["CODEX_API_KEY", "OPENAI_API_KEY"], }, }, }, }, },}appServer.clearEnv влияет только на порождаемый дочерний процесс Codex app-server.
OpenClaw удаляет CODEX_HOME и HOME из этого списка при нормализации локального запуска:
CODEX_HOME продолжает указывать на выбранную область агента или пользователя,
а HOME продолжает наследоваться, чтобы подпроцессы могли использовать обычное состояние домашнего каталога пользователя.
Динамические инструменты
Динамические инструменты Codex по умолчанию загружаются в режиме searchable и предоставляются в
пространстве имён openclaw с deferLoading: true. OpenClaw не предоставляет
динамические инструменты, которые дублируют нативные операции Codex с рабочей областью или собственную
поверхность поиска инструментов Codex:
readwriteeditapply_patchexecprocessupdate_plantool_calltool_describetool_searchtool_search_code
Большинство остальных интеграционных инструментов OpenClaw, таких как обмен сообщениями, мультимедиа, Cron,
браузер, узлы, Gateway, heartbeat_respond и web_search, доступны
через поиск инструментов Codex в этом пространстве имён. Это уменьшает начальный контекст
модели. Небольшой набор инструментов остаётся доступным для прямого вызова независимо от
codexDynamicToolsLoading, поскольку поиск инструментов Codex может быть недоступен или
возвращать только набор коннекторов: agents_list, sessions_spawn и
sessions_yield. Инструкции разработчика по-прежнему направляют обычных субагентов Codex
к нативному spawn_agent для нативной работы субагентов Codex, а
sessions_spawn остаётся доступным для явного делегирования через OpenClaw или ACP.
Ответы источника, использующие только инструмент сообщений, также остаются прямыми, поскольку это
контракт управления обращением.
Инструменты, помеченные catalogMode: "direct-only", включая инструмент OpenClaw computer,
сгруппированы в пространстве имён openclaw_direct. OpenClaw добавляет это пространство имён в
список code_mode.direct_only_tool_namespaces Codex, не заменяя
записи, предоставленные оператором. Поэтому Codex предоставляет эти инструменты как
DirectModelOnly в обычных ветках и ветках только для режима кода, вместо того чтобы направлять их
через вложенные вызовы режима кода tools.*. Эта граница необходима для
результатов, содержащих изображения: вложенная сериализация режима кода преобразует вывод изображения
в текст, из-за чего снимок экрана, необходимый для следующего действия на компьютере, будет утрачен.
Задавайте codexDynamicToolsLoading: "direct" только при подключении к пользовательскому
серверу приложений Codex, который не может искать отложенные динамические инструменты, или при отладке
полной полезной нагрузки инструментов.
Тайм-ауты
Вызовы динамических инструментов, принадлежащих OpenClaw, ограничиваются независимо от
appServer.requestTimeoutMs. Каждый запрос Codex item/tool/call использует
первый доступный тайм-аут в следующем порядке:
- Положительный аргумент
timeoutMsдля отдельного вызова. - Для
image_generate—agents.defaults.imageGenerationModel.timeoutMs. - Для
image_generateбез настроенного тайм-аута — стандартный тайм-аут генерации изображений 120 секунд. - Для инструмента анализа медиа
image—tools.media.image.timeoutSeconds, преобразованный в миллисекунды, либо стандартный тайм-аут обработки медиа 60 секунд. Для анализа изображений он применяется к самому запросу и не сокращается из-за предшествующей подготовительной работы. - Для инструмента
message— фиксированный стандартный тайм-аут 120 секунд. - Стандартный тайм-аут динамического инструмента 90 секунд.
Этот сторожевой таймер задаёт внешний бюджет динамического вызова item/tool/call. Тайм-ауты запросов,
специфичные для провайдера, действуют внутри этого вызова и сохраняют собственную семантику тайм-аутов.
Бюджеты динамических инструментов ограничены значением 600000 мс. При тайм-ауте OpenClaw прерывает
сигнал инструмента там, где это поддерживается, и возвращает Codex ответ о сбое динамического инструмента,
чтобы ход мог продолжиться, а сеанс не оставался в состоянии
processing.
После того как Codex принимает ход, а также после ответа OpenClaw на относящийся к ходу
запрос сервера приложений, среда ожидает, что Codex продолжит работу над текущим ходом
и в итоге завершит собственный ход с помощью turn/completed. Если
сервер приложений не проявляет активности в течение appServer.turnCompletionIdleTimeoutMs, OpenClaw
по возможности прерывает ход Codex, регистрирует диагностический тайм-аут и
освобождает полосу сеанса OpenClaw, чтобы последующие сообщения чата не ожидали
завершения устаревшего собственного хода.
Большинство непрерывных уведомлений для того же хода отключают этот короткий сторожевой таймер,
поскольку Codex подтвердил, что ход всё ещё активен. При передаче управления инструментам используется более длительный
бюджет простоя после инструмента: после того как OpenClaw возвращает ответ item/tool/call,
после завершения собственных элементов инструментов, таких как commandExecution, после необработанных
завершений custom_tool_call_output, а также после необработанного прогресса ассистента
после инструмента, завершений рассуждения или прогресса рассуждения. Защитный механизм использует
appServer.postToolRawAssistantCompletionIdleTimeoutMs, если он настроен, а в противном случае
по умолчанию — пять минут. Тот же бюджет после инструмента также продлевает
сторожевой таймер прогресса на период безмолвного формирования ответа до того, как Codex выдаст
следующее событие текущего хода. После завершений рассуждения, завершений agentMessage
в режиме комментариев, а также необработанного прогресса рассуждения или ассистента перед инструментом
может автоматически последовать окончательный ответ, поэтому для них используется защитный таймер ответа
после прогресса, а полоса сеанса не освобождается немедленно. Только завершённые элементы
agentMessage, являющиеся окончательными или не относящимися к комментариям, и необработанные завершения ассистента перед инструментом включают
освобождение после вывода ассистента: если затем Codex не проявляет активности без turn/completed,
OpenClaw по возможности прерывает собственный ход и освобождает полосу
сеанса. Безопасные для повторного выполнения сбои stdio-сервера приложений, включая тайм-ауты простоя
при завершении хода без признаков активности ассистента, инструмента, активного элемента или побочного эффекта,
повторяются один раз в новой попытке сервера приложений. При небезопасных тайм-аутах
зависший клиент сервера приложений всё равно выводится из эксплуатации, а полоса сеанса OpenClaw освобождается. Они также
удаляют устаревшую привязку собственной ветки вместо автоматического
повторного выполнения. При тайм-аутах ожидания завершения отображается текст тайм-аута, относящийся к Codex:
в безопасных для повторного выполнения случаях указывается, что ответ может быть неполным, а в небезопасных случаях
пользователю предлагается проверить текущее состояние перед повторной попыткой. Общедоступная диагностика тайм-аутов
содержит структурные поля, такие как метод последнего уведомления сервера приложений,
идентификатор, тип и роль элемента необработанного ответа ассистента, количество активных запросов и элементов, а также
состояние включённого сторожевого таймера. Если последнее уведомление является элементом необработанного ответа
ассистента, диагностика также содержит ограниченный предварительный фрагмент текста ассистента. Она не
содержит необработанный запрос или содержимое инструмента.
Обнаружение моделей
По умолчанию плагин Codex запрашивает у сервера приложений список доступных моделей. Доступность
моделей определяется сервером приложений Codex, поэтому список может меняться при
обновлении OpenClaw встроенной версии @openai/codex или когда развёртывание
направляет appServer.command на другой исполняемый файл Codex. Доступность также может
зависеть от учётной записи. Используйте /codex models в работающем Gateway, чтобы просмотреть актуальный
каталог для этой среды и учётной записи.
Если обнаружение завершается сбоем или превышает тайм-аут, OpenClaw использует встроенный резервный каталог:
| Идентификатор модели | Отображаемое имя | Уровни рассуждения |
|---|---|---|
gpt-5.5 |
gpt-5.5 | low, medium, high, xhigh |
gpt-5.4-mini |
GPT-5.4-Mini | low, medium, high, xhigh |
Настройте обнаружение в разделе plugins.entries.codex.config.discovery:
{ plugins: { entries: { codex: { enabled: true, config: { discovery: { enabled: true, timeoutMs: 2500, }, }, }, }, },}Отключите обнаружение, если хотите, чтобы при запуске не выполнялась проверка Codex и использовался только резервный каталог:
{ plugins: { entries: { codex: { enabled: true, config: { discovery: { enabled: false, }, }, }, }, },}Файлы начальной настройки рабочей области
Codex самостоятельно обрабатывает AGENTS.md с помощью собственного механизма обнаружения проектной документации.
OpenClaw не создаёт синтетические файлы проектной документации Codex и не зависит от резервных
имён файлов Codex для файлов персоны, поскольку резервные варианты Codex применяются только при
отсутствии AGENTS.md.
Для обеспечения эквивалентности рабочей области OpenClaw среда Codex передаёт остальные файлы начальной настройки как инструкции разработчика, но по-разному:
TOOLS.mdпередаётся как унаследованные инструкции разработчика Codex, поэтому собственные субагенты Codex, созданные во время хода, также видят его.SOUL.md,IDENTITY.mdиUSER.mdпередаются как ограниченные текущим ходом инструкции по совместной работе. Собственные субагенты Codex их не наследуют, благодаря чему ходы субагентов не получают персону и профиль пользователя родительского агента.- Компактный список загруженных Skills OpenClaw также передаётся как ограниченные текущим ходом инструкции разработчика по совместной работе, поэтому собственные субагенты Codex также его не наследуют.
- Содержимое
HEARTBEAT.mdне внедряется; ходы Heartbeat получают в режиме совместной работы указание прочитать файл, если он существует и не пуст. - Содержимое
MEMORY.mdиз настроенной рабочей области агента не вставляется во входные данные собственного хода Codex, когда для этой рабочей области доступны инструменты памяти; если файл существует, среда добавляет небольшой указатель на память рабочей области в ограниченные текущим ходом инструкции разработчика по совместной работе, и Codex следует использоватьmemory_searchилиmemory_get, когда долговременная память имеет значение. Если инструменты отключены, поиск по памяти недоступен или активная рабочая область отличается от рабочей области памяти агента,MEMORY.mdиспользует обычный путь ограниченного контекста хода. BOOTSTRAP.md, если присутствует, передаётся как справочный контекст входных данных хода OpenClaw.
Переопределения окружения
Переопределения окружения остаются доступными для локального тестирования:
OPENCLAW_CODEX_APP_SERVER_BINOPENCLAW_CODEX_APP_SERVER_ARGSOPENCLAW_CODEX_APP_SERVER_MODE=yolo|guardianOPENCLAW_CODEX_APP_SERVER_APPROVAL_POLICYOPENCLAW_CODEX_APP_SERVER_SANDBOX
OPENCLAW_CODEX_APP_SERVER_BIN обходит управляемый исполняемый файл, когда
appServer.command не задан.
OPENCLAW_CODEX_APP_SERVER_GUARDIAN=1 был удалён. Вместо него используйте
plugins.entries.codex.config.appServer.mode: "guardian" или
OPENCLAW_CODEX_APP_SERVER_MODE=guardian для разового локального тестирования. Конфигурация
предпочтительна для воспроизводимых развёртываний, поскольку она сохраняет поведение плагина в
том же проверенном файле, что и остальные настройки среды Codex.