Merged
Conversation
stavros-k
approved these changes
Apr 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
26.3.0→26.4.02026.4.2→2026.4.526.0.1→26.0.20.61.0→0.61.12.9.3→2.9.44.0.0-beta.470→4.0.0-beta.4710.22.0→0.22.10.18.6→0.18.70.24.1539→0.24.15422.8.1→2.8.2v0.102.1→v0.102.21.674.2→1.675.18.29.1→8.30.010.11.7→10.11.84.13.2→4.13.73.2.3→3.2.4v4.1.1-gpu-vulkan→v4.1.2-gpu-vulkanv4.1.1-gpu-intel→v4.1.2-gpu-intelv4.1.1-gpu-hipblas→v4.1.2-gpu-hipblasv4.1.1-gpu-nvidia-cuda-12→v4.1.2-gpu-nvidia-cuda-12v4.1.1→v4.1.22026.4.5-474b0a55b→2026.4.6-e12b722ddRelease Notes
openclaw/openclaw (alpine/openclaw)
v2026.4.5Compare Source
Breaking
talk.voiceId/talk.apiKey,agents.*.sandbox.perSession,browser.ssrfPolicy.allowPrivateNetwork,hooks.internal.handlers, and channel/group/roomallowtoggles in favor of the canonical public paths andenabled, while keeping load-time compatibility andopenclaw doctor --fixmigration support for existing configs. (#60726) Thanks @vincentkoc.Changes
video_generatetool so agents can create videos through configured providers and return the generated media directly in the reply.durationSecondswith a warning instead of hard-failing requests on providers like Google Lyria.comfyworkflow media plugin for local ComfyUI and Comfy Cloud workflows, including sharedimage_generate,video_generate, and workflow-backedmusic_generatesupport, with prompt injection, optional reference-image upload, live tests, and output download.music_generatetool with bundled Google (Lyria) and MiniMax providers plus workflow-backed Comfy support, including async task tracking and follow-up delivery of finished audio.openclaw plugins install --forceso existing plugin and hook-pack targets can be replaced without using the dangerous-code override flag. (#60590, #60544)contextVisibilityper channel (all,allowlist,allowlist_quote) so supplemental quote, thread, and fetched history context can be filtered by sender allowlists instead of always passing through as received.openai-codex/gpt-5.4-mini, an opt-in GPT personality, and provider-owned GPT-5 prompt contributions so Codex/GPT runs stay cache-stable and compatible with bundled catalog lag.stream-jsonpartial-message streaming so prompts stop riding argv, long replies show live progress, and final session/usage metadata still land cleanly. (#35676) Thanks @mylukin.acpxplugin, remove the extra external ACP CLI hop, harden live ACP session binding and reuse, and add a genericreply_dispatchhook so bundled plugins like ACPX can own reply interception without hardcoded ACP paths in core auto-reply routing. (#61319)openclaw doctorrepair or remove staleanthropic:claude-clistate during migration.grok-imagine-video), Alibaba Model Studio Wan, and Runway video providers, plus live-test/default model wiring for all three.provider: "auto"and provider-specific dimension controls. Thanks @wirjo.AWS_BEARER_TOKEN_BEDROCK. Thanks @wirjo./dreamingcommand, Dreams UI, multilingual conceptual tagging, and doctor/status repair support, while refactoring dreaming from competing modes into three cooperative phases (light, deep, REM) with independent schedules and recovery behavior so durable memory promotion can run in the background with less manual setup. (#60569, #60697) Thanks @vignesh07.recencyHalfLifeDays,maxAgeDays) plus optional verbose logging so operators can tune recall decay and inspect promotion decisions more easily.openclaw memory rem-harness,promote-explain), surface possible lasting truths during REM staging, and make deep promotion replay-safe so reruns reconcile instead of duplicatingMEMORY.mdentries.dreams.mdinstead of daily memory notes, update/dreaminghelp text to point there, and keepdreams.mdavailable for explicit reads without pulling it into default recall. Thanks @davemorin.enabledplus optionalfrequency, treat phases as implementation detail in docs/UI, and keep the lobster animation visible above diary content. Thanks @vignesh07.openclaw status --verbosecache diagnostics, and the removal of duplicate in-band tool inventories from agent system prompts so follow-up turns hit cache more reliably. (#58036, #58037, #58038, #59054, #60603, #60691) Thanks @bcherny and @vincentkoc.openclaw status --verbose. Thanks @vincentkoc.openclaw config schemaJSON Schema with field titles and descriptions so editors, agents, and other schema consumers receive the same config help metadata. (#60067) Thanks @solavrc.agents.defaults.cliBackendssurface, while keeping ACP harness sessions and Gemini media understanding on the native bundled providers.irc.example.comand recommend private servers for bot coordination while listing common public networks for intentional use.agents.defaults.contextInjection: "continuation-skip"so safe continuation turns can skip workspace bootstrap re-injection, while heartbeat runs and post-compaction retries still rebuild context when needed. Fixes #9157. Thanks @cgdusek.Fixes
/allowlist addand/allowlist remove, fail closed whenbefore_tool_callhooks crash, block browser SSRF redirect bypasses earlier, and keep non-interactive auth-choice inference scoped to bundled and already-trusted plugins. (#58476, #59836, #59822, #58771, #59120) Thanks @eleqtrizit and @pgondhi987.reasoning.effort: "none"and strict schemas where supported, add GPT-5.4 assistantphasemetadata across replay and the Gateway/v1/responseslayer, and keep commentary buffered untilfinal_answerso web chat, session previews, embedded replies, and Telegram partials stop leaking planning text. Fixes #59150, #59643, #61282./modelconfirmations, explicit topic replies, persisted reaction ownership across restarts, caption-media placeholder andfile_idpreservation on download failure, and upgraded-install inbound image reads. (#60384, #60042, #59634, #59207, #59948, #59971) Thanks @sfuminya, @GitZhangChi, @dashhuang, @samzong, @v1p0r, and @neeravmakwana.<media:audio>placeholders. (#61008) Thanks @manueltarouca.reasoning:stream, so hidden<think>traces from streamed replies stop surfacing as chat previews on normal sessions. Thanks @vincentkoc./entries visible. (#61129) Thanks @neeravmakwana.@everyoneand@heremention gates, keep ACK reactions on the active account, and split voice connect/playback timeouts so auto-join is more reliable. (#57465, #60361, #60345) Thanks @geekhuashan.[[reply_to_current]]control tags from preview text and honor explicit reply-tag threading during final delivery, so Discord replies stay attached to the triggering message instead of printing reply metadata into chat.replyToOnlyWhenBatchedflag withreplyToMode: "batched"so native reply references only attach on debounced multi-message turns while explicit reply tags still work.MEDIA:paths in tool output, avoid duplicate plain-output media requeueing, and persist volatile workspace-generated media into durable outbound media before final reply delivery so generated image replies stop pointing at missing local files.channels.whatsapp.blockStreamingand reset watchdog timeouts after reconnect so quiet chats stop falling into reconnect loops. (#60007, #60069) Thanks @MonkeyLeeT and @mcaxtr.talk.speakplayback when speech is explicitly stopped, and restore spoken replies on both node-scoped and gateway-backed sessions by keeping reply routing and embedded transport overrides aligned with the current playback path. (#60306, #61164, #61214)channels.matrix.dm.sessionScope, shared-session collision notices, and aligned outbound session reuse so separate Matrix DM rooms can keep distinct context when configured. (#61373) Thanks @gumadeiras.avatarUrlinto the default account during multi-account promotion and keep env-backed account setup avatar config persisted. (#61437) Thanks @gumadeiras.httpServerAdapterso recurring gateway deprecation warnings stop firing and the Express 5 compatibility workaround stays on the supported SDK path. (#60939) Thanks @coolramukaka-sys.ui.assistant.avatarwhen serving/avatar/:agentIdso Appearance UI avatar paths stop falling back to initials placeholders. (#60778) Thanks @hannasdev./stopand same-session overlap checks target the right active turn and restart-interrupted turns return the restart notice instead of being silently dropped. (#61267) Thanks @dutifulbob.text_endchannels so providers that emit explicit text-end boundaries no longer double-send the same final message. (#61530)gateway.modetolocalwhen unset, detect PID recycling in gateway lock files on Windows and macOS, and show startup progress so healthy restarts stop getting blocked by stale locks. (#54801, #60085, #59843) Thanks @BradGroux and @TonyDerek-dot.KeepAliveown in-process gateway restarts again, adding a short supervised-exit delay so rapid restarts avoid launchd crash-loop unloads whileopenclaw gateway restartstill reports real LaunchAgent errors synchronously.launchctl kickstart -kunloads it during restart so failed restarts do not leave the gateway unmanaged until manual repair.openclaw gateway startandrestart, while still preferring live unmanaged gateways during restart recovery. (#43766) Thanks @HenryC-3./Rundoes not start, and report fast failed restarts accurately instead of pretending they timed out after 60 seconds. (#59335) Thanks @tmimmanuel./restartcan relaunch the gateway on Windows setups whereschtasksinstall fell back during onboarding. (#58943) Thanks @imechZhangLY.EADDRINUSEretry loop. (#60480) Thanks @arifahmedjoy.tools.media.asyncCompletion.directSendas an opt-in direct-delivery path for finished async media tasks, while keeping the legacy requester-session wake/model-delivery flow as the default.skills list --json,skills info --json, andskills check --jsonoutput to stdout instead of stderr so machine-readable consumers receive JSON on the expected stream again. (#60914; fixes #57599; landed from contributor PR #57611 by @Aftabbs) Thanks @Aftabbs.failureDestinationis configured. (#60622) Thanks @artwalker.exec host=nodewhen the current exec policy cannot route to a node, and clarify blocked exec-host override errors with both the requested host and allowed config path.CLAUDE_CONFIG_DIRandCLAUDE_CODE_PLUGIN_*, so OpenClaw-launched Claude CLI runs cannot be silently pointed at an alternate Claude config/plugin tree with different hooks, plugins, or auth context. Thanks @vincentkoc.--setting-sources user, even under custom backend arg overrides, so repo-local.claudeproject/local settings, hooks, and plugin discovery do not silently execute inside non-interactive OpenClaw sessions. Thanks @vincentkoc.--permission-modebackend overrides as missing and fail safe back tobypassPermissions, so customcliBackends.claude-cli.argssecurity config cannot accidentally consume the next flag as a bogus permission mode. Thanks @vincentkoc.x-openclaw-scopes, so plugin HTTP handlers no longer mint admin-level runtime scopes on missing or untrusted HTTP scope headers. (#59815) Thanks @pgondhi987.createRequire(...)helper typing so provider-runtime lazy loads compile cleanly again andpnpm buildno longer fails in the Pi embedded provider error-pattern path.operator.*scopes throughnodeauth. (#57258) Thanks @jlapenna.deviceTokenscope requests and empty-cache fallbacks intact so reconnects preserveoperator.readwithout breaking explicit auth flows. (#46032) Thanks @caicongyang./pairsetup-code issuance, cleanup, and approval paths when gateway pairing scopes are missing, and keep approval-time requested-scope enforcement on the internal command path. (#55996) Thanks @coygeek.node.*,operator.admin, andoperator.pairingscopes.allowInsecureSsl: trueopts out.channels.telegram.apiRootfor buffered media downloads, addchannels.telegram.network.dangerouslyAllowPrivateNetworkfor trusted fake-IP setups, and requirechannels.telegram.trustedLocalFileRootsbefore reading absolute Bot APIfile_pathvalues. (#59544, #60705) Thanks @SARAMALI15792 and @obviyus.<tool_call>,<function_calls>, and model special tokens from shared user-visible assistant text, including truncated tool-call streams, so internal scaffolding no longer bleeds into replies across surfaces. (#60619) Thanks @oliviareid-svg.ENOSPC/disk full, so those runs stop degrading into opaqueNO_REPLY-style failures. Thanks @vincentkoc.MODELSTUDIO_API_KEY.shouldNormalizeGoogleProviderConfig is not a functionor other empty-facade reads during bundled plugin re-entry. Thanks @adam91holt.pnpm check/pnpm buildstay green.MEDIA:paths in tool output and avoid duplicate plain-output media requeueing so Discord image replies stop pointing at missing local files.[[reply_to_current]]control tags from preview text and honor explicit reply-tag threading during final delivery, so Discord replies stay attached to the triggering message instead of printing reply metadata into chat./modelconfirmations, explicit topic replies, persisted reaction ownership across restarts, caption-media placeholder andfile_idpreservation on download failure, and upgraded-install inbound image reads. (#60384, #60042, #59634, #59207, #59948, #59971) Thanks @sfuminya, @GitZhangChi, @dashhuang, @samzong, @v1p0r, and @neeravmakwana.<media:audio>placeholders. (#61008) Thanks @manueltarouca.reasoning:stream, so hidden<think>traces from streamed replies stop surfacing as chat previews on normal sessions. Thanks @vincentkoc./entries visible. (#61129) Thanks @neeravmakwana.reasoning:stream, so hidden reasoning traces do not surface on normal streaming sessions. Thanks @vincentkoc.@everyoneand@heremention gates, keep ACK reactions on the active account, and split voice connect/playback timeouts so auto-join is more reliable. (#57465, #60361, #60345) Thanks @geekhuashan.channels.whatsapp.blockStreamingand reset watchdog timeouts after reconnect so quiet chats stop falling into reconnect loops. (#60007, #60069) Thanks @MonkeyLeeT and @mcaxtr.memory-corebuiltin embedding registration on the already-registered path so selectingmemory-coreno longer recurses through plugin discovery and crashes during startup. (#61402) Thanks @ngutman.readoutputs visible longer, preserve the latestreadoutput when older tool output can absorb the overflow budget, and fall back to Pi's normal overflow compaction/retry path before replacing a freshreadwith a compacted stub. Thanks @vincentkoc.qmd collection add --glob, accept newer single-line JSON hit metadata while keeping legacy line fields, refresh QMD docs/doctor install guidance and model-override guidance, and keep older QMD releases working. Thanks @vincentkoc.httpServerAdapterso recurring gateway deprecation warnings stop firing and the Express 5 compatibility workaround stays on the supported SDK path. (#60939) Thanks @coolramukaka-sys.talk.speakplayback when speech is explicitly stopped, so stale replies stop starting after barge-in or manual stop. (#61164) Thanks @obviyus.ui.assistant.avatarwhen serving/avatar/:agentIdso Appearance UI avatar paths stop falling back to initials placeholders. (#60778) Thanks @hannasdev.skills list --json,skills info --json, andskills check --jsonoutput to stdout instead of stderr so machine-readable consumers receive JSON on the expected stream again. (#60914; fixes #57599; landed from contributor PR #57611 by @Aftabbs) Thanks @Aftabbs.failureDestinationis configured. (#60622) Thanks @artwalker.LiveSessionModelSwitchErrorbefore making an API call. (#60266) Thanks @kiranvk-2011.allow-alwaysapprovals in allowlist mode so identical reruns stop prompting, and tighten Windows interpreter/path approval handling so wrapper and malformed-path cases fail closed more consistently. (#59880, #59780, #58040, #59182) Thanks @luoyanglang, @SnowSky1, and @pgondhi987.system.runapprovals bound to the prepared execution plan across async forwarding, so mutable script operands still get approval-time binding and drift revalidation instead of dropping back to unbound execution.exec-approvals.jsonagent security override stricter gateway tool defaults so approved subagents can usesecurity: “full”without falling back to allowlist enforcement again. (#60310) Thanks @lml2468.host=noderouting for node-pinned andhost=autosessions, while still blocking sandboxedautosessions from jumping to gateway. (#60788) Thanks @openperf.exec-eventwake reason fornotifyOnExitso background exec completions still trigger follow-up turns whenHEARTBEAT.mdis empty or comments-only. (#41479) Thanks @rstar327.ok do itandgo aheadas immediate action turns, and trim overly memo-like GPT-5 chat confirmations so OpenAI replies stay shorter and more conversational by default.contextWindowfrom runtimecontextTokens, keep the default effective cap at272000, and expose a per-modelcontextTokensoverride onmodels.providers.*.models[].total_tokens, so DashScope-compatible sessions stop storing zero totals after alias normalization. (#54940) Thanks @lyfuci.additionalProperties: falseso direct OpenAI GPT-5 routes stop rejecting thereadtool with invalid strict-schema errors.strict: falsefor native OpenAI tool calls when a tool schema is not strict-compatible, and normalize empty-object tool schemas to includerequired: [], so direct GPT-5 routes stop failing with invalid strict-schema errors like missingpathinrequired.gpt-image-1reference-image edits through/images/editsmultipart uploads, and stop inferring unsupported resolution overrides when no explicitsizeorresolutionis provided.Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR has been generated by Renovate Bot.