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.
sessionCatalog увімкнено Нативне виявлення сеансів Codex для бічної панелі. Установіть enabled: false, щоб вимкнути виявлення, не вимикаючи провайдер або рушій.
supervision вимкнено Політика стенограм нативних сеансів і керування записом для агента. Див. Нагляд за Codex.

Нагляд

Виявлення нативних сеансів типово показує неархівовані сеанси Codex із комп’ютера Gateway і підключених вузлів, для яких надано явну згоду. Щоб вимкнути лише цей каталог:

json5
{  plugins: {    entries: {      codex: {        enabled: true,        config: {          sessionCatalog: {            enabled: false,          },        },      },    },  },}

supervision окремо керує інструментами для агента:

Поле Типове значення Значення
enabled false Увімкнути інструменти нагляду за Codex для агента. Це не керує каталогом автентифікованих сеансів оператора.
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 використовує App Server нагляду плагіна й показує лише неархівовані сеанси. Без явних параметрів підключення appServer це підключення є керованим stdio з домашнього каталогу користувача. Збережені або неактивні локальні рядки можуть створити заблокований на моделі Chat з обмеженою історією користувача й асистента до останнього збереженого термінального ходу джерела. Його приватна прив’язка зберігає розгалуження знімка, канонічну гілку джерела appServer, вставлення історії та наступні ходи в цьому підключенні. Під час першого канонічного запуску використовується пара, повернена розгалуженням. Під час подальших відновлень перевизначення моделі та провайдера OpenClaw не передаються, щоб Codex відновив збережену пару канонічного потоку; окрема нативна зміна може оновити цю пару, але зовнішня модель і ланцюжок резервних варіантів ніколи її не замінюють. Збережені й неактивні рядки можна архівувати після підтвердження відсутності іншого виконавця, якщо інша активна прив’язка OpenClaw не володіє точною ціллю або одним із її неархівованих породжених нащадків. OpenClaw дотримується пагінації нащадків Codex і безпечно завершує роботу з відмовою в разі помилок перелічення, циклів або вичерпання ліміту безпеки. Підтвердження й надалі охоплює невідомі нативні клієнти та стан гонитви між станом і архівуванням. Заблокований на моделі Chat під наглядом не можна видалити, доки він захищає нативну прив’язку. Активні джерела не можуть створювати гілку чи архівуватися, але наявний Chat під наглядом усе одно можна відкрити. Кожен рядок підключеного вузла залишається доступним лише для читання; транспорт вузла ще не забезпечує життєвий цикл потокового передавання, потрібний рушію.

Лише 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 не встановлено Токен носія для транспорту 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 безпечно завершує операцію з відмовою замість надсилання локального для Gateway шляху до віддаленого app-server.
loopDetectionPreToolUseRelay true Установлює підпроцес Codex PreToolUse, який використовується лише для виявлення циклів OpenClaw і його явного маркера відсутності політики. Установіть false, щоб зменшити розгалуження процесів для кожного інструмента. Хуки Plugin перед інструментом і політика довірених інструментів усе одно встановлюють необхідний ретранслятор.
requestTimeoutMs 60000 Час очікування для викликів площини керування app-server.
turnCompletionIdleTimeoutMs 60000 Період тиші після того, як Codex приймає хід, або після обмеженого ходом запиту app-server, поки OpenClaw очікує на turn/completed.
postToolRawAssistantCompletionIdleTimeoutMs 300000 Захисний механізм простою завершення та перебігу виконання, який застосовується після передавання керування інструменту, завершення роботи нативного інструмента, необробленого поступу асистента після інструмента, завершення необробленого міркування або поступу міркування, поки OpenClaw очікує на turn/completed. Використовуйте його для довірених або ресурсомістких робочих навантажень, де синтез після інструмента може правомірно залишатися бездіяльним довше, ніж бюджет остаточного виведення відповіді асистента.
mode "yolo", якщо локальні вимоги Codex не забороняють YOLO Попередньо визначений набір параметрів для виконання в режимі YOLO або з перевіркою захисником.
approvalPolicy "never" або дозволена політика схвалення захисника Нативна політика схвалення Codex, що надсилається під час запуску й відновлення потоку, а також під час ходу.
sandbox "danger-full-access" або дозволена пісочниця захисника Нативний режим пісочниці Codex, що надсилається під час запуску та відновлення потоку. Активні пісочниці OpenClaw звужують ходи danger-full-access до Codex workspace-write; мережевий прапорець ходу відповідає вихідному трафіку пісочниці OpenClaw.
approvalsReviewer "user" або дозволений рецензент-захисник Використовуйте "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 Експериментальна добровільна активація, яка реєструє середовище Codex на основі пісочниці OpenClaw у підтримуваному app-server Codex, щоб нативне виконання 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",            },          },        },      },    },  },};

