← Blog
Release

openclaw 2026.6.5

Safer channel output: QQBot strips model reasoning and thinking scaffolding before native delivery, so users see the final answer rather than raw internal markup. (#89913, #90132) Thanks @openperf,…

Originally published on github.com →

2026.6.5

Highlights

  • Safer channel output: QQBot strips model reasoning and thinking scaffolding before native delivery, so users see the final answer rather than raw internal markup. (#89913, #90132) Thanks @openperf, @dygg2001, @Takhoffman, and @vincentkoc.
  • MCP results no longer poison sessions: resource_link, audio, malformed images, and future non-text blocks are normalized before provider conversion, avoiding Anthropic 400s and broken follow-up history. (#90710, #90728) Thanks @RanSHammer, @849261680, and @Takhoffman.
  • Anthropic extended thinking recovers after restarts: prompt-cache expiry and early-signature failures wait for a real message start, so they reach the existing retry path rather than ending a turn. (#90667, #90697) Thanks @openperf, @MIHHHMIH, @Takhoffman, @vincentkoc, @itsuzef, and @mcaxtr.
  • Parallel web search is bundled: API-key discovery, guarded endpoint handling, cache-safe session IDs, onboarding, and documentation make it a first-class search provider. (#85158) Thanks @NormallyGaussian.
  • Better Matrix and Vertex reliability: Matrix voice notes and threaded conversations retain their context, while Google Vertex ADC models regain static catalog and runtime resolution. (#78016, #90415, #90506, #90609) Thanks @849261680, @frankdierolf, and @paulogogs.
  • Safer upgrades and restarts: cron JSON stores migrate before runtime, service env placeholders stop masking secrets, and macOS avoids unnecessary direct-Gateway reconnect churn. (#90072, #90208, #90668, #90815) Thanks @MonkeyLeeT, @sallyom, @vrurg, @wlassalle724, @jalehman, @Takhoffman, @zhangguiping-xydt, @joshavant, and @vincentkoc.

Changes

  • Search/providers: add the Parallel bundled web-search plugin, registration contracts, onboarding integration, and guarded api.parallel.ai/v1/search support. (#85158) Thanks @NormallyGaussian and @vincentkoc.
  • Matrix/channels: add voice-message preflight and thread-aware read/reply behavior. (#78016, #90415) Thanks @frankdierolf.
  • Skills/ClawHub: install ClawHub skills backed by GitHub repositories through the resolved install API, download the pinned GitHub commit, keep install-policy checks, and report install telemetry after success. (#90478) Thanks @Patrick-Erichsen, @vincentkoc, @itsuzef, and @mcaxtr.
  • Google Chat/channels: add native approval card actions and click handling so Google Chat approvals use platform-native cards instead of generic message flow.
  • Mobile: Android provider/model screens now surface expiring, unavailable, unresolved, and attention states more clearly, while iOS settings and Talk tabs keep diagnostics, gateway rows, attachment labels, and unavailable Talk controls reachable. Thanks @joshavant and @shakkernerd.
  • Memory: QMD search can use the new rerank toggle, and memory adapter status uses the resolved default model identity when checking plain status. (#61834) Thanks @kouka-t0yohei and @vincentkoc.
  • QQBot: add /bot-group-allways on|off slash command (with named-account and default-account support) to toggle whether group messages require an @mention before the bot replies, and clear the runtime config snapshot after the write so the new account-level defaultRequireMention takes effect immediately without restart. (#91423) Thanks @cxyhhhhh, @joshavant, @vincentkoc, @itsuzef, @mcaxtr, and @jacobtomlinson.

Fixes

  • Agents: sessions_send now honors an explicit sessionKey when stale label metadata is also present, and denied session-id sends no longer echo the resolved canonical session key. Fixes #64699; refs #74009 and #41199 Thanks @Mintalix, @RevisitMoon, @Mocha-s, @chouxiaozi1989, @sunxq1017-hash, @vincentkoc, and @joshavant.
  • Channel content boundaries: QQBot now strips reasoning/thinking tags before sending, preserving final answers while hiding internal model narration from users. (#89913, #90132) Thanks @openperf, @Takhoffman, @dygg2001, and @vincentkoc.
  • Agents/MCP/providers: coerce non-text/image MCP tool-result blocks before they reach provider converters, preserving valid images and turning richer MCP content into text instead of malformed image blocks. (#90710, #90728) Thanks @RanSHammer, @849261680, @Takhoffman, @vincentkoc, and @LiuwqGit.
  • Anthropic/Codex/ACP/agent recovery: defer Anthropic stream start events until message_start, strip stale compaction thinking signatures before Anthropic replay, detect unsigned thinking-only stalls, refresh prompt fences after compaction writes, reject empty completion handoffs, preserve parent streaming-off overrides/shared progress commentary, forward heartbeat metadata to context-engine hooks, and cover Codex session/thread migration edge cases. (#90667, #90697, #90163, #90108, #89874, #89505, #90632, #89302, #90729, #90317, #90319) Thanks @openperf, @100yenadmin, @ooiuuii, @johnib, @Takhoffman, @MIHHHMIH, @dexiosmb, @zenglingbiao, @jalehman, @huangxun375-stack, @holgergruenhagen, @vincentkoc, @joshavant, and @ArthurusDent.
  • Provider/model resolution: preserve Google Vertex ADC auth markers in generated catalogs, re-probe a single-provider primary after cooldown, share Codex model visibility, fail closed for unknown model auth, preserve Codex alias availability, keep unresolved profile refs unknown, and avoid resolving auth while listing models. (#90506, #90609, #90717, #90702) Thanks @849261680, @paulogogs, @brtkwr, and @vincentkoc.
  • Gateway/macOS/mobile: avoid duplicate Gateway probe warnings by identity, rate-limit node pairing requests while preserving paired-node reconnects, keep macOS node mode on a healthy direct Gateway session, keep iOS diagnostics and gateway rows reachable, and avoid Linux ARM Gradle resource tasks during Android builds. (#85791, #90147, #90668, #90815) Thanks @giodl73-repo, @vrurg, @pgondhi987, @Takhoffman, @zhangguiping-xydt, @vincentkoc, @joshavant, and @shakkernerd.
  • TUI/chat/Workboard/auto-reply: optimistic user messages stay stable across stale history reloads, runId reassignment, and abort windows instead of disappearing, jumping, or lingering as ghost rows; Workboard stale lifecycle bulk updates no longer overwrite newer status/provenance; message-tool sends now count as delivery. (#86205, #89600, #88592, #90123) Thanks @RomneyDa, @BunsDev, @kzclaw, @mcaxtr, @vincentkoc, @joshavant, and @LiuwqGit.
  • Cron/update/service env: doctor config preflight now migrates legacy cron JSON stores into SQLite before runtime reads, service env planning skips unresolved placeholders that would mask state-dir .env values, and session transcript rewrites keep registry markers/discriminants consistent. (#90072, #90208, #90277, #90488) Thanks @MonkeyLeeT, @sallyom, @Kvikkulf, @jalehman, @wlassalle724, @shakkernerd, and @vincentkoc.
  • Security/config/tooling: guard MCP HTTP redirects, protect global agent config defaults, and keep malformed operational limits bounded and explicit. (#89732, #90145) Thanks @pgondhi987, @vincentkoc, and @joshavant.
  • Channels: WhatsApp restarts when per-account config changes, bounds background startup waits, closes failed sockets, and preserves reconnect behavior; Mattermost slash commands keep their state on globalThis; Feishu streaming cards preserve full merged content; voice-call tracks Twilio streams after connect; ClickClack reply tools respect toolsAllow. (#87951, #87965, #90486, #68113, #90534, #90181, #90607, #89500) Thanks @MukundaKatta, @mcaxtr, @infoanton, @mushuiyu886, @sahibzada-allahyar, @borntobefree2-cmyk, @Takhoffman, @mmaps, @MMMMSSSS8899, @ly85206559, @sliverp, @vincentkoc, @joshavant, @LiuwqGit, @itsuzef, @wjm7220, and @donkeykong91.
  • Feishu: retry transient send rate-limit errors (HTTP 429, per-chat code 230020, tenant-level code 11232) with linear backoff, including SDK responses that fulfill with rate-limit bodies instead of throwing, and route streaming-card sends through the retry wrapper. (#89659) Thanks @ladygege, @AxelHu, @marshallm-create, @sliverp, @joshavant, @vincentkoc, @itsuzef, and @mcaxtr.
  • Memory: keep doctor REM harness previews aligned with live REM by dropping short-term recall snippets whose source files disappeared before rendering preview output. Thanks @samzong, @frankekn, and @vincentkoc.

Complete contribution record

This audited record covers the complete v2026.6.2-beta.1..v2026.6.5 history: 142 merged PRs. The generation manifest also supplies direct commits as editorial input; the grouped notes above prioritize user impact.

Pull requests

  • PR #89102 refactor(auth): store auth profiles in SQLite.
  • PR #90028 docs: clarify legacy openai-codex auth. Thanks @jalehman.
  • PR #89600 Fix Workboard status persistence. Related #88592. Thanks @BunsDev and @kzclaw.
  • PR #90067 fix(workboard): isolate stale lifecycle bulk patches. Thanks @BunsDev.
  • PR #88585 Pin official npm plugin install records. Thanks @zhuisDEV.
  • PR #90053 fix: hide Skill Workshop revision handoff from chat. Thanks @shakkernerd.
  • PR #90123 fix(auto-reply): count message tool sends as delivery. Thanks @mcaxtr.
  • PR #87965 fix(whatsapp): restart channel when a per-account config field changes so disabled accounts are torn down. Related #87951. Thanks @MukundaKatta and @mcaxtr and @borntobefree2-cmyk.
  • PR #90145 fix: protect global agent config defaults [AI]. Thanks @pgondhi987.
  • PR #90147 Rate limit node pairing requests [AI]. Thanks @pgondhi987.
  • PR #89732 fix: guard MCP HTTP redirects [AI]. Thanks @pgondhi987.
  • PR #90181 fix(feishu): preserve streaming card content. Related #90164. Thanks @mushuiyu886 and @sliverp and @wjm7220.
  • PR #90058 fix(docker): qualify base image refs for podman short-name mode. Thanks @mrunalp and @sallyom.
  • PR #89488 fix: stabilize Anthropic cache marker through tool loops. Thanks @Marvinthebored.
  • PR #89505 fix(acp): re-add opt-in parent commentary progress. Related #89501. Thanks @100yenadmin.
  • PR #90341 fix(acp): default parent commentary in progress mode. Thanks @obviyus.
  • PR #90351 fix(message-tool): stabilize send idempotency keys. Thanks @jesse-merhi.
  • PR #90375 refactor: remove Feishu runtime dedupe JSON fallback.
  • PR #90385 refactor: move MS Teams state migration to doctor.
  • PR #90287 fix(ci): scope PR merge diff checks to first parent. Thanks @hxy91819.
  • PR #90436 Add NVIDIA Nemotron 3 Ultra default. Thanks @jacobtomlinson.
  • PR #90205 fix: tolerate missing streamed response content type. Thanks @jalehman.
  • PR #90163 fix(agents): strip stale compaction thinking signatures before Anthropic replay. Related #90108. Thanks @openperf and @dexiosmb.
  • PR #90486 fix(whastapp): bound connection startup waits. Thanks @mcaxtr and @MMMMSSSS8899.
  • PR #90488 fix service env placeholder collection. Thanks @sallyom.
  • PR #90478 feat: install GitHub-backed ClawHub skills. Thanks @Patrick-Erichsen.
  • PR #90304 feat(memory): support qmd query rerank toggle. Related #61834. Thanks @osolmaz and @kouka-t0yohei.
  • PR #90532 Fix main CI guard drift. Thanks @RomneyDa.
  • PR #90534 fix(mattermost): anchor slash state on globalThis (#68113). Thanks @Takhoffman and @ly85206559 and @infoanton.
  • PR #89502 feat(googlechat): add native approval cards. Thanks @kevinslin.
  • PR #90317 Add Codex multi-agent config migration coverage. Thanks @ooiuuii.
  • PR #90319 Add Codex session route migration coverage. Thanks @ooiuuii.
  • PR #90132 fix(qqbot): sanitize outbound text to strip reasoning/thinking content. Related #89913. Thanks @openperf and @Takhoffman and @dygg2001.
  • PR #89874 fix(agents): detect unsigned thinking-only stall when reasoning payload inflates payloadCount. Related #89787. Thanks @openperf and @Takhoffman and @ArthurusDent.
  • PR #90594 fix(android): align provider readiness with available models. Thanks @Tosko4.
  • PR #90576 fix(sessions): reconcile stale terminal main transcripts. Related #60542. Thanks @ferminquant and @kAIborg24.
  • PR #90405 Fix ClickClack toolsAllow reply dispatch. Thanks @mmaps.
  • PR #90415 feat(matrix): handle voice preflight and threads. Related #78016. Thanks @frankdierolf.
  • PR #90208 fix(cron): auto-migrate legacy cron store. Related #90072. Thanks @MonkeyLeeT and @jalehman and @wlassalle724.
  • PR #85791 fix(gateway): dedupe probe warnings by gateway identity. Thanks @giodl73-repo.
  • PR #90632 fix(context-engine): forward isHeartbeat to afterTurn (fixes #89302). Thanks @zenglingbiao and @jalehman and @huangxun375-stack.
  • PR #90250 docs: prefer web_fetch in weather skill. Thanks @fuller-stack-dev.
  • PR #85158 feat(parallel): add Parallel as a bundled web_search provider. Thanks @NormallyGaussian.
  • PR #86205 fix(tui): stabilize optimistic user messages across history reloads, runId reassignment, and abort. Thanks @RomneyDa.
  • PR #86483 chore(deps): bump the swift-deps group across 1 directory with 3 updates.
  • PR #90601 chore(deps): bump the actions group across 1 directory with 4 updates.
  • PR #81757 chore(deps): bump github.com/apple/swift-testing from 6.3.1 to 6.3.2 in /apps/swabble in the swift-deps group across 1 directory.
  • PR #86481 chore(deps): bump the android-deps group across 1 directory with 9 updates.
  • PR #74980 build(deps): bump docker/login-action from 3.6.0 to 4.1.0.
  • PR #90717 fix(agents): re-probe single-provider primary during cooldown. Related #90702. Thanks @849261680 and @brtkwr.
  • PR #90609 fix(google): preserve Vertex ADC catalog auth. Related #90506. Thanks @849261680 and @paulogogs.
  • PR #90775 fix: refresh prompt fence after compaction writes. Related #90729. Thanks @jalehman and @johnib.
  • PR #90027 test(codex): pin completion-idle timeout thread reset. Thanks @harjothkhara.
  • PR #89566 fix(telegram): suppress post-final tool error noise. Thanks @keshavbotagent.
  • PR #90607 fix(voice-call): track Twilio streams after connect. Related #81122. Thanks @sahibzada-allahyar and @Takhoffman and @donkeykong91.
  • PR #90728 fix(agents): coerce non-text/image MCP tool-result blocks to text (fixes #90710). Thanks @849261680 and @Takhoffman and @RanSHammer.
  • PR #90697 fix(llm): defer Anthropic stream start event until after message_start. Related #90667. Thanks @openperf and @Takhoffman and @MIHHHMIH.
  • PR #90816 fix(memory): resolve adapter default model in plain status identity check. Related #90413. Thanks @849261680 and @Takhoffman and @colinmac-boop.
  • PR #90815 fix #90668: [Bug]: macOS node mode can silently self-reconnect in a healthy direct gateway session. Thanks @Takhoffman and @zhangguiping-xydt and @vrurg.
  • PR #90793 Fix OpenAI audio auth to use API keys. Thanks @Glucksberg and @sallyom.
  • PR #90790 fix(codex): preserve completed replies after client close. Related #90771. Thanks @brokemac79 and @jalehman.
  • PR #90820 fix(codex): report completion timeout diagnostics. Thanks @kevinslin.
  • PR #90845 fix(imessage): frame rpc stdout on LF only. Related #89830. Thanks @omarshahine and @mmartoccia.
  • PR #90813 fix(uninstall): refuse to remove current working directory during cleanup. Related #90806. Thanks @xydigit-sj and @sallyom and @brandondube.
  • PR #90336 fix(memory): fail fast when embeddings provider is unavailable. Related #89691. Thanks @osolmaz and @joeykrug.
  • PR #90914 fix(talk): resolve realtime provider secret refs. Thanks @ngutman.
  • PR #88771 fix(agents): stream phased text deltas incrementally. Thanks @vincentkoc.
  • PR #87856 fix(agents): count streamed model deltas incrementally. Thanks @vincentkoc.
  • PR #88882 test(gateway): add small model live profile. Thanks @vincentkoc.
  • PR #90919 [codex] Add iOS Apple Review demo mode. Thanks @ngutman.
  • PR #90954 fix(cron): require HTTP context for server_error retry classification. Related #90947. Thanks @Nas01010101.
  • PR #90854 fix(build): copy export-html assets to dist/export-html matching runtime path (fixes #90843). Thanks @zenglingbiao and @Tank-x3.
  • PR #90922 docs: improve plugin inventory layout. Thanks @joshp123.
  • PR #89652 fix(plugins): load owning plugin for configured memory embedding provider at startup. Related #89651. Thanks @joeykrug.
  • PR #90811 fix(agents): stabilize user-turn serialization across turns to preserve prompt cache. Related #90810. Thanks @Marvinthebored and @jalehman.
  • PR #90853 fix(imessage): send TTS audio as voice messages. Thanks @omarshahine.
  • PR #90995 fix(release): use monthly patch versions. Thanks @vincentkoc.
  • PR #91030 fix: store device-pair notify state in sqlite.
  • PR #91034 fix: store acpx process state in sqlite.
  • PR #90849 feat(parallel): add free Parallel Search MCP as the zero-config default web_search provider. Thanks @NormallyGaussian.
  • PR #91056 fix: store memory-core dreams state in sqlite.
  • PR #89918 fix(vertex): route eu/us multi-region to .rep.googleapis.com host. Related #89891. Thanks @alkor2000 and @Wimcomander.
  • PR #91058 fix(gemini): accept empty grounding metadata. Related #88528. Thanks @TarsTriggerBot.
  • PR #91072 refactor(memory-wiki): store source sync state in sqlite.
  • PR #91073 fix(openrouter): reconcile streamed generation cost. Related #68066. Thanks @chrispatil.
  • PR #91032 docs(imessage): require DisableLibraryValidation on modern macOS; document macOS 26 injection gates. Thanks @omarshahine.
  • PR #87933 fix(agents): suppress DeepSeek thinking for Foundry aliases. Related #90520. Thanks @MukundaKatta and @wlassalle724.
  • PR #91037 fix(config): allow thinkingLevelMap in persisted model schema. Related #91011. Thanks @wsyjh8 and @chrisreddington.
  • PR #89832 fix(config): allow requiresReasoningContentOnAssistantMessages in ModelCompatSchema. Related #89660. Thanks @KrasimirKralev and @kyKKK.
  • PR #91088 refactor(matrix): store sync cache in sqlite.
  • PR #90138 fix(minimax): exempt M3 from thinking-disabled wrapper. Thanks @IamVNIE.
  • PR #91053 refactor: store Zalo hosted media in plugin state.
  • PR #91098 fix(test): type overflow resolver mock. Thanks @RomneyDa.
  • PR #81277 fix(google): handle compressed Vertex ADC token refresh responses. Thanks @liaoandi.
  • PR #91100 refactor(matrix): store crypto sidecars in sqlite.
  • PR #90260 fix(agents): decode xai and venice tool-call arguments exactly once. Thanks @yetval.
  • PR #90593 fix: preserve LM Studio Responses tool arguments. Related #90585. Thanks @849261680 and @ceo-nada.
  • PR #89109 fix(agents): block message-tool spam loops defeated by volatile message ids. Related #89090. Thanks @openperf and @wujiaming88.
  • PR #90429 Fix LM Studio wizard prompter binding. Thanks @christineyan4.
  • PR #90780 perf(qqbot): narrow tool discovery cold load. Thanks @RomneyDa.
  • PR #90504 fix(codex): preserve post-tool reasoning liveness. Thanks @fuller-stack-dev.
  • PR #91113 fix: align Xiaomi completions replay compat. Related #91106. Thanks @KrasimirKralev.
  • PR #91108 refactor(memory-wiki): store import runs in sqlite.
  • PR #91118 fix: preserve Foundry Responses reasoning replay ids. Related #91033. Thanks @chrisreddington.
  • PR #91125 fix: strip Google provider prefix from Gemini paths. Related #71932. Thanks @soumoucookie.
  • PR #90056 fix(doctor): merge disjoint openai-codex model entries into canonical openai provider. Related #90047. Thanks @openperf and @holgergruenhagen.
  • PR #91127 refactor: store sandbox registry in sqlite.
  • PR #91131 fix: migrate legacy agent registry schema via doctor.
  • PR #91119 fix(outbound): keep Discord runtime adapters resolvable. Related #90162. Thanks @TurboTheTurtle and @thewilloftheshadow and @hoyanhan.
  • PR #91128 fix(qqbot): migrate group tool policy config.
  • PR #91133 refactor(plugin-sdk): persist dedupe state in sqlite.
  • PR #90612 fix(agents): dispatch subagent spawn in process. Thanks @lanzhi-lee.
  • PR #87323 fix(infra/agents): session-routing guard for coalesced gateway restart continuations (#86742). Thanks @openperf and @songshikang0111.
  • PR #91101 fix(inbound-meta): apply head+tail body truncation to ReplyChain and ReplyToBody JSON paths (fixes #91042). Thanks @zenglingbiao and @wangwllu.
  • PR #91201 feat(ios): clarify talk realtime fallback. Thanks @ngutman.
  • PR #91233 fix(agents): prevent ReDoS in background-session name derivation. Thanks @Takhoffman and @yetval.
  • PR #90798 fix(agents): materialize sandbox skills for rw sandboxes. Related #90410. Thanks @brokemac79 and @gbb-netizen.
  • PR #91248 fix: preserve live Ollama catalog metadata. Related #90315. Thanks @civiltox.
  • PR #91041 fix(imessage): self-explaining private-API failures and dedicated send timeout. Thanks @omarshahine.
  • PR #90029 feat: add live provider model catalog helper. Thanks @fuller-stack-dev.
  • PR #90752 feat(android): add theme mode selection. Thanks @Tosko4 and @joshavant.
  • PR #90261 fix: gate owner-only HTTP tools. Thanks @pgondhi987 and @joshavant.
  • PR #90022 fix(codex): quarantine unreadable dynamic tools. Thanks @vincentkoc.
  • PR #88822 fix(agents): compact lean local tool catalogs. Thanks @vincentkoc.
  • PR #89350 fix(agents): guard prompt cache tool names. Thanks @vincentkoc.
  • PR #91241 fix(outbound): preserve retries for budget-deferred deliveries. Thanks @849261680 and @Takhoffman.
  • PR #91124 fix(agents): do not refresh lastUsedAt on MCP lease release. Related #91075. Thanks @openperf and @Takhoffman and @Atlas-crete.
  • PR #90858 fix(imessage): gate split-send coalescing on imsg metadata. Thanks @omarshahine.
  • PR #91235 fix(codex): preserve native subagent completion results. Related #91120. Thanks @849261680 and @Takhoffman and @jinon86.
  • PR #91230 fix(cron): preserve isolated agent turn payload message. Related #91228. Thanks @849261680 and @Takhoffman and @AgentXaGent.
  • PR #90480 feat(whatsapp): expand live QA coverage. Thanks @mcaxtr.
  • PR #89712 feat(cron): support command jobs. Thanks @mbelinky.
  • PR #90937 fix(gateway): preserve stale channel restart diagnostics. Related #90901. Thanks @snowzlm and @Takhoffman and @Tony-ooo.
  • PR #91231 fix(anthropic): drop reasoning_content replay signatures. Related #91205. Thanks @849261680 and @Takhoffman and @bobgitmcgrath.
  • PR #90897 fix #90452: Regression: Heartbeat exec completion still shows generic fallback text instead of actual output. Thanks @mushuiyu886 and @Takhoffman and @bizzle12368239.
  • PR #91322 refactor: move session metadata to SQLite.
  • PR #91529 Fix transcript image redaction. Related #90760. Thanks @joshavant and @devinkuhn.
  • PR #91551 Fix config.patch explicit array replacement. Thanks @joshavant.
  • PR #85823 fix(whatsapp): route captured replies through successor controller after restart. Thanks @itsuzef and @mcaxtr.
  • PR #89659 fix(feishu): retry on send rate-limit errors (230020/230006). Related #70879. Thanks @ladygege and @marshallm-create and @sliverp and @AxelHu.
  • PR #91547 Fix Docker store seed target packages. Related #91035. Thanks @sallyom and @laurenceputra.
  • PR #91423 feat(qqbot): add /bot-group-allways command to toggle mention requirement. Thanks @cxyhhhhh.

Release verification