mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 15:40:44 +00:00
Stop heartbeat tool turns from asking for HEARTBEAT_OK (#76338)
* fix heartbeat tool prompt sentinel * fix: remove agent runtime fallback config
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
fe6f32e80de6cf5f9877e2944039a31dc677fee0c70f4e63bb252315d29e5eb4 config-baseline.json
|
||||
6d477ca3b60982b770e85929ab8393a7923a6b31ce99f3b7c7dba13cdd4f9180 config-baseline.core.json
|
||||
b9831b7dafd0a7d6d1256ee531b30c0b75c64bf0f494fcc9e68bf2255fdb560a config-baseline.json
|
||||
b6ebb672410bd1ff148ee6d25fba1a359032686959e28d7b8f0313323f94debf config-baseline.core.json
|
||||
f2a1aad257c570b497865680c331568a6775369528749826dfa35c1f644483fc config-baseline.channel.json
|
||||
fffe0e74eab92a88c3c57952a70bc932438ce3a7f5f9982688437f2cdaee0bcb config-baseline.plugin.json
|
||||
|
||||
@@ -140,15 +140,13 @@ OpenClaw chooses an embedded runtime after provider and model resolution:
|
||||
supported CLI backend alias such as `claude-cli`.
|
||||
4. In `auto` mode, registered plugin runtimes can claim supported provider/model
|
||||
pairs.
|
||||
5. If no runtime claims a turn in `auto` mode and `fallback: "pi"` is set
|
||||
(the default), OpenClaw uses PI as the compatibility fallback. Set
|
||||
`fallback: "none"` to make unmatched `auto`-mode selection fail instead.
|
||||
5. If no runtime claims a turn in `auto` mode, OpenClaw uses PI as the
|
||||
compatibility runtime. Use an explicit runtime id when the run must be
|
||||
strict.
|
||||
|
||||
Explicit plugin runtimes fail closed by default. For example,
|
||||
`agentRuntime.id: "codex"` means Codex or a clear selection error unless you set
|
||||
`fallback: "pi"` in the same override scope. A runtime override does not inherit
|
||||
a broader fallback setting, so an agent-level `agentRuntime.id: "codex"` is not
|
||||
silently routed back to PI just because defaults used `fallback: "pi"`.
|
||||
Explicit plugin runtimes fail closed. For example, `agentRuntime.id: "codex"`
|
||||
means Codex or a clear selection/runtime error; it is never silently routed back
|
||||
to PI.
|
||||
|
||||
CLI backend aliases are different from embedded harness ids. The preferred
|
||||
Claude CLI form is:
|
||||
|
||||
@@ -157,7 +157,7 @@ Anthropic staff told us OpenClaw-style Claude CLI usage is allowed again, so Ope
|
||||
agents: {
|
||||
defaults: {
|
||||
model: { primary: "openai/gpt-5.5" },
|
||||
agentRuntime: { id: "codex", fallback: "none" },
|
||||
agentRuntime: { id: "codex" },
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -334,7 +334,6 @@ Time format in system prompt. Default: `auto` (OS preference).
|
||||
params: { cacheRetention: "long" }, // global default provider params
|
||||
agentRuntime: {
|
||||
id: "pi", // pi | auto | registered harness id, e.g. codex
|
||||
fallback: "pi", // pi | none
|
||||
},
|
||||
pdfMaxBytesMb: 10,
|
||||
pdfMaxPages: 20,
|
||||
@@ -393,7 +392,7 @@ Time format in system prompt. Default: `auto` (OS preference).
|
||||
- `params.chat_template_kwargs`: vLLM/OpenAI-compatible chat-template arguments merged into top-level `api: "openai-completions"` request bodies. For `vllm/nemotron-3-*` with thinking off, the bundled vLLM plugin automatically sends `enable_thinking: false` and `force_nonempty_content: true`; explicit `chat_template_kwargs` override generated defaults, and `extra_body.chat_template_kwargs` still has final precedence. For vLLM Qwen thinking controls, set `params.qwenThinkingFormat` to `"chat-template"` or `"top-level"` on that model entry.
|
||||
- `compat.supportedReasoningEfforts`: per-model OpenAI-compatible reasoning effort list. Include `"xhigh"` for custom endpoints that truly accept it; OpenClaw then exposes `/think xhigh` in command menus, Gateway session rows, session patch validation, agent CLI validation, and `llm-task` validation for that configured provider/model. Use `compat.reasoningEffortMap` when the backend wants a provider-specific value for a canonical level.
|
||||
- `params.preserveThinking`: Z.AI-only opt-in for preserved thinking. When enabled and thinking is on, OpenClaw sends `thinking.clear_thinking: false` and replays prior `reasoning_content`; see [Z.AI thinking and preserved thinking](/providers/zai#thinking-and-preserved-thinking).
|
||||
- `agentRuntime`: default low-level agent runtime policy. Omitted id defaults to OpenClaw Pi. Use `id: "pi"` to force the built-in PI harness, `id: "auto"` to let registered plugin harnesses claim supported models, a registered harness id such as `id: "codex"`, or a supported CLI backend alias such as `id: "claude-cli"`. Set `fallback: "none"` to disable automatic PI fallback. Explicit plugin runtimes such as `codex` fail closed by default unless you set `fallback: "pi"` in the same override scope. Keep model refs canonical as `provider/model`; select Codex, Claude CLI, Gemini CLI, and other execution backends through runtime config instead of legacy runtime provider prefixes. See [Agent runtimes](/concepts/agent-runtimes) for how this differs from provider/model selection.
|
||||
- `agentRuntime`: default low-level agent runtime policy. Omitted id defaults to OpenClaw Pi. Use `id: "pi"` to force the built-in PI harness, `id: "auto"` to let registered plugin harnesses claim supported models and use PI when none match, a registered harness id such as `id: "codex"` to require that harness, or a supported CLI backend alias such as `id: "claude-cli"`. Explicit plugin runtimes fail closed when the harness is unavailable or fails. Keep model refs canonical as `provider/model`; select Codex, Claude CLI, Gemini CLI, and other execution backends through runtime config instead of legacy runtime provider prefixes. See [Agent runtimes](/concepts/agent-runtimes) for how this differs from provider/model selection.
|
||||
- Config writers that mutate these fields (for example `/models set`, `/models set-image`, and fallback add/remove commands) save canonical object form and preserve existing fallback lists when possible.
|
||||
- `maxConcurrent`: max parallel agent runs across sessions (each session still serialized). Default: 4.
|
||||
|
||||
@@ -412,7 +411,6 @@ model, see [Agent runtimes](/concepts/agent-runtimes).
|
||||
model: "openai/gpt-5.5",
|
||||
agentRuntime: {
|
||||
id: "codex",
|
||||
fallback: "none",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -420,9 +418,9 @@ model, see [Agent runtimes](/concepts/agent-runtimes).
|
||||
```
|
||||
|
||||
- `id`: `"auto"`, `"pi"`, a registered plugin harness id, or a supported CLI backend alias. The bundled Codex plugin registers `codex`; the bundled Anthropic plugin provides the `claude-cli` CLI backend.
|
||||
- `fallback`: `"pi"` or `"none"`. In `id: "auto"`, omitted fallback defaults to `"pi"` so old configs can keep using PI when no plugin harness claims a run. In explicit plugin runtime mode, such as `id: "codex"`, omitted fallback defaults to `"none"` so a missing harness fails instead of silently using PI. Runtime overrides do not inherit fallback from a broader scope; set `fallback: "pi"` alongside the explicit runtime when you intentionally want that compatibility fallback. Selected plugin harness failures always surface directly.
|
||||
- Environment overrides: `OPENCLAW_AGENT_RUNTIME=<id|auto|pi>` overrides `id`; `OPENCLAW_AGENT_HARNESS_FALLBACK=pi|none` overrides fallback for that process.
|
||||
- For Codex-only deployments, set `model: "openai/gpt-5.5"` and `agentRuntime.id: "codex"`. You may also set `agentRuntime.fallback: "none"` explicitly for readability; it is the default for explicit plugin runtimes.
|
||||
- `id: "auto"` lets registered plugin harnesses claim supported turns and uses PI when no harness matches. An explicit plugin runtime such as `id: "codex"` requires that harness and fails closed if it is unavailable or fails.
|
||||
- Environment override: `OPENCLAW_AGENT_RUNTIME=<id|auto|pi>` overrides `id` for that process.
|
||||
- For Codex-only deployments, set `model: "openai/gpt-5.5"` and `agentRuntime.id: "codex"`.
|
||||
- For Claude CLI deployments, prefer `model: "anthropic/claude-opus-4-7"` plus `agentRuntime.id: "claude-cli"`. Legacy `claude-cli/claude-opus-4-7` model refs still work for compatibility, but new config should keep provider/model selection canonical and put the execution backend in `agentRuntime.id`.
|
||||
- Older runtime-policy keys are rewritten to `agentRuntime` by `openclaw doctor --fix`.
|
||||
- Harness choice is pinned per session id after the first embedded run. Config/env changes affect new or reset sessions, not an existing transcript. Legacy sessions with transcript history but no recorded pin are treated as PI-pinned. `/status` reports the effective runtime, for example `Runtime: OpenClaw Pi Default` or `Runtime: OpenAI Codex`.
|
||||
@@ -955,7 +953,7 @@ for provider examples and precedence.
|
||||
thinkingDefault: "high", // per-agent thinking level override
|
||||
reasoningDefault: "on", // per-agent reasoning visibility override
|
||||
fastModeDefault: false, // per-agent fast mode override
|
||||
agentRuntime: { id: "auto", fallback: "pi" },
|
||||
agentRuntime: { id: "auto" },
|
||||
params: { cacheRetention: "none" }, // overrides matching defaults.models params by key
|
||||
tts: {
|
||||
providers: {
|
||||
|
||||
@@ -291,8 +291,8 @@ Docker notes:
|
||||
- Optional image probe: `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1`
|
||||
- Optional MCP/tool probe: `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1`
|
||||
- Optional Guardian probe: `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1`
|
||||
- The smoke sets `OPENCLAW_AGENT_HARNESS_FALLBACK=none` so a broken Codex
|
||||
harness cannot pass by silently falling back to PI.
|
||||
- The smoke uses `agentRuntime.id: "codex"` so a broken Codex harness cannot
|
||||
pass by silently falling back to PI.
|
||||
- Auth: Codex app-server auth from the local Codex subscription login. Docker
|
||||
smokes can also provide `OPENAI_API_KEY` for non-Codex probes when applicable,
|
||||
plus optional copied `~/.codex/auth.json` and `~/.codex/config.toml`.
|
||||
@@ -327,9 +327,8 @@ Docker notes:
|
||||
`OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0` or
|
||||
`OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0` when you need a narrower debug
|
||||
run.
|
||||
- Docker also exports `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, matching the live
|
||||
test config so legacy aliases or PI fallback cannot hide a Codex harness
|
||||
regression.
|
||||
- Docker uses the same explicit Codex runtime config, so legacy aliases or PI
|
||||
fallback cannot hide a Codex harness regression.
|
||||
|
||||
### Recommended live recipes
|
||||
|
||||
|
||||
@@ -143,14 +143,14 @@ For engines like lossless-claw, the assembled context should be deterministic
|
||||
for unchanged inputs. Do not add timestamps, random ids, or nondeterministic
|
||||
ordering to generated context text.
|
||||
|
||||
### PI fallback semantics do not change
|
||||
### Runtime selection semantics do not change
|
||||
|
||||
Harness selection remains as-is:
|
||||
|
||||
- `runtime: "pi"` forces PI
|
||||
- `runtime: "codex"` selects the registered Codex harness
|
||||
- `runtime: "auto"` lets plugin harnesses claim supported providers
|
||||
- `fallback: "none"` disables PI fallback when no plugin harness matches
|
||||
- unmatched `auto` runs use PI
|
||||
|
||||
This work changes what happens after the Codex harness is selected.
|
||||
|
||||
|
||||
@@ -98,7 +98,6 @@ Computer Use available before a thread starts:
|
||||
model: "openai/gpt-5.5",
|
||||
agentRuntime: {
|
||||
id: "codex",
|
||||
fallback: "none",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -61,7 +61,6 @@ Then enable the bundled `codex` plugin and force the Codex runtime:
|
||||
model: "openai/gpt-5.5",
|
||||
agentRuntime: {
|
||||
id: "codex",
|
||||
fallback: "none",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -305,7 +304,6 @@ adds a separate Codex agent:
|
||||
defaults: {
|
||||
agentRuntime: {
|
||||
id: "auto",
|
||||
fallback: "pi",
|
||||
},
|
||||
},
|
||||
list: [
|
||||
@@ -358,8 +356,8 @@ routing.
|
||||
## Codex-only deployments
|
||||
|
||||
Force the Codex harness when you need to prove that every embedded agent turn
|
||||
uses Codex. Explicit plugin runtimes default to no PI fallback, so
|
||||
`fallback: "none"` is optional but often useful as documentation:
|
||||
uses Codex. Explicit plugin runtimes fail closed and are never silently retried
|
||||
through PI:
|
||||
|
||||
```json5
|
||||
{
|
||||
@@ -368,7 +366,6 @@ uses Codex. Explicit plugin runtimes default to no PI fallback, so
|
||||
model: "openai/gpt-5.5",
|
||||
agentRuntime: {
|
||||
id: "codex",
|
||||
fallback: "none",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -382,9 +379,7 @@ OPENCLAW_AGENT_RUNTIME=codex openclaw gateway run
|
||||
```
|
||||
|
||||
With Codex forced, OpenClaw fails early if the Codex plugin is disabled, the
|
||||
app-server is too old, or the app-server cannot start. Set
|
||||
`OPENCLAW_AGENT_HARNESS_FALLBACK=pi` only if you intentionally want PI to handle
|
||||
missing harness selection.
|
||||
app-server is too old, or the app-server cannot start.
|
||||
|
||||
## Per-agent Codex
|
||||
|
||||
@@ -397,7 +392,6 @@ auto-selection:
|
||||
defaults: {
|
||||
agentRuntime: {
|
||||
id: "auto",
|
||||
fallback: "pi",
|
||||
},
|
||||
},
|
||||
list: [
|
||||
@@ -412,7 +406,6 @@ auto-selection:
|
||||
model: "openai/gpt-5.5",
|
||||
agentRuntime: {
|
||||
id: "codex",
|
||||
fallback: "none",
|
||||
},
|
||||
},
|
||||
],
|
||||
@@ -711,7 +704,6 @@ Minimal config:
|
||||
model: "openai/gpt-5.5",
|
||||
agentRuntime: {
|
||||
id: "codex",
|
||||
fallback: "none",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -1059,9 +1051,8 @@ new configs. Select an `openai/gpt-*` model with
|
||||
**OpenClaw uses PI instead of Codex:** `agentRuntime.id: "auto"` can still use PI as the
|
||||
compatibility backend when no Codex harness claims the run. Set
|
||||
`agentRuntime.id: "codex"` to force Codex selection while testing. A
|
||||
forced Codex runtime now fails instead of falling back to PI unless you
|
||||
explicitly set `agentRuntime.fallback: "pi"`. Once Codex app-server is
|
||||
selected, its failures surface directly without extra fallback config.
|
||||
forced Codex runtime fails instead of falling back to PI. Once Codex app-server
|
||||
is selected, its failures surface directly.
|
||||
|
||||
**The app-server is rejected:** upgrade Codex so the app-server handshake
|
||||
reports version `0.125.0` or newer. Same-version prereleases or build-suffixed
|
||||
|
||||
@@ -201,25 +201,20 @@ model refs remain compatibility aliases for the native harness.
|
||||
When this mode runs, Codex owns the native thread id, resume behavior,
|
||||
compaction, and app-server execution. OpenClaw still owns the chat channel,
|
||||
visible transcript mirror, tool policy, approvals, media delivery, and session
|
||||
selection. Use `agentRuntime.id: "codex"` without a `fallback` override
|
||||
when you need to prove that only the Codex app-server path can claim the run.
|
||||
Explicit plugin runtimes already fail closed by default. Set `fallback: "pi"`
|
||||
only when you intentionally want PI to handle missing harness selection. Codex
|
||||
app-server failures already fail directly instead of retrying through PI.
|
||||
selection. Use `agentRuntime.id: "codex"` when you need to prove that only the
|
||||
Codex app-server path can claim the run. Explicit plugin runtimes fail closed;
|
||||
Codex app-server selection failures and runtime failures are not retried through
|
||||
PI.
|
||||
|
||||
## Disable PI fallback
|
||||
## Runtime strictness
|
||||
|
||||
By default, OpenClaw runs embedded agents with `agents.defaults.agentRuntime`
|
||||
set to `{ id: "auto", fallback: "pi" }`. In `auto` mode, registered plugin
|
||||
harnesses can claim a provider/model pair. If none match, OpenClaw falls back
|
||||
to PI.
|
||||
|
||||
In `auto` mode, set `fallback: "none"` when you need missing plugin harness
|
||||
selection to fail instead of using PI. Explicit plugin runtimes such as
|
||||
`agentRuntime.id: "codex"` already fail closed by default, unless
|
||||
`fallback: "pi"` is set in the same config or environment override scope.
|
||||
Selected plugin harness failures always fail hard. This does not block an
|
||||
explicit `agentRuntime.id: "pi"` or `OPENCLAW_AGENT_RUNTIME=pi`.
|
||||
By default, OpenClaw runs embedded agents with OpenClaw Pi. In `auto` mode,
|
||||
registered plugin harnesses can claim a provider/model pair, and PI handles the
|
||||
turn when none match. Use an explicit plugin runtime such as
|
||||
`agentRuntime.id: "codex"` when missing harness selection should fail instead
|
||||
of routing through PI. Selected plugin harness failures always fail hard. This
|
||||
does not block an explicit `agentRuntime.id: "pi"` or
|
||||
`OPENCLAW_AGENT_RUNTIME=pi`.
|
||||
|
||||
For Codex-only embedded runs:
|
||||
|
||||
@@ -236,17 +231,15 @@ For Codex-only embedded runs:
|
||||
}
|
||||
```
|
||||
|
||||
If you want any registered plugin harness to claim matching models but never
|
||||
want OpenClaw to silently fall back to PI, keep `runtime: "auto"` and disable
|
||||
the fallback:
|
||||
If you want any registered plugin harness to claim matching models and otherwise
|
||||
use PI, set `id: "auto"`:
|
||||
|
||||
```json
|
||||
{
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"agentRuntime": {
|
||||
"id": "auto",
|
||||
"fallback": "none"
|
||||
"id": "auto"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -259,39 +252,30 @@ Per-agent overrides use the same shape:
|
||||
{
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"agentRuntime": {
|
||||
"id": "auto",
|
||||
"fallback": "pi"
|
||||
}
|
||||
"agentRuntime": { "id": "auto" }
|
||||
},
|
||||
"list": [
|
||||
{
|
||||
"id": "codex-only",
|
||||
"model": "openai/gpt-5.5",
|
||||
"agentRuntime": {
|
||||
"id": "codex",
|
||||
"fallback": "none"
|
||||
}
|
||||
"agentRuntime": { "id": "codex" }
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`OPENCLAW_AGENT_RUNTIME` still overrides the configured runtime. Use
|
||||
`OPENCLAW_AGENT_HARNESS_FALLBACK=none` to disable PI fallback from the
|
||||
environment.
|
||||
`OPENCLAW_AGENT_RUNTIME` still overrides the configured runtime.
|
||||
|
||||
```bash
|
||||
OPENCLAW_AGENT_RUNTIME=codex \
|
||||
OPENCLAW_AGENT_HARNESS_FALLBACK=none \
|
||||
openclaw gateway run
|
||||
OPENCLAW_AGENT_RUNTIME=codex openclaw gateway run
|
||||
```
|
||||
|
||||
With fallback disabled, a session fails early when the requested harness is not
|
||||
registered, does not support the resolved provider/model, or fails before
|
||||
producing turn side effects. That is intentional for Codex-only deployments and
|
||||
for live tests that must prove the Codex app-server path is actually in use.
|
||||
With an explicit plugin runtime, a session fails early when the requested
|
||||
harness is not registered, does not support the resolved provider/model, or
|
||||
fails before producing turn side effects. That is intentional for Codex-only
|
||||
deployments and for live tests that must prove the Codex app-server path is
|
||||
actually in use.
|
||||
|
||||
This setting only controls the embedded agent harness. It does not disable
|
||||
image, video, music, TTS, PDF, or other provider-specific model routing.
|
||||
|
||||
@@ -196,7 +196,7 @@ Choose your preferred auth method and follow the setup steps.
|
||||
```bash
|
||||
openclaw config set plugins.entries.codex '{"enabled":true}' --strict-json --merge
|
||||
openclaw config set agents.defaults.model.primary openai/gpt-5.5
|
||||
openclaw config set agents.defaults.agentRuntime '{"id":"codex","fallback":"none"}' --strict-json
|
||||
openclaw config set agents.defaults.agentRuntime '{"id":"codex"}' --strict-json
|
||||
```
|
||||
</Step>
|
||||
<Step title="Verify Codex auth is available">
|
||||
@@ -235,7 +235,7 @@ Choose your preferred auth method and follow the setup steps.
|
||||
agents: {
|
||||
defaults: {
|
||||
model: { primary: "openai/gpt-5.5" },
|
||||
agentRuntime: { id: "codex", fallback: "none" },
|
||||
agentRuntime: { id: "codex" },
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user