Releases: aaajiao/openclaw-orbstack
v2026.5.7 — sync with upstream openclaw 2026.5.7
Sync with upstream openclaw 2026.5.7 — a pure fix release with no new interactive prompts and no new config keys.
Existing users: openclaw-update self-updates the wrapper repo before each run, so the next invocation picks up these changes automatically.
What v2026.5.7 fixes
Doctor self-heal pair
- Doctor/Codex OAuth (fixes #78407 follow-up):
doctor --fixnow preserves workingopenai-codex/*PI routes and recovers anyopenai/*GPT-5 routes that v2026.5.5 had rewritten when only Codex OAuth auth is available. Subscription-auth setups are no longer broken by update repair. - Cron/doctor (fixes #78549):
doctor --fixremoves badpayload.modeloverrides on persisted cron jobs ("default","null", blank, or JSONnull) while keeping cron runtime model validation strict.
CLI surface cleanup
- Channels CLI (#78456):
openclaw channels listis now channel-only and renders installed/configured/enabled state. New--allflag includes bundled and catalog channels. Model auth/usage details have moved toopenclaw models auth list,openclaw status, andopenclaw models list. - Cron CLI (#78701):
openclaw cron list --jsonandopenclaw cron show --jsonnow include a computedstatusfield (disabled/running/ok/error/skipped/idle) so external tooling can read cron state without reimplementing derivation.
Other notable upstream fixes (no wrapper impact)
- Agents/context engine: cached assembled context views are invalidated on history shrink/assembly failure, preventing stale pre-reset history reuse (fixes #77968).
- Agents/compaction: compaction summary reserve tokens are clamped to each model's output limit, ending invalid
max_tokensfor high-context compaction (#54392). - Telegram polling watchdog stays tied to
getUpdatesliveness so unrelated outbound calls cannot mask a wedged poller (fixes #78422). - Codex/approvals: pre-guardian native
PermissionRequesthook is no longer installed by default in Codex approval modes;allow-alwaysdecisions are remembered for identical native payloads within the active session window. - WhatsApp: proactive sends route through Baileys LID forward mappings when available (fixes #67378).
- Discord/voice: default post-speech silence grace extended to 2.5s; new
voice.captureSilenceGraceMsfor noisy sessions. - Tavily:
tavily_search/tavily_extractresolve credentials from the active runtime config snapshot soexecSecretRef-backed keys arrive resolved (#78610).
Full upstream notes: https://github.com/openclaw/openclaw/releases/tag/v2026.5.7
Wrapper changes
| File | Change |
|---|---|
VERSION |
v2026.5.6 → v2026.5.7 |
CLAUDE.md |
Version header bump |
docs/commands.md |
Annotate channels list --all, cron list/show --json status field |
No installer/updater script changes — the yes n pipe in scripts/commands/update.sh already covers v2026.5.7 (no new interactive prompts).
v2026.5.6 — sync with upstream openclaw 2026.5.6 (resolves v2026.5.5 #78407)
Sync with upstream openclaw 2026.5.6 — a same-day hotfix released ~9 hours after v2026.5.5. Resolves the #78407 codex-route rewrite that v2026.5.5 carried as a known issue.
If you skipped v2026.5.5 because of the warning in its release notes, this is the version to upgrade to. If you already upgraded and got bit, recovery steps are below.
Existing users: openclaw-update self-updates the wrapper repo before each run, so the next invocation picks up these changes automatically.
What v2026.5.6 fixes
- Doctor/OpenAI Codex (fixes #78407): reverts the v2026.5.5
doctor --fixrepair that rewrote validopenai-codex/*ChatGPT/Codex OAuth routes toopenai/*. OAuth-only setups (ChatGPT subscription, noOPENAI_API_KEY) now stay on the Codex OAuth PI route as intended. - Plugins/runtime fetch (#77846): drops third-party symbol metadata from header dicts before passing them to native
fetch/Headers, so SDK and guarded/proxy fetch paths no longer reject otherwise valid plugin requests. - Debug proxy: header dictionaries are normalized before replay so symbol metadata cannot poison debug-proxy fetches.
- Web fetch (#78439): guarded dispatcher cleanup is bounded after request timeouts so timed-out fetches return tool errors instead of leaving Gateway tool lanes active.
Recovery for users already on v2026.5.5
If openclaw doctor --fix already rewrote your openai-codex/* refs to openai/*, run on the Mac host:
orb -m openclaw-vm bash -lc 'openclaw models set openai-codex/gpt-5.5 && openclaw config validate'Or restore from doctor's pre-doctor backup (atomic):
orb -m openclaw-vm bash -lc \
'cp ~/.openclaw/openclaw.json.bak.1 ~/.openclaw/openclaw.json && \
systemctl --user restart openclaw-gateway.service'Upstream recovery docs: docs.openclaw.ai/providers/openai#check-and-recover-codex-oauth-routing
What didn't change
- No new doctor interactive prompts.
- No new config opt-ins (
templates/openclaw.json.exampleunchanged). - No new CLI commands or flags (
docs/commands.mdunchanged). - No channel or provider additions.
Full changelog: v2026.5.5...v2026.5.6
v2026.5.5 — sync with upstream openclaw 2026.5.5
Sync with upstream openclaw 2026.5.5. This is a wrapper version bump only — VERSION and CLAUDE.md header. No installer/script changes.
Existing users: openclaw-update self-updates the wrapper repo before each run, so the next invocation picks up these changes automatically. Please read the known issue below before upgrading.
Highlights for OrbStack users
- Telegram/Codex (#75641): message-tool-only progress drafts stay visible; native Codex tool progress is rendered once per tool instead of duplicating draft lines.
- OpenAI/Gateway: streaming chat-completion flushes the assistant role SSE chunk as soon as headers are accepted, so cold agent setup no longer hangs the client until idle timeout.
- CLI/sessions cleanup (#77608): orphan transcripts, compaction checkpoints, and trajectory artifacts are pruned during normal
openclaw sessions cleanup. - Plugins/update: official npm and ClawHub plugins (Codex, Discord, WhatsApp, diagnostics) stay synced during host updates even when disabled or exact-pinned.
- Auth profiles: format-level rejections no longer cool down providers, keeping fallback chains stable.
⚠️ Known issue carried into v2026.5.5 — please read before upgrading
On upgrade, openclaw doctor --fix (run automatically by openclaw-update) rewrites every `openai-codex/` model reference to `openai/` across `agents.defaults.modelOverride`, per-agent and per-channel `modelOverride`, and `agents.modelCatalog`. Setups that authenticate via OpenAI Codex OAuth only (ChatGPT subscription, no `OPENAI_API_KEY`) will fail every agent run on boot with:
```
[boot] agent run failed: No API key found for provider "openai".
```
Upstream tracking: openclaw/openclaw#78407
Recovery (run on the Mac host):
```bash
orb -m openclaw-vm bash -lc \
'cp ~/.openclaw/openclaw.json.bak.1 ~/.openclaw/openclaw.json && \
systemctl --user restart openclaw-gateway.service'
```
Or repush from a known-good source, if you maintain one:
```bash
orb -m openclaw-vm bash -c 'cat > ~/.openclaw/openclaw.json' \
< local/openclaw.json
orb -m openclaw-vm systemctl --user restart openclaw-gateway.service
```
The wrapper deliberately does not patch `update.sh` to auto-rollback — we'd rather wait for the upstream fix than carry codex-route inference logic that fights with doctor's repair branch.
The maintainer's own VM stays on v2026.5.4 pending the upstream fix; the wrapper is bumped so fresh installs and community users track upstream.
Full changelog: v2026.5.4...v2026.5.5
v2026.5.4 — sync with upstream openclaw 2026.5.4
Sync with upstream openclaw 2026.5.4 — a medium release with no breaking config changes and no new interactive doctor prompts. Includes a sandbox-tracking fix that preserves existing sandbox images on upgrade (zero rebuild required for v5.x users).
Existing users: openclaw-update self-updates the wrapper repo before each run, so the next invocation picks up these changes automatically. Your existing sandbox images are preserved — see "Sandbox path-tracking fix" below.
What's in this sync
VERSION+CLAUDE.mdheader bumped tov2026.5.4.docs/commands.md:- new
openclaw models auth list [--provider <id>] [--json]documented under 模型管理 → 认证 (lists saved per-agent auth profiles without dumping secrets) openclaw sessionsnow caps to newest 100 rows by default (#77500); documented--limit <n|all>flag
- new
- Sandbox path-tracking fix — see below.
Sandbox path-tracking fix (this release)
Upstream v2026.5.3 moved the three sandbox Dockerfiles from the repo root to scripts/docker/sandbox/ and renamed them:
| Old (≤ v5.2) | New (≥ v5.3) |
|---|---|
Dockerfile.sandbox |
scripts/docker/sandbox/Dockerfile |
Dockerfile.sandbox-common |
scripts/docker/sandbox/Dockerfile.common |
Dockerfile.sandbox-browser |
scripts/docker/sandbox/Dockerfile.browser |
Our wrapper kept referencing the legacy paths in openclaw-orbstack-setup.sh, scripts/commands/sandbox-rebuild.sh, and scripts/commands/update.sh. The primary path (./scripts/sandbox-*-setup.sh) kept working because upstream's helper scripts auto-followed the move, but:
- Hash inputs were silently truncated —
cat Dockerfile.sandboxno longer found the file, leaving only the helper script content in the SHA256 input. Stale-detection compared inconsistent hashes and stopped triggering rebuilds. - Fallback
docker build -f Dockerfile.sandbox*commands in setup.sh and sandbox-rebuild.sh would error out on the legacy path if ever used.
This release:
-
Fallback build commands now point at
scripts/docker/sandbox/Dockerfile{,.common,.browser}. -
Hash inputs everywhere now list both new and legacy paths (
cat $new $old $setup);catsilently skips missing files via2>/dev/null, so hashes track whichever layout the upstream checkout actually has. -
One-time hash-format migration (gated by
~/.openclaw/.sandbox-hash-format-v54marker): if the user's last successful build was a v2026.5.x release,update.shoverwrites the hash files with the new fallback-aware format and skips the rebuild that the bare hash mismatch would otherwise force.Why this is safe for v5.x users: verified at sync time that the upstream sandbox Dockerfile content is byte-identical across v2026.5.2 → v2026.5.3 → v2026.5.4 (only paths/filenames moved). So any sandbox image built from a v5.x checkout is byte-equivalent to one built from v5.4 — the rebuild is purely cosmetic.
Users on a pre-v5.x
BUILT_VERSION(where Dockerfile content actually changed) fall through to normal stale-detection and get a real rebuild, which is correct.
You'll see one new line in the update output:
🔧 Migrating empty sandbox hashes (one-time fix for upstream path move in v2026.5.3)...
✓ Sandbox hashes migrated in place. Existing images preserved — no rebuild needed.
To confirm post-update, run cat ~/.openclaw/.sandbox-hash-{base,common,browser} inside the VM. The three hashes should now be:
- base:
fc9b4ea0773b8882b88b466213795eb38015ea29112a7e0a8e79189530deb317 - common:
247ffca97bed53ab47d3e7538c0ab3aac444086b3a44fd3e362e1052a9201ce5 - browser:
ef78030ccdcda9af9bac056ad0907d045bbcbcbe5a0fca1bb35bd9c86c96bd78
Direct wins from upstream v2026.5.4 (no wrapper config edit needed)
- #77293 / #77450 / #77215 — CalVer correction versions like
2026.5.3-1are now treated as stable for npm installs, plugin updates, plugin API range satisfaction, and bundled-version comparisons. Directly fixes our wrapper version-suffix policy —latestno longer asks for downgrade confirmation, and plugins requiring base runtime API ranges install cleanly on correction builds. - #77244 — Gateway startup auto-loads provider plugins that own explicitly configured image, video, or music generation defaults. Our
openai/gpt-image-2becomes ready immediately after gateway restart instead of remaining catalog-only until first triggered. - #77431 — Per-turn runtime context kept out of ordinary chat system prompts (while still delivering hidden current-turn context). Restores prompt-cache reuse on chat continuations — main-model cache hit rate on long sessions should recover.
- #77400 —
doctor --fixpreserves activeauth.profilesmetadata when stripping stale secret fields. - #77485 — Clears the active reply-run guard before draining queued same-session follow-up turns; sequential
chat.sendcalls no longer tripReplyRunAlreadyActiveErrorevery other request. - #77087 — Gateway shutdown close path moved behind a stable runtime chunk + compatibility aliases shipped, so manual npm package replacement cannot leave an already-running Gateway unable to shut down cleanly.
- #77530 — Package-update follow-up uses an absolute POSIX npm shell, so restricted PATH environments can still run dependency lifecycle scripts during update.
- #76339 —
gateway install --forceconfirms preferring supported system Node over nvm/fnm/volta/asdf/mise (we install Node via NodeSource apt, so this strictly helps).
Upstream-handled migrations (verify post-upgrade only)
- #76623 / #77155 —
doctor --fixnow installsplugins.allow-only configured-but-not-loaded official plugins, and skips channel-derived installs when another configured plugin owns the same channel. - #68615 —
doctor --fixclears auto-created stale session routing state when plugin-owned model/runtime/auth/session bindings drift outside the current configured route. - bundledDiscovery: "compat" — Restrictive
plugins.allowconfigs now requireplugins.bundledDiscovery: \"compat\"for legacy bundled provider discovery;doctor --fixmigrates legacy configs automatically. We don't ship a restrictive allowlist, so this is a no-op for the wrapper. - #69793 — Telegram media derives no-caption inbound media placeholders from saved MIME metadata instead of the Telegram
photoshape.
Doctor non-interactive flow scan
No new interactive prompts in v2026.5.4. All doctor --fix behavior changes are silent. The existing yes n | pipe in scripts/commands/update.sh remains correct and protective:
- still answers "no" to v2026.4.29 #73106 orphan-archive confirm (preserves
.jsonlfiles) - still answers "no" to v2026.5.2 #310 Gateway service-rewrite confirm (preserves operator's existing service file)
After upgrade, verify ~/.openclaw/.update-doctor.log shows no Setup cancelled lines.
Behavior changes worth noting
- Google Meet realtime default →
mode: \"agent\"(STT → OpenClaw agent → TTS) instead of direct realtime voice.mode: \"bidi\"keeps the previous direct realtime model behavior;mode: \"realtime\"accepted as compatibility alias. N/A if you don't run Meet. tools.loopDetection.postCompactionGuard.windowSize(default 3, #77474) — Post-compaction loop guard arms after auto-compaction-retry and aborts withcompaction_loop_persistedwhen the agent emits the same(tool, args, result)triplewindowSizetimes in a row. Disable viatools.loopDetection.enabled: false. Long tool-heavy sessions that previously got stuck in a compaction → same-tool-call → compaction loop will now abort visibly instead of silently looping.
Tracked upstream OPEN bugs (still open after v5.4)
- #74837 —
sessions_spawnchild model override discarded - #75593 — Subagent spawn/list lifecycle split
- #72096 — DREAMS.md duplicate emission
- #68691 — Sandbox PPID=1 zombies (PR #74083 + our complementary PR #76590 still pending)
None of these were resolved in v2026.5.4.
Verify post-upgrade
openclaw-update # picks up wrapper changes automatically
openclaw doctor # should pass
cat ~/.openclaw/.update-doctor.log | grep -i cancelled # must be empty
openclaw status # gateway + channels healthy
openclaw models auth list # new v5.4 commandTo confirm sandbox migration ran (only relevant if you upgraded from a v5.x release):
openclaw-shell -c 'test -f ~/.openclaw/.sandbox-hash-format-v54 && echo "migration: done" || echo "migration: not yet"'
openclaw-shell -c 'cat ~/.openclaw/.sandbox-hash-base ~/.openclaw/.sandbox-hash-common ~/.openclaw/.sandbox-hash-browser'
# Expect:
# base fc9b4ea0773b8882b88b466213795eb38015ea29112a7e0a8e79189530deb317
# common 247ffca97bed53ab47d3e7538c0ab3aac444086b3a44fd3e362e1052a9201ce5
# browser ef78030ccdcda9af9bac056ad0907d045bbcbcbe5a0fca1bb35bd9c86c96bd78🤖 Generated with Claude Code
v2026.5.3-1 — sync with upstream openclaw 2026.5.3-1
Sync with upstream openclaw 2026.5.3 plus the v2026.5.3-1 hotfix (npm scanner false-positive on bundled plugin packages — internal only, no wrapper impact).
Existing users: openclaw-update self-updates the wrapper repo before each run, so the next invocation picks up these changes automatically.
What's in this sync
VERSION+CLAUDE.mdheader bumped tov2026.5.3-1.docs/commands.md— new "通用聊天命令" section documenting:/btw <message>— side question, doesn't disrupt main thread/side <message>— alias for/btw(added in upstream #76934)/steer <message>— queue-independent steering of the active session run when the session is idle, without starting a new turn (upstream #76934)
scripts/commands/update.sh— comment near the doctor invocation noting that v2026.5.3 (#74831) silently migrates the legacy monolithic sandbox registry into per-runtime shard files under~/.openclaw/state/sandbox/runtimes/*.json. No new prompt, no wrapper code change needed; future debugging should look for shard files rather than one monolithic JSON.
Direct wins from upstream v2026.5.3 (no wrapper config edit needed)
- #76507 —
tools.profile: "full"now grants ALL tools including optional plugin tools (browser etc.). Pre-v5.3 thefullprofile silently dropped optional plugin tools that required an explicit allowlist entry. Our standard config usestools.profile: "full"so behavior strictly improves. - #76779 — Anthropic Opus 4.7 thinking profiles
xhigh/adaptive/maxexposed via the bundled provider-policy artifact; non-runtime callers no longer downgrade tohigh. Direct hit on the Opus 4.7 fallback path. - #76648 — OpenCode
claude-opus-4-7thinking levels through the lightweight provider policy surface;xhigh/adaptive/maxno longer remapped tohigh. (This fix originated from a wrapper-author bug report — flagged here because it lands directly in the wrapper user community.) - #76339 —
gateway install --forcenow prefers system Node overnvm/fnm/volta/asdf/misewhen regenerating managed Gateway services. We install Node via NodeSource apt (/usr/bin/node= system Node), so doctor stops flagging version-manager-backed services without further wrapper intervention.
Upstream-handled migrations (verify post-upgrade only)
- #74831 — Sandbox container & browser registry → per-runtime shard files.
doctor --fixmigrates the legacy monolithic registry silently. After upgrade,~/.openclaw/state/sandbox/runtimes/*.jsonshould contain shard files. - #76872 —
doctor --fixnow auto-installs configured-but-missing official plugins (Discord, Brave) and auto-enables provider plugins. Default wrapper installs configure only bundled plugins, so this code path won't trigger. - #76860 — Gateway env file preserves operator-added secrets across re-stage; clears OpenClaw-managed keys (
OPENCLAW_GATEWAY_TOKEN, etc.) so a fresh staging value is never shadowed by a stale env-file copy. Wrapper writesOPENCLAW_GATEWAY_TOKENto operator-managed~/.openclaw/.env(state dir), which upstream still preserves.
Doctor non-interactive flow scan
No new interactive prompts in v2026.5.3. All migration-driven changes (registry shard, snapshot caps, plugin-record reconciliation) are silent. The existing yes n | pipe in update.sh remains correct and protective:
- still answers "no" to v2026.4.29 #73106 orphan-archive confirm (preserves
.jsonlfiles) - still answers "no" to v2026.5.2 #310 Gateway service-rewrite confirm (preserves operator's existing service file)
- still defends against any new prompts that may slip in later
Note: upstream v2026.5.3 release notes (lines 130 and 143) show upstream itself now uses
doctor --fix --non-interactivein its dev-gateway watchdog and post-update flow. We could eventually swap ouryes n |for the explicit flag, but that's a separate refactor — the current pipe works and is well-commented.
Skipped (verified out of scope)
| Upstream change | Why skipped |
|---|---|
streaming.mode: "progress" unified across channels |
Wrapper template doesn't set custom streaming config |
channels.telegram.mediaGroupFlushMs, channels.feishu.blockStreaming |
Opt-in tuning |
tools.web.fetch.useTrustedEnvProxy |
Proxy-only env opt-in |
tools.deny: ["write"] no longer implies apply_patch deny (BREAKING) |
Wrapper templates don't use this pattern |
| macOS LaunchAgent recovery (#76790, #76261, #76466) | Wrapper Gateway runs systemd in Linux VM, not Mac LaunchAgent |
| Mattermost / MSTeams / Tlon channel hardening | Out of typical wrapper deployment scope |
How to upgrade
openclaw-updateThat's it — the script self-updates the wrapper repo, then runs the upstream OpenClaw upgrade flow.
Post-upgrade verification
~/.openclaw/.update-doctor.logshows NOSetup cancelledlines.ls ~/.openclaw/state/sandbox/runtimes/returns shard JSON files (legacy monolithic registry should be gone).- Agents using
tools.profile: "full"seebrowsertool without explicit allow entries. - Opus 4.7 / OpenCode
claude-opus-4-7accept/think xhighdirectly.
v2026.5.2 — sync with upstream openclaw 2026.5.2
Sync with upstream openclaw 2026.5.2. Skips v2026.4.30 / v2026.5.0 / v2026.5.1 (upstream did not ship those stable tags; v5.2 jumped directly from v4.29).
Updated: this release was re-tagged at commit
1753d2cto include four wrapper-side fixes foropenclaw-update, the gateway service file, and orphan archive handling. Existing users do not need to do anything special —openclaw-updateself-updates the wrapper repo before each run, so the next invocation picks up all fixes automatically.
Wrapper fixes (post-publish, included in this re-tag)
fix(update): rotate doctor log — keep last 5 runs (45c721f)
Previous behavior overwrote ~/.openclaw/.update-doctor.log on every openclaw-update run. If an upgrade misbehaved, the prior log was already gone by the time you noticed. Now update.sh rotates the file before writing: .update-doctor.log → .1 → .2 → ... → .5. The last 5 runs are always available for diff or post-mortem.
fix(gateway): pin canonical PATH via systemd drop-in (86154dd) — Linux only
Upstream v2026.5.2 #75233 cleaned up the Gateway service PATH on macOS LaunchAgent only. On Linux, openclaw gateway install still derives PATH from the operator's shell at install time, so version-manager / package-manager directories (.bun/bin, .npm-global/bin, .nix-profile/bin, .local/share/pnpm, etc.) leak into the service PATH. Functionally harmless — Node lives at /usr/bin/node and the gateway runs fine — but doctor reports a "recommend a minimal PATH" advisory on every run.
This wrapper now installs ~/.config/systemd/user/openclaw-gateway.service.d/99-openclaw-orbstack-path.conf that pins:
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
systemd evaluates drop-ins after the main unit; the last Environment=PATH= wins; the 99- prefix wins lexicographic ordering against any other drop-ins.
Both openclaw-orbstack-setup.sh (first install) and scripts/commands/update.sh (every update) ensure the drop-in exists. If/when upstream ships #75233-equivalent on Linux, the drop-in remains compatible — it just becomes redundant, never broken.
Triggered by a real v2026.4.29 → v2026.5.2 upgrade where doctor still listed the version-manager PATH advisory after openclaw gateway install --force. Verified live: PATH now reports the canonical six-entry list, gateway health 143ms, doctor no longer warns.
fix(update): auto-archive orphan transcripts before doctor (bf6d68e)
Previously update.sh piped yes n to doctor, answering "no" to the v2026.4.29 #73106 "Archive N orphan transcripts?" confirm. This preserved the .jsonl files but made doctor flag the same orphans on every subsequent update run — cosmetically noisy and not what the operator wants in normal flow.
We couldn't simply switch to yes y: v2026.5.2 line 310 added a second prompt "Install/rewrite Gateway service?" that we MUST answer "no" to, otherwise update.sh's temp environment would replace the operator's existing launchd/systemd service. Order-sensitive printf "y\nn\n" is also fragile (when there are no orphans, "y" feeds the wrong prompt).
Solution: pre-archive orphans BEFORE doctor runs. Doctor's archive action just renames .jsonl files not referenced in sessions.json to *.deleted.<timestamp>; we do the same with a UUID substring grep (collision-safe at 128-bit). After this, doctor sees zero orphans and the prompt never appears. The yes n pipe remains as defense-in-depth and to safely answer "no" to the Gateway service rewrite prompt.
The pre-archive walks every agent's sessions/ dir to handle multi-agent setups.
fix(update): use upstream ISO 8601 format for archived transcripts (1753d2c)
The pre-archive step above used date +%Y%m%dT%H%M%S → 20260503T091230 for the timestamp suffix. This does not match upstream's archive timestamp regex ^\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}(\.\d{3})?Z$ from src/config/sessions/artifacts.ts. Files with non-matching timestamps are unrecognized by cleanupArchivedSessionTranscripts, so they would never be auto-pruned by upstream's default 30-day retention — they'd sit on disk forever.
Switched to date -u +%Y-%m-%dT%H-%M-%SZ which produces 2026-05-03T09-12-30Z, matching the regex (without the optional ms suffix). Now files we archive are eligible for the same auto-prune flow as files doctor archives.
Bonus: corrected templates/openclaw.json.example session.maintenance docs
The previous commented stub used pruneOlderThanDays, which does not exist in upstream config schema. The canonical user-facing key is pruneAfter (string duration like "30d"), with pruneDays as the deprecated legacy name. The template now documents the correct fields and explains that defaults (mode: "enforce", pruneAfter: "30d", maxEntries: 500) are already active without any config — the explicit block is purely for visibility/auditability.
Note: pruneAfter controls two things simultaneously: (1) sessions.json entries older than N days are pruned during enforce-mode maintenance; (2) *.deleted.<timestamp> archive files older than N days are real-deleted (fs.rm). Lifecycle is therefore: session inactive → entry pruned (after pruneAfter days) → transcript becomes orphan → wrapper pre-archive renames to .deleted.<ts> → upstream cleanup deletes (after another pruneAfter days). Total: ~2× pruneAfter from creation to disk free.
Highlights affecting this wrapper
Resolves 2 of our 3 tracked OPEN issues
- #74860 —
createOpenClawTools7s event-loop stall — CLOSED. Fix is in commits29ed5266bf(keeps runtime-deps repair out of plugin tool/runtime hot paths) and354084b1b3(caches targeted provider runtime hook resolution instead of redoing the work per call). The 6000–7700ms gateway stalls under steady tool-call load no longer reproduce; Tier 2 watchdog restarts on this fingerprint should stop firing. - #75220 — Linux systemd Gateway PATH warnings for non-existent user-bin dirs — CLOSED via #76017. v5.2 release notes line 99 (
Doctor/gateway: stop warning that non-existent, unconfigured user-bin directories are required in the Gateway service PATH) lands the fix that our 2026-05-01 evidence comment on #75220 was pushing for.
Still OPEN (not blocking VM upgrade)
- #74837 —
sessions_spawnchild model override is still dropped (subagent runs fall back to target agent default instead of the spawn-timemodelargument). - #75593 — subagent spawn/list lifecycle split: spawn returns
childSessionKeybut/subagents listandsubagents(action="list")return empty for the same requester. - #72096 — DREAMS.md light-phase summary repeats verbatim across hourly cycles.
None of these affect main-path functionality.
Direct config benefits
- line 282 — OpenAI Codex GPT-5.x
xhighthinking preserved through Gateway session validation when bundled providers are still startup-lazy. Our main model (openai-codex/gpt-5.5withxhighthinking) keeps working through cold-path validation. - line 274 — OpenAI Codex OAuth image generation explicitly retained. Validates the
imageGenerationModel.primary: "openai/gpt-image-2"+ Codex OAuth route we just wired up. - line 167 — OpenRouter Anthropic adapter strips trailing assistant prefill when reasoning is enabled (#75395). Claude 4.6 / Opus 4.7 routes through OpenRouter no longer hit Anthropic's prefill rejection.
- line 269 — Gemini 2.5 Flash-Lite
reasoning: "minimal"rejection fixed by raising thinking-budget floor to 512 (#70629). Gemini 3.1 Pro fallback unaffected; Flash-Lite usable as a cheap fallback. - line 365 — Tool-result guard repeated to use runtime context token budget (#74917), originally landed in v4.29 — confirms the long-tool-heavy GPT-5.5 session compaction guard.
Heartbeat scheduler hardening
- #76276 — Centralized exec-event/notification/spawn/retry cooldown. Production reproduction had a configured
every: "30m"heartbeat firing every ~10s, pegging the gateway event loop witheventLoopDelayMaxMs > 6sspikes. Our heartbeat config (every: "24h") is unlikely to be affected, but the cooldown is now a hard guarantee. - #75487 — Heartbeat phase scheduling is active-hours-aware. Non-UTC
activeHours.timezone(e.g.Asia/Shanghai) now correctly influences when the next heartbeat timer fires; quiet-hours ticks no longer waste runs. - line 60 —
heartbeat_respondstructured tool replacesHEARTBEAT_OKtext parsing (#75765) for tool-capable heartbeat runs.
Doctor / non-interactive flow change (wrapper-impacting)
v5.2 line 310 adds a second interactive prompt to doctor --fix: "Install/rewrite Gateway service?" before replacing the operator's launchd / systemd service from a temporary environment. With our existing yes n | pipe in scripts/commands/update.sh, the wrapper answers "no" → preserves the operator's existing service file. This is the safe default and matches the new behavior intent.
The yes n pipe also continues to handle the v4.29 orphan-archive prompt as defense-in-depth, but with the new pre-archive step (see the bf6d68e fix above), that prompt no longer appears in the normal flow.
New CLIs (now documented in docs/commands.md)
openclaw gateway restart --force --wait <duration>— skip active-task deferral timers and bound the wait window (#68327).openclaw proxy validate— verify effective proxy configuration, reachability, and allow/deny destination behavior before deploying proxy-routed setups (#73438).
New opt-in config options (commented stubs in templates/openclaw.json.example)
agents.defaults.skipOptionalBootstrapFiles(#62110)agents.defaults.compaction.midTurnPrecheck(#73499)session.writeLock.acquireTimeoutMs— default raised from 30s to 60s (#75894); only override if your IO is unusually fast...
v2026.4.29 — sync with upstream openclaw 2026.4.29
Sync with upstream openclaw 2026.4.29. Skips v4.28 (upstream did not ship a stable v4.28; only a v2026.4.29-beta.1 prerelease).
Updated: this release was re-tagged at commit
33434d7to include two wrapper-side fixes foropenclaw-update. Existing users do not need to do anything special —openclaw-updateself-updates the wrapper repo before each run, so the next invocation picks up both fixes automatically.
Wrapper fixes (post-publish, included in this re-tag)
fix(update): keep doctor non-interactive past v4.29 orphan-archive prompt (33434d7)
v4.29 release notes line 123 (#73106) added an interactive confirm to openclaw doctor --fix before archiving orphan transcripts. With stdin redirected, @clack/prompts sees EOF and triggers Setup cancelled. — which silently skips the rest of doctor's work (state migration, systemd service config repair, security audit, plugin sweep). update.sh's || true masks the early exit and the upgrade looks fine, but the systemd service file may not be regenerated.
Both doctor invocations now pipe yes n so the orphan-archive prompt resolves to a conservative "No" (preserve transcripts) and doctor continues. A post-update hint points users at interactive openclaw doctor --fix for archiving when desired.
Triggered by a real v4.27 → v4.29 upgrade where doctor cancelled at "Archive 23 orphan transcripts?" right after plugin registry refresh.
fix(update): prune stale tracking refs before fetch (557d391)
Upstream openclaw carries a lot of force-pushed and renamed branches (clawsweeper bots, codex/* feature branches). Plain git fetch --tags --force accumulates stale tracking refs and eventually fails with refname conflict / some local refs could not be updated, aborting the entire upgrade. scripts/commands/update.sh now runs git remote prune origin && git fetch --prune --tags --force so subsequent updates clean themselves before fetching.
Triggered by a real upgrade attempt where v4.27 → v4.29 aborted on copilot/stabilize-app-client-happy-path failed: refname conflict.
Highlights affecting this wrapper
Resolves all v4.27 packaging blockers
The v4.27 release artifact was missing several runtime dependencies. v4.29 fixes all of them:
- #74702 — restored
plugin-sdk/zalousercommand-auth facade. - #74692 —
sqlite-vecmirrored into bundled plugin runtime deps for builtin memory. - #74688 / #74883 family — structural fix: 10 root-package deps (
chokidar,@agentclientprotocol/sdk,@lydell/node-pty,croner,dotenv,jiti,json5,jszip,markdown-it,tar,web-push) added toMIRRORED_CORE_RUNTIME_DEP_NAMESplus a static drift-guard CI test that fails when one is missing. - #74899 — browser-control verifies staged
ajvpackage entry files before reusing mirrored runtime roots. - #74765 — Discord SecretRef
env:default:...no longer fails on read-only allowlist accessors (#74737).
Direct config benefits
- #74451 —
openai-codex/gpt-5.4-miniis restored on ChatGPT/Codex OAuth runs after live OAuth proof. v4.27 had silently suppressed it; v4.29 re-enables it with proper manifest, forward-compat metadata, docs, and regression coverage. Stale heartbeat / active-memory cron configs that use this model resolve again. - #74917 — Tool-result guard now uses the resolved runtime context-token budget for non-context-engine overflow checks instead of native
contextWindow. Long tool-heavy sessions on GPT-5.5 no longer compact early. - #74864 —
subagent-orphan-recoveryis bounded with persisted recovery attempts and a wedged-session tombstone; task maintenance / doctor reconcile those sessions so restart loops no longer require manualsessions.jsonsurgery. - #74896 — Gateway no longer fails to bind when a credential-free
tools.web.fetchconfig block is present. Docker / Kubernetes deployments unblocked. - #74137 — Blank visible user prompts skipped at the embedded-runner boundary; Telegram / group sessions no longer leak
messages must not be emptyprovider errors. - #74868 — Group chats fall back to automatic source delivery when a channel precomputed message-tool-only replies but the
messagetool is unavailable.
Codex / ChatGPT Responses hardening
- #75111 preserves wrapped Codex streams during OpenAI attribution; OAuth bearer reaches ChatGPT/Codex Responses; native Codex-only unsupported payload fields stripped.
- #73820 fixes ChatGPT backend 400s on system-prompt-only Codex turns (
input: []). - #73559 fixes
openai-codex-responsesboundary-aware embedded stream401 Unauthorized: Missing bearer. - OpenAI Codex
/verbose fullpersistence and app-server tool-output forwarding restored.
New config (opt-in, documented in template)
messages.queueMode: "steer" | "queue"— active-run queueing default changed tosteer(drains all pending steering at next model boundary). Set toqueueto restore legacy one-at-a-time behavior.messages.visibleReplies— global visible-reply enforcement (alongside per-channelmessages.groupChat.visibleReplies).commitments.enabled/commitments.maxPerDay— opt-in inferred follow-up commitments delivered through heartbeat (#74189).memory.qmd.update.startup— opt-in startup QMD refresh; cold Gateway boot no longer imports / initializes QMD by default.tools.web.fetch.ssrfPolicy.allowIpv6UniqueLocalRange— opt-in for trusted fake-IP proxy stacks usingfc00::/7(#74351).gateway.handshakeTimeoutMs— exposed in config / schema / docs (was env-only); env still wins.heartbeat.skipWhenBusy— opt-in skip when cron / subagent lanes are active (#50773).- Active Memory
allowedChatIds/deniedChatIds(#67977) and bounded partial recall on timeout (#73219).
New CLI (documented in docs/commands.md)
openclaw plugins deps [--repair]— independent inspect / repair for bundled plugin runtime-deps; the right tool for v4.27-class packaging issues.
New bundled provider
- NVIDIA — API key onboarding, setup docs, static catalog metadata, literal model-ref picker (#71204).
Breaking change (does not affect this wrapper)
tools.execandtools.fsno longer implicitly widen restrictivemessaging/minimalprofiles. Users on those profiles must add explicitalsoAllowentries; a startup warning identifies affected configs (#47487). Default config in this wrapper usestools.profile: "full"and is unaffected.
Still OPEN (does not block upgrade, but worth retesting after)
- #74837 / #74763 —
sessions_spawn(model=...)override silently dropped (v4.27 claimed #73180 fixed this; v4.29 does not explicitly close it). - #74860 — Gateway 7-second event-loop stall in
createOpenClawTools(v4.29 adds/readyzevent-loop diagnostics and defers agent run scheduling, which mitigates but does not resolve the root cause).
Notes
- VM upgrade is a separate user decision. After upgrading, run
openclaw doctor --fix(per v4.25 #71761 transcript pollution repair) and re-testsessions_spawnwith explicit model overrides plus restart latency. - This release skips v2026.4.28 because upstream did not ship a stable v4.28.
v2026.4.27 — sync with upstream openclaw 2026.4.27
Sync with upstream openclaw 2026.4.27.
Highlights affecting this wrapper
Unblocks the v4.26 VM upgrade hold
Two regressions held the local VM at v4.25 across v4.26. Both are fixed in upstream v4.27:
- #73242 —
openai-codex/gpt-5.4-minino longer surfaces through Codex OAuth (was failing cron with "ChatGPT account unsupported"); directopenai/gpt-5.4-miniis preserved. - #73367 / #73412 — bare
/newand/resetonopenai-codex/*no longer fall through into empty Responses API calls (was failing with "must be provided").
GPT-5.4 / GPT-5.5 reliability
- #73053 — OpenAI Responses preserves encrypted
rs_*reasoning items in WebSocket replay and requestsreasoning.encrypted_contentso primary model sessions don't drop required state.
New config (opt-in, documented in template)
sandbox.docker.gpus— Docker GPU passthrough (#57976).proxy.enabled+proxy.proxyUrl/OPENCLAW_PROXY_URL— operator-managed outbound HTTP proxy (#70044).models.pricing.enabled— skip OpenRouter / LiteLLM startup pricing fetches on offline / restricted networks (#53639).agents.defaults.compaction.memoryFlush.model— exact model override for memory flush, doesn't inherit active session fallback chain (#53772).
New CLI (documented in docs/commands.md)
openclaw codex computer-use status/install— Codex Computer Use marketplace + fail-closed MCP checks (#72094).openclaw infer image describe --prompt --timeout-ms+describe-many— pass custom vision instructions and timeout to Ollama / OpenAI / Google / OpenRouter (#63700).openclaw cron add/edit --thread-id— preserve Telegram forum topic delivery across scheduled runs.
New bundled provider / channels
- DeepInfra bundled provider — model discovery, image gen/edit, image+audio understanding, TTS, text-to-video, embeddings, provider-owned base URL policy.
- Tencent Yuanbao channel + QQBot group chat (FIFO queue, C2C streaming, chunked media upload, pipeline refactor).
Notes
- VM upgrade is a separate user decision. After upgrading, run
openclaw doctor --fix(per v4.25 #71761 transcript pollution repair). - Discord group chat default changed to private replies — set
messages.groupChat.visibleReplies: "automatic"to restore legacy auto-posting if needed (we do not use Discord groups by default). - Heartbeat model context-overflow now points to
isolatedSession/lightContextguidance when the runtime model matches the configured heartbeat model.
v2026.4.26 — Tracks upstream; #72729 OpenCode thinking fix shipped + Anthropic prefill repair
Sync with upstream OpenClaw v2026.4.26. Recommended upgrade from v2026.4.25 — this release ships the upstream fix for #72729 (an issue we filed: OpenCode /think xhigh|adaptive|max rejected for proxied Opus 4.7 / Sonnet 4.6) plus an Anthropic extended-thinking trailing-prefill repair that affects every Opus 4.7 / Sonnet 4.6 user.
Highlights affecting this project
- #72729 fixed (PR #72778) — OpenCode now exposes Anthropic Opus/Sonnet 4.x thinking levels for proxied Claude models, so
/think xhigh,/think adaptive, and/think maxvalidate consistently with the direct Anthropic provider. Thanks to upstream maintainers for landing this within 24 hours of v2026.4.25. - Anthropic extended-thinking prefill repair (#72739, #72556) — trailing assistant-prefill payloads are stripped from Opus 4.7 / Sonnet 4.6 outbound replay when extended thinking is enabled, so requests no longer fail Anthropic's user-final-turn validation.
- Codex cached input tokens no longer double-counted in
/status,session_status, or persistedsessionEntry.totalTokens(#69298). Affects everyone onopenai-codex/gpt-5.5.
Wrapper changes
VERSION+CLAUDE.mdheader bumped to v2026.4.26templates/openclaw.json.example:- Documented opt-in
agents.defaults.compaction.maxActiveTranscriptBytes— JSONL-byte preflight trigger that runs normal local compaction when the active transcript grows too large, rotating onto a smaller successor file instead of byte-splitting history - Documented new
dreaming.modelknob — Dream Diary narrative subagent model override, wired through phase config and the existing plugin subagent model-override trust gate (refs #65963)
- Documented opt-in
docs/commands.md:- Nodes (v2026.4.26+) —
openclaw nodes remove --node <id|name|ip>for cleaning stale gateway-owned paired-node records without hand-editing state files - Migration (v2026.4.26+) —
openclaw migratewith bundled importers: Claude Code/Desktop instructions, MCP servers, skills, command prompts; plus a Hermes (NousResearch) importer for configuration, memory/plugin hints, model providers, MCP servers, skills, and supported credentials. Supports--plan,--dry-run,--json,--backup - Matrix encryption (v2026.4.26+) —
openclaw matrix encryption setupenables Matrix encryption, bootstraps recovery, and prints verification status from one setup flow
- Nodes (v2026.4.26+) —
Upstream highlights (v2026.4.26)
New capabilities
- Cerebras added as a bundled provider with onboarding, static model catalog, docs, and manifest-owned endpoint metadata
- Google Live browser Talk sessions — generic browser realtime transport contract, constrained ephemeral tokens, Gateway relay for backend-only realtime voice plugins
agents.defaults.compaction.maxActiveTranscriptBytes— opt-in preflight trigger for transcript rotationdreaming.model— Dream Diary narrative subagent model override- Memory asymmetric embeddings —
memorySearch.inputType,queryInputType,documentInputTypeconfig for OpenAI-compatible providers with asymmetric query/document embedding endpoints - Ollama embeddings — moved to
/api/embedwith batchedinputrequests; model-specific retrieval query prefixes fornomic-embed-text,qwen3-embedding, andmxbai-embed-large openclaw migrate— Claude Code/Desktop and Hermes importersopenclaw nodes remove— clean stale paired-node recordsopenclaw matrix encryption setup— one-step Matrix E2EE bootstrapfailureAlert.includeSkipped+--failure-alert-include-skipped— alert on persistently skipped cron jobs without counting skips as execution errors or affecting retry backoffOPENCLAW_NO_AUTO_UPDATE=1— Gateway startup kill-switch for configured background package auto-updates (#72715)realtime.agentId— Google Meet live consults can target a named OpenClaw agent (#72381)
Reliability and provider fixes
- Anthropic / Google — strip stale trailing assistant/model prefill turns from outbound replay (#72556, #72739)
- OpenAI Responses — retry replay-safe empty
stopturns once foropenai-completionsendpoints (#72751);openclaw agent --modelrestored for one-shot CLI runs - Codex harness — normalize cached input tokens (#69298);
codex/*image models routed through app-server image turns - Claude CLI — force live-session launches to include
--output-format stream-jsonwhenever--input-format stream-jsonis used (#72206) - macOS Gateway — detect installed-but-unloaded LaunchAgent split-brain states during status, doctor, and restart, and re-bootstrap launchd supervision before falling back to unmanaged listener restarts (#67335, #53475, #71060)
- Local models — default custom providers with only
baseUrlto the Chat Completions adapter and trust loopback model requests automatically (#40024); local Ollama / vLLM / SGLang model discovery routed through the guarded fetch path pinned to the configured host - MCP — normalize CLI-native
type: "http"MCP server entries to OpenClawtransport: "streamable-http"on save, with doctor repair for existing configs (#72757) - CLI/update — install npm global updates into a verified temporary prefix before swapping the package tree into place, preventing mixed old/new installs and stale packaged files from breaking
openclaw updateverification - Gateway — skip CLI startup self-respawn for foreground gateway runs on low-memory Linux/Node 24 hosts (#72720)
- Docker — install the CA certificate bundle in the slim runtime image so HTTPS calls from containerized gateways no longer fail TLS setup after the
bookworm-slimbase switch (#72787) - Plugin runtime deps —
OPENCLAW_PLUGIN_STAGE_DIRmay now contain layered runtime-dependency roots, resolving read-only preinstalled deps before installing missing deps into the final writable root (#72396); bundled runtime deps staged before Gateway startup with drained update restarts
Memory / QMD
- Multi-collection QMD search — group same-source collections into one QMD search invocation when the installed QMD supports multiple
-cfilters (#72484) - QMD status vector parsing — accept variants such as
Vectors = 42,Vectors:42,Vectors: 42 embedded(#63652) - Lexical-mode skip — skip QMD vector status probes and embedding maintenance in
searchMode: "search", so BM25-only QMD setups on ARM no longer trigger llama.cpp/Vulkan builds during status checks (#59234, #67113) - Watcher dirty state — memory status reports the live watcher dirty state so changed QMD-backed memory files show as dirty until the queued sync finishes (#60244)
--maskcollection pattern — root memory indexing stays scoped toMEMORY.mdinstead of widening to every markdown file in the workspace (#65480)
Performance
Extensive Gateway startup lazy-loading work: HTTP auth, canvas auth, plugin route dispatch, MCP loopback, cron runner, hook dispatch, subscriber registries, embedded-run state, channel runtime helpers, and chat session event projection are all loaded on demand. No-plugin Gateway boots see a measurable RSS drop. Lobster Ajv schema compilation is now cached against content-identical schemas (#71148).
Notes
- Wrapper-side, no breaking changes.
local/openclaw.jsondoes not require edits — all v4.26 additions are opt-in. - Per the project's local-test-first policy, the wrapper is published now; the VM upgrade will follow community feedback.
- Issues filed by this project tracked in memory: #71495 (
/subagents listempty regression — still OPEN, unaddressed in v4.26) and #72096 (Dreaming light-phase summary verbatim repeats — still OPEN). v4.26 ships an indirectly related subagent fix (#70187: clear active embedded-run state before terminal lifecycle) that is worth retesting against/subagents list.
🤖 Generated with Claude Code
v2026.4.25 — Tracks upstream; #71761 transcript repair + TTS overhaul
Sync with upstream OpenClaw v2026.4.25. Recommended upgrade from v2026.4.24 — this release ships the upstream repair tooling for a transcript-corruption regression introduced in v2026.4.24, plus a TTS overhaul, a plugin cold-registry migration, and broader OpenTelemetry coverage.
Critical: run openclaw doctor --fix after upgrading
Upstream v2026.4.24 had a regression (#71761) where embedded runtime context was being delivered as a visible user prompt, polluting session transcripts with duplicated prompt-rewrite branches. v2026.4.25 fixes the root cause and teaches openclaw doctor --fix to repair already-affected v2026.4.24 transcripts. Anyone who ran v2026.4.24 should run openclaw doctor --fix once after upgrading.
The same doctor --fix pass also handles two other v2026.4.25 migrations:
agentRuntime.idis now the canonical config key; legacy runtime-policy configs are auto-migrated (#71957).- Plugin cold registry —
plugins/installs.jsonreplacesplugins/installed-index.json; the doctor pass refreshes the cold registry index and aligns install records.
Wrapper changes
VERSION+CLAUDE.mdheader bumped to v2026.4.25docs/commands.md:- TTS chat commands (v2026.4.25+) —
/tts latest(read-aloud the latest reply, with duplicate suppression),/tts chat on|off|default(session-scoped auto-TTS overrides),/tts persona <name>(provider-aware voice persona switching), plus/tts audioand/tts status - Browser —
openclaw browser doctor --deep(live snapshot probing with iframe-aware role / cursor-clickable detection) andopenclaw browser start --headless(one-shot headless launch override that does not rewrite the persisted browser config) - Plugins —
openclaw plugins registry(and--refresh) for inspecting and rebuilding the new persisted cold registry; deprecation note forOPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY - Image generation/edit flags (v2026.4.25+) — generic
--background(alias--openai-background), fal--output-format png|jpeg, and--size/--aspect-ratio/--resolutiononinfer image edit - New
doctor --fix (v2026.4.25+)section explaining the #71761 transcript repair, theagentRuntime.idmigration, and the cold registry refresh
- TTS chat commands (v2026.4.25+) —
templates/openclaw.json.example:- Expanded TTS provider comment listing the v2026.4.25 bundled additions: Azure Speech, Xiaomi MiMo, Local CLI TTS, Inworld, Volcengine/BytePlus Seed Speech, plus ElevenLabs
eleven_v3 - Documented the new override layering:
agents.list[].ttsoverrides global TTS per agent, andchannels.<channel>.accounts.<id>.ttsdeep-merges over global plus per-agent config (Feishu/QQBot account-level overrides)
- Expanded TTS provider comment listing the v2026.4.25 bundled additions: Azure Speech, Xiaomi MiMo, Local CLI TTS, Inworld, Volcengine/BytePlus Seed Speech, plus ElevenLabs
Upstream highlights (v2026.4.25)
Major new capabilities
- TTS overhaul —
/tts latest, chat-scoped auto-TTS overrides, provider-aware personas (#70748), per-agent voice overrides, per-channel-account deep-merged TTS config, native voice-note routing through channel plugin capabilities - New bundled TTS providers — Azure Speech (#51776), Xiaomi MiMo (#52376/55614), Local CLI TTS (#56239), Inworld (#55972), Volcengine/BytePlus Seed Speech (#55641); ElevenLabs
eleven_v3added to the bundled model catalog (#68321) - Voice Wake trigger-based routing — macOS voice wake phrases can target a specific agent or session (#30354)
- Plugin cold registry — gateway startup, plugin update, repair, provider discovery, and install metadata move onto a versioned persisted registry (
plugins/installs.json); broad manifest scans are eliminated from the hot path; newopenclaw plugins registry [--refresh]CLI;OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRYmarked deprecated - OpenTelemetry expansion — GenAI
gen_ai.client.token.usageandgen_ai.client.operation.durationhistograms;openclaw.context.assembled,openclaw.tool.loop,openclaw.harness.run,openclaw.exec, and outbound delivery spans; bounded request-id hashes;OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimentalenablesgen_ai.provider.name; signal-specific OTLP endpoint overrides; new bundleddiagnostics-prometheusplugin - Browser —
openclaw browser doctor --deeplive snapshot probing, iframe-aware CDP role snapshots, cursor-clickable detection,openclaw browser start --headlessone-shot launch, configurable CDP ready timeout for slow hosts (Pi #66803), safe tab URLs in agent responses, stabletabIdlabels preserved across navigation (#46137) - Control UI — PWA install support and Web Push notifications for Gateway chat (#44590)
- Crestodian / TUI setup — first-run setup helper, full-TUI interactive Crestodian, startup progress indicators, context mode selector, shorter startup greeting (#71720, #71760)
- Codex harness 0.125.0+ — native MCP
PreToolUse/PostToolUse/PermissionRequestpayloads through the OpenClaw hook relay; agents prefer/codex ...over Codex ACP unless ACP is explicit - Factory Droid added to the live ACP bind Docker matrix
- Bedrock Mantle supports Claude Opus 4.7
- LiteLLM image generation registered as an
image_generateprovider; fal Seedance 2.0 reference-to-video with multi-image/video/audio reference inputs; MiniMaximage-01routed to the dedicated image generation endpoint (#61149); MiniMax-portal music and video generation (#63241); Z.AI thinking controls mapped, opt-in preserved-thinking replay viaparams.preserveThinking(#58680) - Discord —
channels.discord.voice.modeloverrides the LLM used for voice channel responses while keeping STT/TTS on the existing media settings (#64368)
Critical fixes
- #71761 — v2026.4.24 transcript pollution: embedded runtime context is now sent as a hidden next-turn custom message;
openclaw doctor --fixrepairs already-affected transcripts with duplicated prompt-rewrite branches - #71946 — Codex
--thinking minimalrejected on first turn: translated tolowforgpt-5.5,gpt-5.4,gpt-5.4-mini,gpt-5.2at request build time, eliminating the wasted call + retry-with-low fallback - OpenAI Responses
web_search+ minimal thinking — raised to the lowest supported reasoning effort instead of sending a rejected minimal payload (same root pattern as our previously-filed #71269, opposite direction) - Sessions reset freshness decoupled from
updatedAt— heartbeat, cron, exec, and gateway bookkeeping no longer prevent configured daily/idle resets from rolling long-running channel sessions (#68315, #63732, #63820, #69083) agentRuntime.idas canonical key withdoctor --fixmigration; canonical Anthropic models routed throughclaude-cliwithout passing CLI backend aliases to embedded harness selection (#71957)
Notable fixes
- WhatsApp Web watchdog — based on transport activity rather than app silence, keeping quiet but healthy linked-device sessions connected (#70678/#71466)
- Telegram — automatic native quote excerpts for threaded replies and reply tags (#6975), exact selected quote text preserved when sending native quote replies (#71952)
- Bonjour/mDNS — gateway crash-loops on
CIAO PROBING CANCELLEDand watchdog cancellation are now contained; Bonjour disables itself for the current process after repeated failed restarts; bundled Compose gateways disable Bonjour by default on bridge networking (#69011, #71879) - Plugin runtime deps — package update verifies actually-placed bundled runtime packages and reports missing specs instead of false-success repairs (#71883); rejects pre-populated
.openclaw-install-stagedirectories during release packaging (#71752); ignores stale staging directories during global install verification - Logging — configured redaction patterns applied to persisted session transcript JSONL (#42982); secrets at console and file-log sink exits redacted (#67953); file rotation at
logging.maxFileByteswith bounded numbered archives (#58583, #62381);logging.fileand redaction loaded from the active config path in bundled runtimes (#59370, #67168, #61295) - Gateway —
/healthzand/readyzreserved ahead of plugin/canvas/Control UI HTTP stages so liveness probes still answer when later handlers stall (#69674); refuses process and service mutations from older OpenClaw binaries when the config was last written by a newer version (#57079) - Subagents — completed yielded-subagent results delivered back to no-thread requester routes via direct fallback; queued subagent announces stay session-only when the requester has no external channel target (#59201)
- Sessions/usage — compaction checkpoint transcript snapshots excluded from usage totals and session discovery
- Auto-reply dedupe — poisoned after replay-unsafe provider/runtime failures so retries stay safe before visible progress but cannot duplicate after block output, tool side effects, or session progress (#69303)
- WhatsApp — ack reactions removed after a visible reply when
messages.removeAckAfterReplyis enabled (#26183) - Feishu — Schema 2.0 card action callbacks accepted with
context.open_chat_id(#71670); inbound voice-note transcription via the shared media audio path (#67120, #61876); final-mode streamed TTS-only audio normalized before delivery (#71920) - vLLM/Nemotron — Nemotron 3 chat-template kwargs sent when thinking is off; configured
params.chat_template_kwargshonored for OpenAI-compatible completions (#71891) - Channels/replies — copied inbound metadata blocks (
Conversation info,UNTRUSTED ... message body) stripped from user-facing assistant replies and replay history (#71847)
Breaking change
OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRYis marked deprecated as a break-glass switch — operators should useopenclaw plugins registry --refreshoropenclaw doctor --fixfor registry repair instead. No impact on this wrapper — we do not set this env var.