v2026.5.31-beta.1

pre-release

openclaw 2026.5.31-beta.1

May 31, 2026 · 27d ago
GitHub →

2026.5.31

Highlights

  • Faster Control UI chat: transcript rendering, draft persistence, pending-send paint, scrolling, and first-message work no longer block one another while a conversation is active. (#88952, #88960, #88998) Thanks @vincentkoc.
  • More reliable agent recovery: fallback auth state, legacy Codex app-server auth, stale bootstrap history, and streamed reasoning cleanup recover cleanly instead of carrying stale turn state forward. (#87484, #88924) Thanks @neeravmakwana, @vincentkoc, @bgmbgm94, and @kdonthar.
  • Clearer cron and channel history: external sessions_send routes, single-job history, and channel reply state retain the right destination and job context through restarts. (#88294, #88803) Thanks @kip-claw, @MonkeyLeeT, @vincentkoc, and @Lvan185.
  • Better operator coordination: core session goals and durable plugin-install state make long-running work easier to inspect and resume after reloads. (#87469, #88794) Thanks @vincentkoc.
  • Safer mobile reconnects: iOS realtime sessions retain their WebSocket continuation instead of failing a healthy Talk connection, with hosted push/realtime paths kept aligned. (#88231) Thanks @ngutman and @vincentkoc.

Changes

  • Workboard task details, Android notification app selection, and Dreaming candidate scoring gained broader operator controls.
  • Control UI now streams stable Markdown blocks and records more chat responsiveness signals to guide first-reply performance work. Thanks @vincentkoc.

Fixes

  • Chat/UI: keep first Control UI sends responsive, retain pending sends while history catches up, cache transcript renders, and avoid draft persistence or navigation churn from blocking the active conversation. (#88952, #88960, #88998) Thanks @vincentkoc.
  • Agents/Codex/auth: repair automatic fallback state, accept supported legacy Codex app-server auth, remove stale bootstrap history, strip streamed reasoning tags, and validate shell snapshots against trusted environment data. (#87484, #88924) Thanks @RomneyDa, @neeravmakwana, @vincentkoc, @bgmbgm94, and @kdonthar.
  • Cron/channels: preserve external sessions_send routes, include the job name in single-job history, keep Mattermost attachments on the upload path, and bound Telegram/installer/Parallels proof cleanup. (#88294, #88803) Thanks @kip-claw, @MonkeyLeeT, @vincentkoc, and @Lvan185.

Complete contribution record

This audited record covers the complete v2026.5.28..v2026.5.31-beta.4 history: 402 merged PRs. The generation manifest also supplies direct commits as editorial input; the grouped notes above prioritize user impact.

Pull requests

  • PR #87469 feat: add core session goals.
  • PR #88129 fix: keep live OpenClaw session locks during cleanup.
  • PR #88133 Fix heartbeat default run timeout. Related #87438. Thanks @ovrsr.
  • PR #88132 fix: move compaction planning off the event loop. Related #86358. Thanks @Mithril1991.
  • PR #88137 fix ci mainline checks. Thanks @RomneyDa.
  • PR #88140 perf: centralize skills indexing and visibility. Thanks @shakkernerd.
  • PR #82326 Add plugin manifest contract for SecretRef provider integrations. Thanks @sallyom and @joshavant.
  • PR #88141 fix: route generated media completions through requester agent.
  • PR #87770 refactor: share native approval route gates. Thanks @kevinslin.
  • PR #88156 Refactor SQLite state base and plugin migration.
  • PR #87781 fix(codex): prevent false completion stalls during native streams. Thanks @keshavbotagent.
  • PR #88136 fix(agents): centralize terminal run outcome precedence. Related #87444. Thanks @ssdatye.
  • PR #88155 test(infra): avoid max fake-timer jumps. Thanks @RomneyDa.
  • PR #88160 test(unit-fast): isolate fake-timer files. Thanks @RomneyDa.
  • PR #84535 fix(gateway): resolve message actions against runtime config. Related #84530. Thanks @funmerlin and @joshavant.
  • PR #88107 feat: only include the current changelog section in tarball. Thanks @RomneyDa.
  • PR #88130 fix(agents): preserve Codex auth for compaction fallback. Related #86820. Thanks @kopl-blip.
  • PR #84814 fix(agents): classify embedded provider business denials for fallback. Related #48680. Thanks @Takhoffman and @yu-xin-c and @lovensky1992-wk.
  • PR #88178 feat(workboard): add orchestration primitives.
  • PR #88162 fix(agents): extend terminal outcome projections.
  • PR #88182 Fix subagent DM completion delivery after yield. Related #88042. Thanks @joshavant and @ksiyuna-claw.
  • PR #88191 Fix Codex raw image generation media projection. Related #87948. Thanks @joshavant and @mazetsoligarh-cell.
  • PR #88134 fix(imessage): preserve SMS approval reply routes. Thanks @kevinslin.
  • PR #88161 Fix restart sentinel internal continuations. Related #87792. Thanks @joshavant and @chrispydizzle.
  • PR #88199 ci: extend platform checkout fetch timeout. Thanks @RomneyDa.
  • PR #87796 feat(ci): autoscrub dependency lockfile-only PR changes. Thanks @RomneyDa.
  • PR #88200 Refactor task state onto shared SQLite.
  • PR #88083 fix(agent): preserve media task success on delivery miss. Thanks @obviyus.
  • PR #88127 perf(test): fix explicit-file Vitest wrapper hangs. Thanks @RomneyDa.
  • PR #88183 fix(whatsapp): retry QR login 408 timeouts. Thanks @mcaxtr.
  • PR #84234 fix(cli-runner): write-side flush gate + orphan-tool-use invalidator. Thanks @adele-with-a-b.
  • PR #88231 fix(ios): guard websocket ping continuation. Thanks @ngutman.
  • PR #88117 refactor: extract LLM core packages.
  • PR #88248 fix: show chat errors as visible messages.
  • PR #88250 refactor(agents): type media completion delivery misses.
  • PR #88207 Fix Codex native thread overflow rotation. Thanks @fuller-stack-dev.
  • PR #88109 refactor: extract media generation core package.
  • PR #88247 feat: add hosted model providers.
  • PR #88259 feat(workboard): add board ops recovery metadata.
  • PR #87788 fix(codex): move skills list and memory pointer to collaboration instructions. Thanks @lastguru-net.
  • PR #88262 fix(codex): stop injecting mirrored history into prompts.
  • PR #88177 fix(codex): prevent post-tool edit stream timeouts. Thanks @keshavbotagent.
  • PR #88265 refactor: extract markdown core package.
  • PR #88279 refactor: move terminal core into package.
  • PR #86179 feat:Add Xiaomi Token Plan provider support. Related #86169. Thanks @NianJiuZst and @openclaws420.
  • PR #88211 fix(plugins): resolve ${ENV_VAR} references in plugin config before handoff. Related #88195. Thanks @Marvinthebored and @Peetiegonzalez.
  • PR #88284 fix(agents): harden autoreview Windows harness. Thanks @vincentkoc.
  • PR #88260 Persist subagent registry in SQLite.
  • PR #88217 refactor: unify OpenAI provider identity.
  • PR #88297 refactor: extract media understanding common package.
  • PR #88299 fix(gateway): recover channels after reload stop timeout. Thanks @obviyus.
  • PR #88326 perf(cli): reduce room-event Claude cache churn. Thanks @obviyus.
  • PR #88310 fix(test): include workflow lint target in routing expectation. Thanks @vincentkoc.
  • PR #88225 fix(ui): stop pulsing completed stream segments. Thanks @scotthuang.
  • PR #88298 fix: classify ws pre-handshake close as benign. Related #88257. Thanks @akrimm702 and @survivor998.
  • PR #88338 feat(workboard): persist orchestration metadata in sqlite.
  • PR #88266 refactor: extract model catalog core package.
  • PR #88235 feat(ios): refresh app store metadata. Thanks @ngutman.
  • PR #85258 fix(qqbot): deliver partial tool progress. Related #66509. Thanks @samzong and @vincentkoc and @gabrielduartesignart.
  • PR #88349 Add per-agent SQLite cache store.
  • PR #88135 fix(codex): refresh stale managed runtime plugin. Related #87650. Thanks @brokemac79 and @thoth-ctl.
  • PR #68844 fix(outbound): pack newline-mode paragraphs up to limit. Thanks @kesslerio.
  • PR #88236 fix(plugins): ignore helper files in extension roots. Related #88198. Thanks @mushuiyu886 and @mmhzlrj.
  • PR #86089 [Fix] Deliver restart recovery replies. Related #69249. Thanks @samzong and @slideshow-dingo.
  • PR #88375 refactor: route model catalog imports to core package.
  • PR #85511 feat(ui): add collapsible toggle for recent sessions in sidebar. Related #85510. Thanks @NianJiuZst.
  • PR #80560 fix(tui): distinguish /new and /reset command descriptions. Related #49517. Thanks @KhanCold and @KaysonYeh.
  • PR #88229 fix(agents): normalize sessions_send message aliases. Related #88146. Thanks @zhangguiping-xydt and @jsonmez.
  • PR #88387 refactor(matrix): move ephemeral state to plugin sqlite.
  • PR #86755 test(tasks): cover task domain view mappers. Thanks @leno23.
  • PR #76355 fix(install): show progress during npm install in non-interactive mode. Related #82305. Thanks @SebTardif.
  • PR #77279 fix(media): dedupe identical path/url in inbound media-note formatter (#47587). Thanks @MoerAI and @yzjJosh.
  • PR #82824 fix(gateway): explain ignored config-triggered restart when restart command is disabled. Thanks @wAngByg.
  • PR #85979 fix(discord): omit undefined component registry fields [AI]. Thanks @funmerlin.
  • PR #76091 Fix Discord reply typing lifecycle. Thanks @zhuisDEV.
  • PR #88232 fix(models): prefer exact configured provider refs before aliases. Related #88218. Thanks @stevenepalmer and @herculeanfit1.
  • PR #88276 fix(feishu): stream plain replies as cards. Thanks @qiangu.
  • PR #80037 Expose resolved subagent model metadata. Thanks @guanbear.
  • PR #78288 Agents/exec: show target node name in exec tool transparency messages. Related #77719. Thanks @JiataiWang and @civiltox.
  • PR #88408 feat: expand workboard orchestration metadata.
  • PR #87920 feat(gateway): forward OpenAI stop sequences through chat completions. Thanks @Lellansin.
  • PR #87886 fix(skill-creator): sort files for deterministic .skill package order. Related #37748. Thanks @coder999999999 and @shuofengzhang.
  • PR #88399 Improve MCP operability.
  • PR #88398 refactor: move model catalog refs into core package.
  • PR #88328 feat: add Skill Workshop and skill research. Thanks @shakkernerd.
  • PR #88271 fix(export-html): guard msg.content and result.content filter/iteration paths against non-array values. Related #88255. Thanks @Alix-007 and @survivor998.
  • PR #88429 ci: keep harness changes on fast checks.
  • PR #88430 fix(scripts): quiet minimal runtime asset copies. Thanks @vincentkoc.
  • PR #88321 fix(codex): keep app-server continuation turns alive. Related #88196, #88331. Thanks @abnershang and @aounakram.
  • PR #88435 refactor: move model catalog normalization into core package.
  • PR #88226 fix(llm): repair \u escapes that lack four hex digits in streaming JSON. Thanks @coder999999999.
  • PR #88380 fix(ui): keep chat model selected after session switch. Related #86597. Thanks @brokemac79 and @xuli500177.
  • PR #88285 Move cron persistence to SQLite.
  • PR #87915 fix(build): avoid stale agent-core dts warnings. Thanks @keshavbotagent.
  • PR #68669 fix(agents): dedupe subagent browser session cleanup wrapper with dispatch flag. Related #68668. Thanks @Feelw00.
  • PR #88411 refactor(msteams): persist conversation and poll stores in sqlite.
  • PR #88303 Skip browser cleanup when browser is disabled. Thanks @poison.
  • PR #88416 Refactor subagent thread binding into core.
  • PR #83956 feat(cli): add sessions tail progress view. Related #83441. Thanks @spacegeologist and @ndj888.
  • PR #71648 fix(mcp): bound pendingClaudePermissions / pendingApprovals via TTL sweeper + close clear. Related #71646. Thanks @Feelw00.
  • PR #88346 refactor: extract web content core package.
  • PR #71280 test(gateway): avoid brittle shutdown timer assertion. Thanks @hansolo949.
  • PR #80686 fix(agents): extend session-write-lock payload-less orphan grace from 5s to 30s. Thanks @wAngByg.
  • PR #88067 fix(responses): drop orphaned assistant msg_* id when reasoning is dropped (#88019). Thanks @BSG2000.
  • PR #88417 [codex] Route denied exec approval followups to sessions. Related #88167. Thanks @brokemac79 and @jhartman00.
  • PR #85996 fix #85782: surface terminal TUI lifecycle errors. Thanks @zhangguiping-xydt and @vincentkoc and @shakkernerd.
  • PR #88445 refactor: source model catalog types from core.
  • PR #88444 Classify release dependency ownership metadata.
  • PR #82415 Fix /acp spawn cwd inheritance for target agent workspaces. Thanks @summerview1997.
  • PR #88448 refactor: simplify sqlite cron persistence.
  • PR #88268 fix #88214: [Feature]: Dashboard sidebar Recent sessions should filter by currently selected agent. Thanks @zhangguiping-xydt and @wujitianya.
  • PR #86642 feat: pass structured provider error signals to hooks. Thanks @fuller-stack-dev.
  • PR #63840 fix(slack): preserve thread context for Agents & Assistants DM root messages. Related #63659. Thanks @zozo123 and @dev-ithitchhiker.
  • PR #86924 fix: scrub serialized tool-call text from replies. Thanks @fuller-stack-dev.
  • PR #87093 fix: promote serialized tool calls via repair package. Thanks @fuller-stack-dev.
  • PR #88452 chore(release): update appcast for 2026.5.28.
  • PR #88043 feat: add internal code mode namespaces.
  • PR #78748 fix(ui): add agent selector to dreaming tab. Related #63558. Thanks @stevenepalmer and @ttomiczek.
  • PR #88455 Refactor cron migrations under doctor.
  • PR #87929 fix(cron): preserve plugin delivery targets. Related #87905. Thanks @TurboTheTurtle and @xmoxmo.
  • PR #87390 fix(ci): ignore fenced headings in proof parser. Thanks @MonkeyLeeT.
  • PR #85248 fix(gateway): strip spurious tool call blocks when provider signals stop. Related #85161. Thanks @Jerry-Xin and @syncword.
  • PR #83660 fix(browser): allow upload from inbound media directory. Related #83544. Thanks @spacegeologist and @scorpiord.
  • PR #88467 feat: improve MCP operator workflows.
  • PR #84247 Refactor browser screenshot vision through shared media understanding. Thanks @scotthuang.
  • PR #88464 Move Workboard to relational SQLite.
  • PR #88451 refactor: unify OpenAI provider identity.
  • PR #88459 refactor: extract normalization core package.
  • PR #84670 [codex] fix webchat full-message reader for truncated history. Related #84651. Thanks @NianJiuZst and @100yenadmin.
  • PR #88462 fix(heartbeat): advance stale scheduler deferrals. Related #79380. Thanks @jorgemarmor.
  • PR #88461 refactor(cron): split service timer helpers.
  • PR #88427 fix(auth): bound inherited oauth expiry.
  • PR #88458 fix: clarify generated media reply prompts.
  • PR #88421 [codex] Fix Telegram DM topic session routing. Related #80212. Thanks @brokemac79 and @SergeyKerj.
  • PR #88113 fix(commands): make /skill load workspace skills. Related #88056. Thanks @MonkeyLeeT and @shakkernerd.
  • PR #85904 fix(slack): keep DM thread turns out of active steering. Thanks @guanbear.
  • PR #88395 build(OpenClawKit): make ElevenLabsKit (talk/TTS) an optional package trait. Thanks @mochiexists and @atlascodesai.
  • PR #88469 refactor(telegram): persist plugin state in sqlite.
  • PR #88406 Fix iMessage startup watch replay. Thanks @obviyus.
  • PR #87179 fix(discord): deliver same-session channel replies. Related #87157. Thanks @stevenepalmer and @neo-jacked-in.
  • PR #88115 docs: remove divider comments.
  • PR #88319 fix(agents): skip below-target CLI compaction failures. Thanks @frankekn.
  • PR #88552 Remove channel test isolation hack.
  • PR #86176 Fix Telegram media message edits. Related #86161. Thanks @TurboTheTurtle and @crowneglobal.
  • PR #88476 feat: add Twilio SMS channel.
  • PR #83992 fix(webchat): preserve refresh-visible history and composer state. Related #83344. Thanks @spacegeologist and @zachisfine.
  • PR #88496 fix(auto-reply): redact secrets in config show output. Related #65623. Thanks @jason-allen-oneal and @coygeek.
  • PR #88536 feat: improve MCP operator controls.
  • PR #84290 Doctor: expose UI freshness health findings. Thanks @giodl73-repo.
  • PR #88539 refactor(telegram): keep topic thread mapping plugin-local.
  • PR #80391 fix(scripts): timeout crabbox wrapper sanity checks. Thanks @ejames-dev.
  • PR #85990 Prefer Talk source-reply final text. Related #85275. Thanks @TurboTheTurtle and @BsnizND.
  • PR #65914 fix(memory): respect qmd status timeout and skip checkpoint exports. Thanks @shawnduggan.
  • PR #88555 feat(workboard): add worker dispatch CLI.
  • PR #88018 fix(infra): guard against overwriting corrupt target session store during migration. Related #88017. Thanks @Feelw00.
  • PR #88185 fix(cron): accept sub-second --at datetimes resolved in a timezone. Thanks @coder999999999.
  • PR #88378 fix(xiaomi): support MiMo voicedesign TTS. Thanks @GimingRao.
  • PR #70864 feat: add scoped mention pattern policy. Thanks @patrick-slimelab.
  • PR #87998 fix(agents): route per-turn media task hints below the cache boundary. Related #85203. Thanks @nxmxbbd and @AV500group.
  • PR #75181 test(plugins): cover Link agent wallet bundle shape. Thanks @stainlu.
  • PR #88347 fix(agents): strip malformed arg-value suffixes. Related #48780. Thanks @vincentkoc and @koden588-blip.
  • PR #88578 docs: document scoped mention patterns.
  • PR #81808 chore(lint): enable object-shorthand. Thanks @tanshanshan.
  • PR #70789 fix(ui): fix tool result pairing for sequential same-name tool calls. Related #70746. Thanks @chinar-amrutkar and @tarvis0523.
  • PR #88011 fix(logging): align diagnostic recovery in-flight dedup keys. Related #88010. Thanks @Feelw00.
  • PR #88574 Fix silent internal aborts after tool-use turns. Thanks @obviyus.
  • PR #82219 fix(codex): accept first-party OpenAI plugin marketplaces (bundled and primary-runtime). Related #82216. Thanks @yaanfpv.
  • PR #83719 feat(dreaming): add report-only shadow trial runner. Thanks @iFiras-Max1.
  • PR #87772 fix(reply): deliver plugin binding replies. Related #87721. Thanks @MonkeyLeeT and @wingleungron.
  • PR #74493 fix(cli): identity-only auth-epoch hashing for token credentials (#74312). Thanks @stainlu and @aderius.
  • PR #88534 refactor: extract media and ACP core packages.
  • PR #79447 fix(model-auth): resolve per-entry apiKey profile ID references. Related #67423. Thanks @kinjitakabe and @presidenzo.
  • PR #88577 fix(sms): diagnose Twilio webhook setup.
  • PR #84628 [AI-assisted] fix(plugins): scope startup metadata manifest reads. Related #70533. Thanks @IWhatsskill and @jpippo364.
  • PR #88582 Refactor cron SQLite runtime paths.
  • PR #88595 perf: speed up chat hydration and add 3D workboard.
  • PR #75005 fix(media): allow explicit synthetic auth for media providers. Related #74644. Thanks @sqsge and @mozi1924.
  • PR #75128 fix(boot): wrap BOOT.md in internal-runtime-context, strip from message-tool args (#53732). Thanks @stainlu and @alvaro630.
  • PR #88599 fix(memory): retry transient embedding failures. Related #44166, #71784. Thanks @MrGeDiao and @kevinheinrichs.
  • PR #88466 fix(gateway): guide dashboard auth after service repair. Related #88290. Thanks @sallyom and @drarturryzhov-boop.
  • PR #88463 fix(ui): keep transient chat errors out of page headers. Thanks @sallyom.
  • PR #88474 [AI-assisted] fix(gateway): avoid restarts for auth cooldown reloads. Related #88443. Thanks @IWhatsskill and @MrMaturin.
  • PR #88603 fix(media): use typed auth for no-auth media providers. Related #74644. Thanks @mozi1924.
  • PR #88605 refactor: make OpenAI Codex legacy doctor-only.
  • PR #88440 Retry stale CLI sessions inside runner lifecycle. Related #77089. Thanks @brokemac79 and @clawdbotv2.
  • PR #88393 fix(browser): document stable tab references. Thanks @FMLS and @hxy91819.
  • PR #88340 fix(agents): classify expired thinking signatures. Related #88020. Thanks @Takhoffman and @BryanTegomoh and @bryanbaer.
  • PR #88607 fix(devices): refresh paired device last-seen metadata. Related #81169. Thanks @vyctorbrzezowski and @deminson.
  • PR #88613 fix: queue subagent completion handoffs.
  • PR #88609 refactor: move plugin state stores to SQLite.
  • PR #79363 fix(exec): allow known safe shell builtins in allowlist mode. Related #46056. Thanks @kinjitakabe and @aukei.
  • PR #88617 fix(agents): preserve reasoning replay from model metadata. Related #88068. Thanks @syncword.
  • PR #77953 fix(auto-reply): honor per-model thinking params. Thanks @tynamite.
  • PR #88626 refactor(openai): confine legacy codex repair to doctor.
  • PR #87887 fix(hooks): isolate slug-generator failures from shared auth profile (#71709). Thanks @openperf and @nikolaykazakovvs-ux.
  • PR #88281 fix(tasks): reclaim ACP zombie runs blocking gateway restart. Related #88205. Thanks @openperf and @subaochen.
  • PR #88619 refactor: unify subagent handoffs into agent steering queue.
  • PR #88004 fix(tui): skip history reload when final event has displayable output. Related #87922. Thanks @SebTardif and @darconadalabarga.
  • PR #87962 fix(webchat): suppress stale active session row racing a completed turn (#87875). Thanks @MukundaKatta and @TunMax.
  • PR #88050 fix(tui): use middle truncation for paths and commands in tool display. Related #87936. Thanks @SebTardif and @Joel-Claw.
  • PR #86463 fix(auto-reply): warn on substantive private message-tool finals. Thanks @yaoyi1222.
  • PR #88554 docs: clarify Android token comments.
  • PR #87959 fix(tui): preserve pending local runs during session sync. Thanks @nao860226-rgb and @vincentkoc.
  • PR #82224 feat(codex): add portable Codex command pickers. Thanks @yaanfpv.
  • PR #88637 chore: bump OpenClaw version to 2026.5.31.
  • PR #88587 fix(agents): normalize prefixed Anthropic fallback model ids (#88560). Thanks @TurboTheTurtle and @cjalden.
  • PR #88351 fix(doctor): diagnose malformed provider catalogs. Thanks @vincentkoc.
  • PR #88618 refactor: expand acp core package.
  • PR #87538 fix(agents): model-scope cooldown for transport timeout (#87462). Thanks @openperf and @fenglanhua.
  • PR #88623 fix(agents): release session lock on manual abort. Related #88600. Thanks @williammu.
  • PR #88588 fix(agents): avoid synthetic tool results during parallel races (#88168). Thanks @TurboTheTurtle and @jhartman00.
  • PR #88636 feat: add MCP code-mode namespace.
  • PR #88558 fix(gateway): enforce OpenAI tool_choice required/function contracts. Thanks @Lellansin.
  • PR #88628 fix: scope plugin tools and async media starts.
  • PR #84007 fix(agents): inherit subagent thinking defaults. Related #55790. Thanks @stevenepalmer and @vrurg.
  • PR #81795 Fix Control UI agent thinking defaults. Related #81760. Thanks @jbetala7 and @caiming0331.
  • PR #74418 fix(agents): recognize params.thinking=false and "disabled"/"none" as thinking=off. Related #74374. Thanks @yelog and @simmssun-hashh.
  • PR #88583 fix(gateway): reject pre-reset run lifecycle events from clobbering the rotated session row. Related #88538. Thanks @openperf and @tianxiaochannel-oss88.
  • PR #88612 fix(models): keep auth login out of main config. Related #88565. Thanks @corleonexie-maker.
  • PR #88655 fix(gateway): reject stale lifecycle session updates. Related #88538. Thanks @tianxiaochannel-oss88.
  • PR #88658 fix(agents): report stale session locks without cleanup.
  • PR #88661 ci: stabilize Testbox changed checks.
  • PR #88641 feat: add exec shell snapshot cache.
  • PR #84232 fix(messages): use best-effort for implicit tool-only source replies. Related #84078. Thanks @tianxiaochannel-oss88.
  • PR #88381 fix(agents): preserve runtime tools in lean mode. Thanks @vincentkoc.
  • PR #88527 fix(discord): ping mention-bearing final replies under live preview (#88360). Thanks @openperf and @hughbeyond.
  • PR #88659 refactor: clean up ACP package metadata and helpers.
  • PR #88652 fix(codex): restore bounded recovery continuity. Related #88352, #88354. Thanks @100yenadmin.
  • PR #82739 fix(macos): prevent duplicate menu bar icons. Thanks @afalk42.
  • PR #87975 fix(slack): avoid forced threads for replyToMode off. Thanks @lawrencetran.
  • PR #86397 fix(discord): PluralKit DM pairing identity + direct peer regex (#86332). Thanks @Sanjays2402.
  • PR #88601 fix(sms): cover native proof follow-ups. Thanks @clawSean.
  • PR #88670 fix(agents): retry transient stale session locks.
  • PR #80996 Fix Google Chat message tool thread replies. Related #80995. Thanks @franco-viotti.
  • PR #88549 fix(memory-core): reclaim orphaned dreaming sessions with surviving transcripts. Related #88322. Thanks @Alix-007 and @TheDenStudios.
  • PR #88557 fix(terminal): clamp wide graphemes in narrow table cells. Related #88556. Thanks @jbetala7.
  • PR #87904 fix: route iMessage DM media through attachment handoff. Related #87597. Thanks @HOYALIM and @omarshahine and @TurboTheTurtle.
  • PR #88547 feat(github-copilot): add Claude Opus 4.8 to default model catalog. Thanks @saju01.
  • PR #88428 fix(discord): route thread bindings to plugin owners. Related #64199. Thanks @SYU8384 and @hoh-dev-bot.
  • PR #85612 fix(slack): keep one draft message in progress mode. Thanks @mycarrysun.
  • PR #88500 fix: release abandoned provider streams. Related #67461. Thanks @samzong and @jakedwyer.
  • PR #85691 fix(doctor): auto-repair stale session snapshot paths on --fix. Related #85689. Thanks @ggzeng.
  • PR #86737 fix(ios): subscribe to per-session transcripts so group chats update in real time (#80231). Thanks @yetval and @jm7v7fgpdy-sketch.
  • PR #88642 fix(whatsapp): suppress spurious typing indicator on silent tool-only runs. Related #450. Thanks @Bluetegu and @thesash.
  • PR #88635 fix(secrets): treat Codex app-server marker as non-secret. Thanks @vortexopenclaw.
  • PR #88525 feat(deepseek): show provider balance in usage status. Thanks @litang9.
  • PR #88563 fix(agents): resolve exact static-catalog models for plugin-harness cold start (#88510). Thanks @yetval and @wlassalle724.
  • PR #87818 fix(ollama): yield during dense stream processing. Thanks @vincentkoc and @udaymanish6.
  • PR #88665 refactor: move delivery queues to SQLite.
  • PR #88676 fix(auto-reply): add memory flush failure tracking with retry exhaustion. Thanks @Jerry-Xin.
  • PR #88672 fix(plugins): reuse current metadata snapshot in provider hot paths. Thanks @masatohoshino.
  • PR #88678 feat: add typed MCP code-mode API.
  • PR #77882 fix(feishu): gate bitable tools by tools config. Thanks @glfruit.
  • PR #59172 fix(cli): extend holiday tagline dates through 2030. Thanks @alkor2000.
  • PR #88252 fix(agents): avoid full stream replay on text deltas. Thanks @vincentkoc.
  • PR #59500 fix: extend CA bundle auto-injection to all 8 Node version managers. Related #59494. Thanks @alkor2000.
  • PR #87855 fix(telegram): handle ENOENT race in spool drain recovery rename. Related #87847. Thanks @SebTardif and @ppanphper.
  • PR #88677 refactor: clean up ACP translator and manager tests.
  • PR #88715 perf(plugins): avoid duplicate provider hook load probes.
  • PR #88675 refactor: move plugin state slices to sqlite.
  • PR #88153 fix(agents): count stream deltas incrementally. Thanks @vincentkoc.
  • PR #87698 fix(gateway): emit subagent_ended hook for api.runtime.subagent.run() (#59164). Thanks @sweetcornna and @Amyssjj.
  • PR #81692 fix(doctor): detect stale gateway service version metadata. Thanks @wAngByg.
  • PR #87549 fix(agents): validate context engine assemble result shape. Related #75541. Thanks @Pluviobyte and @tyyim.
  • PR #88720 refactor: extract ACP translator session updates.
  • PR #85666 fix #85124: skip Anthropic API keys for usage status. Thanks @zhangguiping-xydt and @rqlangley.
  • PR #88722 refactor: make Telegram message cache SQLite-only.
  • PR #88724 fix: persist ACP metadata in SQLite.
  • PR #86917 fix(session-store): rewrite generated transcript paths on rollover. Thanks @Sunjae-k and @sunjae-1.
  • PR #84419 fix(session): prefer real tool result over synthetic error in transcript repair. Thanks @Jerry-Xin.
  • PR #88725 refactor: extract ACP manager runtime handle cache.
  • PR #88721 feat(plugin-sdk): add typed presentation command actions.
  • PR #79658 Allow validated TXT/JSON/YAML media sends. Thanks @simplyclever914.
  • PR #87618 fix(daemon): detect system-scope systemd gateway units on Linux (#87577). Thanks @yetval and @fisherman86-ai.
  • PR #84988 Refresh Node Docker base image digests. Related #84981. Thanks @LibraHo.
  • PR #85931 fix(memory): serialize qmd update writes across processes to stop SQLITE_BUSY. Related #66339. Thanks @openperf and @SakenW.
  • PR #78793 fix(approvals): interpolate request id into "Reply with:" line. Thanks @itsuzef.
  • PR #88730 fix(codex): stream final answer partials. Related #88405. Thanks @crash2kx.
  • PR #80801 fix(auth): force re-login flag, remediation hint, and session-scoped fallback skip cache. Thanks @MertBasar0.
  • PR #88729 refactor: extract ACP runtime handle ensure flow.
  • PR #79040 fix(gateway): guard buildGroupDisplayName behind group/channel chatType. Related #55354. Thanks @sebuh-infsol and @toruvieI.
  • PR #77952 fix(discord): bound REST entity cache to prevent unbounded Map growth. Related #77975. Thanks @fede-kamel.
  • PR #88733 refactor: extract ACP runtime resume state.
  • PR #77924 fix(memory-core): preserve phase signals on read errors. Related #77881. Thanks @bennewell35 and @SimbaKingjoe.
  • PR #88314 fix #76284: [Bug]: openclaw agents add blocked — cannot add Jon/Atlas as separate agents. Thanks @zhangguiping-xydt and @RicardoUKMX.
  • PR #77394 fix(agents): sanitize raw HTTP 401 provider errors in user-visible replies (#56197). Thanks @jeffrey701 and @lokamir.
  • PR #88739 refactor: extract ACP turn runner.
  • PR #77998 fix(skills): clear workspaceVersions entry when skills watcher is disabled. Related #77997. Thanks @fede-kamel.
  • PR #77527 fix(gateway): rate-limit pre-auth bootstrap-token verify to prevent mutex DoS. Related #77978. Thanks @fede-kamel.
  • PR #88744 refactor: extract ACP close session flow.
  • PR #88731 refactor: migrate voice-call call logs through doctor.
  • PR #87522 fix: force preflight compaction before oversized agent turns. Related #87234. Thanks @ArthurNie.
  • PR #75061 fix: preserve workspaces during state-only uninstall. Related #75052. Thanks @Jason-Bai and @XueJourney.
  • PR #79465 Fix ACP command bypass for channel text commands. Thanks @RoeeJ.
  • PR #88747 refactor: extract ACP runtime option commands.
  • PR #74715 fix(ui): show Communication Notifications tab. Thanks @VladyslavLevchuk.
  • PR #88691 feat(gateway): support Tailscale Serve service names. Related #88629. Thanks @charles-openclaw and @resYuto.
  • PR #88749 fix(channels): recover failed progress draft starts. Related #83115. Thanks @SebTardif.
  • PR #88029 fix(agents): atomic auth.json write to prevent credential lockout on crash. Related #88028. Thanks @Feelw00.
  • PR #85277 fix(openai): avoid stale Responses message id replay. Thanks @latensified.
  • PR #79173 fix: skip disabled skill snapshot env overrides. Related #79072. Thanks @zeus1959 and @maverikva.
  • PR #88752 refactor: split ACP manager session flows.
  • PR #79149 fix(ci): guard workflow template injection. Related #68428. Thanks @WT-WSL and @visionik.
  • PR #74089 fix(openai/tts): handle [[tts:speed]] directive in OpenAI speech provider (#12163). Thanks @stainlu and @useramuser.
  • PR #88763 feat: add code-mode MCP API files.
  • PR #87896 fix(feishu): fallback when accepted turns send no visible reply. Thanks @ArthurNie.
  • PR #88761 [codex] Surface disabled Codex plugin routes in doctor lint. Related #88751. Thanks @brokemac79 and @jalehman.
  • PR #88759 fix: repair providerless Codex session overrides. Thanks @earlvanze.
  • PR #88740 fix(hooks): pass media metadata to internal message_received hook. Thanks @SebTardif.
  • PR #88695 fix(agents): wait for cron media completions. Related #88001. Thanks @nailujac.
  • PR #88762 fix(ui): show Workboard comments in edit modal. Thanks @MonkeyLeeT.
  • PR #88765 fix(agents): publish owned announcement session writes. Related #88703. Thanks @TurboTheTurtle and @neo-hu.
  • PR #59196 feat(doctor): add disk space health check for state directory. Thanks @alkor2000.
  • PR #79260 feat(doctor): add --post-upgrade --json mode for plugin-compat findings. Thanks @arniesaha.
  • PR #88486 fix(diagnostics): carry session UUID on interactive dispatch events. Thanks @arniesaha.
  • PR #84904 fix: avoid replaying Responses item ids when store is disabled. Thanks @zhanghang02.
  • PR #82828 fix(daemon): preserve container service env across regen. Thanks @wAngByg.
  • PR #88755 fix(agents): expose session status route context. Related #84544. Thanks @nxmxbbd and @lykeion-dev.
  • PR #88781 fix(models): strip remaining provider self prefixes. Related #88770. Thanks @charles-openclaw and @cjalden.
  • PR #88131 fix(logging): refresh file log hostname per write. Related #87258. Thanks @lonexreb and @mmhzlrj.
  • PR #88667 fix #81214: [Bug]: OpenClaw 2026.5.7 subagent regression. Thanks @zhangguiping-xydt and @GreyWolfRon.
  • PR #88764 fix(update): recognize manual-update launchd jobs. Related #88736. Thanks @TurboTheTurtle and @deonkretch.
  • PR #88727 fix(feishu): preserve long streaming replies. Related #88631. Thanks @MonkeyLeeT and @Leorand-dev.
  • PR #88512 fix: resolve google provider default API to google-generative-ai. Related #88480. Thanks @1052326311 and @Xin and @azgardtek.
  • PR #88756 feat: add Skill Workshop Control UI. Thanks @shakkernerd.
  • PR #88610 fix: suppress raw provider errors in channel delivery. Related #69737. Thanks @jason-allen-oneal and @alexisperumal.
  • PR #88808 perf: hydrate chat history session metadata.
  • PR #88735 fix(agents): harden runtime tool schema quarantine. Thanks @vincentkoc.
  • PR #88221 fix(nostr): decode npub allowFrom entries to hex correctly. Thanks @DocNR and @hypoxicdrive.
  • PR #88772 feat: calm composer controls.
  • PR #88388 fix(agents): guard transport payload sanitizer against non-string input. Related #60113. Thanks @Pluviobyte and @cursoragent and @wujiaming88.
  • PR #88149 fix(agents): cap bootstrap snapshot cache. Thanks @yozakura-ava.
  • PR #88545 fix(memory-core): stop dream diary fallback from leaking raw staging fragments. Related #88391. Thanks @Alix-007 and @Carme99.
  • PR #88289 fix(microsoft-foundry): skip DeepSeek V4 thinking params on Foundry fallback. Thanks @silvesterxm.
  • PR #88209 fix(subagents): roll formatTokenShort over to "m" at 1000k. Thanks @coder999999999.
  • PR #88008 fix(tasks): persist task store before in-memory mutation to prevent sqlite divergence. Related #88007. Thanks @Feelw00.
  • PR #88306 fix(gateway): hide phantom agent store rows from sessions.list. Related #57376. Thanks @Alix-007 and @smarchetti.
  • PR #88760 fix(doctor): report runtime tool schema errors. Thanks @vincentkoc.
  • PR #88495 fix(imessage): tolerate sub-second self-chat reflection skew. Thanks @colmbrogan.
  • PR #88797 Migrate iMessage monitor state to SQLite.
  • PR #87981 fix(cron): retire MCP runtimes on isolated cron timeout and dispose. Related #87821. Thanks @Jerry-Xin and @zachisfine.
  • PR #88410 fix(gateway): harden MCP loopback tool schemas. Thanks @vincentkoc.
  • PR #88100 fix(doctor): quiet tool policy removal audits. Related #87798. Thanks @giodl73-repo and @oalansilva.
  • PR #88804 fix(agents): preserve stop-finished OpenAI tool calls. Related #88791. Thanks @MonkeyLeeT and @kiagentkronos-cell.
  • PR #88802 test(agents): cover nonfatal trajectory flush timeout. Related #88520. Thanks @TurboTheTurtle and @novac42code.
  • PR #88819 fix(workboard): wire task-backed board runs. Thanks @vincentkoc.
  • PR #88608 fix(minimax): use account OAuth device endpoints. Thanks @MatthewSchleder.
  • PR #88794 Persist plugin install index in SQLite.
  • PR #88827 Add Vertex API key model config regression coverage. Related #88816. Thanks @TurboTheTurtle and @randompup.
  • PR #77237 Preserve managed npm plugin root when install validation blocks update. Thanks @zhuisDEV.
  • PR #88288 fix(config): skip state-dir dotenv values that are unresolved shell references. Related #88274. Thanks @Alix-007 and @mathias15010.
  • PR #87848 fix(status): resolve gateway auth secrets for deep audit. Related #87815. Thanks @ai-hpc and @kAIborg24.
  • PR #88807 fix(plugins): isolate web provider factory failures. Thanks @vincentkoc.
  • PR #88518 fix(plugins): isolate cached tool runtime siblings. Thanks @vincentkoc.
  • PR #88851 Persist OpenRouter model cache in SQLite.
  • PR #88485 fix(agents): guard vanished workspaces. Related #88333. Thanks @TurboTheTurtle and @HT-Moh.
  • PR #88825 perf: streamline chat startup metadata.
  • PR #88723 fix(doctor): respect explicit PI runtime policy. Related #88706. Thanks @toruvieI.
  • PR #88365 fix(infra): bridge WSL clipboard through shell. Related #88080. Thanks @vincentkoc and @YaneCheung.
  • PR #88785 fix: restore backgrounded in-flight runs on TUI switch-back via gateway snapshot. Thanks @williamliu-ai.
  • PR #87992 feat(ios): support native iPad display. Thanks @EmpX2025.
  • PR #88846 fix: preserve no-policy native hook fallback. Thanks @woodym-dotcom.
  • PR #81264 fix(installer): align Node version floor with package engine. Thanks @kiranmagic7.
  • PR #87838 test(agents): include Ollama in small live model matrix. Thanks @vincentkoc.
  • PR #88860 feat(minimax): add MiniMax M3 support.
  • PR #88305 fix(browser): isolate Chrome MCP pending attach aborts. Related #88304. Thanks @rohitjavvadi.
  • PR #88814 fix(ci): repair current main checks. Thanks @vincentkoc.
  • PR #88855 fix(microsoft-foundry): satisfy extension lint. Thanks @RomneyDa.
  • PR #88824 test: consolidate plugin registration contracts. Thanks @RomneyDa.
  • PR #88847 test(ui): remove stylesheet grep tests. Thanks @RomneyDa.
  • PR #88704 fix(memory): rehydrate daily list promotions. Related #87854. Thanks @MonkeyLeeT and @KingYiKa.
  • PR #88848 test(agents): use neutral tool schema fixtures. Thanks @vincentkoc.
  • PR #88817 fix(agents): return schema lookup misses in-band. Related #88813. Thanks @ksj3421 and @cjalden.
  • PR #88866 Persist Discord thread bindings in SQLite.
  • PR #88801 fix(hooks): expose inbound reply metadata before dispatch. Related #88521. Thanks @TurboTheTurtle and @hoyanhan.
  • PR #88865 docs: clarify diffs language pack additions. Thanks @RomneyDa.
  • PR #88849 docs: continue inline comment pass.
  • PR #87077 fix(ui): bypass service worker for top-level navigations. Thanks @nayrosk.
  • PR #88394 fix(plugins): fail closed on trusted policy errors. Thanks @vincentkoc.
  • PR #88758 docs(imessage): document SSH wrapper TCC send failure. Related #79289. Thanks @TurboTheTurtle.
  • PR #88859 fix(mattermost): route send attachments through upload. Related #87930. Thanks @vincentkoc and @NewCoffee7477.
  • PR #88830 feat(dreaming): score candidates with shadow trial results. Thanks @iFiras-Max1.
  • PR #88803 fix(reply): preserve sessions_send external routes. Related #88044. Thanks @MonkeyLeeT and @Lvan185.
  • PR #88294 fix(cron): include job name when reading single-job run history. Thanks @kip-claw.
  • PR #88896 fix: harden CLI and plugin edge cases.
  • PR #88767 fix(plugin-sdk): isolate provider catalog projection failures. Thanks @vincentkoc.
  • PR #88892 feat(ui): improve Workboard task details. Thanks @vincentkoc.
  • PR #88806 fix(memory-lancedb): reject envelope metadata sludge (incl. marker-free shapes). Thanks @amittell.
  • PR #88921 fix(ui): keep first control chat sends responsive. Thanks @vincentkoc.
  • PR #87484 fix(agents): clear legacy auto fallback pins. Related #87467. Thanks @neeravmakwana and @bgmbgm94.
  • PR #88904 fix(android): add notification app picker. Thanks @Tosko4.
  • PR #88820 fix(diagnostics): clear embedded-run activity when recovery declares lane idle. Related #88660. Thanks @openperf and @Iman-Sharif.
  • PR #88897 refactor(copilot): compact sessions through SDK state.
  • PR #88924 fix(agents): strip streamed reasoning tags. Related #88741. Thanks @kdonthar.
  • PR #88937 fix(ui): render pending sends in chat thread. Thanks @vincentkoc.
  • PR #88949 fix(ui): scroll pending sends into view. Thanks @vincentkoc.
  • PR #88952 perf(ui): cache chat transcript renders. Thanks @vincentkoc.
  • PR #88960 perf(ui): record pending send paint timing. Thanks @vincentkoc.
  • PR #88972 perf(ui): debounce chat draft persistence. Thanks @vincentkoc.
  • PR #88978 perf(ui): skip closed slash menu rerenders. Thanks @vincentkoc.
  • PR #88982 fix(test): wait for telegram timer flushes. Thanks @vincentkoc.
  • PR #88989 perf(ui): guard chat transcript rerenders. Thanks @vincentkoc.