Codex harness

Справочник по среде выполнения Codex

Этот справочник содержит подробное описание конфигурации официального плагина codex. Сведения о настройке и выборе маршрутизации см. сначала в разделе Среда выполнения Codex.

Параметры конфигурации плагина

Все настройки среды выполнения Codex находятся в plugins.entries.codex.config.

json5
{  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, для которых эта функция включена. Включайте её независимо от среды выполнения агента:

json5
{  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):

bash
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:

json5
{  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 только тогда, когда требуется стабильное локальное имя.

js
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:

json5
{  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.

json5
{  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 отклоняет такое сочетание.

Изоляция аутентификации и среды

В домашнем каталоге по умолчанию для каждого агента аутентификация выбирается в следующем порядке:

  1. Явный профиль аутентификации OpenClaw Codex для агента.
  2. Существующая учётная запись app-server в домашнем каталоге Codex этого агента.
  3. Только для локальных запусков 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, явно проведите их инвентаризацию:

bash
openclaw migrate codex --dry-runopenclaw migrate apply codex --yes

Если развёртыванию нужна дополнительная изоляция окружения, добавьте эти переменные в appServer.clearEnv:

json5
{  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:

  • read
  • write
  • edit
  • apply_patch
  • exec
  • process
  • update_plan
  • tool_call
  • tool_describe
  • tool_search
  • tool_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_generateagents.defaults.imageGenerationModel.timeoutMs.
  • Для image_generate без настроенного тайм-аута — стандартный тайм-аут генерации изображений 120 секунд.
  • Для инструмента анализа медиа imagetools.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:

json5
{  plugins: {    entries: {      codex: {        enabled: true,        config: {          discovery: {            enabled: true,            timeoutMs: 2500,          },        },      },    },  },}

Отключите обнаружение, если хотите, чтобы при запуске не выполнялась проверка Codex и использовался только резервный каталог:

json5
{  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_BIN
  • OPENCLAW_CODEX_APP_SERVER_ARGS
  • OPENCLAW_CODEX_APP_SERVER_MODE=yolo|guardian
  • OPENCLAW_CODEX_APP_SERVER_APPROVAL_POLICY
  • OPENCLAW_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.

Связанные материалы

Was this useful?
On this page

On this page