Якщо звичайним середовищем виконання сервера застосунків був би danger-full-access, увімкнення networkProxy натомість використовує доступ до файлової системи в стилі робочого простору для згенерованого профілю дозволів. Кероване Codex забезпечення мережевих обмежень є ізольованою мережевою взаємодією, тому профіль повного доступу не захищав би вихідний трафік.

Plugin блокує рукостискання зі старішими серверами застосунків або серверами без версії: сервер застосунків Codex має повідомляти стабільну версію 0.143.0 або новішу.

OpenClaw вважає URL-адреси WebSocket сервера застосунків, що не належать до loopback-інтерфейсу, віддаленими та вимагає автентифікації WebSocket з даними ідентичності через appServer.authToken або заголовок Authorization. appServer.authToken і кожне значення appServer.headers.* можуть бути SecretInput; середовище виконання секретів розв’язує SecretRefs і скорочення змінних середовища до того, як OpenClaw сформує параметри запуску сервера застосунків, а нерозв’язані структуровані SecretRefs спричиняють помилку до надсилання будь-якого токена або заголовка. Коли налаштовано нативні плагіни Codex, OpenClaw використовує площину керування плагінами підключеного сервера застосунків, щоб установити чи оновити ці плагіни, а потім оновлює інвентар застосунків, щоб застосунки, якими володіють плагіни, були видимі потоку Codex. app/list і надалі є авторитетним джерелом інвентарю та метаданих, але політика OpenClaw визначає, чи надсилає thread/start значення config.apps[appId].enabled = true для доступного застосунку зі списку, навіть якщо Codex наразі позначає його як вимкнений. Невідомі або відсутні ідентифікатори застосунків і надалі блокуються за замовчуванням; цей шлях лише активує плагіни маркетплейсу через plugin/install і оновлює інвентар. Підключайте OpenClaw лише до віддалених серверів застосунків, яким можна довіряти приймання керованих OpenClaw установлень плагінів та оновлень інвентарю застосунків.

Режими схвалення та пісочниці

Локальні сеанси сервера застосунків через stdio за замовчуванням працюють у режимі YOLO: approvalPolicy: "never", approvalsReviewer: "user" і sandbox: "danger-full-access". Така модель довіри до локального оператора дає змогу автономним проходам OpenClaw і Heartbeat продовжувати роботу без нативних запитів на схвалення, на які нікому відповісти.

Якщо локальний файл системних вимог Codex забороняє неявні значення схвалення YOLO, рецензента або пісочниці, OpenClaw натомість вважає неявним типовим режимом guardian і вибирає дозволені дозволи guardian. tools.exec.mode: "auto" також примусово вмикає схвалення Codex із перевіркою guardian і не зберігає небезпечні застарілі перевизначення approvalPolicy: "never" або sandbox: "danger-full-access"; задайте tools.exec.mode: "full", щоб навмисно працювати без схвалень. Записи [[remote_sandbox_config]] у тому самому файлі вимог, які відповідають імені хоста, враховуються під час вибору типового режиму пісочниці.

Задайте appServer.mode: "guardian" для схвалень Codex із перевіркою guardian:

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 усе одно виконується на хості Gateway. Тому для цього проходу OpenClaw вимикає нативний Code Mode Codex, користувацькі сервери MCP та виконання плагінів на основі застосунків, замість того щоб вважати ізоляцію на боці хоста Codex еквівалентною бекенду пісочниці OpenClaw. Доступ до оболонки надається через динамічні інструменти на основі пісочниці OpenClaw, як-от sandbox_exec і sandbox_process, коли доступні звичайні інструменти виконання команд і процесів.

