harness 是提供代理运行时的实现(代码术语)。例如,内置的 Codex harness 实现了
codex 运行时。公开配置在 provider 或 model 条目上使用 agentRuntime.id;整代理运行时键属于旧式配置并会被忽略。openclaw doctor --fix 会移除旧的整代理运行时固定项,并在需要时将旧式运行时模型引用重写为规范的 provider/model 引用以及按模型作用域的运行时策略。
有两类运行时:
- 嵌入式 harness 在 OpenClaw 的已准备代理循环中运行:内置的
openclaw运行时,以及已注册的插件 harness,例如codex和copilot。 - CLI 后端 在本地 CLI 进程中运行,同时保持模型引用为规范形式。例如,
anthropic/claude-opus-5配合按模型作用域的agentRuntime.id: "claude-cli",意思是“选择 Anthropic 模型,通过 Claude CLI 执行”。claude-cli不是嵌入式 harness id,且不得传递给 AgentHarness 选择。
copilot harness 是一个独立的、可选的外部插件 harness,用于 GitHub Copilot CLI;有关 PI、Codex 和 GitHub Copilot 代理运行时之间面向用户的决策,请参见 GitHub Copilot agent runtime。
Codex 表面
多个表面共用 Codex 这一名称:
这些表面是有意相互独立的。启用
codex 插件会提供原生 app-server 功能;openclaw doctor --fix 负责修复旧版 Codex 路由和清理过时的会话固定配置。现在,为代理选择 openai/* 模型意味着“通过 Codex 运行此模型”,除非使用的是非代理的 OpenAI API 表面。
常见的 ChatGPT/Codex 订阅设置使用 Codex OAuth 进行认证,但将模型引用保持为 openai/*,并选择 codex 运行时:
codex 插件启用后,请使用原生 /codex 命令表面(/codex bind、/codex threads、/codex resume、/codex steer、/codex stop)进行自然语言 Codex 控制,而不是使用 ACP。只有在用户明确要求 ACP/acpx,或正在测试 ACP 适配器路径时,才对 Codex 使用 ACP。Claude Code、Gemini CLI、OpenCode、Cursor 以及类似的外部 harness 仍使用 ACP。
决策树:
- Codex 绑定/控制/线程/恢复/引导/停止 -> 在启用捆绑
codex插件时,使用原生/codex命令表面。 - 将 Codex 作为嵌入式运行时,或使用通常由订阅支持的 Codex 代理体验 ->
openai/<model>。 - 明确选择由 OpenClaw 使用 OpenAI 模型 -> 保持模型引用为
openai/<model>,并将提供方/模型运行时策略设置为agentRuntime.id: "openclaw"。选中的openaiOAuth 配置文件会在内部通过 OpenClaw 的 Codex-auth 传输路由。 - 配置中的旧版 Codex 模型引用 -> 使用
openclaw doctor --fix修复为openai/<model>;doctor 会通过在旧模型引用隐含的位置添加提供方/模型作用域的agentRuntime.id: "codex"来保留 Codex 认证路由。旧的codex-cli/*模型引用会修复为相同的openai/<model>Codex app-server 路由;OpenClaw 不再保留捆绑的 Codex CLI 后端。 - 明确请求 ACP、acpx 或 Codex ACP 适配器 ->
runtime: "acp"andagentId: "codex"。 - Claude Code、Gemini CLI、OpenCode、Cursor、Droid 或其他外部 harness -> 使用 ACP/acpx,而不是原生子代理运行时。
关于 OpenAI 系列前缀拆分,请参见 OpenAI 和
模型提供方。关于 Codex 运行时支持
契约,请参见 Codex harness runtime。
运行时所有权
不同的运行时拥有循环的不同部分:
设计规则:如果 OpenClaw 拥有该表面,它可以提供正常的插件钩子行为。如果原生运行时拥有该表面,OpenClaw 需要运行时事件或原生钩子。如果原生运行时拥有规范线程状态,OpenClaw 会镜像并投射上下文,而不是重写不受支持的内部机制。
运行时选择
OpenClaw 在提供者和模型解析之后按以下顺序解析嵌入式运行时:- 模型范围的运行时策略 优先。它位于已配置的提供者
模型条目中,或位于
agents.defaults.models["provider/model"].agentRuntime/agents.entries.*.models["provider/model"].agentRuntime。像agents.defaults.models["vllm/*"].agentRuntime这样的提供者通配符会在精确模型策略之后生效,因此动态发现的提供者模型可以共享同一个运行时,而不会覆盖精确到单个模型的例外。 - 提供者范围的运行时策略:
models.providers.<provider>.agentRuntime。 auto模式:已注册的插件运行时可以声明自己支持的提供者/模型对。- 如果在
auto模式下没有任何项声明该轮次,OpenClaw 会回退到openclaw作为兼容运行时。若运行必须严格一致,请使用显式的运行时 id。
OPENCLAW_AGENT_RUNTIME、
会话 agentHarnessId/agentRuntimeOverride 状态、agents.defaults.agentRuntime,
以及 agents.entries.*.agentRuntime。运行 openclaw doctor --fix 以删除过时的
整个代理运行时配置,并在意图可保留时转换旧版运行时模型引用。
显式的提供者/模型插件运行时是“失败即关闭”的:在提供者或模型上设置 agentRuntime.id: "codex" 表示 Codex,或明确的选择/运行时错误——它绝不会静默路由回 OpenClaw。只有 auto 才可能将不匹配的轮次路由到 OpenClaw。
CLI 后端别名与嵌入式 harness ids 不同。首选的 Claude CLI 形式如下:
claude-cli/claude-opus-4-7 这样的旧引用仍受支持以保持兼容性,但新配置应保持 provider/model 的规范形式,并将执行后端放入 provider/model 运行时策略中。
旧的 codex-cli/* 引用有所不同:doctor 会将它们迁移到 openai/*,使其通过 Codex app-server harness 运行,而不是保留一个 Codex CLI 后端。
auto 模式对大多数提供者有意保持保守。OpenAI 代理模型是例外:未设置运行时和 auto 都会解析到 Codex harness。显式的 OpenClaw 运行时配置仍然是 openai/* 代理轮次的可选兼容路径;当与已选择的 openai OAuth 配置文件配对时,OpenClaw 会通过 Codex-auth 传输在内部路由该路径,同时将公开模型引用保持为 openai/*。过时的 OpenAI 运行时会话固定值会被运行时选择忽略,并可通过 openclaw doctor --fix 清理。
如果 openclaw doctor 提示在保留旧版 Codex 模型引用的同时已启用 codex 插件,请将其视为旧路由状态,并运行 openclaw doctor --fix 将其重写为带有 Codex 运行时的 openai/*。
GitHub Copilot 代理运行时
外部@openclaw/copilot 插件注册了一个可选择加入的 copilot 运行时,该运行时由 GitHub Copilot CLI(
@github/copilot-sdk)提供支持。它声明了规范的订阅
github-copilot 提供商,并且绝不会被 auto 选中。可通过agentRuntime.id 按模型或按提供商选择加入:
无需
openclaw doctor 加载插件代码。有关配置、身份验证、记录镜像、压缩、声明式 doctor 契约,以及更广泛的 PI、Codex 与 Copilot SDK 选型,请参阅
GitHub Copilot 代理运行时。
兼容性契约
当运行时不是 OpenClaw 时,其文档应说明它支持哪些 OpenClaw 表面:
Codex 运行时支持契约记录在
Codex harness runtime。
状态标签
状态输出可以同时显示Execution 和 Runtime 标签。请将它们视为诊断信息,而不是提供方名称:
- 类似
openai/gpt-5.6-sol的模型引用是所选的提供方/模型。 - 类似
codex的运行时 ID 是执行本轮交互的循环。 - 类似 Telegram 或 Discord 的频道标签表示对话发生的位置。