Когда использовать обвязку
Регистрируйте обвязку агента, когда у семейства моделей есть собственная нативная среда выполнения сеанса, а обычный транспорт провайдера OpenClaw является неверной абстракцией. Примеры:- нативный сервер coding-agent, который владеет тредами и Compaction
- локальный CLI или daemon, который должен стримить нативные события планирования, рассуждений и инструментов
- среда выполнения модели, которой нужен собственный resume id в дополнение к транскрипту сеанса OpenClaw
Чем по-прежнему владеет ядро
До выбора обвязки OpenClaw уже определил:- провайдера и модель
- состояние runtime-аутентификации
- уровень thinking и бюджет контекста
- файл транскрипта/сеанса OpenClaw
- рабочую область, sandbox и политику инструментов
- callback-и ответа канала и callback-и стриминга
- политику fallback модели и live-переключения модели
params.runtimePlan — принадлежащий OpenClaw
набор политик для runtime-решений, которые должны оставаться общими для OpenClaw и нативных
обвязок:
runtimePlan.tools.normalize(...)иruntimePlan.tools.logDiagnostics(...)для политики схем инструментов с учетом провайдераruntimePlan.transcript.resolvePolicy(...)для очистки транскрипта и политики исправления вызовов инструментовruntimePlan.delivery.isSilentPayload(...)для общей обработкиNO_REPLYи подавления доставки медиаruntimePlan.outcome.classifyRunResult(...)для классификации fallback моделиruntimePlan.observabilityдля разрешенных метаданных провайдера/модели/обвязки
Регистрация обвязки
Импорт:openclaw/plugin-sdk/agent-harness
Политика выбора
OpenClaw выбирает обвязку после разрешения провайдера/модели:- Побеждает политика среды выполнения уровня модели.
- Затем применяется политика среды выполнения уровня провайдера.
autoзапрашивает у зарегистрированных обвязок, поддерживают ли они разрешенную пару провайдер/модель.- Если ни одна зарегистрированная обвязка не подходит, OpenClaw использует встроенную среду выполнения.
auto встроенный fallback
используется только когда ни одна зарегистрированная обвязка Plugin не поддерживает разрешенную
пару провайдер/модель. После того как обвязка Plugin заявила запуск, OpenClaw не
переигрывает тот же ход через другую среду выполнения, потому что это может изменить
семантику аутентификации/runtime или продублировать побочные эффекты.
Пины среды выполнения на уровне всего сеанса и всего агента игнорируются выбором. Это
включает устаревшие значения сеанса agentHarnessId, agents.defaults.agentRuntime,
agents.list[].agentRuntime и OPENCLAW_AGENT_RUNTIME. /status показывает
эффективную среду выполнения, выбранную из маршрута провайдера/модели.
Если выбранная обвязка неожиданна, включите debug-логирование agents/harness и
проверьте структурированную запись Gateway agent harness selected. Она включает
id выбранной обвязки, причину выбора, политику runtime/fallback и, в режиме
auto, результат поддержки каждого кандидата Plugin.
Встроенный Plugin Codex регистрирует codex как id своей обвязки. Ядро трактует это
как обычный id обвязки Plugin; специфичные для Codex alias-ы должны находиться в Plugin
или конфигурации оператора, а не в общем селекторе среды выполнения.
Сочетание провайдера и обвязки
Большинство обвязок также должны регистрировать провайдера. Провайдер делает ref-ы моделей, статус аутентификации, метаданные моделей и выбор/model видимыми для остальной части
OpenClaw. Затем обвязка заявляет этот провайдер в supports(...).
Встроенный Plugin Codex следует этому шаблону:
- предпочтительные пользовательские ref-ы моделей:
openai/gpt-5.5 - совместимые ref-ы: устаревшие ref-ы
codex/gpt-*остаются принимаемыми, но новые конфиги не должны использовать их как обычные ref-ы провайдера/модели - id обвязки:
codex - auth: синтетическая доступность провайдера, потому что обвязка Codex владеет нативным логином/сеансом Codex
- запрос app-server: OpenClaw отправляет в Codex bare model id и позволяет обвязке общаться с нативным протоколом app-server
openai/gpt-* на официальном
провайдере OpenAI по умолчанию выбирают обвязку Codex. Более старые ref-ы codex/gpt-*
по-прежнему выбирают провайдера и обвязку Codex для совместимости.
Настройку оператора, примеры префиксов моделей и конфиги только для Codex см. в
Codex Harness.
OpenClaw требует Codex app-server 0.125.0 или новее. Plugin Codex проверяет
handshake инициализации app-server и блокирует более старые или неверсированные серверы, чтобы
OpenClaw запускался только на поверхности протокола, с которой был протестирован. Нижняя
граница 0.125.0 включает поддержку payload нативного MCP hook, появившуюся в
Codex 0.124.0, при этом закрепляя OpenClaw на более новой протестированной стабильной линии.
Middleware результатов инструментов
Встроенные plugins и явно включенные установленные plugins с подходящими контрактами manifest могут подключать runtime-neutral middleware результатов инструментов черезapi.registerAgentToolResultMiddleware(...), когда их manifest объявляет
целевые id сред выполнения в contracts.agentToolResultMiddleware. Эта доверенная
граница предназначена для async-преобразований результатов инструментов, которые должны выполняться до того, как OpenClaw или Codex
передаст вывод инструмента обратно в модель.
Устаревшие встроенные plugins по-прежнему могут использовать
api.registerCodexAppServerExtensionFactory(...) для middleware только Codex app-server,
но новые преобразования результатов должны использовать runtime-neutral API.
Hook api.registerEmbeddedExtensionFactory(...), работавший только для embedded-runner, был удален;
встроенные преобразования результатов инструментов должны использовать runtime-neutral middleware.
Классификация терминального исхода
Нативные обвязки, которые владеют собственной проекцией протокола, могут использоватьclassifyAgentHarnessTerminalOutcome(...) из
openclaw/plugin-sdk/agent-harness-runtime, когда завершенный ход не произвел
видимого текста assistant. Helper возвращает empty, reasoning-only или
planning-only, чтобы политика fallback OpenClaw могла решить, нужно ли повторить попытку на
другой модели. planning-only требует явного поля planText обвязки;
OpenClaw не выводит его из prose assistant. Helper намеренно
не классифицирует ошибки prompt, выполняющиеся ходы и намеренные тихие ответы, такие как
NO_REPLY.
Побочные эффекты завершения агента
Нативные обвязки должны вызыватьrunAgentEndSideEffects(...) из
openclaw/plugin-sdk/agent-harness-runtime после финализации попытки. Он
dispatch-ит переносимый hook agent_end и research capture OpenClaw без
задержки интерактивных ответов. Используйте awaitAgentEndSideEffects(...) для локальных
неинтерактивных запусков, где попытка не должна завершаться, пока эти побочные эффекты
не закончатся. Оба helper-а принимают тот же payload { event, ctx }, что и
runAgentHarnessAgentEndHook(...); их сбои не изменяют результат завершенной
попытки.
Пользовательский ввод и поверхности инструментов
Нативные обвязки, которые предоставляют runtime-level запрос пользовательского ввода, должны использовать helper-ы пользовательского ввода изopenclaw/plugin-sdk/agent-harness-runtime, чтобы форматировать
prompt, доставлять его через блокирующий путь ответа OpenClaw и нормализовать
ответы choice/free-form обратно в нативную форму ответа среды выполнения. Helper
сохраняет единообразное представление канала/TUI, пока каждая обвязка сохраняет
собственный парсинг протокола и жизненный цикл pending-request.
Нативные обвязки, которым нужна похожая на PI компактная маршрутизация инструментов, должны использовать
createAgentHarnessToolSurfaceRuntime(...) из
openclaw/plugin-sdk/agent-harness-tool-runtime. Он владеет
выбором управления tool-search/code-mode, lean defaults локальной модели,
фильтрацией схем, совместимой с runtime, выполнением скрытого catalog, directory
hydration и очисткой catalog. Обвязки по-прежнему владеют своей SDK-specific конвертацией инструментов
и native execution callback.
Режим нативной обвязки Codex
Встроенная обвязкаcodex — это нативный режим Codex для встроенных ходов
агента OpenClaw. Сначала включите встроенный Plugin codex и добавьте codex в
plugins.allow, если ваш конфиг использует ограничительный allowlist. Конфиги нативного app-server
должны использовать openai/gpt-*; ходы агентов OpenAI выбирают обвязку Codex
по умолчанию. Устаревшие маршруты ref-ов моделей Codex следует исправлять с помощью
openclaw doctor --fix, а устаревшие ref-ы моделей codex/* остаются alias-ами совместимости
для нативной обвязки.
Когда этот режим работает, Codex владеет нативным thread id, поведением resume,
Compaction и выполнением app-server. OpenClaw по-прежнему владеет каналом чата,
видимым зеркалом транскрипта, политикой инструментов, approvals, доставкой медиа и выбором
сеанса. Используйте provider/model agentRuntime.id: "codex", когда нужно доказать,
что только путь Codex app-server может заявить запуск. Явные runtime-ы Plugin
fail closed; сбои выбора Codex app-server и сбои runtime не
повторяются через другую среду выполнения.
Строгость среды выполнения
По умолчанию OpenClaw использует runtime policy провайдера/моделиauto: зарегистрированные
обвязки Plugin могут заявить пару провайдер/модель, а встроенная среда выполнения
обрабатывает ход, когда совпадений нет. Ref-ы агентов OpenAI на официальном провайдере OpenAI по умолчанию используют Codex.
Используйте явную среду выполнения Plugin для провайдера/модели, например
agentRuntime.id: "codex", когда отсутствие выбора обвязки должно приводить к сбою, а не
к маршрутизации через встроенную среду выполнения. Сбои выбранной обвязки Plugin всегда
завершаются жесткой ошибкой. Это не блокирует явный provider/model agentRuntime.id: "openclaw".
Для embedded-запусков только Codex:
Нативные сеансы и зеркало транскрипта
Обвязка может хранить нативный id сеанса, id треда или токен возобновления на стороне демона. Держите эту привязку явно связанной с сеансом OpenClaw и продолжайте зеркалировать видимый пользователю вывод ассистента/инструментов в транскрипт OpenClaw. Транскрипт OpenClaw остается слоем совместимости для:- истории сеанса, видимой в канале
- поиска и индексирования транскриптов
- переключения обратно на встроенную обвязку OpenClaw на последующем ходе
- общего поведения
/new,/resetи удаления сеансов
reset(...), чтобы OpenClaw мог
очистить ее при сбросе соответствующего сеанса OpenClaw.
Результаты инструментов и медиа
Ядро формирует список инструментов OpenClaw и передает его в подготовленную попытку. Когда обвязка выполняет динамический вызов инструмента, возвращайте результат инструмента обратно через форму результата обвязки, а не отправляйте медиа в канал самостоятельно. Это сохраняет вывод текста, изображений, видео, музыки, TTS, подтверждений и инструментов обмена сообщениями на том же пути доставки, что и запуски на базе OpenClaw.Текущие ограничения
- Публичный путь импорта является общим, но некоторые псевдонимы типов попыток/результатов все еще содержат устаревшие имена для совместимости.
- Установка сторонних обвязок является экспериментальной. Предпочитайте provider plugins, пока вам не потребуется runtime нативного сеанса.
- Переключение обвязок поддерживается между ходами. Не переключайте обвязки в середине хода после запуска нативных инструментов, подтверждений, текста ассистента или отправки сообщений.