Upgrade OpenClaw to 2026.3.28 - #22
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
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.
Automated Upgrade: 2026.3.11 → 2026.3.28
Test Results
Review these before merging.
Release Notes
openclaw 2026.3.28
Breaking
qwen-portal-authOAuth integration forportal.qwen.ai; migrate to Model Studio withopenclaw onboard --auth-choice modelstudio-api-key. (#52709) Thanks @pomelo-nwu.openclaw doctor.Changes
x_search, and auto-enable the xAI plugin from owned web-search and tool config so bundled Grok auth/configured search flows work without manual plugin toggles. (#56048) Thanks @huntharo.x_searchsetup duringopenclaw onboardandopenclaw configure --section web, including an x_search model picker with the shared xAI key.image-01model, supporting generate and image-to-image editing with aspect ratio control. (#54487) Thanks @liyuan97.requireApprovaltobefore_tool_callhooks, letting plugins pause tool execution and prompt the user for approval via the exec approval overlay, Telegram buttons, Discord interactions, or the/approvecommand on any channel. The/approvecommand now handles both exec and plugin approvals with automatic fallback. (#55339) Thanks @vaclavbelak and @joshavant./acp spawn codex --bind herecan turn the current chat into a Codex-backed workspace without creating a child thread, and document the distinction between chat surface, ACP session, and runtime workspace.apply_patchby default for OpenAI and OpenAI Codex models, and align its sandbox policy access withwritepermissions.gateway run --claude-cli-logswith generic--cli-backend-logswhile keeping the old flag as a compatibility alias.plugins.allowentries.~/.local/bin, and document the host-CLIopenclaw --container <name> ...workflow instead of a dedicatedopenclawservice user.upload-fileSlack action that routes file uploads through the existing Slack upload transport, with optional filename/title/comment overrides for channels and DMs.upload-fileaction by adding explicit support for Microsoft Teams and Google Chat, and by exposing BlueBubbles file sends throughupload-filewhile keeping the legacysendAttachmentalias.openclaw config schemato print the generated JSON schema foropenclaw.json. (#54523) Thanks @kvokka.tts.<provider>API-key shapes.memory-coreowns flush prompts and target-path policy instead of hardcoded core logic.runHeartbeatOncein the plugin runtimesystemnamespace so plugins can trigger a single heartbeat cycle with an explicit delivery target override (e.g.heartbeat: { target: "last" }). (#40299) Thanks @loveyana./compactno-op cases as skipped instead of failed. (#51072) Thanks @afurm.pnpm docs:check-links:anchorsfor Mintlify anchor validation while keepingscripts/docs-link-audit.mjsas the stable link-audit entrypoint. (#55912) Thanks @velvet-shark.X-Client-Source: openclawso Tavily can attribute OpenClaw-originated traffic. (#55335) Thanks @lakshyaag-tavily.Fixes
sensitive) as structured assistant errors instead of crashing the agent run. (#56639)instructions. (#54829) Thanks @neeravmakwana.openrouterandminimax-portal. (#54858) Thanks @MonkeyLeeT.replyToMessageIdat all four API sinks with a shared normalizer that rejects non-numeric, NaN, and mixed-content strings. (#56587)422 status code (no body)chat errors.compdefregistration untilcompinitis available so zsh completion loads cleanly with plugin managers and manual setups. (#56555){"action":"NO_REPLY"}control envelopes before channel delivery with a strict single-key detector; preserves media when text is only a silent envelope. (#56612)openclaw/acpxcommand defaults and built-in aliases, pin versionednpxbuilt-ins to exact versions, and stop unknown ACP agent ids from falling through to raw--agentcommand execution on the MCP-proxy path. (#28321) Thanks @m0nkmaster and @vincentkoc.[[reply_to:...]]tags into delivered text by sendingreply_toas RPC metadata and stripping stray directive tags from outbound messages. (#39512) Thanks @mvanhorn.openclaw message senddeliveries into the resolved agent session transcript again by always threading the default CLI agent through outbound mirroring. (#54187) Thanks @KevInTheCloud5617./statusshows the correct 1.0m window instead of an underreported shared-cache minimum. (#54796) Thanks @neeravmakwana.stream-jsonoutput so watchdogs see progress on long runs, and keep session/usage metadata even when Claude finishes with an empty result line. (#49698) Thanks @felear2022.--mcp-configoverlay for background Claude CLI runs, including the empty-server case, so Claude does not inherit ambient user/global MCP servers. (#54961) Thanks @markojak.mediaUrl. (#50930) Thanks @infichen.<E.164|group JID>format hint. Thanks @mcaxtr.messageupdates so bot-pinned status cards and similar service updates do not trigger bogus pairing requests or re-enter inbound dispatch. (#54530) thanks @huntharoexec:SecretRef bot tokens work across all outbound reply branches. (#48347) thanks @mathiasnagler.welcomeCard,groupWelcomeCard,promptStarters, and feedback/reflection keys in strict config validation so already-supported Teams runtime settings stop failing schema checks. (#54679) Thanks @gumclaw.moduleUrlthrough plugin-sdk alias resolution so user-installed plugins outside the openclaw directory (e.g.~/.openclaw/extensions/) correctly resolveopenclaw/plugin-sdk/*subpath imports, and gateplugin-sdk:check-exportsinrelease:check. (#54283) Thanks @xieyongliang.tools.web.fetch.maxResponseBytessetting in runtime schema validation so valid configs no longer fail with unrecognized-key errors. (#53401) Thanks @erhhung.buttonsschema optional in merged tool definitions so plainaction=sendcalls stop failing validation when no buttons are provided. (#54418) Thanks @adzendo.tool_call_idvalues with HTTP 400. (#40996) Thanks @xaeon2026.strictfields unless users explicitly opt back in, so tool calling keeps working on providers that reject that option. (#45497) Thanks @sahancava.assemble()calls without the newpromptfield when older engines reject it, preserving prompt-aware retrieval compatibility for pre-prompt plugins. (#50848) thanks @danhdoan.up to datewhen the local version already matches npm latest, while keeping the availability logic unchanged. (#51409) Thanks @dongzhenye.create_timeinstead ofDate.now()for inbound timestamps so offline-retried messages carry the correct authoring time, preventing mis-targeted agent actions on stale instructions. (#52809) Thanks @schumilin.matrix-js-sdkentrypoints, so unrelated channels do not get taken down during plugin load. (#56273) Thanks @aquaright1.tools.sandbox.tools.alsoAllow, let explicit sandbox re-allows remove matching built-in default-deny tools, and keep sandbox explain/error guidance aligned with the effective sandbox tool policy. (#54492) Thanks @ngutman.sessions.json.compactionCountafter a late embedded auto-compaction success so persisted session counts catch up once the handler reports completion. (#45493) Thanks @jackal092927./tools/invokeplugin loading with the session workspace, and retry outbound channel recovery when the pinned channel surface changes so plugin tools and channels stop disappearing or re-registering from mismatched runtime loads. Thanks @gumadeiras.lifecycleStopping, so stale-socket Discord restarts no longer crash the whole gateway. Fixes #55403 and #55421. Thanks @lml2468 and @vincentkoc.expires_atvalues as seconds epochs and clamp far-future runtime auth refresh timers so Copilot token refresh cannot fall into asetTimeoutoverflow hot loop. (#55360) Thanks @michael-abdo.session_statuswhen no explicit override exists, and honor per-agentthinkingDefaultin bothsession_statusand/status. (#55425) Thanks @scoootscooob, @xaeon2026, and @ysfbsf.extensions/*locations to the packaged bundled path, including directory-name mismatches and slash-suffixed config entries. (#55054) Thanks @SnowSky1.m.directseeds successfully, while still honoring explicitis_directstate and startup fallback recovery. (#54890) thanks @private-peteragent-spawnerfrom being treated as Feishu account ids during tool execution, so tools fall back to the configured/default Feishu account unless the contextual id is a real enabled Feishu account. (#55627) Thanks @MonkeyLeeT.required: []arrays from Gemini tool schemas so optional-only tool parameters no longer trigger Google validator 400s. (#52106) Thanks @oliviareid-svg./activationarguments in the TUI and reject invalid values instead of silently coercing them tomention. (#55733) Thanks @shakkernerd./modelchanges to active embedded runs at the next safe retry boundary, so overloaded or retrying turns switch to the newly selected model instead of staying pinned to the old provider.server_errorpayloads as failoverable, sanitizeCodex error:payloads before they reach chat, preserve context-overflow guidance for prefixedinvalid_request_errorpayloads, and omit providerrequest_idvalues from user-facing UI copy. (#42892) Thanks @xaeon2026.@buape/carbonto the latest beta and pass the newRateLimitErrorrequest argument so Discord stays compatible with the upstream beta constructor change. (#55980) Thanks @ngutman.inbound_claimhook metadata while keeping the legacy singular media attachment fields for compatibility. (#55452) Thanks @huntharo.originalFilenametosaveMediaBuffer. (#55692) thanks @esrehmki.matrix.tomentions whose visible label uses the bot's room display name, sorequireMention: truerooms respond correctly in modern Matrix clients. (#55393) thanks @nickludlam.thinkingLevel=offthrough the live Ollama extension request path so thinking-capable Ollama models now receive top-levelthink: falseinstead of silently generating hidden reasoning tokens. (#53200) Thanks @BruceMacD.@pierre/diffsruntime dependencies during packaged updates so the bundled diff viewer keeps loading after global installs and updates. (#56077) Thanks @gumadeiras.channels.<id>config when uninstalling channel plugins, and keep the uninstall preview aligned with explicit channel ownership so built-in channels and shared keys stay intact. (#35915) Thanks @wbxl2000.accessTokenandpasswordSecretRefs against the active Matrix config env path during startup, and officially accept SecretRefaccessTokenconfig values. (#54980) thanks @kakahu2015.user:<aadObjectId>sends when multiple stored references exist, so replies stop targeting stale DM threads. (#54702) Thanks @gumclaw./tools/invoketool lists and harden tool construction to infer the session agent workspace by default, so workspace plugins do not re-register on repeated HTTP tool calls. (#56101) thanks @neeravmakwanacountryfilters toALLbefore request and cache-key generation so locale-derived values likeVNstop failing with upstream 422 validation errors. (#55695) Thanks @chen-zhang-cs-code.openclaw daemon status. (#56282) Thanks @mbelinky.@matrix-org/matrix-sdk-crypto-nodejsthroughcreateRequire(...)so E2EE media send and receive keep the package-local native binding lookup working in packaged ESM builds. (#54566) thanks @joelnishanth.thumbnail_filewhile keeping unencrypted-room previews onthumbnail_url, so encrypted Matrix image events keep thumbnail metadata without leaking plaintext previews. (#54711) thanks @frischeDaten./newand/resetrouted to the active topic by preserving the topic target on forum-thread command context. (#35963)openclaw 2026.3.24
Breaking
Changes
/v1/modelsand/v1/embeddings, and forward explicit model overrides through/v1/chat/completionsand/v1/responsesfor broader client and RAG compatibility. Thanks @vincentkoc./toolsshow the tools the current agent can actually use right now, add a compact default view with an optional detailed mode, and add a live "Available Right Now" section in the Control UI so it is easier to see what will work before you ask.Options:lines as buttons/selects, improve Slack interactive setup defaults, and isolate reply controls from plugin interactive handlers. (#53389) Thanks @vincentkoc.--containerandOPENCLAW_CONTAINERto runopenclawcommands inside a running Docker or Podman OpenClaw container. (#52651) Thanks @sallyom.autoThreadName: "generated"naming so new auto-created threads can be renamed asynchronously with concise LLM-generated titles while keeping the existing message-based naming as the default. (#43366) Thanks @davidguttman.before_dispatchwith canonical inbound metadata and route handled replies through the normal final-delivery path, preserving TTS and routed delivery semantics. (#50444) Thanks @gfzhx.<details>with lazy-loaded inline markdown preview, and add comprehensive.sidebar-markdownstyles for headings, lists, code blocks, tables, blockquotes, and details/summary elements. (#53411) Thanks @BunsDev.@create-markdown/previewv2 system theme for rich markdown rendering (headings, tables, code blocks, callouts, blockquotes) that auto-adapts to the app's light/dark design tokens. (#53411) Thanks @BunsDev.openclaw skills infooutput. (#53411) Thanks @BunsDev.22.14+while continuing to recommend Node 24, so npm installs and self-updates do not strand Node 22.14 users on older releases.engines.nodebeforeopenclaw updateruns a global package install, so outdated Node runtimes fail with a clear upgrade message instead of attempting an unsupported latest release.Fixes
workspaceOnlyis off, while strict workspace-only agents remain sandboxed.mediaUrl/fileUrlalias bypass so outbound tool and message actions cannot escape media-root restrictions. (#54034)openclaw-clishared-network namespace loop by routing setup-time onboard/config writes throughopenclaw-gateway, so fresh Docker installs stop failing before the gateway comes up. (#53385) Thanks @amsminn.SecretRefconfig from crashing embedded agent runs by falling back to the resolved runtime snapshot when needed. Fixes #45838./status,/new, and/activationcommands from linked-accountfromMetraffic. (#53624) Thanks @w-sss.botInvokeMessagepayloads and readingselfLidfromcreds.json, so reply-based mentions reach the bot again in linked-account group chats.#Generaltopic1routing when Telegram omits forum metadata, including native commands, interactive callbacks, inbound message context, and fallback error replies. (#53699) thanks @huntharobot not a memberas a permanent delivery failure so Telegram sends stop retrying doomed chats. (#53635) Thanks @w-sss.PHOTO_INVALID_DIMENSIONS. (#52545) Thanks @hnshah.2026.3.23
Breaking
Changes
Qwen (Alibaba Cloud Model Studio). (#43878)btn--icon,btn--ghost,btn--xs), refine the Knot theme to a black-and-red palette with WCAG 2.1 AA contrast, add config icons for Diagnostics/CLI/Secrets/ACP/MCP sections, replace the roundness slider with discrete stops, and improve accessibility with aria-labels across usage filters. (#53272) Thanks @BunsDev.<script>blocks in the servedindex.htmland include them in thescript-srcCSP directive, keeping inline scripts blocked by default while allowing explicitly hashed bootstrap code. (#53307) Thanks @BunsDev.Fixes
light-runtime-api.js, Matrixruntime-api.js, and other plugin runtime entry files in the npm package again, so global installs stop failing on missing bundled plugin runtime surfaces.channels login/logout, harden channel ids against prototype-chain and control-character abuse, and fall back cleanly to catalog-backed channel installs, so channel auth works again for single-channel setups and on-demand channel installs. (#53254) Thanks @BunsDev.models auth paste-tokenwrite to the resolved agent store, so Configure, Onboard, and token-paste flows stop snapping back to expired OpenAI tokens. Fixes #53207. Related to #45516.operator.readfallback message when a connection really lacks read scope, so operator sessions stop failing or blanking on read-backed pages. (#53110) Thanks @BunsDev.>=2026.3.22ClawHub package checks so installs no longer fail behind the stale1.2.0constant. (#53157) Thanks @futhgar.clawhub:specs and versionless ClawHub package names as uninstall targets, soopenclaw plugins uninstall clawhub:<package>works again even when the recorded install was pinned to a version.web_searchprovider instead of stale/default selection, so agent turns keep hitting the provider you actually configured. Fixes #53020. Thanks @jzakirov.openclaw doctor --fixto repair old persisted Mistral provider configs that still carry context-sized output limits, avoiding deterministic Mistral 422 rejects on fresh and existing setups. Fixes #52599. Thanks @vincentkoc.openclaw skills ...and gateway skill browsing keep using the signed-in auth state instead of silently falling back to unauthenticated mode. Fixes #53034.This is an automated version bump. Only the Dockerfile was changed.
If release notes mention config/schema changes, manual review is required.
Do not merge if there are known regressions above.
Docker test output