Ізольоване нативне виконання

Стабільна типова поведінка — блокування за замовчуванням: активна пісочниця OpenClaw вимикає поверхні нативного виконання Codex, які інакше працювали б на хості сервера застосунків Codex. Використовуйте appServer.experimental.sandboxExecServer: true лише тоді, коли потрібно випробувати підтримку віддаленого середовища Codex із бекендом пісочниці OpenClaw. Цей експериментальний шлях працює з кожною підтримуваною версією сервера застосунків Codex.

json5
{  plugins: {    entries: {      codex: {        enabled: true,        config: {          appServer: {            experimental: {              sandboxExecServer: true,            },          },        },      },    },  },}

Коли цей прапорець увімкнено, а поточний сеанс OpenClaw працює в пісочниці, OpenClaw запускає локальний loopback-сервер виконання на основі активної пісочниці, реєструє його на сервері застосунків Codex і запускає потік та прохід Codex у цьому середовищі, яким володіє OpenClaw. Якщо сервер застосунків не може зареєструвати середовище, виконання блокується з помилкою замість непомітного переходу до виконання на хості.

Цей експериментальний шлях призначений лише для локального використання. Віддалений сервер застосунків WebSocket не може звернутися до loopback-сервера виконання, якщо не працює на тому самому хості, тому OpenClaw відхиляє таке поєднання.

Ізоляція автентифікації та середовища

У типовому домашньому каталозі окремого агента автентифікація вибирається в такому порядку:

  1. Явний профіль автентифікації OpenClaw Codex для агента.
  2. Наявний обліковий запис сервера застосунків у домашньому каталозі Codex цього агента.
  3. Лише для локальних запусків сервера застосунків через stdio: CODEX_API_KEY, а потім OPENAI_API_KEY, коли обліковий запис сервера застосунків відсутній, але автентифікація OpenAI усе ще потрібна.

Коли OpenClaw виявляє профіль автентифікації Codex у стилі передплати ChatGPT (тип облікових даних OAuth або токена), він видаляє CODEX_API_KEY і OPENAI_API_KEY із запущеного дочірнього процесу Codex. Це зберігає доступність API-ключів рівня Gateway для вбудовувань або прямих моделей OpenAI, не допускаючи випадкової оплати нативних проходів сервера застосунків Codex через API.

Явні профілі API-ключів Codex і резервне використання ключів зі змінних середовища для локального stdio застосовують вхід через сервер застосунків замість успадкованого середовища дочірнього процесу. Підключення до сервера застосунків через WebSocket не отримують резервні API-ключі зі змінних середовища Gateway; використовуйте явний профіль автентифікації або власний обліковий запис віддаленого сервера застосунків.

Запуски сервера застосунків через stdio за замовчуванням успадковують середовище процесу OpenClaw. OpenClaw володіє мостом облікового запису сервера застосунків Codex і задає CODEX_HOME як окремий каталог агента в стані OpenClaw цього агента. Завдяки цьому конфігурація Codex, облікові записи, кеш і дані плагінів та стан потоків обмежуються агентом OpenClaw, а не проникають з особистого домашнього каталогу оператора ~/.codex.

Задайте appServer.homeScope: "user", щоб спільно використовувати нативний стан Codex із Codex Desktop і CLI. Цей режим локального домашнього каталогу користувача підтримує керований stdio та явний транспорт Unix. Він використовує $CODEX_HOME, якщо його задано, і ~/.codex в іншому разі, включно з нативною автентифікацією, конфігурацією, плагінами й потоками. OpenClaw пропускає свій міст профілю автентифікації для сервера застосунків. Перевірені проходи власника можуть використовувати codex_threads, щоб перелічувати (з необов’язковим фільтром search), читати, відгалужувати, перейменовувати, архівувати й розархівовувати ці потоки. Відгалузьте потік, перш ніж продовжувати його в OpenClaw; незалежні процеси Codex не координують одночасний запис до одного потоку.

