




















@@ -0,0 +1,127 @@
1+---
2+summary: "How OpenClaw separates model providers, models, channels, and agent runtimes"
3+title: "Agent runtimes"
4+read_when:
5+ - You are choosing between PI, Codex, ACP, or another native agent runtime
6+ - You are confused by provider/model/runtime labels in status or config
7+ - You are documenting support parity for a native harness
8+---
9+10+An **agent runtime** is the component that owns one prepared model loop: it
11+receives the prompt, drives model output, handles native tool calls, and returns
12+the finished turn to OpenClaw.
13+14+Runtimes are easy to confuse with providers because both show up near model
15+configuration. They are different layers:
16+17+| Layer | Examples | What It Means |
18+| ------------- | ------------------------------------- | ------------------------------------------------------------------- |
19+| Provider | `openai`, `anthropic`, `openai-codex` | How OpenClaw authenticates, discovers models, and names model refs. |
20+| Model | `gpt-5.5`, `claude-opus-4-6` | The model selected for the agent turn. |
21+| Agent runtime | `pi`, `codex`, ACP-backed runtimes | The low level loop that executes the prepared turn. |
22+| Channel | Telegram, Discord, Slack, WhatsApp | Where messages enter and leave OpenClaw. |
23+24+You will also see the word **harness** in code and config. A harness is the
25+implementation that provides an agent runtime. For example, the bundled Codex
26+harness implements the `codex` runtime. The config key is still named
27+`embeddedHarness` for compatibility, but user-facing docs and status output
28+should generally say runtime.
29+30+The common Codex setup uses the `openai` provider with the `codex` runtime:
31+32+```json5
33+{
34+ agents: {
35+ defaults: {
36+ model: "openai/gpt-5.5",
37+ embeddedHarness: {
38+ runtime: "codex",
39+ },
40+ },
41+ },
42+}
43+```
44+45+That means OpenClaw selects an OpenAI model ref, then asks the Codex app-server
46+runtime to run the embedded agent turn. It does not mean the channel, model
47+provider catalog, or OpenClaw session store becomes Codex.
48+49+## Runtime ownership
50+51+Different runtimes own different amounts of the loop.
52+53+| Surface | OpenClaw PI embedded | Codex app-server |
54+| --------------------------- | --------------------------------------- | --------------------------------------------------------------------------- |
55+| Model loop owner | OpenClaw through the PI embedded runner | Codex app-server |
56+| Canonical thread state | OpenClaw transcript | Codex thread, plus OpenClaw transcript mirror |
57+| OpenClaw dynamic tools | Native OpenClaw tool loop | Bridged through the Codex adapter |
58+| Native shell and file tools | PI/OpenClaw path | Codex-native tools, bridged through native hooks where supported |
59+| Context engine | Native OpenClaw context assembly | OpenClaw projects assembled context into the Codex turn |
60+| Compaction | OpenClaw or selected context engine | Codex-native compaction, with OpenClaw notifications and mirror maintenance |
61+| Channel delivery | OpenClaw | OpenClaw |
62+63+This ownership split is the main design rule:
64+65+- If OpenClaw owns the surface, OpenClaw can provide normal plugin hook behavior.
66+- If the native runtime owns the surface, OpenClaw needs runtime events or native hooks.
67+- If the native runtime owns canonical thread state, OpenClaw should mirror and project context, not rewrite unsupported internals.
68+69+## Runtime selection
70+71+OpenClaw chooses an embedded runtime after provider and model resolution:
72+73+1. A session's recorded runtime wins. Config changes do not hot-switch an
74+ existing transcript to a different native thread system.
75+2. `OPENCLAW_AGENT_RUNTIME=<id>` forces that runtime for new or reset sessions.
76+3. `agents.defaults.embeddedHarness.runtime` or
77+`agents.list[].embeddedHarness.runtime` can set `auto`, `pi`, or a registered
78+ runtime id such as `codex`.
79+4. In `auto` mode, registered plugin runtimes can claim supported provider/model
80+ pairs.
81+5. If no runtime claims a turn in `auto` mode and `fallback: "pi"` is set
82+ (the default), OpenClaw uses PI as the compatibility fallback. Set
83+`fallback: "none"` to make unmatched `auto`-mode selection fail instead.
84+85+Explicit plugin runtimes fail closed by default. For example,
86+`runtime: "codex"` means Codex or a clear selection error unless you set
87+`fallback: "pi"` in the same override scope.
88+89+## Compatibility contract
90+91+When a runtime is not PI, it should document what OpenClaw surfaces it supports.
92+Use this shape for runtime docs:
93+94+| Question | Why It Matters |
95+| -------------------------------------- | ------------------------------------------------------------------------------------------------- |
96+| Who owns the model loop? | Determines where retries, tool continuation, and final answer decisions happen. |
97+| Who owns canonical thread history? | Determines whether OpenClaw can edit history or only mirror it. |
98+| Do OpenClaw dynamic tools work? | Messaging, sessions, cron, and OpenClaw-owned tools rely on this. |
99+| Do dynamic tool hooks work? | Plugins expect `before_tool_call`, `after_tool_call`, and middleware around OpenClaw-owned tools. |
100+| Do native tool hooks work? | Shell, patch, and runtime-owned tools need native hook support for policy and observation. |
101+| Does the context engine lifecycle run? | Memory and context plugins depend on assemble, ingest, after-turn, and compaction lifecycle. |
102+| What compaction data is exposed? | Some plugins only need notifications, while others need kept/dropped metadata. |
103+| What is intentionally unsupported? | Users should not assume PI equivalence where the native runtime owns more state. |
104+105+The Codex runtime support contract is documented in
106+[Codex harness](/plugins/codex-harness#v1-support-contract).
107+108+## Status labels
109+110+Status output may show both `Execution` and `Runtime` labels. Read them as
111+diagnostics, not as provider names.
112+113+- A model ref such as `openai/gpt-5.5` tells you the selected provider/model.
114+- A runtime id such as `codex` tells you which loop is executing the turn.
115+- A channel label such as Telegram or Discord tells you where the conversation is happening.
116+117+If a session still shows PI after changing runtime config, start a new session
118+with `/new` or clear the current one with `/reset`. Existing sessions keep their
119+recorded runtime so a transcript is not replayed through two incompatible native
120+session systems.
121+122+## Related
123+124+- [Codex harness](/plugins/codex-harness)
125+- [Agent harness plugins](/plugins/sdk-agent-harness)
126+- [Agent loop](/concepts/agent-loop)
127+- [Models](/concepts/models)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。