Pre-release for npm beta tag v2026.3.13-beta.1.
macOS assets are built with stable app version 2026.3.13 so they can be reused for the later non-beta release. appcast.xml is intentionally unchanged in this pre-release.
Changes
- Android/chat settings: redesign the chat settings sheet with grouped device and media sections, refresh the Connect and Voice tabs, and tighten the chat composer/session header for a denser mobile layout. (#44894) Thanks @obviyus.
- iOS/onboarding: add a first-run welcome pager before gateway setup, stop auto-opening the QR scanner, and show
/pair qrinstructions on the connect step. (#45054) Thanks @ngutman. - Browser/existing-session: add an official Chrome DevTools MCP attach mode for signed-in live Chrome sessions, with docs for
chrome://inspect/#remote-debuggingenablement and direct backlinks to Chrome’s own setup guides. - Browser/agents: add built-in
profile="user"for the logged-in host browser andprofile="chrome-relay"for the extension relay, so agent browser calls can prefer the real signed-in browser without the extrabrowserSessionselector. - Browser/act automation: add batched actions, selector targeting, and delayed clicks for browser act requests with normalized batch dispatch. Thanks @vincentkoc.
- Docker/timezone override: add
OPENCLAW_TZsodocker-setup.shcan pin gateway and CLI containers to a chosen IANA timezone instead of inheriting the daemon default. (#34119) Thanks @Lanfei. - Dependencies/pi: bump
@mariozechner/pi-agent-core,@mariozechner/pi-ai,@mariozechner/pi-coding-agent, and@mariozechner/pi-tuito0.58.0.
Fixes
- Dashboard/chat UI: stop reloading full chat history on every live tool result in dashboard v2 so tool-heavy runs no longer trigger UI freeze/re-render storms while the final event still refreshes persisted history. (#45541) Thanks @BunsDev.
- Ollama/reasoning visibility: stop promoting native
thinkingandreasoningfields into final assistant text so local reasoning models no longer leak internal thoughts in normal replies. (#45330) Thanks @xi7ang. - Android/onboarding QR scan: switch setup QR scanning to Google Code Scanner so onboarding uses a more reliable scanner instead of the legacy embedded ZXing flow. (#45021) Thanks @obviyus.
- Browser/existing-session: harden driver validation and session lifecycle so transport errors trigger reconnects while tool-level errors preserve the session, and extract shared ARIA role sets to deduplicate Playwright and Chrome MCP snapshot paths. (#45682) Thanks @odysseus0.
- Browser/existing-session: accept text-only
list_pagesandnew_pageresponses from Chrome DevTools MCP so live-session tab discovery and new-tab open flows keep working when the server omits structured page metadata. - Control UI/insecure auth: preserve explicit shared token and password auth on plain-HTTP Control UI connects so LAN and reverse-proxy sessions no longer drop shared auth before the first WebSocket handshake. (#45088) Thanks @velvet-shark.
- Gateway/session reset: preserve
lastAccountIdandlastThreadIdacross gateway session resets so replies keep routing back to the same account and thread after/reset. (#44773) Thanks @Lanfei. - macOS/onboarding: avoid self-restarting freshly bootstrapped launchd gateways and give new daemon installs longer to become healthy, so
openclaw onboard --install-daemonno longer false-fails on slower Macs and fresh VM snapshots. - Gateway/status: add
openclaw gateway status --require-rpcand clearer Linux non-interactive daemon-install failure reporting so automation can fail hard on probe misses instead of treating a printed RPC error as green. - macOS/exec approvals: respect per-agent exec approval settings in the gateway prompter, including allowlist fallback when the native prompt cannot be shown, so gateway-triggered
system.runrequests follow configured policy instead of always prompting or denying unexpectedly. (#13707) Thanks @sliekens. - Telegram/media downloads: thread the same direct or proxy transport policy into SSRF-guarded file fetches so inbound attachments keep working when Telegram falls back between env-proxy and direct networking. (#44639) Thanks @obviyus.
- Telegram/inbound media IPv4 fallback: retry SSRF-guarded Telegram file downloads once with the same IPv4 fallback policy as Bot API calls so fresh installs on IPv6-broken hosts no longer fail to download inbound images.
- Windows/gateway install: bound
schtaskscalls and fall back to the Startup-folder login item when task creation hangs, so nativeopenclaw gateway installfails fast instead of wedging forever on broken Scheduled Task setups. - Windows/gateway stop: resolve Startup-folder fallback listeners from the installed
gateway.cmdport, soopenclaw gateway stopnow actually kills fallback-launched gateway processes before restart. - Windows/gateway status: reuse the installed service command environment when reading runtime status, so startup-fallback gateways keep reporting the configured port and running state in
gateway status --jsoninstead of falling back togateway port unknown. - Windows/gateway auth: stop attaching device identity on local loopback shared-token and password gateway calls, so native Windows agent replies no longer log stale
device signature expiredfallback noise before succeeding. - Discord/gateway startup: treat plain-text and transient
/gateway/botmetadata fetch failures as transient startup errors so Discord gateway boot no longer crashes on unhandled rejections. (#44397) Thanks @jalehman. - Slack/probe: keep
auth.test()bot and team metadata mapping stable while simplifying the probe result path. (#44775) Thanks @Cafexss. - Dashboard/chat UI: render oversized plain-text replies as normal paragraphs instead of capped gray code blocks, so long desktop chat responses stay readable without tab-switching refreshes.
- Dashboard/chat UI: restore the
chat-new-messagesclass on the New messages scroll pill so the button uses its existing compact styling instead of rendering as a full-screen SVG overlay. (#44856) Thanks @Astro-Han. - Gateway/Control UI: restore the operator-only device-auth bypass and classify browser connect failures so origin and device-identity problems no longer show up as auth errors in the Control UI and web chat. (#45512) thanks @sallyom.
- macOS/voice wake: stop crashing wake-word command extraction when speech segment ranges come from a different transcript instance.
- Discord/allowlists: honor raw
guild_idwhen hydrated guild objects are missing so allowlisted channels and threads like#maintainersno longer get false-dropped before channel allowlist checks. - macOS/runtime locator: require Node >=22.16.0 during macOS runtime discovery so the app no longer accepts Node versions that the main runtime guard rejects later. Thanks @sumleo.
- Agents/custom providers: preserve blank API keys for loopback OpenAI-compatible custom providers by clearing the synthetic Authorization header at runtime, while keeping explicit apiKey and oauth/token config from silently downgrading into fake bearer auth. (#45631) Thanks @xinhuagu.
- Models/google-vertex Gemini flash-lite normalization: apply existing bare-ID preview normalization to
google-vertexmodel refs and provider configs sogoogle-vertex/gemini-3.1-flash-literesolves asgemini-3.1-flash-lite-preview. (#42435) thanks @scoootscooob. - iMessage/remote attachments: reject unsafe remote attachment paths before spawning SCP, so sender-controlled filenames can no longer inject shell metacharacters into remote media staging. Thanks @lintsinghua.
- Telegram/webhook auth: validate the Telegram webhook secret before reading or parsing request bodies, so unauthenticated requests are rejected immediately instead of consuming up to 1 MB first. Thanks @space08.
- Security/device pairing: make bootstrap setup codes single-use so pending device pairing requests cannot be silently replayed and widened to admin before approval. Thanks @tdjackey.
- Security/external content: strip zero-width and soft-hyphen marker-splitting characters during boundary sanitization so spoofed
EXTERNAL_UNTRUSTED_CONTENTmarkers fall back to the existing hardening path instead of bypassing marker normalization. - Security/exec approvals: unwrap more
pnpmruntime forms during approval binding, includingpnpm --reporter ... execand directpnpm nodefile runs, with matching regression coverage and docs updates. - Security/exec approvals: fail closed for Perl
-Mand-Iapproval flows so preload and load-path module resolution stays outside approval-backed runtime execution unless the operator uses a broader explicit trust path. - Security/exec approvals: recognize PowerShell
-Fileand-fwrapper forms during inline-command extraction so approval and command-analysis paths treat file-based PowerShell launches like the existing-Commandvariants. - Security/exec approvals: unwrap
envdispatch wrappers inside shell-segment allowlist resolution on macOS soenv FOO=bar /path/to/binresolves against the effective executable instead of the wrapper token. - Security/exec approvals: treat backslash-newline as shell line continuation during macOS shell-chain parsing so line-continued
$(substitutions fail closed instead of slipping past command-substitution checks. - Security/exec approvals: bind macOS skill auto-allow trust to both executable name and resolved path so same-basename binaries no longer inherit trust from unrelated skill bins.
- Build/plugin-sdk bundling: bundle plugin-sdk subpath entries in one shared build pass so published packages stop duplicating shared chunks and avoid the recent plugin-sdk memory blow-up. (#45426) Thanks @TarasShyn.
- Cron/isolated sessions: route nested cron-triggered embedded runner work onto the nested lane so isolated cron jobs no longer deadlock when compaction or other queued inner work runs. Thanks @vincentkoc.
- Agents/OpenAI-compatible compat overrides: respect explicit user
models[].compatopt-ins for non-nativeopenai-completionsendpoints so usage-in-streaming capability overrides no longer get forced off when the endpoint actually supports them. (#44432) Thanks @cheapestinference. - Agents/Azure OpenAI startup prompts: rephrase the built-in
/new,/reset, and post-compaction startup instruction so Azure OpenAI deployments no longer hit HTTP 400 false positives from the content filter. (#43403) Thanks @xingsy97. - Agents/memory bootstrap: load only one root memory file, preferring
MEMORY.mdand usingmemory.mdas a fallback, so case-insensitive Docker mounts no longer inject duplicate memory context. (#26054) Thanks @Lanfei. - Agents/compaction: compare post-compaction token sanity checks against full-session pre-compaction totals and skip the check when token estimation fails, so sessions with large bootstrap context keep real token counts instead of falling back to unknown. (#28347) thanks @efe-arv.
- Agents/compaction: preserve safeguard compaction summary language continuity via default and configurable custom instructions so persona drift is reduced after auto-compaction. (#10456) Thanks @keepitmello.
- Agents/tool warnings: distinguish gated core tools like
apply_patchfrom plugin-only unknown entries intools.profilewarnings, so unavailable core tools now report current runtime/provider/model/config gating instead of suggesting a missing plugin. - Config/validation: accept documented
agents.list[].paramsper-agent overrides in strict config validation soopenclaw config validateno longer rejects runtime-supportedcacheRetention,temperature, andmaxTokenssettings. (#41171) Thanks @atian8179. - Config/web fetch: restore runtime validation for documented
tools.web.fetch.readabilityandtools.web.fetch.firecrawlsettings so valid web fetch configs no longer fail with unrecognized-key errors. (#42583) Thanks @stim64045-spec. - Signal/config validation: add
channels.signal.groupsschema support so per-grouprequireMention,tools, andtoolsBySenderoverrides no longer get rejected during config validation. (#27199) Thanks @unisone. - Config/discovery: accept
discovery.wideArea.domainin strict config validation so unicast DNS-SD gateway configs no longer fail with an unrecognized-key error. (#35615) Thanks @ingyukoh. - Telegram/media errors: redact Telegram file URLs before building media fetch errors so failed inbound downloads do not leak bot tokens into logs. Thanks @space08.