Цей явний вибір homeScope стосується звичайних сеансів середовища. Чат, створений через Codex Sessions, натомість використовує власне приватне контрольне з’єднання, яке зберігає автентифікацію та конфігурацію провайдера нативного з’єднання для канонічної гілки й майбутніх відновлень.

У контрольованому чаті із зафіксованою моделлю codex_threads не може приєднати інше відгалуження або архівувати прив’язаний до чату нативний потік. Перелік і читання лише метаданих залишаються доступними. Для читання необроблених стенограм потрібен allowRawTranscripts; коли його вимкнено, пошук у переліку також відхиляється, оскільки нативний пошук може знаходити збіги в попередніх переглядах стенограм. Для перейменування, розархівування, відокремленого відгалуження й архівування стороннього потоку, яким не володіє інший чат OpenClaw, потрібен allowWriteControls. Жоден із цих параметрів не обходить зафіксовану прив’язку.

OpenClaw не переписує HOME для звичайних локальних запусків сервера застосунків. Підпроцеси, запущені Codex, як-от openclaw, gh, git, хмарні CLI та команди оболонки, бачать звичайний домашній каталог процесу й можуть знаходити конфігурацію та токени домашнього каталогу користувача. Codex також може виявляти $HOME/.agents/skills і $HOME/.agents/plugins/marketplace.json; це виявлення .agents навмисно спільне з домашнім каталогом оператора й відокремлене від ізольованого стану ~/.codex.

У типовій області агента плагіни OpenClaw і знімки Skills OpenClaw і надалі надходять через власний реєстр плагінів і завантажувач Skills 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. Під час нормалізації локального запуску 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

Коли скінченний список дозволів середовища виконання вимикає нативний Code Mode, OpenClaw надсилає порожній вибір середовища виконання. У такому прямому, неізольованому випадку OpenClaw зберігає відфільтровані політикою інструменти exec і process як резервний варіант оболонки. Списки дозволів середовища виконання та codexDynamicToolsExclude і надалі застосовуються.

Більшість решти інструментів інтеграції 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 у звичайних потоках і потоках лише для режиму коду, замість маршрутизації через вкладені виклики Code Mode tools.*. Ця межа необхідна для результатів із зображеннями: вкладена серіалізація Code Mode перетворює виведення зображень на текст, через що знімок екрана, потрібний для наступної дії з комп’ютером, було б втрачено.

Задавайте codexDynamicToolsLoading: "direct" лише під час підключення до спеціального app-server 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 відповідає на запит app-server у межах ходу, середовище очікує, що Codex просуватиме поточний хід і зрештою завершить нативний хід за допомогою turn/completed. Якщо app-server не подає ознак активності протягом 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 app-server, зокрема тайм-аути бездіяльності завершення ходу без ознак асистента, інструмента, активного елемента або побічних ефектів, повторюються один раз у новій спробі app-server. Небезпечні тайм-аути все одно виводять завислий клієнт app-server з експлуатації та звільняють смугу сеансу OpenClaw. Вони також очищають застарілу прив’язку нативного потоку замість автоматичного повторного відтворення. Тайм-аути відстеження завершення показують специфічний для Codex текст: у безпечних для повторного відтворення випадках зазначається, що відповідь може бути неповною, а в небезпечних випадках користувачеві пропонується перевірити поточний стан перед повторною спробою. Загальнодоступна діагностика тайм-аутів містить структурні поля, як-от останній метод сповіщення app-server, ідентифікатор, тип і роль елемента необробленої відповіді асистента, кількість активних запитів і елементів, а також стан активованого відстеження. Коли останнє сповіщення є елементом необробленої відповіді асистента, діагностика також містить обмежений попередній перегляд тексту асистента. Вона не містить необробленого вмісту запиту або інструмента.

Виявлення моделей

Типово Plugin Codex запитує в app-server доступні моделі. Доступністю моделей керує app-server 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 для одноразового локального тестування. Для відтворюваних розгортань рекомендовано конфігурацію, оскільки вона зберігає поведінку Plugin у тому самому перевіреному файлі, що й решту налаштувань середовища Codex.

Пов’язані матеріали

Was this useful?
On this page

On this page