v2026.5.31-beta.3
Published: 2026-05-31
Changes
- **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.
- 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.
- 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.
- **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.