OpenClaw releases
OpenClaw Changelog & Feature Tracker
A working reference for the Enterprise Crew. Scan what shipped by version, open the upstream release notes, and follow each listed item back to its source when a PR or issue is available.
Latest weekly DX deck
Three releases, one quiet win: the channel that used to die silently now stays alive
This was a plumbing week. Not a feature parade. OpenClaw shipped 2026.6.5, 2026.6.6, and the 2026.6.8 pre-release with the through-line of recovery: safer approvals, reproducible installs, and the session lock leak fixed at the root.
Open 2026-06-14 deck ↗433 changes Open upstream ↗
01 **Richer Telegram delivery ** Telegram now sends rich HTML, preserves rich markdown and sticker paths, renders progress drafts and command output more faithfully, normalizes HTML tables safely, and keeps mentions and spooled handlers on the right delivery path. (#93286, #93164, #93124, #93364, #93130, #93088, #93281, #94891, #94856) Thanks @obviyus, @vincentkoc, @goutamadwant, @kesslerio, @NianJiuZst, @SweetSophia, @Marvinthebored, @aaajiao, @zhangqueping, and @jairrab. ↗ 02 **More dependable agent recovery ** retries, terminal outcomes, usage after compaction, session history repair, and reply reconciliation now keep more interrupted or partial turns moving toward a visible final result. (#92191, #93073, #93228, #93084, #93469, #93291, #90943) Thanks @ai-hpc, @lml2468, @fuller-stack-dev, @Hollychou924, @leno23, @de1tydev, @425072024, @wuwahe3, @drvoss, @yetval, @sandieman2, and @vincentkoc. ↗ 03 **A stronger Codex integration ** Codex gains automatic plugin approvals, GPT-5.3 Spark OAuth routing, remote-node `exec` as a dynamic tool, and more reliable app-server teardown and terminal outcomes. (#92625, #89133, #93654, #91767, #93287) Thanks @kevinslin, @VACInc, @vincentkoc, @JPKay-AI, and @aliahnaf2013-max. ↗ 04 **Standalone official provider plugins ** external provider packages are now first-class npm releases, externally installed channel plugins load at Gateway startup, and StepFun is available from npm and ClawHub. (#93470) Thanks @sunlit-deng, @cxdnicole, and @vincentkoc. ↗ 05 **More capable web and native clients ** the Control UI adds a session workspace rail and extension health, iOS adds Watch controls, and Android shows chat context. (#92856, #91952, #93387, #92837) Thanks @Solvely-Colin, @jalehman, @joshavant, and @Tosko4. ↗ 06 **More useful search and skills ** Codex Hosted Search is available, key-free search providers remain deliberate opt-ins, and ClawHub skill installs retain verified source provenance. (#93446, #93616, #93283, #93506) Thanks @fuller-stack-dev, @davemorin, @momothemage, @nmccready-tars, and @vincentkoc. ↗ 07 Providers and auth add Codex Hosted Search, improve Gemini CLI OAuth behind proxies, and keep external provider onboarding on current choices and package metadata. (#93446, #92815) Thanks @fuller-stack-dev, @yetval, @EvetteYoung, and @vincentkoc. ↗ 08 Plugins and installs externalized official providers publish as independent npm packages, Gateway discovers installed channel plugins at startup, and StepFun installs from npm or ClawHub. (#93470) Thanks @sunlit-deng, @cxdnicole, and @vincentkoc. ↗ 09 Dashboard and mobile add a session workspace rail, plugin health in status, compact cron lists, and iOS Watch controls. (#92856, #91952, #93395, #93387) Thanks @Solvely-Colin, @jalehman, @yu-xin-c, @centralpc, @joshavant, and @vincentkoc. ↗ 10 Codex, observability, and skills add automatic plugin approvals and SecretRefs, preserve ClawHub skill provenance, add OpenTelemetry log export, and expose remote-node execution to Codex when a node is connected. (#92625, #94324, #93283, #94561, #93654) Thanks @kevinslin, @kevinlin-openai, @momothemage, @nmccready-tars, @jesse-merhi, @vincentkoc, and @JPKay-AI. ↗ 11 QA and release engineering QA scenarios now use YAML, with broader profile evidence and release coverage for the plugin and channel matrix. Thanks @vincentkoc. ↗ 12 **PR #90463** refactor add session accessor seam with gateway consumer. Thanks @jalehman. ↗ 13 **PR #88656** Drop reasoning-only length turns from replay **PR #88656** Drop reasoning-only length turns from replay. Thanks @abel-zer0. ↗ 14 **PR #92856** feat(webui) add session workspace rail. Thanks @Solvely-Colin. ↗ 15 **PR #92845** docs(browser-control) document OPENCLAW_EAGER_BROWSER_CONTROL_SERVER requirement. Related #92841. Thanks @liuhao1024 and @jeugregg. ↗ 16 **PR #82366** fix use passive periodic sqlite wal checkpoints. Related #81715. Thanks @honor2030 and @KrasimirKralev. ↗ 17 **PR #92815** fix(google) route Gemini CLI OAuth through the env proxy (#46184). Thanks @yetval and @EvetteYoung. ↗ 18 **PR #91331** fix(mattermost) merge progress preview lines by identity. Related #89761. Thanks @iloveleon19 and @leonthe8th and @vincentkoc. ↗ 19 **PR #92909** fix(tui) keep spinner active when toggling tools. Related #49763. Thanks @ZengWen-DT and @Zeng-wen and @vincentkoc and @CrimsonDump. ↗ 20 **PR #92904** fix(elevenlabs) use current TTS model ids. Thanks @vortexopenclaw and @vincentkoc. ↗ 21 **PR #92642** fix #86872 Subagent run reports success but fails to write output file. Thanks @zhangguiping-xydt and @vincentkoc and @zapper35. ↗ 22 **PR #89122** refactor route command session reads through seam. Thanks @jalehman. ↗ 23 **PR #90943** fix(reply) deliver final reply when queued follow-up claims session; scope dedupe to routed thread. Thanks @sandieman2 and @vincentkoc. ↗ 24 **PR #92894** fix(skills) keep managed prompt paths readable. Related #92875. Thanks @kesslerio and @sallyom. ↗ 25 **PR #39617** fix reload config in slash command routing so dmScope is respected. Related #39605. Thanks @Ciward. ↗ 26 **PR #92191** fix(agents) retry thinking-only errored turns. Related #91953. Thanks @ai-hpc and @lml2468. ↗ 27 **PR #92891** fix(memory) clean stale reindex temp files. Related #92874. Thanks @ZengWen-DT and @Zeng-wen and @vincentkoc and @potterdigital. ↗ 28 **PR #93005** Add OpenRouter Fusion guidance and prompt context **PR #93005** Add OpenRouter Fusion guidance and prompt context. Related #92984. Thanks @sallyom. ↗ 29 **PR #88792** fix(state) harden sqlite path caching. Thanks @vincentkoc. ↗ 30 **PR #93022** fix(gateway) repair usage cost aggregation across agents. Thanks @luke-skywalker-open-claw and @stablegenius49. ↗ 31 **PR #93020** fix(telegram) cool down transient sendChatAction failures. Related #56096. Thanks @Boulea7 and @sumaiazaman and @Pick-cat and @cal-rufus. ↗ 32 **PR #89160** fix(agents) detect truncated API responses to prevent silent session hang. Related #89051. Thanks @joelnishanth and @ArthurusDent. ↗ 33 **PR #93009** fix(agents) make wrapToolWithBeforeToolCallHook idempotent to prevent double hook execution (fixes #92973). Thanks @zenglingbiao and @dertbv. ↗ 34 **PR #92991** fix(agents) tolerate missing attribution baseUrl. Related #92974. Thanks @samrusani and @Haderach-Ram. ↗ 35 **PR #92913** fix(opencode-go) register model catalog to fix context window detection. Related #92912. Thanks @kumaxs. ↗ 36 **PR #89129** refactor route bundled plugin session callers through seam. Thanks @jalehman. ↗ 37 **PR #93084** fix(agents) preserve fresh usage after compaction. Related #50795. Thanks @Hollychou924 and @leno23 and @de1tydev and @425072024 and @vincentkoc and @wuwahe3. ↗ 38 **PR #92869** fix #90333 [Bug]: Discord image build aborts at step 66 — openclaw-build-messaging-plugins.py exits 1. Thanks @zhangguiping-xydt and @vincentkoc and @chriskosys. ↗ 39 **PR #93011** fix(gateway) accept file-only input on /v1/responses (parity with image-only). Thanks @yetval and @vincentkoc. ↗ 40 **PR #92915** Convert QA scenarios to YAML files **PR #92915** Convert QA scenarios to YAML files. Thanks @RomneyDa. ↗ 41 **PR #91767** Fix one-shot Codex app-server teardown **PR #91767** Fix one-shot Codex app-server teardown. Thanks @aliahnaf2013-max. ↗ 42 **PR #92625** feat(codex) add auto plugin approvals. Thanks @kevinslin. ↗ 43 **PR #91587** test(qa) add qa run --qa-profile and unified output summary/evidence. Thanks @RomneyDa. ↗ 44 **PR #93104** test(reply) seed channel fixtures for dedupe tests. Thanks @RomneyDa. ↗ 45 **PR #93107** test(reply) preserve telegram dedupe fallback. Thanks @RomneyDa. ↗ 46 **PR #92954** fix(memory) accept local default model path migration. Thanks @mushuiyu886 and @vincentkoc. ↗ 47 **PR #90936** fix(agents) do not misclassify client-disconnect abort as run timeout. Related #90764. Thanks @openperf and @reginaldomarcilon. ↗ 48 **PR #90812** fix(voice-call) preserve live Twilio streams in stale reaper. Related #79121. Thanks @Takhoffman and @sahibzada-allahyar and @donkeykong91. ↗ 49 **PR #93094** fix(whatsapp) bound socket operations. Thanks @mcaxtr. ↗ 50 **PR #91629** fix(scripts) add database-first legacy store guard. Related #91628. Thanks @galiniliev. ↗ 51 **PR #93124** fix(telegram) render progress drafts as rich previews. Thanks @Marvinthebored. ↗ 52 **PR #93109** test(qa) embed profile scorecard evidence. Thanks @RomneyDa. ↗ 53 **PR #87298** test add temp directory helper guidance. Thanks @hxy91819. ↗ 54 **PR #92318** fix(cron) require explicit message target proof. Thanks @hxy91819. ↗ 55 **PR #93137** fix(imessage) honor disabled reply actions. Related #92142. Thanks @omarshahine and @dprev. ↗ 56 **PR #93134** fix(feishu) pass card_msg_content_type to get full card content (fixes #78289). Thanks @liuhao1024 and @vincentkoc and @longdoubled7. ↗ 57 **PR #93138** fix(agents) preserve literal current session resolution. Thanks @liuhao1024 and @vincentkoc. ↗ 58 **PR #91225** fix #83830 [Bug]: Dreaming diary repeats "first day" narrative every sweep — same early memories dominate snippets. Thanks @mushuiyu886 and @YinLiuLiu66. ↗ 59 **PR #93153** simplify QA evidence profile and mappings/coverage shape **PR #93153** simplify QA evidence profile and mappings/coverage shape. Thanks @RomneyDa. ↗ 60 **PR #93164** fix(telegram) preserve rich markdown line breaks. Thanks @vincentkoc. ↗ 61 **PR #93119** fix accept mixed source/dist bundled roots. Related #87730. Thanks @arkyu2077 and @vincentkoc and @jasonftl. ↗ 62 **PR #93130** fix(telegram) preserve sticker media paths. Related #83748. Thanks @goutamadwant and @vincentkoc and @aaajiao. ↗ 63 **PR #93073** fix(agents) retry empty post-tool final turns. Thanks @fuller-stack-dev. ↗ 64 **PR #91784** fix(voice-call) require realtime websocket path boundary. Thanks @jason-allen-oneal. ↗ 65 **PR #89133** Restore GPT-5 **PR #89133** Restore GPT-5.3 Codex Spark OAuth routing. Thanks @VACInc. ↗ 66 **PR #91996** refactor prune unused iOS code. Thanks @zats. ↗ 67 **PR #90231** fix #69443 [Bug] Subagent RPC callback to WeChat session key routed to main session instead. Thanks @zhangguiping-xydt and @sliverp and @chen11221. ↗ 68 **PR #89920** fix(matrix) replace recovered command progress lines. Thanks @bdjben and @jesse-merhi. ↗ 69 **PR #93159** fix(tui) keep parent stdin paused after exit. Thanks @fuller-stack-dev. ↗ 70 **PR #93201** fix(auto-reply) clear pending-final state before honoring post-send abort (#89115). Thanks @amknight and @danashburn. ↗ 71 **PR #93228** fix(agents) replace prose terminal classifiers. Thanks @fuller-stack-dev. ↗ 72 **PR #93231** fix(status) correct pinned model clear hint. Thanks @hxy91819. ↗ 73 **PR #92428** fix(qqbot) keep markdown table chunks valid. Thanks @sliverp. ↗ 74 **PR #93220** fix(status) avoid stale session context windows. Thanks @hxy91819. ↗ 75 **PR #91957** perf(sessions) share one enumeration across archive retention sweeps. Thanks @amknight. ↗ 76 **PR #93281** fix(telegram) recover pid-reused ingress claims. Thanks @obviyus. ↗ 77 **PR #93287** fix(codex) preserve terminal outcome ordering. ↗ 78 **PR #93182** fix(memory) clean rollback-journal reindex temp sidecar on NFS stores. Thanks @Alix-007. ↗ 79 **PR #93283** Persist ClawHub skill install provenance **PR #93283** Persist ClawHub skill install provenance. Related #92077. Thanks @momothemage and @nmccready-tars. ↗ 80 **PR #88872** fix attribute spawned task runs to child agent. Related #66670. Thanks @Alix-007 and @Neomail2. ↗ 81 **PR #92837** fix(android) show live chat context usage. Thanks @Tosko4. ↗ 82 **PR #93325** fix(cli) harden official plugin recovery. Thanks @vincentkoc. ↗ 83 **PR #93286** feat(telegram) send rich messages as rich html. Thanks @obviyus. ↗ 84 **PR #92910** fix(memory-core) safely refresh qmd index during collection repair. ↗ 85 **PR #93329** fix(cli) allow zero Discord timeout duration. Related #93327. Thanks @rohitjavvadi. ↗ 86 **PR #91625** fix(cron) add cron edit --clear-model to clear a job's model override. Thanks @ly-wang19. ↗ 87 **PR #91691** [AI] fix(memory) prevent empty-string expectedModel in resolveMemory…. Thanks @xydt-tanshanshan. ↗ 88 **PR #93006** fix(tui) keep stderr visible when local shell stdout fills the output cap. Thanks @Alix-007. ↗ 89 **PR #93001** fix(daemon) prefer stderr over stale stdout in gateway restart diagnostics. Thanks @Alix-007. ↗ 90 **PR #91117** refactor remove dead code and improve string concatenation. Thanks @Pommelle. ↗ 91 **PR #90893** fix(models) mask paste-token input in CLI auth prompt. Thanks @anurag-bg-neu. ↗ 92 **PR #90571** fix(configure) mask gateway password input in CLI wizard prompt. Thanks @anurag-bg-neu. ↗ 93 **PR #91768** fix(ios) respect chat header safe area. Thanks @zats. ↗ 94 **PR #93245** fix(cron) resolve lastRunStatus in cron list/show human output. Thanks @ly-wang19. ↗ 95 **PR #78765** fix(tui) avoid inserting spaces into long CJK text. Thanks @hpt. ↗ 96 **PR #91776** fix(ios) refresh permission rows after grants. Thanks @zats. ↗ 97 **PR #92817** fix(cron) trust agent output when channel is unresolved without explicit delivery. Related #90664. Thanks @fsdwen and @dertbv. ↗ 98 **PR #93297** fix(control-ui) respect agents.defaults.timeFormat for timestamps. Related #58147. Thanks @ZengWen-DT and @Zeng-wen and @TommoT2. ↗ 99 **PR #93364** Fix Telegram rich progress command output **PR #93364** Fix Telegram rich progress command output. Thanks @obviyus. ↗ 100 **PR #91952** feat(status) surface plugin health. Thanks @jalehman. ↗ 101 **PR #75025** fix(heartbeat) refresh stale Current time line on every helper call (#44993). Thanks @MoerAI and @mclee1975. ↗ 102 **PR #90992** docs(windows) fix WSL gateway-autostart recipe for WSL ≥ 2.6.1.0 idle-termination. Thanks @spencer2211. ↗ 103 **PR #86544** fix(cli) show Gemini CLI runtime auth status. Related #79585. Thanks @giodl73-repo and @fabricefoy. ↗ 104 **PR #88945** fix(plugins) serialize binding approval saves. Related #64065. Thanks @Alix-007 and @lihaokun. ↗ 105 **PR #90115** fix(gateway) pass managed inbound PDFs through chat.send. Related #90097. Thanks @harjothkhara and @joeykrug. ↗ 106 **PR #74613** docs(cli) add agent selector to CLI backend quick start. Related #68940. Thanks @vyctorbrzezowski and @drmarcopapa. ↗ 107 **PR #89121** refactor add transcript reader seam. Thanks @jalehman. ↗ 108 **PR #84434** fix(cli) disable ScheduleWakeup/CronCreate in --print claude runs. Thanks @SkyWolfDreamer. ↗ 109 **PR #66985** fix(agents) resolve requestedNode to canonical ID before boundNode comparison. Related #87213. Thanks @mujiannan. ↗ 110 **PR #91488** fix(reply) project preflight compaction gate by next-input size on fresh tokens. Thanks @yetval. ↗ 111 **PR #93353** fix(plugins) require owner for plugin writes. Thanks @eleqtrizit. ↗ 112 **PR #91499** fix(cron) preserve scheduled turn tool policy [AI]. Thanks @mmaps. ↗ 113 **PR #90412** fix(sessions) cache warm transcript reads to avoid per-turn re-parse. Related #83943. Thanks @Alix-007 and @yyds-xxxx. ↗ 114 **PR #93118** fix(gateway) guard fast-path startup migrations. Related #93032. Thanks @openperf and @Haderach-Ram. ↗ 115 **PR #93355** fix(ci) verify performance workflow downloads. Thanks @eleqtrizit. ↗ 116 **PR #93358** fix(outbound) guard cross-context message mutations. Thanks @eleqtrizit. ↗ 117 **PR #93362** fix(flock) bind allow-always to wrapped command. Thanks @eleqtrizit. ↗ 118 **PR #92578** refactor(whatsapp) add inbound admission foundation. Thanks @mcaxtr. ↗ 119 **PR #89547** Control Telegram group history context **PR #89547** Control Telegram group history context. Thanks @mmaps. ↗ 120 **PR #89201** refactor add transcript runtime identity contract. Thanks @jalehman. ↗ 121 **PR #93357** fix(plugins) enforce install policy in wrappers. Thanks @eleqtrizit. ↗ 122 **PR #93156** fix(doctor) import default-agent auth profiles into sqlite. Related #93145. Thanks @Pick-cat and @sallyom and @Tazio7. ↗ 123 **PR #93179** Add slim evidence mode for QA profile evidence **PR #93179** Add slim evidence mode for QA profile evidence. Thanks @RomneyDa. ↗ 124 **PR #93349** fix(control-ui) keep workboard card titles visible in overflowing columns (fixes #91717). Thanks @Pick-cat and @NicoBoom13. ↗ 125 **PR #93324** fix(cli) accept --no-color after subcommands. Thanks @ooiuuii. ↗ 126 **PR #89621** Return Google Chat thread metadata from message sends **PR #89621** Return Google Chat thread metadata from message sends. Thanks @franco-viotti. ↗ 127 **PR #82458** fix(infra) drop duplicated "restart" word in restart-sentinel summary. Thanks @jameswniu. ↗ 128 **PR #85471** Suppress cron announce control replies **PR #85471** Suppress cron announce control replies. Related #85421. Thanks @TurboTheTurtle and @leatherneck-33. ↗ 129 **PR #85316** fix(auth) keep alias-compatible auth-profile overrides instead of clearing them. Thanks @SkyWolfDreamer. ↗ 130 **PR #89260** fix(doctor) separate platform-incompatible skills from missing requirements. Related #89232. Thanks @Alix-007 and @CameronWeller. ↗ 131 **PR #90846** fix(media) stop pruning media on write; let the configured timer do it. Thanks @lundog. ↗ 132 **PR #88062** fix(logging) avoid stalled warnings for active model calls. Thanks @litang9. ↗ 133 **PR #93308** fix(discord) reject malformed realtime consult calls. Thanks @khoek. ↗ 134 **PR #93334** fix(whatsapp) notify user when trailing media send fails instead of silent drop. Thanks @rushindrasinha. ↗ 135 **PR #92575** fix(sessions) preserve user behavior overrides across daily/idle rollover (#92562) [AI-assisted]. Thanks @harjothkhara and @civiltox. ↗ 136 **PR #89124** refactor route auto-reply sessions through session seam. Thanks @jalehman. ↗ 137 **PR #93431** fix stabilize transcript cache and CLI env isolation. Thanks @shakkernerd. ↗ 138 **PR #93412** fix(discord) suppress tool progress for message-tool replies. Thanks @mgunnin and @vincentkoc. ↗ 139 **PR #93409** fix(whatsapp) stop markdownToWhatsApp dropping code spans followed by a digit. Thanks @rushindrasinha. ↗ 140 **PR #93295** fix(memory) swap rollback-journal sidecar during atomic reindex. Thanks @Alix-007. ↗ 141 **PR #93076** fix(whatsapp) preserve auth on terminal disconnects. Thanks @mcaxtr. ↗ 142 **PR #93435** fix(agents) bound autoreview scope. Thanks @vincentkoc. ↗ 143 **PR #93279** fix(telegram) restore readable default text sends. Related #93263. Thanks @NianJiuZst and @SweetSophia. ↗ 144 **PR #93429** fix(line) cap carousel column text at 60 chars when a title or image is set. Thanks @harjothkhara and @vincentkoc. ↗ 145 **PR #93428** fix(agents) resolve configured default model in runEmbeddedAgent (fixes #93419). Thanks @zenglingbiao and @vincentkoc and @danielgerlag. ↗ 146 **PR #93427** fix(tui) show activity indicator for system-injected runs. Related #51825. Thanks @ZengWen-DT and @vincentkoc and @Zeng-wen and @AlethiaQuizForge. ↗ 147 **PR #90003** feat(policy) cover exec approvals artifact. Thanks @giodl73-repo. ↗ 148 **PR #93448** fix(guards) allow auth profile sqlite reader. Thanks @amknight. ↗ 149 **PR #93424** fix(mattermost) keep message tool replies in threads. Thanks @amknight and @vincentkoc. ↗ 150 **PR #93418** fix(telegram) forward Bot API 10.1 rich_message content to agent. Related #93410. Thanks @xzh-icenter and @vincentkoc and @0pen7ech. ↗ 151 **PR #93175** test(qa) taxonomy profiles: includeAllCategories for release profile, update some coverage. Thanks @RomneyDa. ↗ 152 **PR #93456** fix(agents) handle string assistant message content. Thanks @vincentkoc. ↗ 153 **PR #93441** fix(outbound) ignore schema-padded poll metadata on send. Related #43015. Thanks @weichengdeng and @charzhou. ↗ 154 **PR #93443** fix(gateway) block internal HTTP session overrides. Thanks @RichardCao. ↗ 155 **PR #93454** fix(sqlite) disable WAL on network filesystems. Thanks @vincentkoc. ↗ 156 **PR #90275** test make install-safe-path symlink tests compatible with Windows. Thanks @aniruddhaadak80. ↗ 157 **PR #93464** fix(qa) suppress empty WhatsApp debug artifacts. Thanks @vincentkoc. ↗ 158 **PR #90861** fix(cli) preserve sessions_yield over MCP. Related #77426. Thanks @zhangguiping-xydt and @jarvisagimuspicard-hub. ↗ 159 **PR #90946** fix(infra) preserve inherited gateway PID across reparent during cleanup. Thanks @amittell. ↗ 160 **PR #92220** fix(media) extract large managed inbound PDFs via media-understanding. Related #90096, #90097. Thanks @amknight and @joeykrug. ↗ 161 **PR #91208** fix #91047 Plugin session-extension registry not pinned; sessions.pluginPatch fails after agent/subagent plugin-load churn. Thanks @mushuiyu886 and @teamadams. ↗ 162 **PR #92111** fix(update) restart managed gateway when update handoff fails after stop. Related #92088. Thanks @yetval and @ofan. ↗ 163 **PR #93238** fix(agents) honor disabled envelope timestamps at model boundary. Thanks @osolmaz. ↗ 164 **PR #93343** fix(codex) de-duplicate commentary notes across the raw response lane. Related #93296. Thanks @Marvinthebored and @Peetiegonzalez. ↗ 165 **PR #93361** fix(openshell) pin mirror remote mutations. Thanks @eleqtrizit. ↗ 166 **PR #93354** fix(discord) block cross-provider guild admin actions. Thanks @eleqtrizit. ↗ 167 **PR #92178** fix(gateway) normalize malformed paired access lists. Related #90654. Thanks @wangmiao0668000666 and @EmilioNicolas. ↗ 168 **PR #85254** perf(plugins) thread prepared manifestPlugins through runtime model-id normalize chain. Thanks @zeroaltitude. ↗ 169 **PR #93489** Add ClawHub content rights docs to sidebar **PR #93489** Add ClawHub content rights docs to sidebar. Thanks @Patrick-Erichsen. ↗ 170 **PR #93466** [AI] fix(feishu) guard against missing inbound in channelRuntime fallback. Thanks @xydt-tanshanshan. ↗ 171 **PR #93460** fix(cli) honor --log-level in route-first commands. Related #93457. Thanks @ooiuuii. ↗ 172 **PR #93495** fix(cron) clear delivery routing fields from cron edit. Thanks @ly-wang19 and @vincentkoc. ↗ 173 **PR #93494** docs point PR landing at maintainer workflow. Thanks @fuller-stack-dev and @vincentkoc. ↗ 174 **PR #93487** fix(ui) add agent selector to skills page. Related #78553. Thanks @goutamadwant and @vincentkoc and @xiaobu1112. ↗ 175 **PR #93488** fix(discord) apply tool status emojis immediately to avoid override by thinking reactions. Related #92715. Thanks @lzyyzznl and @vincentkoc and @darealgege. ↗ 176 **PR #93055** fix(ui) restore provider usage pill in desktop chat composer [AI]. Thanks @harjothkhara. ↗ 177 **PR #83156** fix(matrix) accept bracketed display-name mentions. Related #83142. Thanks @wdx-agent-io and @wdongxv. ↗ 178 **PR #93333** fix(auto-reply) redact secrets in /debug show and /debug set output. Thanks @Alix-007. ↗ 179 **PR #88496** fix(auto-reply) redact secrets in config show output. Related #65623. Thanks @jason-allen-oneal and @coygeek. ↗ 180 **PR #93105** fix(doctor) repair null agents.list[].workspace values. Related #77718. Thanks @xydigit-sj and @slideshow-dingo. ↗ 181 **PR #73923** fix(ui) preserve gateway token during safe websocket url edits. Related #41545. Thanks @wsyjh8. ↗ 182 **PR #88970** fix #85871 [Bug]: Heartbeat scheduler silently fails to fire on 5.20 and all 5.x versions (regression from 4.23). Thanks @zhangguiping-xydt and @vincentkoc and @carlbjson. ↗ 183 **PR #93511** fix(imessage) normalize leading NUL echo-cache prefixes. Thanks @vincentkoc and @drvoss. ↗ 184 **PR #92594** [Bug] ollama-cloud runtime fails DNS lookup for ai.ollama.com, while ollama/<model>:cloud works. Related #92391. Thanks @zhangguiping-xydt and @vincentkoc and @kvzsolt. ↗ 185 **PR #93512** build(docs) finish PowerShell-safe docs formatting. Related #44293. Thanks @vincentkoc and @yil337 and @aniruddhaadak80. ↗ 186 **PR #93513** fix(skills) refresh persisted snapshots after restart. Thanks @vincentkoc and @fif911 and @skadauke. ↗ 187 **PR #93517** fix(skills) quote skill-creator template description. Thanks @vincentkoc and @parubets. ↗ 188 **PR #73976** fix(memory) use per-keyword FTS search in hybrid mode #39484. Thanks @joshuakeithpa-sudo. ↗ 189 **PR #93520** fix(workspace) store setup state outside workspace dot-dir. Thanks @vincentkoc and @1qh. ↗ 190 **PR #93521** fix(onboard) skip Homebrew prompt on unsupported platforms. Related #68893. Thanks @vincentkoc and @yurivict. ↗ 191 **PR #93522** fix(feishu) send post mentions as native at elements. Thanks @vincentkoc and @gavin-ali and @YizukiAme and @Panniantong. ↗ 192 **PR #93496** fix(gateway) rotate already-stale generated transcript filename on /reset. Thanks @harjothkhara and @vincentkoc. ↗ 193 **PR #93471** fix(cron) preserve aborted isolated-run failure. Thanks @BhargavSatya and @vincentkoc. ↗ 194 **PR #93473** fix(memory) report skipped QMD embedding probe. Related #77645. Thanks @TurboTheTurtle and @vincentkoc and @aderius. ↗ 195 **PR #93498** fix(ui) preserve CJK IME composition. Related #86035. Thanks @Zhaoqj2016 and @vincentkoc. ↗ 196 **PR #93088** fix(telegram) bind bot mentions to assistant identity. Thanks @kesslerio and @vincentkoc. ↗ 197 **PR #93499** fix(nodes) return screen snapshots as media. Related #90126. Thanks @zenglingbiao and @vincentkoc and @JeffSteinbok. ↗ 198 **PR #93506** fix(skills) trust verified ClawHub source provenance. Thanks @vincentkoc. ↗ 199 **PR #93525** agents notify chat exec empty-success completions. Thanks @vincentkoc and @wenkang-xie. ↗ 200 **PR #93446** feat add Codex hosted web search. Thanks @fuller-stack-dev. ↗ 201 **PR #92883** fix(security) audit open dm tool exposure. Related #55612. Thanks @yu-xin-c and @vincentkoc and @cjg20ss. ↗ 202 **PR #93476** fix(mattermost) preserve Codex progress preview. Related #88766. Thanks @goutamadwant and @vincentkoc and @KelTech-Services. ↗ 203 **PR #93395** feat(cron) add compact list responses. Related #93366. Thanks @yu-xin-c and @vincentkoc and @centralpc. ↗ 204 **PR #93527** fix(cron) preserve model overrides for text payloads. Thanks @vincentkoc and @liaoandi. ↗ 205 **PR #90487** fix harden ChatGPT Responses missing content-type streams. Thanks @anyech and @vincentkoc. ↗ 206 **PR #93528** fix(gateway) tolerate transient pre-hello clean closes. Thanks @vincentkoc and @ruanrrn. ↗ 207 **PR #93529** fix(auto-reply) allow message tool for group attachments. Related #43146. Thanks @vincentkoc and @Robcis. ↗ 208 **PR #93291** fix(reply) preserve pending thread evidence when reconciling partial send results. Thanks @yetval and @vincentkoc. ↗ 209 **PR #90572** fix(feishu) drop self-authored receive echoes. Thanks @baskduf. ↗ 210 **PR #93455** fix(cli) accept --log-level after subcommands. Thanks @ooiuuii and @vincentkoc. ↗ 211 **PR #93452** fix(bedrock) strip inference profile prefix from model ID in embedding adapter. Related #79212. Thanks @LiuwqGit and @vincentkoc and @aleck31. ↗ 212 **PR #89799** fix(cli) skip compile cache on early Node 24.x to avoid startup deadlock. Related #86550. Thanks @zhangguiping-xydt and @vincentkoc and @renyuliang000. ↗ 213 **PR #93469** fix(agents) drop partialJson streaming artifacts from session history repair. Thanks @drvoss and @vincentkoc. ↗ 214 **PR #93463** fix(codex) log app-server compaction completion. Related #83932. Thanks @goutamadwant and @vincentkoc and @aounakram. ↗ 215 **PR #93562** fix(tui) refresh after external session reset. Related #38966. Thanks @vincentkoc and @wsyjh8 and @yizhanzjz. ↗ 216 **PR #93470** fix(plugins) load externally-installed channel plugins at gateway startup. Related #93219. Thanks @sunlit-deng and @vincentkoc and @cxdnicole. ↗ 217 **PR #88796** fix(discord) resolve guildId from session channel for search actions. Related #88790. Thanks @SebTardif and @vincentkoc and @mugabuga. ↗ 218 **PR #93194** fix(agents) preserve prompt-released session metadata. Related #93193. Thanks @snowzlm. ↗ 219 **PR #89483** fix(gateway) project failed agent turns in chat history. Related #89197. Thanks @IWhatsskill and @vincentkoc and @yangiit. ↗ 220 **PR #93434** fix avoid parent group allowlist false positive. Related #92684. Thanks @kingrubic and @vincentkoc and @motteman. ↗ 221 **PR #93449** fix(feishu) dedupe redelivered text by stable retry identity. Related #46778. Thanks @ZengWen-DT and @vincentkoc and @kingcuty. ↗ 222 **PR #93407** AGT-80 AGT-81 Fix Discord ingress ack ordering **PR #93407** AGT-80 AGT-81 Fix Discord ingress ack ordering. Thanks @mgunnin and @vincentkoc. ↗ 223 **PR #93439** fix(agents) honor embedded run default model. Related #93419. Thanks @harjothkhara and @vincentkoc and @danielgerlag. ↗ 224 **PR #93565** fix(cli) summarize cleanup dry-run by label. Related #76826. Thanks @AgentArcLab and @vincentkoc and @renatomaluhy. ↗ 225 **PR #93509** fix(skills) clear orphaned idempotency pointer on corrupt-metadata re-begin. Thanks @Alix-007 and @vincentkoc. ↗ 226 **PR #93274** Clarify plugin channel config additional-property errors **PR #93274** Clarify plugin channel config additional-property errors. Thanks @zhangguiping-xydt and @vincentkoc. ↗ 227 **PR #93555** fix(read) route text decoding through shared Windows codepage fallba…. Thanks @zhanxingxin1998 and @vincentkoc. ↗ 228 **PR #93314** fix(skills) preserve ClawHub origin provenance on readback. Thanks @Alix-007 and @vincentkoc. ↗ 229 **PR #93573** fix(acp) keep bridge sessions out of stale ACP classification [AI-assisted]. Related #38907. Thanks @eldar702 and @vincentkoc and @ninaopenclaw. ↗ 230 **PR #93398** fix(cron) emit isolated model usage diagnostics. Related #92338. Thanks @849261680 and @vincentkoc and @niks999. ↗ 231 **PR #93367** Fix SSH sandbox remote directory args **PR #93367** Fix SSH sandbox remote directory args. Related #93344. Thanks @dmorn and @vincentkoc. ↗ 232 **PR #93574** fix(feishu) suppress log noise for bot_p2p_chat_entered_v1 event [AI-assisted]. Related #42351. Thanks @eldar702 and @vincentkoc and @sunking0223. ↗ 233 **PR #93269** Fix tokenjuice bash results without details **PR #93269** Fix tokenjuice bash results without details. Thanks @moeedahmed and @vincentkoc. ↗ 234 **PR #93575** fix(telegram) hydrate group reply-chain media into model context [AI-assisted]. Thanks @eldar702 and @vincentkoc. ↗ 235 **PR #93261** fix(plugins) resolve provider policy surface for plugin-owned CLI backends. Related #93259. Thanks @BitmapAsset and @vincentkoc. ↗ 236 **PR #93303** fix(whatsapp) bound stalled read-receipt socket operations. Thanks @Alix-007 and @vincentkoc. ↗ 237 **PR #93242** fix(mattermost) keep bare @mention with empty body instead of dropping it. Related #93205. Thanks @iloveleon19 and @vincentkoc. ↗ 238 **PR #93606** fix(ui) clear stale Talk error when session transitions to non-error state (fixes #88176). Thanks @liuhao1024 and @vincentkoc and @BrianClaw1955. ↗ 239 **PR #93607** perf(tasks) memoize reconcileInspectableTasks for same-tick calls (fixes #73531). Thanks @liuhao1024 and @vincentkoc and @slideshow-dingo. ↗ 240 **PR #93612** fix(gateway) compute sessions.usage aggregate totals from all sessions, not just the limited page (fixes #76496). Thanks @liuhao1024 and @vincentkoc and @bobsahur-robot. ↗ 241 **PR #93615** fix(telegram) recover lone active spooled handler on timeout (#84158). Thanks @0xghost42 and @vincentkoc and @crash2kx. ↗ 242 **PR #93616** Keep key-free web search providers opt-in **PR #93616** Keep key-free web search providers opt-in. Thanks @davemorin and @vincentkoc. ↗ 243 **PR #93298** fix #93044 control-ui webchat double-renders agent replies when dmScope=main. Thanks @zhangguiping-xydt and @vincentkoc and @cfmilam. ↗ 244 **PR #93618** fix(feishu) filter temporary card-action-c-\* IDs from reply target to prevent Invalid open_message_id errors (fixes #56818). Thanks @liuhao1024 and @vincentkoc and @SwordImmortal. ↗ 245 **PR #93387** feat(ios) add watch action surface. Thanks @Solvely-Colin and @joshavant. ↗ 246 **PR #93648** fix(doctor) archive superseded plugin install index conflicts. Related #90418. Thanks @vincentkoc and @ramitrkar-hash. ↗ 247 **PR #93649** fix(qwen) place DashScope image prompts in user content. Related #92688. Thanks @vincentkoc and @Yachiyo404. ↗ 248 **PR #93650** fix(update) avoid per-Node npm prefixes during self-update. Related #80387. Thanks @vincentkoc and @yaanfpv. ↗ 249 **PR #93653** fix(skill-workshop) skip helper sessions during auto-capture. Thanks @vincentkoc and @zhangguiping-xydt. ↗ 250 **PR #93654** fix(codex) expose remote node exec as a Codex dynamic tool. Related #92141. Thanks @vincentkoc and @JPKay-AI. ↗ 251 **PR #93662** fix(discord) protect mention aliases in code fences. Thanks @vincentkoc and @rohitjavvadi. ↗ 252 **PR #93663** fix(clawdock) open dashboard on published port without starting deps. Related #77344. Thanks @vincentkoc and @dhoman. ↗ 253 **PR #93670** fix(browser) recover stale managed Chrome CDP listener. Related #41750. Thanks @vincentkoc and @rohitjavvadi and @kissman911. ↗ 254 **PR #93672** fix(commands) preserve multiline slash skill args. Related #79155. Thanks @vincentkoc and @web3blind. ↗ 255 **PR #93674** fix(browser) accept top-level act fields with nested requests. Related #38762. Thanks @vincentkoc and @angelusbr and @Lumos-789. ↗ 256 **PR #93678** fix(plugins) allow Dreaming sidecar through restrictive memory allowlists. Related #92536. Thanks @vincentkoc and @pradeep7127 and @resYuto. ↗ 257 **PR #93306** fix(status) ignore stale context after model switch. Thanks @hxy91819. ↗ 258 **PR #93666** fix(control-ui) copy code blocks over plain HTTP via clipboard fallback. Related #93628. Thanks @Pick-cat and @pjq2926. ↗ 259 **PR #93629** fix(reply) preserve unsent text-only finals after block pipeline streamed partial content (fixes #81078). Thanks @liuhao1024 and @Jackten. ↗ 260 **PR #93690** fix(telegram) dispatch MEDIA directives as attachments. Related #77702. Thanks @vincentkoc and @butttersbot. ↗ 261 **PR #93693** fix(gateway) ignore stale sudo scope for root user services. Related #81410. Thanks @vincentkoc and @Ericksza. ↗ 262 **PR #93646** fix(agents) return string assistant content in getLastAssistantText. Thanks @Alix-007 and @vincentkoc. ↗ 263 **PR #93687** fix(i18n) retain Codex error tails in logs. Thanks @hxy91819. ↗ 264 **PR #93630** fix(heartbeat) bootstrap plugin session targets. Thanks @ZengWen-DT and @vincentkoc. ↗ 265 **PR #93658** fix(wizard) preserve existing default model during setup auth choice [AI-assisted]. Related #64129. Thanks @ml12580 and @vegapunk9527. ↗ 266 **PR #93671** fix(respawn) rewrite pnpm versioned entry paths to stable wrapper (fixes #52313). Thanks @liuhao1024 and @vincentkoc and @RichardCao. ↗ 267 **PR #93698** Fix Telegram rich progress detail updates **PR #93698** Fix Telegram rich progress detail updates. Thanks @obviyus. ↗ 268 **PR #93656** fix(gateway) send approval route notices with write scope. Related #93563. Thanks @mushuiyu886 and @vincentkoc and @clawbot247-commits. ↗ 269 **PR #93665** fix(gateway) surface codex app-server returned failures. Thanks @litang9 and @vincentkoc. ↗ 270 **PR #93727** fix(context-engine) avoid turn-maintenance lane livelock. Related #77340. Thanks @vincentkoc and @baghvn and @Veda-openclaw. ↗ 271 **PR #93681** fix(llm) handle string assistant content on the OpenAI-compatible completion path. Thanks @Alix-007. ↗ 272 **PR #93722** chore(release) update appcast for 2026.6.8. Thanks @vincentkoc. ↗ 273 **PR #93677** fix(google-meet) declare realtime provider secret inputs. Related #81891. Thanks @goutamadwant and @vincentkoc and @chachi-max. ↗ 274 **PR #92947** fix(qqbot) deliver cron auto-TTS voice by trusting OpenClaw temp root. Related #92816. Thanks @ZengWen-DT and @Zeng-wen and @lewiswu1209. ↗ 275 **PR #93679** fix(whatsapp) extract GIF metadata and distinguish gifPlayback in media placeholders (fixes #49099). Thanks @liuhao1024 and @vincentkoc and @bugkill3r. ↗ 276 **PR #93688** fix(minimax) check base_resp envelope errors in TTS provider. Related #76904. Thanks @dwc1997 and @najef1979-code. ↗ 277 **PR #93714** fix isolate async model resolution mock from sync mock in flaky test. Related #92117. Thanks @lsr911 and @wangwllu. ↗ 278 **PR #93705** test(macos) cover root command dispatch. Related #83879. Thanks @markoub and @vincentkoc and @davinci282828. ↗ 279 **PR #93711** Keep command text in progress drafts **PR #93711** Keep command text in progress drafts. Thanks @keshavbotagent and @vincentkoc. ↗ 280 **PR #93712** fix scope assistant avatar override to agent ID. Related #90890. Thanks @lsr911 and @vincentkoc and @najef1979-code. ↗ 281 **PR #93725** fix(usage) prune stale usage cache temp files. Related #78939. Thanks @markoub and @Tramsrepus. ↗ 282 **PR #93726** fix(typing) start typing on reasoning deltas in thinking mode before visible text. Related #79681. Thanks @xialonglee and @novaflash82. ↗ 283 **PR #93716** fix(discord) propagate timeout through channel capabilities diagnostics. Related #77040. Thanks @xialonglee and @vincentkoc and @unicebondoc. ↗ 284 **PR #93729** fix(ollama) preserve configured API during discovery. Related #93710. Thanks @zhangguiping-xydt and @vincentkoc and @obnoxious2011-cmd. ↗ 285 **PR #93719** fix pin plugin workspace dir for sessions.list to avoid O(rows) memo busting. Related #90814. Thanks @lsr911 and @vincentkoc and @k-l-lambda. ↗ 286 **PR #93732** fix(agents) preserve re-sent user prompt during compaction transcript rotation. Thanks @yetval. ↗ 287 **PR #93738** fix break plugin registry type import cycle. Thanks @giodl73-repo. ↗ 288 **PR #93740** fix(sessions) release retained locks after takeover. Thanks @TurboTheTurtle. ↗ 289 **PR #93745** fix(usage) reject invalid explicit dates in usage RPC date parsing. Thanks @harjothkhara and @vincentkoc. ↗ 290 **PR #93746** fix(ui) populate realtime talk provider and transport options from talk.catalog. Thanks @shushushv and @vincentkoc. ↗ 291 **PR #93751** fix(ios) fix quick setup sheet layout design. Thanks @zats. ↗ 292 **PR #93749** fix(compaction) ignore stale persisted totalTokens in preflight gate. Thanks @yetval. ↗ 293 **PR #93753** fix correct tautological uppercase check in tool description summarizer. Thanks @GautamKumarOffical. ↗ 294 **PR #89123** refactor route transcript writers through session seam. Thanks @jalehman. ↗ 295 **PR #93758** feat(memory) apply outputDimensionality truncation to local GGUF embeddings (fixes #58765). Thanks @liuhao1024 and @vincentkoc and @losz5000. ↗ 296 **PR #93754** feat(inbound-meta) expose per-turn source modality. Related #50482. Thanks @liuhao1024 and @vincentkoc and @JTOrca. ↗ 297 **PR #93767** fix(reasoning-tags) strip MiniMax `mm:` namespaced reasoning tags. Thanks @DrHack1 and @vincentkoc. ↗ 298 **PR #93772** fix(feishu) recover CJK filenames from JSON file_name field (fixes #81103). Thanks @liuhao1024 and @vincentkoc and @pjuneye. ↗ 299 **PR #93773** fix(ui) scope Skill Workshop proposals to selected agent. Related #93760. Thanks @TurboTheTurtle and @vincentkoc and @hannesrudolph. ↗ 300 **PR #88750** feat(context-engine) pass runtime settings into lifecycle. Thanks @ragesaq and @jalehman. ↗ 301 **PR #93763** fix(agents) use neutral billing copy for subscription auth. Related #80877. Thanks @eldar702 and @vincentkoc and @22kyasue. ↗ 302 **PR #93818** List all ClawHub docs in sidebar **PR #93818** List all ClawHub docs in sidebar. Thanks @Patrick-Erichsen. ↗ 303 **PR #93779** fix(webchat) skip textarea resize during IME composition to eliminate typing lag. Related #90800. Thanks @joelnishanth and @vincentkoc and @w10497-create. ↗ 304 **PR #93786** fix(plugins) treat refreshable catalogs as requiring runtime discovery (fixes #93775). Thanks @liuhao1024 and @St0rmz1. ↗ 305 **PR #93791** fix(memory) await search-sync before returning results to prevent stale index (fixes #52115). Thanks @liuhao1024 and @vincentkoc and @FicheallADa. ↗ 306 **PR #93780** fix(google) keep parallel Gemini tool responses in the turn after the model. Thanks @yetval and @vincentkoc. ↗ 307 **PR #93789** fix(agents) make lane suspension consistent across cooldown-precheck and embedded-runner paths. Related #93036. Thanks @joelnishanth and @vincentkoc and @kumaxs. ↗ 308 **PR #93798** fix(status) show 0 (not ?) for fresh-session context tokens. Related #93771. Thanks @Alix-007 and @vincentkoc and @anarchia-99. ↗ 309 **PR #93810** fix(cron) preserve startup overflow catch-up deferrals in start() maintenance pass. Thanks @yetval. ↗ 310 **PR #93811** Strip UTF-8 BOM when reading SKILL **PR #93811** Strip UTF-8 BOM when reading SKILL.md in quick_validate. Thanks @HrachShah. ↗ 311 **PR #93803** fix(ui) preserve WebChat visible messages across session switches. Related #80855. Thanks @LiuwqGit and @vincentkoc and @viagarsuker. ↗ 312 **PR #93792** fix(android) wait for node capability approval before onboarding. Thanks @Solvely-Colin and @vincentkoc. ↗ 313 **PR #93796** fix(feishu) paginate wiki node and space listing (#37626). Thanks @ZengWen-DT and @vincentkoc and @ritou11. ↗ 314 **PR #93797** fix(browser) use openTab return value to prevent wsUrl race in ensureTabAvailable (fixes #63343). Thanks @liuhao1024 and @vincentkoc and @OpenCodeEngineer. ↗ 315 **PR #93806** fix(reasoning-tags) strip MiniMax mm: tags on silent-reply and streaming paths missed by #93767. Thanks @Alix-007 and @vincentkoc. ↗ 316 **PR #93691** refactor add gateway sessions.create lifecycle seam. Thanks @jalehman. ↗ 317 **PR #88748** fix(gemini) bridge OAuth profiles into CLI runtime. Related #88742. Thanks @jason-allen-oneal. ↗ 318 **PR #93857** fix(deps) remediate Dependabot alerts. Thanks @vincentkoc. ↗ 319 **PR #93874** fix(slack) recognize MiniMax mm: namespaced reasoning tags in monitor preview. Thanks @Alix-007. ↗ 320 **PR #93832** feat(providers) add ClawRouter managed proxy. Thanks @vincentkoc. ↗ 321 **PR #93880** fix(macos) preserve approvals migration data. Thanks @vincentkoc. ↗ 322 **PR #93903** fix(cron) reject invalid absolute timestamps. Thanks @Alix-007 and @vincentkoc. ↗ 323 **PR #93879** fix(update) use configured npm registry for update metadata. Related #79140. Thanks @vincentkoc and @sixerLiu. ↗ 324 **PR #93924** revert(providers) remove ClawRouter provider. Thanks @vincentkoc. ↗ 325 **PR #93955** fix(telegram) surface rich-message disabled state. Thanks @obviyus. ↗ 326 **PR #93881** fix(agents) route BTW through canonical Codex runtime. Related #88902. Thanks @vincentkoc and @TurboTheTurtle and @khalil-omer. ↗ 327 **PR #90192** fix(feishu) fetch quoted content before empty-message guard. Related #90177. Thanks @bladin and @sliverp and @lkxlaz. ↗ 328 **PR #93237** Fix Mattermost open DM validation **PR #93237** Fix Mattermost open DM validation. Thanks @amknight. ↗ 329 **PR #93945** feat(diagnostics) add SIEM security events. Thanks @vincentkoc. ↗ 330 **PR #87487** fix(cli) clarify mcp list registry scope. Related #65209. Thanks @Alix-007 and @slideshow-dingo. ↗ 331 **PR #24661** feat(cohere) add provider plugin. Thanks @vincentkoc. ↗ 332 **PR #93532** Expose verified ClawHub source in skill verify output **PR #93532** Expose verified ClawHub source in skill verify output. Thanks @momothemage. ↗ 333 **PR #93538** feat(codex) support app-server network proxy profiles. Thanks @vincentkoc. ↗ 334 **PR #93938** fix(telegram) guard UTF-16 surrogate pairs in outbound chunkers. Related #93921. Thanks @Nas01010101 and @vincentkoc. ↗ 335 **PR #94104** feat(agents) trace compaction summarization model calls. Thanks @amknight. ↗ 336 **PR #94108** Fix package Telegram temp root **PR #94108** Fix package Telegram temp root. Thanks @obviyus. ↗ 337 **PR #94113** Fix Telegram package output mount **PR #94113** Fix Telegram package output mount. Thanks @obviyus. ↗ 338 **PR #89062** feat(docker) support offline setup reruns. Related #70443. Thanks @Alix-007 and @safrano9999. ↗ 339 **PR #93929** fix(secrets) explicitly pass BWS_SERVER_URL to resolver for self-hosted instances. Related #93851. Thanks @Pandah97 and @vincentkoc and @AdoShan. ↗ 340 **PR #90057** Polish Workboard operations view **PR #90057** Polish Workboard operations view. Thanks @fuller-stack-dev. ↗ 341 **PR #89396** fix(doctor) drop inert legacy cron notify when cron.webhook is unset. Related #44460. Thanks @Alix-007. ↗ 342 **PR #94138** fix(session) prevent stale finalizer from recreating deleted session rows. Related #40840. Thanks @xialonglee and @vincentkoc and @AL-knows. ↗ 343 **PR #93739** refactor add session patch projection seam. Thanks @jalehman. ↗ 344 **PR #94178** fix(workspace) skip optional bootstrap files when workspace setup is already completed. Related #83593. Thanks @dwc1997 and @jsompis. ↗ 345 **PR #93363** fix(feishu) enforce account tool family gates. Thanks @eleqtrizit. ↗ 346 **PR #93813** fix(codex) keep message registered for internal turns. Related #93750. Thanks @jalehman and @hannesrudolph. ↗ 347 **PR #93659** refactor add session reset delete lifecycle seam. Thanks @jalehman. ↗ 348 **PR #93852** ci(release) harden release controls. Thanks @vincentkoc. ↗ 349 **PR #94203** feat(codex) support remote app-server plugins. Thanks @kevinslin. ↗ 350 **PR #94263** chore migrate claw-score skill. Thanks @RomneyDa and @kevinslin. ↗ 351 **PR #93695** refactor add compact trim lifecycle seam. Thanks @jalehman. ↗ 352 **PR #93114** test fold lifecycle and package proof into QA Lab. Thanks @RomneyDa. ↗ 353 **PR #93181** test fold otel smoke into qa e2e. Thanks @RomneyDa. ↗ 354 **PR #93178** test fold gateway smoke into qa e2e. Thanks @RomneyDa. ↗ 355 **PR #94276** qa-lab support script-backed evidence scenarios. Thanks @Solvely-Colin and @RomneyDa. ↗ 356 **PR #94282** Support owner-qualified ClawHub skill installs **PR #94282** Support owner-qualified ClawHub skill installs. Thanks @Patrick-Erichsen. ↗ 357 **PR #93704** refactor add session cleanup lifecycle seam. Thanks @jalehman. ↗ 358 **PR #94296** fix require all taxonomy coverage ids for a feature - AND not OR. Thanks @RomneyDa. ↗ 359 **PR #92016** fix(plugins) compose live hook registry view for tool-call hooks. Related #91918. Thanks @amknight and @vokaplok. ↗ 360 **PR #89596** fix(policy) recognize declared tool allowlists. Thanks @giodl73-repo. ↗ 361 **PR #93713** fix route deleted-agent session purge through lifecycle seam. Thanks @jalehman. ↗ 362 **PR #84172** fix(exec) rebuild command authorization on the Tree-sitter command planner. Thanks @jesse-merhi. ↗ 363 **PR #94332** docs add ClawHub namespace claims to sidebar. Thanks @Patrick-Erichsen. ↗ 364 **PR #86360** fix(codex) honor bound agent exec host policy. Thanks @jesse-merhi. ↗ 365 **PR #73162** fix(slack) remove socket reconnect attempt cap so gateway stays connected indefinitely. Related #72808. Thanks @suboss87 and @tleyden. ↗ 366 **PR #94156** fix expose OpenAI image quality and moderation CLI options. Thanks @lastguru-net and @fuller-stack-dev. ↗ 367 **PR #94350** feat externalize GMI provider plugin. Thanks @Patrick-Erichsen and @vincentkoc. ↗ 368 **PR #94543** fix(gateway) bound config.get middleware results. Related #94265. Thanks @vincentkoc and @v-s-gusev. ↗ 369 **PR #91409** fix(update) run plugin convergence after RPC git updates. Thanks @masatohoshino. ↗ 370 **PR #94556** chore(extensions) bump tokenjuice to 0.8.1. Thanks @vincentkoc. ↗ 371 **PR #94580** fix(ci) stabilize update run gates. ↗ 372 **PR #94394** fix(infra) probe 127.0.0.1 in ensurePortAvailable to detect IPv4-only occupants. Related #94379. Thanks @Pandah97 and @wangwllu. ↗ 373 **PR #94421** fix(agents) preserve active compaction retries. Related #94391. Thanks @dexiosmb. ↗ 374 **PR #94428** fix(feishu) preserve replies before error finals. Related #94360. Thanks @xunx33. ↗ 375 **PR #93735** refactor add restart recovery lifecycle seam. Thanks @jalehman. ↗ 376 **PR #94591** docs(release) backfill complete contribution records. Thanks @vincentkoc. ↗ 377 **PR #94588** fix(cron) retry isolated setup timeouts. Thanks @aaroneden. ↗ 378 **PR #94082** fix(cron) prevent lane timeout during long tool execution. Related #94033. Thanks @ajwan8998 and @JingWang-Star996. ↗ 379 **PR #94551** feat(firecrawl) add keyless scrape support. Thanks @vincentkoc and @developersdigest. ↗ 380 **PR #94619** test(ci) stabilize timeout-sensitive shards. Thanks @vincentkoc. ↗ 381 **PR #94048** fix(telegram) set richMessages default to false explicitly in schema. Related #93770, #93794. Thanks @Monkey-wusky and @obviyus and @Nardoa375 and @laurenceputra. ↗ 382 **PR #94118** [codex] Fix Telegram rich local Markdown link hrefs **PR #94118** [codex] Fix Telegram rich local Markdown link hrefs. Related #94117. Thanks @dankarization and @obviyus. ↗ 383 **PR #94646** refactor(sqlite) land database-first memory and proxy alignment. Thanks @vincentkoc. ↗ 384 **PR #94658** test(sqlite) use shared temp directory helper. Thanks @vincentkoc. ↗ 385 **PR #92135** fix(openai-embedding) preserve openai/ prefix for non-native base URLs. Related #92124. Thanks @xialonglee and @Kambrian. ↗ 386 **PR #93737** refactor add session maintenance transaction seam. Thanks @jalehman. ↗ 387 **PR #93685** refactor(auto-reply) add lifecycle storage seams. Thanks @jalehman. ↗ 388 **PR #94349** fix(agents) preserve pending subagent completion announces. Related #93323. Thanks @sallyom and @oiGaDio. ↗ 389 **PR #93174** test fold channel message flows into qa e2e. Thanks @RomneyDa. ↗ 390 **PR #94093** Prevent Codex thread rotation from losing next-step context **PR #94093** Prevent Codex thread rotation from losing next-step context. Thanks @VACInc. ↗ 391 **PR #53920** fix(scripts) avoid mutating tracked auth-monitor template during setup. Thanks @JackWuGlobal. ↗ 392 **PR #94702** Standardize QA coverage IDs on dotted names **PR #94702** Standardize QA coverage IDs on dotted names. Thanks @RomneyDa. ↗ 393 **PR #81825** fix(skills/1password) stop forcing tmux for desktop app auth (#52540). Thanks @koshaji and @tylerbittner. ↗ 394 **PR #94725** fix(doctor) warn on volatile SQLite state. Thanks @vincentkoc. ↗ 395 **PR #88551** fix(agents) skip auth gate for CLI-owned transport. Thanks @yu-xin-c. ↗ 396 **PR #88581** feat(commands) add /name to rename the current session from chat. Thanks @BSG2000. ↗ 397 **PR #94324** feat(codex) support app-server SecretRefs. Thanks @kevinlin-openai and @kevinslin. ↗ 398 **PR #90882** fix add self-knowledge docs rule to system prompt. Related #90713. Thanks @SutraHsing. ↗ 399 **PR #94684** fix #80507 show dry-run output for message send/poll. Thanks @lzyyzznl and @YB0y. ↗ 400 **PR #93823** fix(whatsapp) keep opening text chunk when first media fails on multi-chunk reply. Thanks @yetval. ↗ 401 **PR #89203** refactor route SDK session compatibility through seam. Thanks @jalehman. ↗ 402 **PR #94453** fix default cron runMode to "due" instead of "force" (#94270). Thanks @jincheng-xydt and @sallyom and @davectr. ↗ 403 **PR #94746** fix(note) prevent clack from re-breaking copy-sensitive tokens. Related #94730. Thanks @xzh-icenter and @berkgungor. ↗ 404 **PR #89904** refactor route sdk session compatibility through accessor. Thanks @jalehman. ↗ 405 **PR #86719** fix(skills) retarget stale plugin skill symlinks. Related #85925. Thanks @stevenepalmer and @shakkernerd. ↗ 406 **PR #94337** fix(tui) show 0 not ? for fresh-session context tokens in footer. Thanks @mushuiyu886. ↗ 407 **PR #94539** fix(android) group settings by intent. Thanks @Tosko4. ↗ 408 **PR #92383** fix(gateway) never return an empty chat.history transcript. Thanks @Hidetsugu55. ↗ 409 **PR #92574** test(browser) cover action-input CLI request bodies. Related #83877. Thanks @yu-xin-c and @davinci282828. ↗ 410 **PR #92873** test(diffs) add viewerState, toolbar toggle, shadow root, and hydrateProps tests (fixes #83915). Thanks @liuhao1024 and @davinci282828. ↗ 411 **PR #94257** fix(sessions) preserve Media\* index alignment when reading user-turn fields. Thanks @Nas01010101. ↗ 412 **PR #94756** fix(codex) bound turn/start text when context budget is non-positive. Related #94748. Thanks @Nas01010101. ↗ 413 **PR #94729** fix(skills/trello) add curl to requires.bins to match body examples (fixes #94727). Thanks @liuhao1024 and @berkgungor. ↗ 414 **PR #94790** feat(slack) log INFO receipt for inbound app_mention events. Related #94691. Thanks @ZengWen-DT and @BryceMurray. ↗ 415 **PR #81696** fix guard tool event callbacks (AI-assisted). Thanks @enjoylife1243. ↗ 416 **PR #94809** chore forward-port alpha release fixes. ↗ 417 **PR #94612** fix(macos) open NSOpenPanel for embedded Control UI file inputs (#94468). Thanks @bbblending and @DINGDANGMAOUP. ↗ 418 **PR #89806** fix(feishu) avoid axios interceptor internals. Related #83913. Thanks @sweetcornna and @davinci282828. ↗ 419 **PR #91923** fix(ios) clean up notification settings state. Thanks @zats. ↗ 420 **PR #91345** fix suggest close CLI commands. Related #83999. Thanks @glenn-agent and @HannesOberreiter. ↗ 421 **PR #94561** Add stdout diagnostics OTEL log exporter **PR #94561** Add stdout diagnostics OTEL log exporter. Thanks @jesse-merhi. ↗ 422 **PR #91013** fix(gateway) ignore stale abort markers for fresh chat events. Related #91012. Thanks @nxmxbbd. ↗ 423 **PR #89279** fix(tasks) deliver ACP completions to bound Discord threads. Related #84022. Thanks @anyech and @h-mascot. ↗ 424 **PR #91656** test(cron) expand parseAbsoluteTimeMs test coverage to 39 cases. Related #91654. Thanks @SpecialLeon. ↗ 425 **PR #94810** fix(telegram) classify sendChatAction 401 by structured error_code, not bare substring match. Related #94787. Thanks @ZOOWH and @parveshsaini. ↗ 426 **PR #94737** fix(reply) clarify provider internal error copy. Thanks @snowzlmbot. ↗ 427 **PR #94868** fix(channels) preserve command progress detail. Thanks @vincentkoc. ↗ 428 **PR #94891** fix(telegram) send progress previews as html text. Thanks @obviyus. ↗ 429 **PR #94683** fix(outbound) keep direct-only targets out of group sessions. Related #92384. Thanks @scotthuang and @haiwei01. ↗ 430 **PR #92477** fix migrate watch app to single-target app (Xcode 27+ compat). Thanks @zats and @joshavant. ↗ 431 **PR #94812** test(perf) compare saved CLI startup benchmarks. Thanks @FelixIsaac. ↗ 432 **PR #94856** fix(telegram) normalize all HTML tables before entity-escaping in rich messages. Related #94317. Thanks @zhangqueping and @jairrab. ↗ 433 **PR #91685** fix(cron) refuse keyless implicit isolated cron delivery inherited from shared agent-main bucket. Thanks @nxmxbbd. ↗
204 changes Open upstream ↗
01 **Richer channel delivery ** Telegram and WhatsApp are less brittle: Telegram renders structured text with tables, lists, expandable blockquotes, preserved intentional line breaks, and CLI-backed replies, while WhatsApp now honors configured ACP bindings. (#92679, #93164, #84082, #89421, #92513) Thanks @obviyus, @vincentkoc, @jzakirov, @spacegeologist, @TurboTheTurtle, @mcaxtr, @myrzka, and @dmorn. ↗ 02 **More reliable agent runs ** account-scoped DM sends, generated media completions, auto-reply message-tool final replies, reset archive fallback reads, restart shutdown aborts, yielded subagent pauses, and session identity prompts all stay on the correct recovery path. (#92788, #91246, #92879, #91357, #92631, #92468) Thanks @yetval, @TurboTheTurtle, @masatohoshino, @CadanHu, @vincentkoc, @ooiuuii, @openperf, @zhangguiping-xydt, @QQSHI13, @kumaxs, and @aleps001. ↗ 03 **Safer model routing ** new GLM-5.2 and Claude Haiku 4.5 catalog support arrives with normalized provider IDs, managed SecretRef auth, bounded model browsing, and safer OpenAI/Anthropic tool-schema recovery. (#92796, #90116, #92627, #90686, #92247, #92941) Thanks @arkyu2077, @liuhao1024, @lijenhsin, @rohitjavvadi, @samson910022, @maaron34, @syfvb, and @samson1357924. ↗ 04 **Useful usage footers ** `/usage` and reply payload hooks now have a native full footer renderer, default template, fixed-decimal formatting, credential-aware limits, better partial-count handling, and warnings for broken templates instead of silent bad output. (#92657, #89835, #89629) Thanks @Marvinthebored. ↗ 05 **Predictable web search defaults ** key-free providers such as Parallel Free, DuckDuckGo, Ollama, and Codex Hosted Search remain explicit opt-ins rather than surprising automatic fallbacks. (#93616) Thanks @davemorin and @vincentkoc. ↗ 06 **Calmer UI and mobile sessions ** workspace files start collapsed, WebChat backscroll survives streaming, the desktop session picker remains interactive, reset arguments survive dispatch, and iOS reconnects stale foreground Gateways. (#92779, #92622, #92705, #91353, #92552) Thanks @shakkernerd, @TurboTheTurtle, @NianJiuZst, @zhouhe-xydt, @Solvely-Colin, @MaBeitian, @vincentkoc, @Chang2020618, and @DrtyMorty. ↗ 07 **Resilient memory and state ** oversized OpenAI embedding batches split before 431s, QMD search stays available in transient mode, SQLite avoids WAL on NFS volumes, and full reindexes preserve rollback/cache recovery. (#92650, #92618, #92639, #91247, #92881) Thanks @mushuiyu886, @BrettHamlin, @zhbcher, @TurboTheTurtle, @Takhoffman, @849261680, @TSHOGX, @vincentkoc, and @AFabyTWE. ↗ 08 Providers/models add GLM-5.2 support and Claude Haiku 4.5 catalog entries while keeping provider-qualified model IDs normalized across OpenRouter and Google Vertex paths. (#92796, #90116, #92627, #91218) Thanks @arkyu2077, @liuhao1024, @bymle, @maaron34, @lijenhsin, @davemorin, and @vincentkoc. ↗ 09 Web search keep key-free providers such as Parallel Free, DuckDuckGo, Ollama, and Codex Hosted Search as explicit opt-ins instead of selecting them automatically when no API-backed provider is configured. (#93616) Thanks @davemorin and @vincentkoc. ↗ 10 Channel plugins ship Telegram rich-message delivery and WhatsApp ACP binding support, including preserved intentional line breaks, rich prompt handoff to CLI backends, and transport fixtures for richer drafts. (#92679, #93164, #92513) Thanks @obviyus, @TurboTheTurtle, @vincentkoc, @mcaxtr, and @dmorn. ↗ 11 Agent commands support `/btw` in CLI-backed sessions and keep CLI usage-error exits classified as usage failures instead of successful runs. (#92669, #92162) Thanks @joshavant, @Pandah97, @marcospaulo, @davemorin, and @vincentkoc. ↗ 12 Usage hooks add built-in full footer rendering, default footer templates, per-turn usage state, credential-aware limits, and fixed-decimal formatting for usage-bar templates. (#92657, #89835, #89629) Thanks @Marvinthebored. ↗ 13 **PR #92144** fix(cron) report SQLite storage path in cron.status instead of legacy jobs.json. Related #91766. Thanks @liuhao1024 and @AaronFaby. ↗ 14 **PR #92175** fix(channel) harden local setup trust. Thanks @hxy91819. ↗ 15 **PR #91528** fix #73837 stop after failed Node package installs. Thanks @mushuiyu886 and @ItsMeForLua. ↗ 16 **PR #91561** fix(wizard) report keyless web_search providers as ready, not missing a key. Thanks @NormallyGaussian. ↗ 17 **PR #92073** fix handle explicit silent assistant replies. Related #92038. Thanks @sallyom and @vultusv. ↗ 18 **PR #91311** Allow Skill Workshop apply through trusted skill symlinks **PR #91311** Allow Skill Workshop apply through trusted skill symlinks. Thanks @abnershang. ↗ 19 **PR #88245** refactor(whatsapp) introduce inbound message contexts. Thanks @mcaxtr. ↗ 20 **PR #92212** refactor move workspace skill writes to lifecycle. Thanks @shakkernerd. ↗ 21 **PR #92248** Remove ClawHub owner preflight **PR #92248** Remove ClawHub owner preflight. Thanks @Patrick-Erichsen. ↗ 22 **PR #91617** test(sqlite) add state perf query plan harness. Related #91616. Thanks @galiniliev. ↗ 23 **PR #91626** fix(daemon) keep status readable on unsupported services. Related #25621. Thanks @mushuiyu886 and @kucharskim. ↗ 24 **PR #92295** fix(cron) preserve tz and staggerMs when --cron replaces expression. Related #92291. Thanks @liuhao1024 and @dcapclaw. ↗ 25 **PR #92087** fix(docker) bundle QA Lab runtime in the image. Thanks @jesse-merhi. ↗ 26 **PR #92004** fix(telegram) classify streaming preview edit failures instead of killing the draft. Thanks @obviyus. ↗ 27 **PR #91997** fix(telegram) survive getUpdates conflicts in isolated polling ingress. Thanks @obviyus. ↗ 28 **PR #92387** fix(anthropic-vertex) stop re-marking cache_control on transport-budgeted payloads. Related #91982. Thanks @openperf and @Takhoffman and @danieljimz. ↗ 29 **PR #92229** Fix doctor preview channel SecretRef resolution **PR #92229** Fix doctor preview channel SecretRef resolution. Related #91939. Thanks @joshavant and @Niriakot. ↗ 30 **PR #92225** Fix disabled heartbeat one-shot cron retries **PR #92225** Fix disabled heartbeat one-shot cron retries. Related #91775. Thanks @joshavant and @A1fred-AI. ↗ 31 **PR #92265** Fix configured DeepSeek model transport inheritance **PR #92265** Fix configured DeepSeek model transport inheritance. Related #92148. Thanks @joshavant and @marcoraepple-sys. ↗ 32 **PR #92226** Fail closed for CLI-backed /btw fallback **PR #92226** Fail closed for CLI-backed /btw fallback. Related #92168. Thanks @joshavant and @wangwllu. ↗ 33 **PR #92231** Fix suppressed heartbeat commitment delivery **PR #92231** Fix suppressed heartbeat commitment delivery. Related #91948. Thanks @joshavant and @bizzle12368239. ↗ 34 **PR #92280** fix(agents) classify structured unsupported model errors. Related #92118. Thanks @joshavant and @pikaqqqqqq. ↗ 35 **PR #92276** Fix OTLP log trace correlation **PR #92276** Fix OTLP log trace correlation. Related #91865. Thanks @joshavant and @sinzin91. ↗ 36 **PR #92282** fix(update) hand off Linux service auto-updates. Related #91823. Thanks @joshavant and @hanyizuo. ↗ 37 **PR #92235** fix resolve managed SecretRef provider auth. Related #92097. Thanks @joshavant and @LINSUISHENG034. ↗ 38 **PR #92293** Fix provider static model fallback resolution **PR #92293** Fix provider static model fallback resolution. Related #92009. Thanks @joshavant and @mattsfraser. ↗ 39 **PR #92343** fix(agent) continue after source message tool replies. Related #92169. Thanks @joshavant and @elyalvarado. ↗ 40 **PR #92350** fix(codex) preserve memory prompt registration. Thanks @rubencu and @sallyom. ↗ 41 **PR #92290** fix clarify gateway SecretRef auth diagnostics. Related #91815. Thanks @joshavant and @mattsfraser. ↗ 42 **PR #92286** fix repair rejected Anthropic thinking replay. Related #91983. Thanks @joshavant and @reginaldomarcilon. ↗ 43 **PR #92281** Fix Telegram spooled buffered replay **PR #92281** Fix Telegram spooled buffered replay. Related #92129. Thanks @joshavant and @riseandshinefutures. ↗ 44 **PR #47493** fix(doctor) show per-step progress spinners during update. Thanks @amersheeny. ↗ 45 **PR #92416** fix(outbound) honor top-level image param as send media source (#92407). Thanks @xydigit-sj and @ichirokyoto. ↗ 46 **PR #92508** fix(sandbox) render CLI skill prompts from materialized paths. Thanks @brokemac79. ↗ 47 **PR #92540** chore fix esbuild production audit failure. Thanks @RomneyDa. ↗ 48 **PR #91484** Add QA evidence artifact output **PR #91484** Add QA evidence artifact output. Thanks @RomneyDa. ↗ 49 **PR #91500** Add QA scorecard taxonomy validation **PR #91500** Add QA scorecard taxonomy validation. Thanks @RomneyDa. ↗ 50 **PR #84082** fix(telegram) allow expandable blockquotes. Thanks @jzakirov. ↗ 51 **PR #92554** feat(moonshot) add Kimi K2.7 Code support. ↗ 52 **PR #92396** fix(moonshot) backfill reasoning_content on assistant tool-call replay messages. Related #71491. Thanks @xialonglee and @RoseKongPS. ↗ 53 **PR #92566** Fix lifecycle timeout cleanup after leader exit **PR #92566** Fix lifecycle timeout cleanup after leader exit. Thanks @RomneyDa. ↗ 54 **PR #92311** ci split plugin ClawHub publishing paths. Thanks @Patrick-Erichsen. ↗ 55 **PR #92216** fix(gateway) mirror hidden commentary-phase assistant events. Thanks @ragesaq. ↗ 56 **PR #87596** fix(moonshot) rewrite duplicate native Kimi tool_call ids on replay. Related #51593. Thanks @Pluviobyte and @Faaab84. ↗ 57 **PR #88993** Expose paged channel action results **PR #88993** Expose paged channel action results. Thanks @fuller-stack-dev. ↗ 58 **PR #90326** fix(fireworks) resolve catalog model params from plugin.json via core. Thanks @obuchowski. ↗ 59 **PR #86629** fix(doctor) warn for untrusted external Discord plugin. Related #83212. Thanks @brokemac79 and @ooiuuii and @cdeyoung67. ↗ 60 **PR #90242** fix(providers) skip unreadable Mistral tool schemas. Thanks @vincentkoc. ↗ 61 **PR #92498** fix(reply) mirror same-channel Slack final replies. Related #92489. Thanks @TurboTheTurtle and @TalkingHeadsJed. ↗ 62 **PR #92083** fix(channels) default boundary logger for swallowed progress-draft start errors. Thanks @hansraj316. ↗ 63 **PR #92564** fix(agents) isolate invalid plugin model catalogs [AI-assisted]. Related #92553. Thanks @tangtaizong666 and @fxstein. ↗ 64 **PR #89827** docs UX-013 — design system documentation. Thanks @BunsDev. ↗ 65 **PR #89615** feat(ui) hide empty workboard columns. Thanks @BunsDev. ↗ 66 **PR #89822** fix(a11y) B-1+B-2+B-3 — contrast, focus states, minimum font sizes. Thanks @BunsDev. ↗ 67 **PR #92618** fix #92218 memory_search tool disabled with QMD backend. Thanks @mushuiyu886 and @zhbcher. ↗ 68 **PR #92608** docs(gateway) add uptime monitoring guidance to health check docs (fixes #55768). Thanks @liuhao1024 and @faahim. ↗ 69 **PR #92605** fix(docs) pin Windows Hub download links to v2026.6.5. Related #92470. Thanks @lzyyzznl and @arjkul. ↗ 70 **PR #92593** #92589 fix(internal-runtime-context): wrap prompt-preface runtime context body in delimiters. Thanks @zhangqueping and @jovi2014-cyber. ↗ 71 **PR #92606** Run Vitest and Playwright scenarios from qa suite **PR #92606** Run Vitest and Playwright scenarios from qa suite. Thanks @RomneyDa. ↗ 72 **PR #89629** feat(hooks) per-turn usageState on reply_payload_sending. Thanks @Marvinthebored. ↗ 73 **PR #89835** feat(usage) native templated /usage full footer renderer. Thanks @Marvinthebored. ↗ 74 **PR #92247** fix(models) bound /models and models list catalog loading. Related #91809. Thanks @samson910022 and @samson1357924 and @syfvb. ↗ 75 **PR #92646** fix require admin for HTTP model overrides. Thanks @steipete-oai. ↗ 76 **PR #90686** fix(gateway) honor profile auth for SecretRef model entries. Related #90685. Thanks @rohitjavvadi. ↗ 77 **PR #92651** fix require admin for HTTP session kills. Thanks @steipete-oai. ↗ 78 **PR #92652** test(models) stabilize plugin auth marker fixtures. ↗ 79 **PR #89438** fix(slack) warn when channels map is keyed by name instead of channel ID. Related #81665. Thanks @Alix-007 and @cjalden. ↗ 80 **PR #92631** fix(agents) pause yielded subagent runs whose terminal also signals abort. Related #92448. Thanks @openperf and @vincentkoc and @aleps001. ↗ 81 **PR #92622** fix(ui) preserve WebChat backscroll during streaming. Related #92386. Thanks @TurboTheTurtle and @vincentkoc and @DrtyMorty. ↗ 82 **PR #92627** fix(openrouter) strip openrouter/ prefix from model ID in normalizeResolvedModel hook (fixes #92611). Thanks @liuhao1024 and @lijenhsin. ↗ 83 **PR #92146** fix(cron) preserve yielded media completions. Related #92120. Thanks @IWhatsskill and @nailujac. ↗ 84 **PR #90116** fix add Claude Haiku 4.5 static catalog entries. Related #90088. Thanks @arkyu2077 and @maaron34. ↗ 85 **PR #91137** fix(channels) keep contributed message-tool schema properties optional. Related #67852. Thanks @lundog and @RewardsPal. ↗ 86 **PR #75393** fix(copilot) disable eager tool streaming for Claude 4.5. Related #75348. Thanks @Kailigithub and @finchinslc. ↗ 87 **PR #92628** fix #73713 surface nested embedding fetch failures. Thanks @mushuiyu886 and @crsnpalmer-art. ↗ 88 **PR #92510** fix(gateway) reject unknown OpenAI agent selectors. Related #92504. Thanks @zhangguiping-xydt and @ryanhelms. ↗ 89 **PR #91453** fix #91420 [Bug]: Delivery retry loop corrupts active sessions (R-004) — retry selector bypasses delivery.mode=none. Thanks @zhangguiping-xydt and @CarotaWealth. ↗ 90 **PR #92468** fix #92453 add session identity to runtime prompt. Thanks @zhangguiping-xydt and @QQSHI13. ↗ 91 **PR #89943** fix(slack) emit message_sent hook on outbound delivery (mirror Telegram). Related #89942. Thanks @rishitamrakar. ↗ 92 **PR #92668** fix(docs) finalize i18n postprocess before skip. Thanks @hxy91819. ↗ 93 **PR #92673** fix split image setup and request timeout semantics. Thanks @hxy91819. ↗ 94 **PR #92162** #92069 fix(cli): usage errors exit 0. Thanks @Pandah97 and @marcospaulo. ↗ 95 **PR #91185** fix(browser) remove dead requireRef import and void expression in register.navigation.ts. Related #83878. Thanks @whiteyzy and @davinci282828. ↗ 96 **PR #90706** fix(OpenAI Responses) disable item id replay for storeless providers. Related #89728. Thanks @snowzlm. ↗ 97 **PR #90247** fix(disk-space) promote 1024 MiB to 1.0 GiB in disk warnings. Related #90245. Thanks @jbetala7. ↗ 98 **PR #92657** feat(usage) ship built-in /usage full footer. Thanks @Marvinthebored. ↗ 99 **PR #90464** perf(terminal) reuse ANSI scanner during truncation. Thanks @yyzquwu. ↗ 100 **PR #91281** fix(feishu) clear client cache when SDK is replaced via setFeishuClientRuntimeForTest. Related #83911. Thanks @whiteyzy and @davinci282828. ↗ 101 **PR #92639** fix(memory) keep memory_search in transient qmd mode. Related #92464. Thanks @TurboTheTurtle and @Takhoffman and @BrettHamlin. ↗ 102 **PR #91287** fix(cron) de-duplicate main-session systemEvent in heartbeat model input. Related #44922. Thanks @ZengWen-DT and @GSL-R. ↗ 103 **PR #91246** Fix webchat media completion handoff **PR #91246** Fix webchat media completion handoff. Related #91003. Thanks @TurboTheTurtle and @kumaxs. ↗ 104 **PR #91353** fix(ui) preserve /reset soft args in Control UI dispatch. Related #91316. Thanks @zhouhe-xydt and @MaBeitian. ↗ 105 **PR #92679** feat(telegram) send rich message text. Thanks @obviyus. ↗ 106 **PR #92705** fix(ui) restore sidebar session picker interactivity above desktop workbench. Related #92707. Thanks @NianJiuZst and @vincentkoc. ↗ 107 **PR #91218** fix(google) strip provider prefix from Vertex model path. Thanks @bymle. ↗ 108 **PR #92669** feat support /btw in CLI-backed sessions. Thanks @joshavant. ↗ 109 **PR #91357** fix(gateway) mark active main sessions before restart shutdown aborts. Related #91355. Thanks @ooiuuii. ↗ 110 **PR #91066** fix(parallel) send openclaw-parallel User-Agent on free Search MCP requests. Thanks @NormallyGaussian. ↗ 111 **PR #90658** fix(ui) preserve dashboard session parent lineage when session list is stale. Related #90623. Thanks @luoyanglang and @lily-oc. ↗ 112 **PR #92552** fix(ios) force stale foreground gateway reconnects. Thanks @Solvely-Colin. ↗ 113 **PR #89421** fix(telegram) expose thread create CLI remap. Related #81581. Thanks @spacegeologist and @myrzka. ↗ 114 **PR #92779** fix start workspace files collapsed. Related #90359. Thanks @shakkernerd and @Chang2020618. ↗ 115 **PR #91247** fix(state) avoid sqlite wal on nfs state volumes. Related #90491. Thanks @849261680 and @AFabyTWE. ↗ 116 **PR #92773** fix(tui) show resolved canonical model ref in /model confirmation. Thanks @NarahariRaghava. ↗ 117 **PR #92752** fix(diagnostics) keep recovery scheduling out of the stuck-session warning backoff. Related #92742. Thanks @gnanam1990 and @Takhoffman and @zhuyankarl. ↗ 118 **PR #92735** fix(markdown-core) treat Infinity chunk limit as unbounded, not 1. Related #92734. Thanks @yhterrance. ↗ 119 **PR #92695** docs(config) correct maxConcurrent default in agent-defaults type comments (AI-assisted). Thanks @ArielSmoliar. ↗ 120 **PR #92766** clarify before_install hook scope **PR #92766** clarify before_install hook scope. Related #91593. Thanks @sallyom and @Trump-last. ↗ 121 **PR #92677** docs(nodes) add openclaw.json config example to Nodes overview. Related #92662. Thanks @liuhao1024 and @Casper-Mars. ↗ 122 **PR #92513** Honor WhatsApp configured ACP bindings **PR #92513** Honor WhatsApp configured ACP bindings. Related #92449. Thanks @TurboTheTurtle and @mcaxtr and @dmorn. ↗ 123 **PR #92650** fix #92465 split OpenAI 431 embedding batches. Thanks @mushuiyu886 and @BrettHamlin. ↗ 124 **PR #92796** feat(providers) add GLM-5.2 support. ↗ 125 **PR #92788** fix(sessions) derive channel from account-scoped DM session keys in send-policy. Thanks @yetval. ↗ 126 **PR #92590** Docker image ships an extraneous stale openclaw in /app/node_... **PR #92590** Docker image ships an extraneous stale openclaw in /app/node_modules (extensions pin the published release). Related #92551. Thanks @lzyyzznl and @fxstein. ↗ 127 **PR #92393** chore(deps) bump the swift-deps group across 1 directory with 3 updates. ↗ 128 **PR #92476** fix(agents) preserve compatible CLI session runtime pins. Thanks @yu-xin-c. ↗ 129 **PR #92483** fix(matrix) validate CLI numeric option ranges. Related #92482. Thanks @rohitjavvadi. ↗ 130 **PR #92490** fix(canvas) validate CLI numeric options. Related #92487. Thanks @rohitjavvadi. ↗ 131 **PR #92802** fix(ui) reflow composer beside workspace rail. Thanks @Solvely-Colin and @shakkernerd. ↗ 132 **PR #91059** fix(configure) mask gateway token input in CLI wizard prompt. Thanks @anurag-bg-neu. ↗ 133 **PR #91143** fix(ports) only classify SSH -L/-R tunnels on the queried port as ssh. Related #91142. Thanks @jbetala7. ↗ 134 **PR #91110** fix(tavily) keep web_search contract executable. Related #91096. Thanks @extrasmall0 and @xucongyuan98-sys. ↗ 135 **PR #91181** fix(daemon) strip schtasks backslash prefix when matching gateway task name. Related #90494. Thanks @425072024 and @Darnellicious. ↗ 136 **PR #91187** fix(cron) isolate auth profile failure policy so cron runs don't pollute shared cooldowns. Related #90991. Thanks @openperf and @cx306806112. ↗ 137 **PR #92807** fix(heartbeat) route outbound mirror to isolated session key. Thanks @agent-merkava. ↗ 138 **PR #92745** fix(memory) explain skipped short-term recall hits. Related #92706. Thanks @mushuiyu886 and @armarinho. ↗ 139 **PR #92488** fix(gateway) forward image-only input on /v1/responses (parity with chat completions). Thanks @s554097550 and @cursoragent. ↗ 140 **PR #92604** fix(status) avoid cumulative usage for context percent. Related #83526. Thanks @ashishpatel26 and @darconadalabarga. ↗ 141 **PR #92810** fix reject unvalidated voice media streams. Thanks @steipete-oai. ↗ 142 **PR #92800** fix(telegram) answer callback queries before sequentialize delays them. Related #42156. Thanks @liuhao1024 and @Diaspar4u. ↗ 143 **PR #92547** fix(nodes) surface pending reapproval diagnostics. Thanks @fuller-stack-dev. ↗ 144 **PR #92690** fix(doctor) avoid false-positive legacy cron store warning when store was already migrated (fixes #92683). Thanks @liuhao1024 and @motteman. ↗ 145 **PR #92806** fix(telegram) skip IPv4 fallback when user explicitly configures non-ipv4first dnsResultOrder (fixes #41671). Thanks @liuhao1024 and @vincentkoc and @leandroirani933-ctrl. ↗ 146 **PR #92778** fix(macos) defer isOverflowing mutation to break SwiftUI render loop (fixes #43480). Thanks @liuhao1024 and @vincentkoc and @gdiab. ↗ 147 **PR #92795** fix(gateway) use resolveNonNegativeNumber for totalTokens to display 0 instead of ? (fixes #43009). Thanks @liuhao1024 and @vincentkoc and @ltxy12138-ai. ↗ 148 **PR #92746** fix(gateway) preserve active runs during plugin finalization. Thanks @scotthuang and @vincentkoc. ↗ 149 **PR #92820** UI localize Logs tab labels. Thanks @rubensfox20. ↗ 150 **PR #92825** fix(telegram) preserve command callbacks while prefixing generic callback data. Related #54909. Thanks @hnshah and @timt80. ↗ 151 **PR #90889** fix cap session context overrides by model window. Related #39857. Thanks @xdanger. ↗ 152 **PR #92830** fix(copilot) strip replayed thinking blocks. Related #81520. Thanks @giodl73-repo and @warcold. ↗ 153 **PR #92834** feat(browser) extend --labels overlay to full-page and element captures. Thanks @hxy91819 and @FMLS and @cursoragent. ↗ 154 **PR #92836** fix(discord) raise thread title timeout and tokens to fit reasoning models. Thanks @hanamizuki. ↗ 155 **PR #92095** fix #92039 [Bug]: WhatsApp login reports success before auth is durably persisted, so Docker rebuilds/upgrades can force relink. Thanks @zhangguiping-xydt and @dinorastoder. ↗ 156 **PR #92801** fix(stale) exempt ClawSweeper actionable labels from stale lifecycle (fixes #89564). Thanks @liuhao1024 and @brokemac79. ↗ 157 **PR #89736** fix(status) render sub-1000 token counts as plain integers. Related #89735. Thanks @jbetala7 and @vincentkoc. ↗ 158 **PR #92792** fix(agents) catch malformed image blocks in sanitizeContentBlocksImages. Thanks @LowCode191 and @vincentkoc. ↗ 159 **PR #92555** ci gate stable releases on Windows companion assets. Thanks @fuller-stack-dev. ↗ 160 **PR #91824** fix(agents) add usage guidance to sessions_spawn tool description (fixes #91814). Thanks @zenglingbiao and @vincentkoc and @cattails-lgao. ↗ 161 **PR #92840** fix(feishu) await HTTP server shutdown during monitor cleanup. Related #48183. Thanks @alex-xuweilong and @ai-nurmamat. ↗ 162 **PR #91632** feat add tool search directory mode. Thanks @fuller-stack-dev. ↗ 163 **PR #92823** fix(qqbot) surface failed media sends. Thanks @zhangguiping-xydt and @vincentkoc. ↗ 164 **PR #92849** fix(tailscale) preserve parse errors for malformed JSON. Thanks @franciscomaestre. ↗ 165 **PR #92045** Fix diagnostics OTEL runtime install trust **PR #92045** Fix diagnostics OTEL runtime install trust. Thanks @efpiva. ↗ 166 **PR #92853** fix(acp) accept MCP date protocolVersion in ACP server. Related #56102. Thanks @bugkill3r and @moliveto. ↗ 167 **PR #92854** fix(hooks) reject slug-generator error payloads. Thanks @Cypherm. ↗ 168 **PR #92855** fix(ui) repair iOS Safari chat viewport handling. Thanks @macdao. ↗ 169 **PR #91586** fix(update) continue after package doctor warnings. Thanks @fuller-stack-dev. ↗ 170 **PR #92862** fix(feishu) target typing reaction on inbound message. Thanks @huiwen01. ↗ 171 **PR #92861** fix(lobster) surface workflow path errors. Related #68101. Thanks @vvitovec and @MPC7500. ↗ 172 **PR #69975** fix(cli) clarify --tz help text for offset-less --at values. Related #59456. Thanks @rrrrrredy. ↗ 173 **PR #90682** fix(openai) preserve opaque reasoning transcript fields. Related #90093. Thanks @toruvieI and @richardmqq. ↗ 174 **PR #92373** fix(anthropic) strip thinking blocks from history when thinking is disabled (fixes #92360). Thanks @liuhao1024 and @notnaji. ↗ 175 **PR #87346** fix(anthropic) merge consecutive assistant turns in turn validation. Related #87329. Thanks @Jefsky and @travellingsoldier85. ↗ 176 **PR #92896** fix(anthropic) quarantine invalid direct tool schemas. Thanks @vincentkoc. ↗ 177 **PR #90739** fix(active-memory) preserve verbose recall summaries. Related #90454. Thanks @brokemac79 and @nocode-ananas. ↗ 178 **PR #92558** Simplify QA scorecard mapping shape **PR #92558** Simplify QA scorecard mapping shape. Thanks @RomneyDa. ↗ 179 **PR #92876** fix(memory-wiki) stop flagging raw source pages as malformed. Thanks @vincentkoc. ↗ 180 **PR #92908** fix(providers) quarantine unreadable Anthropic payload tools. Thanks @vincentkoc. ↗ 181 **PR #92881** fix(memory) preserve reindex rollback recovery. Thanks @TSHOGX and @vincentkoc. ↗ 182 **PR #92921** fix(openai) quarantine unreadable tool schemas. Thanks @vincentkoc. ↗ 183 **PR #92550** Fold Telegram RTT sampling into live QA evidence **PR #92550** Fold Telegram RTT sampling into live QA evidence. Thanks @RomneyDa. ↗ 184 **PR #92824** fix(media) route OAuth image defaults through Codex. Related #87168. Thanks @bek91. ↗ 185 **PR #92928** fix(openai) guard post-hook tool payloads. Thanks @vincentkoc. ↗ 186 **PR #92814** fix(feishu) re-resolve route when dynamic agent binding already exists in runtime config (fixes #42837). Thanks @liuhao1024 and @vincentkoc and @cwlong163-afk. ↗ 187 **PR #89055** fix restart gateway after isolated cron setup timeout. Thanks @ghitafilali. ↗ 188 **PR #90574** fix(openai) omit gpt-5.5 tool reasoning effort. Thanks @BSG2000. ↗ 189 **PR #92941** fix(openai) recover invalid reasoning signatures. ↗ 190 **PR #92914** fix(agents) clamp unsupported thinking for subagent spawns instead of hard-failing. Related #92412. Thanks @openperf and @oiGaDio. ↗ 191 **PR #92573** fix preserve config-selected subagent model overrides. Related #92486. Thanks @arkyu2077 and @PatrickTrent. ↗ 192 **PR #92852** fix(gateway) fall back to polling when config watcher exhausts inotify retries. Related #92851. Thanks @danbao. ↗ 193 **PR #92362** fix(gateway) build row metadata context for single session lists. Thanks @anyech. ↗ 194 **PR #92897** fix(memory-wiki) tolerate public artifacts without agent ids. Related #92207. Thanks @yu-xin-c and @qq230849622-a11y. ↗ 195 **PR #92002** fix(lmstudio) deliver thinking "off" to binary-thinking models. Related #91913. Thanks @nxmxbbd and @mlaihk. ↗ 196 **PR #92738** Forward suppressed-source progress for message-tool channel r... **PR #92738** Forward suppressed-source progress for message-tool channel replies. Thanks @ragesaq. ↗ 197 **PR #92916** #92201 Embedded runner: freshly streamed thinking signatures intermittently invalid on replay (Anthropic); recovery wrapper never fires because error text is genericized. Thanks @mmyzwl and @CarlCapital. ↗ 198 **PR #90936** fix(agents) do not misclassify client-disconnect abort as run timeout. Related #90764. Thanks @openperf and @reginaldomarcilon. ↗ 199 **PR #93009** fix(agents) make wrapToolWithBeforeToolCallHook idempotent to prevent double hook execution (fixes #92973). Thanks @zenglingbiao and @dertbv. ↗ 200 **PR #92318** fix(cron) require explicit message target proof. Thanks @hxy91819. ↗ 201 **PR #93022** fix(gateway) repair usage cost aggregation across agents. Thanks @luke-skywalker-open-claw and @stablegenius49. ↗ 202 **PR #93159** fix(tui) keep parent stdin paused after exit. Thanks @fuller-stack-dev. ↗ 203 **PR #93616** Keep key-free web search providers opt-in **PR #93616** Keep key-free web search providers opt-in. Thanks @davemorin and @vincentkoc. ↗ 204 **PR #93164** fix(telegram) preserve rich markdown line breaks. Thanks @vincentkoc. ↗
66 changes Open upstream ↗
01 **Durable channel replies ** Telegram polling and preview failures recover instead of ending a stream, Slack keeps delivered replies in the transcript, and top-level image sends retain their intended media source. (#92281, #92498, #92416) Thanks @joshavant, @TurboTheTurtle, @xydigit-sj, @ichirokyoto, @TalkingHeadsJed, and @riseandshinefutures. ↗ 02 **More dependable provider sessions ** SecretRef-backed profiles, configured DeepSeek transports, static model fallback, Anthropic thinking replay, and Codex prompt memory all recover cleanly instead of leaving a turn unusable. (#92265, #92235, #92293, #92286, #92350) Thanks @joshavant, @rubencu, @sallyom, @marcoraepple-sys, @LINSUISHENG034, @mattsfraser, and @reginaldomarcilon. ↗ 03 **Kimi K2.7 Code support ** the provider catalog now includes the new Kimi coding model, with replay handling that preserves its reasoning content across tool turns. (#92554, #92396) Thanks @xialonglee and @RoseKongPS. ↗ 04 **Safer operations ** SQLite-backed cron status, disabled heartbeat retries, Linux service updates, and external-plugin diagnosis now expose clearer, actionable state to operators. (#92144, #92225, #92282, #86629) Thanks @liuhao1024, @joshavant, @brokemac79, @AaronFaby, @cdeyoung67, @ooiuuii, @shakkernerd, @A1fred-AI, and @hanyizuo. ↗ 05 **Guarded skill installs ** Skill Workshop support-file targets now go through trusted lifecycle writes instead of unbounded filesystem updates, while ClawHub package checks stay on the current release path. (#91311) Thanks @abnershang. ↗ 06 Skills and plugin workflows now permit trusted Skill Workshop support-file... Skills and plugin workflows now permit trusted Skill Workshop support-file targets only through guarded lifecycle writes, and package publishing uses the current ClawHub plugin checks. (#91311) Thanks @abnershang and @vincentkoc. ↗ 07 Providers add Kimi K2.7 Code support. (#92554) ↗ 08 **PR #92144** fix(cron) report SQLite storage path in cron.status instead of legacy jobs.json. Related #91766. Thanks @liuhao1024 and @AaronFaby. ↗ 09 **PR #92175** fix(channel) harden local setup trust. Thanks @hxy91819. ↗ 10 **PR #91528** fix #73837 stop after failed Node package installs. Thanks @mushuiyu886 and @ItsMeForLua. ↗ 11 **PR #91561** fix(wizard) report keyless web_search providers as ready, not missing a key. Thanks @NormallyGaussian. ↗ 12 **PR #92073** fix handle explicit silent assistant replies. Related #92038. Thanks @sallyom and @vultusv. ↗ 13 **PR #91311** Allow Skill Workshop apply through trusted skill symlinks **PR #91311** Allow Skill Workshop apply through trusted skill symlinks. Thanks @abnershang. ↗ 14 **PR #88245** refactor(whatsapp) introduce inbound message contexts. Thanks @mcaxtr. ↗ 15 **PR #92212** refactor move workspace skill writes to lifecycle. Thanks @shakkernerd. ↗ 16 **PR #92248** Remove ClawHub owner preflight **PR #92248** Remove ClawHub owner preflight. Thanks @Patrick-Erichsen. ↗ 17 **PR #91617** test(sqlite) add state perf query plan harness. Related #91616. Thanks @galiniliev. ↗ 18 **PR #91626** fix(daemon) keep status readable on unsupported services. Related #25621. Thanks @mushuiyu886 and @kucharskim. ↗ 19 **PR #92295** fix(cron) preserve tz and staggerMs when --cron replaces expression. Related #92291. Thanks @liuhao1024 and @dcapclaw. ↗ 20 **PR #92087** fix(docker) bundle QA Lab runtime in the image. Thanks @jesse-merhi. ↗ 21 **PR #92004** fix(telegram) classify streaming preview edit failures instead of killing the draft. Thanks @obviyus. ↗ 22 **PR #91997** fix(telegram) survive getUpdates conflicts in isolated polling ingress. Thanks @obviyus. ↗ 23 **PR #92387** fix(anthropic-vertex) stop re-marking cache_control on transport-budgeted payloads. Related #91982. Thanks @openperf and @Takhoffman and @danieljimz. ↗ 24 **PR #92229** Fix doctor preview channel SecretRef resolution **PR #92229** Fix doctor preview channel SecretRef resolution. Related #91939. Thanks @joshavant and @Niriakot. ↗ 25 **PR #92225** Fix disabled heartbeat one-shot cron retries **PR #92225** Fix disabled heartbeat one-shot cron retries. Related #91775. Thanks @joshavant and @A1fred-AI. ↗ 26 **PR #92265** Fix configured DeepSeek model transport inheritance **PR #92265** Fix configured DeepSeek model transport inheritance. Related #92148. Thanks @joshavant and @marcoraepple-sys. ↗ 27 **PR #92226** Fail closed for CLI-backed /btw fallback **PR #92226** Fail closed for CLI-backed /btw fallback. Related #92168. Thanks @joshavant and @wangwllu. ↗ 28 **PR #92231** Fix suppressed heartbeat commitment delivery **PR #92231** Fix suppressed heartbeat commitment delivery. Related #91948. Thanks @joshavant and @bizzle12368239. ↗ 29 **PR #92280** fix(agents) classify structured unsupported model errors. Related #92118. Thanks @joshavant and @pikaqqqqqq. ↗ 30 **PR #92276** Fix OTLP log trace correlation **PR #92276** Fix OTLP log trace correlation. Related #91865. Thanks @joshavant and @sinzin91. ↗ 31 **PR #92282** fix(update) hand off Linux service auto-updates. Related #91823. Thanks @joshavant and @hanyizuo. ↗ 32 **PR #92235** fix resolve managed SecretRef provider auth. Related #92097. Thanks @joshavant and @LINSUISHENG034. ↗ 33 **PR #92293** Fix provider static model fallback resolution **PR #92293** Fix provider static model fallback resolution. Related #92009. Thanks @joshavant and @mattsfraser. ↗ 34 **PR #92343** fix(agent) continue after source message tool replies. Related #92169. Thanks @joshavant and @elyalvarado. ↗ 35 **PR #92350** fix(codex) preserve memory prompt registration. Thanks @rubencu and @sallyom. ↗ 36 **PR #92290** fix clarify gateway SecretRef auth diagnostics. Related #91815. Thanks @joshavant and @mattsfraser. ↗ 37 **PR #92286** fix repair rejected Anthropic thinking replay. Related #91983. Thanks @joshavant and @reginaldomarcilon. ↗ 38 **PR #92281** Fix Telegram spooled buffered replay **PR #92281** Fix Telegram spooled buffered replay. Related #92129. Thanks @joshavant and @riseandshinefutures. ↗ 39 **PR #47493** fix(doctor) show per-step progress spinners during update. Thanks @amersheeny. ↗ 40 **PR #92416** fix(outbound) honor top-level image param as send media source (#92407). Thanks @xydigit-sj and @ichirokyoto. ↗ 41 **PR #92508** fix(sandbox) render CLI skill prompts from materialized paths. Thanks @brokemac79. ↗ 42 **PR #92540** chore fix esbuild production audit failure. Thanks @RomneyDa. ↗ 43 **PR #91484** Add QA evidence artifact output **PR #91484** Add QA evidence artifact output. Thanks @RomneyDa. ↗ 44 **PR #91500** Add QA scorecard taxonomy validation **PR #91500** Add QA scorecard taxonomy validation. Thanks @RomneyDa. ↗ 45 **PR #84082** fix(telegram) allow expandable blockquotes. Thanks @jzakirov. ↗ 46 **PR #92554** feat(moonshot) add Kimi K2.7 Code support. ↗ 47 **PR #92396** fix(moonshot) backfill reasoning_content on assistant tool-call replay messages. Related #71491. Thanks @xialonglee and @RoseKongPS. ↗ 48 **PR #92566** Fix lifecycle timeout cleanup after leader exit **PR #92566** Fix lifecycle timeout cleanup after leader exit. Thanks @RomneyDa. ↗ 49 **PR #92311** ci split plugin ClawHub publishing paths. Thanks @Patrick-Erichsen. ↗ 50 **PR #92216** fix(gateway) mirror hidden commentary-phase assistant events. Thanks @ragesaq. ↗ 51 **PR #87596** fix(moonshot) rewrite duplicate native Kimi tool_call ids on replay. Related #51593. Thanks @Pluviobyte and @Faaab84. ↗ 52 **PR #88993** Expose paged channel action results **PR #88993** Expose paged channel action results. Thanks @fuller-stack-dev. ↗ 53 **PR #90326** fix(fireworks) resolve catalog model params from plugin.json via core. Thanks @obuchowski. ↗ 54 **PR #86629** fix(doctor) warn for untrusted external Discord plugin. Related #83212. Thanks @brokemac79 and @ooiuuii and @cdeyoung67. ↗ 55 **PR #90242** fix(providers) skip unreadable Mistral tool schemas. Thanks @vincentkoc. ↗ 56 **PR #92498** fix(reply) mirror same-channel Slack final replies. Related #92489. Thanks @TurboTheTurtle and @TalkingHeadsJed. ↗ 57 **PR #92083** fix(channels) default boundary logger for swallowed progress-draft start errors. Thanks @hansraj316. ↗ 58 **PR #92564** fix(agents) isolate invalid plugin model catalogs [AI-assisted]. Related #92553. Thanks @tangtaizong666 and @fxstein. ↗ 59 **PR #89827** docs UX-013 — design system documentation. Thanks @BunsDev. ↗ 60 **PR #89615** feat(ui) hide empty workboard columns. Thanks @BunsDev. ↗ 61 **PR #89822** fix(a11y) B-1+B-2+B-3 — contrast, focus states, minimum font sizes. Thanks @BunsDev. ↗ 62 **PR #92618** fix #92218 memory_search tool disabled with QMD backend. Thanks @mushuiyu886 and @zhbcher. ↗ 63 **PR #92608** docs(gateway) add uptime monitoring guidance to health check docs (fixes #55768). Thanks @liuhao1024 and @faahim. ↗ 64 **PR #92605** fix(docs) pin Windows Hub download links to v2026.6.5. Related #92470. Thanks @lzyyzznl and @arjkul. ↗ 65 **PR #92593** #92589 fix(internal-runtime-context): wrap prompt-preface runtime context body in delimiters. Thanks @zhangqueping and @jovi2014-cyber. ↗ 66 **PR #92606** Run Vitest and Playwright scenarios from qa suite **PR #92606** Run Vitest and Playwright scenarios from qa suite. Thanks @RomneyDa. ↗
210 changes Open upstream ↗
01 **Tighter security boundaries ** transcript, sandbox, MCP, browser, channel, and exec-approval paths now fail closed around unsafe access, timed-out approvals, and malformed boundary input. (#91529, #91618, #91741, #91750, #89938) Thanks @joshavant, @pgondhi987, @mmaps, @eleqtrizit, @drobison00, @vincentkoc, and @devinkuhn. ↗ 02 **Reliable Telegram delivery ** account-scoped topics route to the correct agent, streamed text survives tool calls, callbacks and draft chunks stay coherent, and unauthorized DM text does not enter cache or prompt context. (#91189, #88682, #90212, #91478, #91915) Thanks @codysai001, @alexzhu0, @snowzlm, @obviyus, @sallyom, @AbdelftahZowail, @producedbysavant, @shakkernerd, @vincentkoc, and @BSG2000. ↗ 03 **iMessage stays connected ** always-on inbound recovery, durable echo markers, block streaming, idle approval discovery, and outbound transport now survive restarts and idle periods. (#91335, #91449, #88969, #91783) Thanks @omarshahine, @jmissig, @dwonshin, @colmbrogan, @vincentkoc, and @TurboTheTurtle. ↗ 04 **Better browser and MCP connectivity ** existing browser sessions, CDP/WebSocket discovery, default-profile URLs, OAuth/SSE transport, and tool schemas now connect through clearer, safer paths. (#91422, #89851, #91736, #91451) Thanks @pgondhi987, @anagnorisis2peripeteia, @eleqtrizit, @LiuwqGit, @lifuyue, @marcusbsorensen, @cursoragent, @vincentkoc, @849261680, and @mgrandau. ↗ 05 **Faster first replies ** Control UI startup no longer waits on broad model loading, while cached metadata, lazy slash-command work, and first-event tracing make slow initial responses visible. (#91531, #91538, #91568, #91583) Thanks @vincentkoc and @BSG2000. ↗ 06 **Broader provider support ** OpenRouter OAuth and Claude Fable 5 land alongside correct Codex compaction ownership, local-model execution, normalized tool progress, and Gemma 4 reasoning replay. (#91830, #91882, #91590, #88630, #91696) Thanks @Patrick-Erichsen, @joshavant, @bdjben, @Coder-Wangyankun, @vincentkoc, @bfox55, @shakkernerd, and @NOVA-Openclaw. ↗ 07 CLI progress emit Claude CLI commentary progress events and bridge inter-tool commentary into channel progress without exposing internal protocol scaffolding. (#89834, #90883) Thanks @anagnorisis2peripeteia, @AbdelftahZowail, @kentuscn, and @vincentkoc. ↗ 08 Observability allow trusted diagnostics channels to capture tool input/output content, add first-assistant-event traces, and warn on slow initial replies. (#91256, #91568, #91583) Thanks @amknight, @mjunaidca, and @vincentkoc. ↗ 09 Plugins/ClawHub dogfood reusable package publishing, let dry runs skip publish approval, allow declared installed trusted hooks, report managed plugin version drift, and warn instead of failing on retired Skill Workshop configuration. (#91574, #91591, #90004, #90927, #90838) Thanks @Patrick-Erichsen, @brokemac79, @lonexreb, @rogerallen1, @vincentkoc, and @ryanhelms. ↗ 10 Memory/providers move the local llama.cpp runtime into its provider plugin, batch embeddings across files, persist the agent model catalog cache, and keep QMD JSON search one-shot while filtering stale REM recall previews. (#91324, #89138, #90457, #91837, #91851) Thanks @osolmaz, @mushuiyu886, @ai-hpc, @TurboTheTurtle, @jalehman, @hartmark, @vincentkoc, @rudi193-cmd, @Peilsender, and @xpysgdhr. ↗ 11 Channels/mobile add the QQBot group mention toggle, improve iPad and iPhone control surfaces, and expose the active connection host in the TUI footer. (#91423, #91557, #89909) Thanks @cxyhhhhh, @Solvely-Colin, @baskduf, @joshavant, @sliverp, and @deuxksy. ↗ 12 Performance prewarm TUI runtime plugins, deduplicate plugin auto-enable fanout, trim dense text-delta snapshots, and reuse prepared startup model metadata. (#90782, #89978, #91580, #91531) Thanks @RomneyDa, @ai-hpc, @vincentkoc, and @JakeBiggs. ↗ 13 **PR #91335** fix(imessage) always-on inbound recovery and dedupe. Related #89237. Thanks @omarshahine and @vincentkoc and @dwonshin. ↗ 14 **PR #91189** fix(telegram) route account-scoped topic agents. Thanks @codysai001. ↗ 15 **PR #88682** Preserve Telegram streamed text blocks between tool calls **PR #88682** Preserve Telegram streamed text blocks between tool calls. Related #87326. Thanks @alexzhu0 and @AbdelftahZowail. ↗ 16 **PR #91390** fix clarify provider quota errors. Thanks @hxy91819. ↗ 17 **PR #90883** fix(cli) bridge inter-tool commentary events to channel progress. Thanks @anagnorisis2peripeteia. ↗ 18 **PR #91419** docs preserve channel brand terms in Chinese i18n. Thanks @hxy91819. ↗ 19 **PR #87105** fix(gateway) share approval runtime socket token. Thanks @fuller-stack-dev. ↗ 20 **PR #80082** fix(android) avoid dataSync FGS for persistent node. Thanks @davelutztx. ↗ 21 **PR #91442** docs preserve LINE across localized docs glossaries. Thanks @hxy91819. ↗ 22 **PR #88768** fix(codex) normalize dynamic tool progress results. Thanks @bdjben. ↗ 23 **PR #91422** fix(browser) neutralize media directives in browser output [AI]. Thanks @pgondhi987. ↗ 24 **PR #89834** feat(cli) emit commentary progress events from Claude CLI parser. Related #87326. Thanks @anagnorisis2peripeteia and @AbdelftahZowail. ↗ 25 **PR #85679** fix(agents) drop stale exec approval followups after session rebind. Related #59349. Thanks @openperf and @two3pro. ↗ 26 **PR #91450** fix(reply-queue) remove the drained item by reference instead of front index. Thanks @yetval. ↗ 27 **PR #89151** fix(delivery) suppress Codex/Harmony internal protocol artifacts from user-facing channels. Related #88128. Thanks @joelnishanth and @reslp. ↗ 28 **PR #90678** fix(cron) recover no-deliver tool warnings. Thanks @ai-hpc. ↗ 29 **PR #91449** fix(imessage) honor block streaming config. Thanks @jmissig and @omarshahine. ↗ 30 **PR #91508** Revert "docs add maturity scorecard mirror". Thanks @kevinslin. ↗ 31 **PR #91364** build(deps) bump github.com/steipete/peekaboo from 3.3.0 to 3.4.0 in /apps/macos in the swift-deps group. ↗ 32 **PR #91368** build(deps) bump actions/github-script from 8 to 9. ↗ 33 **PR #91512** chore add taxonomy file. Thanks @kevinslin. ↗ 34 **PR #91369** build(deps) bump actions/cache from 4 to 5. ↗ 35 **PR #91367** build(deps) bump the actions group with 2 updates. ↗ 36 **PR #91365** build(deps) bump the android-deps group in /apps/android with 3 updates. ↗ 37 **PR #91496** chore bump Codex app-server to 0.137.0. Thanks @RomneyDa. ↗ 38 **PR #90666** fix(cron) cancel active cron task runs. Thanks @ai-hpc. ↗ 39 **PR #90927** fix(doctor) report managed plugin version drift. Related #90891. Thanks @brokemac79. ↗ 40 **PR #91531** perf(control-ui) reuse startup model metadata. Thanks @vincentkoc. ↗ 41 **PR #91538** perf(control-ui) avoid startup catalog wait. Thanks @vincentkoc. ↗ 42 **PR #91507** feat canonicalize Codex protocol JSON asset ordering. Thanks @RomneyDa. ↗ 43 **PR #91550** fix bound native hook relay lifetime. Related #90993. Thanks @joshavant and @clem-git. ↗ 44 **PR #89588** fix(telegram) restore /compact on generic message ingress. Related #89525. Thanks @joelnishanth and @cursoragent and @bomberluke37-prog. ↗ 45 **PR #91529** Fix transcript image redaction **PR #91529** Fix transcript image redaction. Related #90760. Thanks @joshavant and @devinkuhn. ↗ 46 **PR #91551** Fix config **PR #91551** Fix config.patch explicit array replacement. Thanks @joshavant. ↗ 47 **PR #91568** perf(control-ui) trace first assistant event. Thanks @vincentkoc. ↗ 48 **PR #85823** fix(whatsapp) route captured replies through successor controller after restart. Thanks @itsuzef and @mcaxtr. ↗ 49 **PR #91574** feat dogfood reusable ClawHub package publish. Thanks @Patrick-Erichsen. ↗ 50 **PR #91583** perf(control-ui) warn on slow first replies. Thanks @vincentkoc. ↗ 51 **PR #89659** fix(feishu) retry on send rate-limit errors (230020/230006). Related #70879. Thanks @ladygege and @marshallm-create and @sliverp and @AxelHu. ↗ 52 **PR #91547** Fix Docker store seed target packages **PR #91547** Fix Docker store seed target packages. Related #91035. Thanks @sallyom and @laurenceputra. ↗ 53 **PR #91578** fix make docs i18n frontmatter translation resilient. Thanks @hxy91819. ↗ 54 **PR #91567** fix(openai) require api-key auth for realtime voice. Related #90456. Thanks @joshavant and @sergiopesch. ↗ 55 **PR #91591** fix let ClawHub dry runs skip publish approval. Thanks @Patrick-Erichsen. ↗ 56 **PR #91598** perf(control-ui) lazy load slash commands. Thanks @vincentkoc. ↗ 57 **PR #91580** fix(agents) trim dense text delta snapshots. Related #86599. Thanks @vincentkoc and @JakeBiggs. ↗ 58 **PR #91425** fix(memory-lancedb) guard memory recall output [AI]. Thanks @pgondhi987. ↗ 59 **PR #88969** fix(imessage) persist echo markers before send. Thanks @colmbrogan. ↗ 60 **PR #91566** Fix stale main session startup recovery **PR #91566** Fix stale main session startup recovery. Related #90525. Thanks @joshavant and @Tony-ooo. ↗ 61 **PR #91324** fix(memory) move local llama.cpp runtime to provider plugin. Related #88705. Thanks @osolmaz and @Peilsender. ↗ 62 **PR #91637** docs include plugin prerelease in release validation approval. ↗ 63 **PR #91649** fix(line) canonicalize trailing-slash webhook paths. ↗ 64 **PR #91423** feat(qqbot) add /bot-group-allways command to toggle mention requirement. Thanks @cxyhhhhh and @sliverp. ↗ 65 **PR #91642** fix(docs) continue partial i18n batches after file errors. Thanks @hxy91819. ↗ 66 **PR #91661** chore(plugin-sdk) refresh API baseline hash. ↗ 67 **PR #91665** docs fix release CI Android dispatch guidance. ↗ 68 **PR #89138** fix #88009 [Feature]: batched memory embedding should batch over files. Thanks @mushuiyu886 and @jalehman and @hartmark. ↗ 69 **PR #91679** fix(plugin-sdk) align Discord component edit facade types. Thanks @vincentkoc. ↗ 70 **PR #91686** fix(discord) restore runtime timeout compatibility exports. Thanks @vincentkoc. ↗ 71 **PR #90212** fix(agents) deliver native /compact replies through source suppression. Thanks @snowzlm. ↗ 72 **PR #91618** fix expand unsafe host env denylist. Thanks @pgondhi987. ↗ 73 **PR #91615** fix block rustup toolchain env overrides [AI]. Thanks @pgondhi987. ↗ 74 **PR #89851** fix(gateway) support Streamable HTTP MCP transport on loopback server. Thanks @anagnorisis2peripeteia. ↗ 75 **PR #91619** fix block git protocol env controls [AI]. Thanks @pgondhi987. ↗ 76 **PR #91684** fix(mattermost) keep default replies in existing threads. Thanks @jacobtomlinson. ↗ 77 **PR #90457** fix(models) persist agent catalog cache. Thanks @ai-hpc. ↗ 78 **PR #91709** fix(status) restore Codex synthetic usage line. Related #91694. Thanks @brokemac79. ↗ 79 **PR #89909** fix(tui) show connection host in footer. Related #56276. Thanks @baskduf and @deuxksy. ↗ 80 **PR #89978** perf(config) dedupe plugin auto-enable fanout work. Thanks @ai-hpc. ↗ 81 **PR #91219** fix(gateway) skip deleted-agent guard for ACP harness session keys. Thanks @scotthuang. ↗ 82 **PR #90782** perf(tui) prewarm runtime plugins before first send. Thanks @RomneyDa. ↗ 83 **PR #90838** fix(config) warn for retired skill-workshop plugin entry instead of failing validation (#90244). Thanks @lonexreb and @rogerallen1. ↗ 84 **PR #91753** docs clarify Matrix plugin upgrade repair. Thanks @RomneyDa. ↗ 85 **PR #91755** docs align Feishu DM policy defaults. Thanks @RomneyDa. ↗ 86 **PR #91745** fix(discord) require sender for moderation actions [AI]. Thanks @eleqtrizit. ↗ 87 **PR #85950** docs clarify trusted-proxy Control UI scope behavior. Related #80063. Thanks @nielskaspers and @longstoryscott. ↗ 88 **PR #91746** fix(msteams) require admin for group actions. Thanks @eleqtrizit. ↗ 89 **PR #91256** feat(diagnostics-otel) capture tool input/output content via trusted channel. Thanks @amknight. ↗ 90 **PR #91749** fix(gateway) restrict non-owner loopback tools. Thanks @eleqtrizit. ↗ 91 **PR #91748** fix(elevated) reject group ids as senders. Thanks @eleqtrizit. ↗ 92 **PR #91752** fix(codex) guard sandbox http requests. Thanks @eleqtrizit. ↗ 93 **PR #91763** fix require ACP metadata for deleted-agent bypass. Thanks @shakkernerd. ↗ 94 **PR #91751** fix(mcp) harden stdio env filtering. Thanks @eleqtrizit. ↗ 95 **PR #91765** Clarify env-var executable behavior reports in SECURITY **PR #91765** Clarify env-var executable behavior reports in SECURITY.md. Thanks @jacobtomlinson. ↗ 96 **PR #91480** fix(ui) require user intent for chat sessions. Related #89760. Thanks @TurboTheTurtle and @Takhoffman and @zdwalter. ↗ 97 **PR #91777** docs remove superpowers spec draft. Thanks @Patrick-Erichsen. ↗ 98 **PR #91773** fix(mcp) lowercase SSE event-source header keys to prevent duplicate Authorization (401). Thanks @Takhoffman. ↗ 99 **PR #91741** Validate sandbox bind parent paths [AI] **PR #91741** Validate sandbox bind parent paths [AI]. Thanks @mmaps. ↗ 100 **PR #88530** fix(imessage) skip idle approval discovery scans. Thanks @colmbrogan and @omarshahine. ↗ 101 **PR #91780** fix(ui) drain restored chat queue after session switch. Thanks @tmimmanuel. ↗ 102 **PR #91750** fix(search) enforce native web search tool policy. Thanks @eleqtrizit. ↗ 103 **PR #91757** fix(config) clarify retired skill workshop plugin warning. Thanks @RomneyDa. ↗ 104 **PR #91787** fix(doctor) keep TTS legacy migration on supported paths. ↗ 105 **PR #91783** fix(imessage) harden outbound send transport. Related #84329. Thanks @omarshahine and @TurboTheTurtle. ↗ 106 **PR #91785** fix(imessage) surface inbound startup diagnostics. Thanks @omarshahine. ↗ 107 **PR #91590** Fix context-engine compaction ownership for Codex sessions **PR #91590** Fix context-engine compaction ownership for Codex sessions. Thanks @joshavant. ↗ 108 **PR #91557** Improve iPad and iPhone control surfaces **PR #91557** Improve iPad and iPhone control surfaces. Thanks @Solvely-Colin and @joshavant. ↗ 109 **PR #91666** chore(deps) bump useblacksmith/setup-docker-builder from 1.8.0 to 1.9.0 in the actions group. ↗ 110 **PR #91819** docs link ClawHub plugin validation fixes guide. Thanks @Patrick-Erichsen. ↗ 111 **PR #88630** fix(codex) avoid guardian review for local models. Thanks @vincentkoc. ↗ 112 **PR #91830** feat add OpenRouter OAuth to onboarding. Thanks @Patrick-Erichsen. ↗ 113 **PR #91842** fix(plugin-sdk) refresh API baseline hash. ↗ 114 **PR #91614** fix(gateway) surface headless LaunchAgent state. Thanks @fuller-stack-dev. ↗ 115 **PR #91851** fix(memory-core) filter stale recall entries in REM harness preview. Thanks @vincentkoc. ↗ 116 **PR #91859** fix(ci) disable memory slot in release smoke config. Thanks @vincentkoc. ↗ 117 **PR #90004** [plugin sdk] Allow declared installed trusted hooks **PR #90004** [plugin sdk] Allow declared installed trusted hooks. Related #87735. Thanks @brokemac79 and @ryanhelms. ↗ 118 **PR #91837** fix(memory-core) keep QMD JSON search one-shot. Related #91821. Thanks @TurboTheTurtle and @xpysgdhr. ↗ 119 **PR #91871** Remove bundled channel contract fallbacks **PR #91871** Remove bundled channel contract fallbacks. Thanks @obviyus. ↗ 120 **PR #91879** fix(ci) include ACPX in shared live-test image. ↗ 121 **PR #91840** Fix stale visible reply recovery **PR #91840** Fix stale visible reply recovery. Related #90535. Thanks @joshavant and @Jerry-Xin. ↗ 122 **PR #91876** Fix Telegram callback API handling **PR #91876** Fix Telegram callback API handling. Thanks @obviyus. ↗ 123 **PR #91874** Share channel draft chunking resolver **PR #91874** Share channel draft chunking resolver. Thanks @obviyus. ↗ 124 **PR #91599** fix(update) expose plugin convergence repair. Thanks @fuller-stack-dev. ↗ 125 **PR #91581** fix(update) recover package gateway restart after refresh failure. Thanks @fuller-stack-dev. ↗ 126 **PR #91904** fix(telegram) use SDK dispatch dedupe. Thanks @obviyus. ↗ 127 **PR #90263** fix(discord) hydrate reply context metadata. Thanks @fuller-stack-dev. ↗ 128 **PR #91478** block unauthorized Telegram DM text from prompt context **PR #91478** block unauthorized Telegram DM text from prompt context. Related #91209. Thanks @sallyom and @producedbysavant. ↗ 129 **PR #91915** fix(telegram) audit follow-ups — block-mode chunk config, dedupe bucket cleanup, grammy contract trust. Thanks @obviyus. ↗ 130 **PR #91361** fix(compaction) lower default timeout from 900s to 180s, preserve explicit config. Related #91358. Thanks @wangmiao0668000666 and @velvet-shark and @olveww-dot. ↗ 131 **PR #91791** fix(sandbox) use materialized skill paths in startup prompts. Related #91761. Thanks @brokemac79 and @vincentkoc and @gbb-netizen. ↗ 132 **PR #91736** Support existing-session browser CDP endpoints **PR #91736** Support existing-session browser CDP endpoints. Related #56118. Thanks @lifuyue and @mgrandau. ↗ 133 **PR #91747** fix(browser) validate discovered CDP websocket URLs. Thanks @eleqtrizit. ↗ 134 **PR #91882** feat(anthropic) support Claude Fable 5 adaptive thinking. Related #91805. Thanks @NOVA-Openclaw. ↗ 135 **PR #91884** fix(memory) keep ignored-name QMD roots watchable. Thanks @vincentkoc. ↗ 136 **PR #91740** fix(auth) verify SQLite auth migration before cleanup. Thanks @fuller-stack-dev and @velvet-shark. ↗ 137 **PR #91451** fix(mcp) repair OAuth redirect, errors, and unicode schema patterns. Related #91433. Thanks @LiuwqGit and @cursoragent and @vincentkoc and @marcusbsorensen. ↗ 138 **PR #91978** fix(gateway) arm qmd startup maintenance. Thanks @vincentkoc. ↗ 139 **PR #90426** fix(talk) show OpenAI Realtime WebRTC assistant transcripts. Thanks @shushushv and @vincentkoc. ↗ 140 **PR #91696** fix(agents) preserve reasoning_content replay for Gemma 4 openai-completions models. Related #91645. Thanks @Coder-Wangyankun and @bfox55. ↗ 141 **PR #89938** Fail closed on exec approval timeout **PR #89938** Fail closed on exec approval timeout. Thanks @drobison00. ↗ 142 **PR #91895** fix(webchat) finalize provider failure lifecycle. Related #91730. Thanks @TurboTheTurtle and @sallyom and @nikhilmaddirala. ↗ 143 **PR #80143** fix(browser) honor cdpUrl for user default profile. Related #48042. Thanks @HemantSudarshan and @Max-Resilient. ↗ 144 **PR #91688** fix(cron) reject cron expressions that have no reachable run time. Thanks @yetval and @vincentkoc. ↗ 145 **PR #91737** fix(cron) use final-call usage for session token totals. Related #91716. Thanks @MonkeyLeeT and @vincentkoc and @yetval. ↗ 146 **PR #89605** fix(process) return timeout code for killed commands. Thanks @ai-hpc. ↗ 147 **PR #80013** perf(usage-cost-cache) throttle full-cache rewrites during refresh. Thanks @zeroaltitude. ↗ 148 **PR #76731** Fix mobile Control UI chat layout **PR #76731** Fix mobile Control UI chat layout. Thanks @Solvely-Colin. ↗ 149 **PR #83738** fix(cron) capture originating session/agent on the cron wake tool call. Thanks @anagnorisis2peripeteia. ↗ 150 **PR #85196** Redact tool output secrets **PR #85196** Redact tool output secrets. Thanks @amknight. ↗ 151 **PR #92007** fix(security) block build tool env overrides. Thanks @eleqtrizit. ↗ 152 **PR #91891** fix preserve non-oneOf protocol schema array order. Thanks @RomneyDa. ↗ 153 **PR #91754** fix(macos) hide unsupported Voice Wake controls. Related #89575. Thanks @RomneyDa and @cwhyhy. ↗ 154 **PR #92049** test(ci) restore upgrade survivor session fixture. Thanks @vincentkoc. ↗ 155 **PR #89670** fix keep skill toggles keyed by skill identity. Related #89661. Thanks @s-moffett. ↗ 156 **PR #91934** fix(state) tolerate chmod failures when opening the state database. Related #91919. Thanks @truffle-dev and @david-garcia-garcia. ↗ 157 **PR #92051** fix(fal) parse raw completed queue results. Related #91989. Thanks @harjothkhara and @oswaldyeo. ↗ 158 **PR #92047** fix(agents) prefer explicit sessions_send keys. Related #64699. Thanks @vincentkoc and @sunxq1017-hash. ↗ 159 **PR #92020** fix(memory-core) check SQLite plugin state for dreaming ingestion audit after JSON migration (fixes #92017). Thanks @zenglingbiao and @JUMPUNDER. ↗ 160 **PR #92032** fix(mcp) always log channel-bridge notification failures. Thanks @hansraj316. ↗ 161 **PR #92033** fix(gateway) log swallowed background-task finalization errors. Thanks @hansraj316. ↗ 162 **PR #92022** fix(sessions) derive channel from direct-chat session keys in send-policy. Thanks @hansraj316. ↗ 163 **PR #91163** fix(xai) clarify x_search query guidance. Thanks @rubencu. ↗ 164 **PR #90121** fix(memory) write dream fallback without subagent runtime. Thanks @a-m-a-r-a. ↗ 165 **PR #91215** fix(ui) show prompt progress while sending. Related #91199. Thanks @zhangguiping-xydt and @vincentkoc and @Monniasza. ↗ 166 **PR #92029** fix(tools) surface unsupported-signal in anyOf availability. Thanks @hansraj316. ↗ 167 **PR #92034** perf(agents) memoize XML attribute regex in DSML stream parser. Thanks @hansraj316. ↗ 168 **PR #92026** perf(agents) sanitize compaction messages once for token estimation. Thanks @hansraj316. ↗ 169 **PR #91351** fix(opencode-go) add qwen plus tiered pricing. Related #91238. Thanks @849261680 and @vincentkoc and @samson910022. ↗ 170 **PR #92027** fix(gateway) recover config hot-reload after watcher errors. Thanks @hansraj316. ↗ 171 **PR #91471** feat(cron) add readable ISO time fields to `cron runs` JSON output. Thanks @FMLS and @cursoragent. ↗ 172 **PR #91711** bug: fix(agents): classify harness provider mismatch as format error (#91710). Thanks @a-tokyo. ↗ 173 **PR #91292** fix(models) keep bundled provider catalog when configured base URL is blank (#91270). Thanks @yetval and @vincentkoc and @resYuto. ↗ 174 **PR #91720** bug: fix(openai): remove chatgpt-responses transport override from gpt-5.3-codex catalog entry. Related #91710. Thanks @a-tokyo. ↗ 175 **PR #91305** fix(control-ui) make Control UI bootstrap config endpoint base-path-relative (#66946). Thanks @Alix-007 and @vincentkoc and @yndwx01. ↗ 176 **PR #92056** fix(exec) honor state dir approvals. Thanks @vincentkoc. ↗ 177 **PR #91897** fix(memory) self-heal missing index identity by initializing provider during sync. Thanks @xydt-tanshanshan and @vincentkoc. ↗ 178 **PR #91802** fix(diagnostics) release wedged session lane when stuck-session recovery aborts a run with queued session work. Related #91700. Thanks @openperf and @infocus13. ↗ 179 **PR #92030** fix(cron) structural top-of-hour match in stagger heuristic. Thanks @hansraj316 and @vincentkoc. ↗ 180 **PR #92055** fix(media) resolve state-relative inbound attachments. Thanks @sercada and @vincentkoc. ↗ 181 **PR #91962** fix(agent) dampen Discord stale thread replies. Thanks @RomneyDa. ↗ 182 **PR #90912** fix(agents) honor configured CLI resume timeouts. Thanks @ai-hpc and @vincentkoc. ↗ 183 **PR #91296** fix hand off supervised git updates. Thanks @abnershang. ↗ 184 **PR #91950** fix(web_fetch) sanitize URL whitespace from LLM tool call arguments (fixes #91651). Thanks @zenglingbiao and @vincentkoc and @akang1798. ↗ 185 **PR #77367** fix(discord) scope command-deploy cache by application id. Related #77359. Thanks @lonexreb and @sallyom and @igmarketing. ↗ 186 **PR #91976** feat(auto-reply) durable inter-tool commentary via verbose standalone progress (supersedes #89850/#89890). Thanks @anagnorisis2peripeteia. ↗ 187 **PR #90128** fix(sessions) preserve user /model override across daily/idle session rollover (#90119). Thanks @Marvinthebored. ↗ 188 **PR #92084** fix(clickclack) allow explicit enable through plugin allowlist. ↗ 189 **PR #92092** fix(auto-reply) stop dropping claude-cli narration when commentary lane is off. Thanks @ragesaq. ↗ 190 **PR #92123** #92109 [Bug]: EmbeddedAttemptSessionTakeoverError caused by Btrfs ctimeNs instability. Thanks @lzyyzznl and @vincentkoc and @recruits. ↗ 191 **PR #92136** fix(feishu) reply inside P2P direct-message threads. Thanks @LiaoyuanNing and @vincentkoc. ↗ 192 **PR #92121** fix(memory) preserve live SQLite index during swaps. Related #91216. Thanks @xydt-tanshanshan and @chrisreddington. ↗ 193 **PR #90173** fix(agents) stabilize a2a prompt cache context. Thanks @Sunjae-k and @sunjae-1. ↗ 194 **PR #91974** fix(cli-runner) scope claude-cli queue to live-session owner identity (#91946). Thanks @wangwllu. ↗ 195 **PR #92053** fix(thinking) apply Claude profile to anthropic-messages catalog rows. Related #91975. Thanks @wangwllu. ↗ 196 **PR #41991** Google show detailed Gemini CLI OAuth extraction failures. Thanks @bgmbgm94. ↗ 197 **PR #92074** fix(qqbot) flush tool output before silent non-streaming final. Thanks @sliverp. ↗ 198 **PR #89508** fix(models) clarify provider model registration hint. Related #89192. Thanks @sweetcornna and @aaajiao. ↗ 199 **PR #89085** fix(agents) keep migrated session entry ids unique on v1 upgrade. Thanks @yetval. ↗ 200 **PR #89552** fix(discord) clean migrated thread binding state. Thanks @SYU8384. ↗ 201 **PR #89448** fix(cron) reject durations that overflow to a non-finite value. Related #83906. Thanks @Alix-007 and @davinci282828. ↗ 202 **PR #89319** fix(doctor) warn on unsupported hook entry loaders. Related #89309. Thanks @leno23 and @vincentkoc and @CameronWeller. ↗ 203 **PR #91966** fix(config) stop config.patch replacePaths index suffix from widening array consent. Thanks @yetval and @vincentkoc. ↗ 204 **PR #92127** fix(plugins) rescan storm in "/models" call (regression shipped since v2026.5.18). Thanks @obuchowski. ↗ 205 **PR #91657** fix(ollama) use provider thinking default in SDK session factory. Related #91428. Thanks @openperf and @vincentkoc and @anijatsu. ↗ 206 **PR #91742** fix(memory) abort orphaned embedding work when memory_search times out. Related #91718. Thanks @dreamhunter2333 and @vincentkoc and @NOVA-Openclaw. ↗ 207 **PR #89091** fix(memory-core) retry narrative message reads. Thanks @bennewell35. ↗ 208 **PR #92150** fix(release) gate beta publish on plugin verification. Thanks @vincentkoc. ↗ 209 **PR #92158** fix(cli) validate gateway RPC timeout inputs. Thanks @ruanrrn and @comeran. ↗ 210 **PR #91911** fix(agents) retry same model across short rate-limit windows. Thanks @lanzhi-lee. ↗
155 changes Open upstream ↗
01 **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. ↗ 02 **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. ↗ 03 **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. ↗ 04 **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. ↗ 05 **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. ↗ 06 **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. ↗ 07 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. ↗ 08 Matrix/channels add voice-message preflight and thread-aware read/reply behavior. (#78016, #90415) Thanks @frankdierolf. ↗ 09 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. ↗ 10 Google Chat/channels add native approval card actions and click handling so Google Chat approvals use platform-native cards instead of generic message flow. ↗ 11 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. ↗ 12 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. ↗ 13 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. ↗ 14 **PR #89102** refactor(auth) store auth profiles in SQLite. ↗ 15 **PR #90028** docs clarify legacy openai-codex auth. Thanks @jalehman. ↗ 16 **PR #89600** Fix Workboard status persistence **PR #89600** Fix Workboard status persistence. Related #88592. Thanks @BunsDev and @kzclaw. ↗ 17 **PR #90067** fix(workboard) isolate stale lifecycle bulk patches. Thanks @BunsDev. ↗ 18 **PR #88585** Pin official npm plugin install records **PR #88585** Pin official npm plugin install records. Thanks @zhuisDEV. ↗ 19 **PR #90053** fix hide Skill Workshop revision handoff from chat. Thanks @shakkernerd. ↗ 20 **PR #90123** fix(auto-reply) count message tool sends as delivery. Thanks @mcaxtr. ↗ 21 **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. ↗ 22 **PR #90145** fix protect global agent config defaults [AI]. Thanks @pgondhi987. ↗ 23 **PR #90147** Rate limit node pairing requests [AI] **PR #90147** Rate limit node pairing requests [AI]. Thanks @pgondhi987. ↗ 24 **PR #89732** fix guard MCP HTTP redirects [AI]. Thanks @pgondhi987. ↗ 25 **PR #90181** fix(feishu) preserve streaming card content. Related #90164. Thanks @mushuiyu886 and @sliverp and @wjm7220. ↗ 26 **PR #90058** fix(docker) qualify base image refs for podman short-name mode. Thanks @mrunalp and @sallyom. ↗ 27 **PR #89488** fix stabilize Anthropic cache marker through tool loops. Thanks @Marvinthebored. ↗ 28 **PR #89505** fix(acp) re-add opt-in parent commentary progress. Related #89501. Thanks @100yenadmin. ↗ 29 **PR #90341** fix(acp) default parent commentary in progress mode. Thanks @obviyus. ↗ 30 **PR #90351** fix(message-tool) stabilize send idempotency keys. Thanks @jesse-merhi. ↗ 31 **PR #90375** refactor remove Feishu runtime dedupe JSON fallback. ↗ 32 **PR #90385** refactor move MS Teams state migration to doctor. ↗ 33 **PR #90287** fix(ci) scope PR merge diff checks to first parent. Thanks @hxy91819. ↗ 34 **PR #90436** Add NVIDIA Nemotron 3 Ultra default **PR #90436** Add NVIDIA Nemotron 3 Ultra default. Thanks @jacobtomlinson. ↗ 35 **PR #90205** fix tolerate missing streamed response content type. Thanks @jalehman. ↗ 36 **PR #90163** fix(agents) strip stale compaction thinking signatures before Anthropic replay. Related #90108. Thanks @openperf and @dexiosmb. ↗ 37 **PR #90486** fix(whastapp) bound connection startup waits. Thanks @mcaxtr and @MMMMSSSS8899. ↗ 38 **PR #90488** fix service env placeholder collection **PR #90488** fix service env placeholder collection. Thanks @sallyom. ↗ 39 **PR #90478** feat install GitHub-backed ClawHub skills. Thanks @Patrick-Erichsen. ↗ 40 **PR #90304** feat(memory) support qmd query rerank toggle. Related #61834. Thanks @osolmaz and @kouka-t0yohei. ↗ 41 **PR #90532** Fix main CI guard drift **PR #90532** Fix main CI guard drift. Thanks @RomneyDa. ↗ 42 **PR #90534** fix(mattermost) anchor slash state on globalThis (#68113). Thanks @Takhoffman and @ly85206559 and @infoanton. ↗ 43 **PR #89502** feat(googlechat) add native approval cards. Thanks @kevinslin. ↗ 44 **PR #90317** Add Codex multi-agent config migration coverage **PR #90317** Add Codex multi-agent config migration coverage. Thanks @ooiuuii. ↗ 45 **PR #90319** Add Codex session route migration coverage **PR #90319** Add Codex session route migration coverage. Thanks @ooiuuii. ↗ 46 **PR #90132** fix(qqbot) sanitize outbound text to strip reasoning/thinking content. Related #89913. Thanks @openperf and @Takhoffman and @dygg2001. ↗ 47 **PR #89874** fix(agents) detect unsigned thinking-only stall when reasoning payload inflates payloadCount. Related #89787. Thanks @openperf and @Takhoffman and @ArthurusDent. ↗ 48 **PR #90594** fix(android) align provider readiness with available models. Thanks @Tosko4. ↗ 49 **PR #90576** fix(sessions) reconcile stale terminal main transcripts. Related #60542. Thanks @ferminquant and @kAIborg24. ↗ 50 **PR #90405** Fix ClickClack toolsAllow reply dispatch **PR #90405** Fix ClickClack toolsAllow reply dispatch. Thanks @mmaps. ↗ 51 **PR #90415** feat(matrix) handle voice preflight and threads. Related #78016. Thanks @frankdierolf. ↗ 52 **PR #90208** fix(cron) auto-migrate legacy cron store. Related #90072. Thanks @MonkeyLeeT and @jalehman and @wlassalle724. ↗ 53 **PR #85791** fix(gateway) dedupe probe warnings by gateway identity. Thanks @giodl73-repo. ↗ 54 **PR #90632** fix(context-engine) forward isHeartbeat to afterTurn (fixes #89302). Thanks @zenglingbiao and @jalehman and @huangxun375-stack. ↗ 55 **PR #90250** docs prefer web_fetch in weather skill. Thanks @fuller-stack-dev. ↗ 56 **PR #85158** feat(parallel) add Parallel as a bundled web_search provider. Thanks @NormallyGaussian. ↗ 57 **PR #86205** fix(tui) stabilize optimistic user messages across history reloads, runId reassignment, and abort. Thanks @RomneyDa. ↗ 58 **PR #86483** chore(deps) bump the swift-deps group across 1 directory with 3 updates. ↗ 59 **PR #90601** chore(deps) bump the actions group across 1 directory with 4 updates. ↗ 60 **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. ↗ 61 **PR #86481** chore(deps) bump the android-deps group across 1 directory with 9 updates. ↗ 62 **PR #74980** build(deps) bump docker/login-action from 3.6.0 to 4.1.0. ↗ 63 **PR #90717** fix(agents) re-probe single-provider primary during cooldown. Related #90702. Thanks @849261680 and @brtkwr. ↗ 64 **PR #90609** fix(google) preserve Vertex ADC catalog auth. Related #90506. Thanks @849261680 and @paulogogs. ↗ 65 **PR #90775** fix refresh prompt fence after compaction writes. Related #90729. Thanks @jalehman and @johnib. ↗ 66 **PR #90027** test(codex) pin completion-idle timeout thread reset. Thanks @harjothkhara. ↗ 67 **PR #89566** fix(telegram) suppress post-final tool error noise. Thanks @keshavbotagent. ↗ 68 **PR #90607** fix(voice-call) track Twilio streams after connect. Related #81122. Thanks @sahibzada-allahyar and @Takhoffman and @donkeykong91. ↗ 69 **PR #90728** fix(agents) coerce non-text/image MCP tool-result blocks to text (fixes #90710). Thanks @849261680 and @Takhoffman and @RanSHammer. ↗ 70 **PR #90697** fix(llm) defer Anthropic stream start event until after message_start. Related #90667. Thanks @openperf and @Takhoffman and @MIHHHMIH. ↗ 71 **PR #90816** fix(memory) resolve adapter default model in plain status identity check. Related #90413. Thanks @849261680 and @Takhoffman and @colinmac-boop. ↗ 72 **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. ↗ 73 **PR #90793** Fix OpenAI audio auth to use API keys **PR #90793** Fix OpenAI audio auth to use API keys. Thanks @Glucksberg and @sallyom. ↗ 74 **PR #90790** fix(codex) preserve completed replies after client close. Related #90771. Thanks @brokemac79 and @jalehman. ↗ 75 **PR #90820** fix(codex) report completion timeout diagnostics. Thanks @kevinslin. ↗ 76 **PR #90845** fix(imessage) frame rpc stdout on LF only. Related #89830. Thanks @omarshahine and @mmartoccia. ↗ 77 **PR #90813** fix(uninstall) refuse to remove current working directory during cleanup. Related #90806. Thanks @xydigit-sj and @sallyom and @brandondube. ↗ 78 **PR #90336** fix(memory) fail fast when embeddings provider is unavailable. Related #89691. Thanks @osolmaz and @joeykrug. ↗ 79 **PR #90914** fix(talk) resolve realtime provider secret refs. Thanks @ngutman. ↗ 80 **PR #88771** fix(agents) stream phased text deltas incrementally. Thanks @vincentkoc. ↗ 81 **PR #87856** fix(agents) count streamed model deltas incrementally. Thanks @vincentkoc. ↗ 82 **PR #88882** test(gateway) add small model live profile. Thanks @vincentkoc. ↗ 83 **PR #90919** [codex] Add iOS Apple Review demo mode **PR #90919** [codex] Add iOS Apple Review demo mode. Thanks @ngutman. ↗ 84 **PR #90954** fix(cron) require HTTP context for server_error retry classification. Related #90947. Thanks @Nas01010101. ↗ 85 **PR #90854** fix(build) copy export-html assets to dist/export-html matching runtime path (fixes #90843). Thanks @zenglingbiao and @Tank-x3. ↗ 86 **PR #90922** docs improve plugin inventory layout. Thanks @joshp123. ↗ 87 **PR #89652** fix(plugins) load owning plugin for configured memory embedding provider at startup. Related #89651. Thanks @joeykrug. ↗ 88 **PR #90811** fix(agents) stabilize user-turn serialization across turns to preserve prompt cache. Related #90810. Thanks @Marvinthebored and @jalehman. ↗ 89 **PR #90853** fix(imessage) send TTS audio as voice messages. Thanks @omarshahine. ↗ 90 **PR #90995** fix(release) use monthly patch versions. Thanks @vincentkoc. ↗ 91 **PR #91030** fix store device-pair notify state in sqlite. ↗ 92 **PR #91034** fix store acpx process state in sqlite. ↗ 93 **PR #90849** feat(parallel) add free Parallel Search MCP as the zero-config default web_search provider. Thanks @NormallyGaussian. ↗ 94 **PR #91056** fix store memory-core dreams state in sqlite. ↗ 95 **PR #89918** fix(vertex) route eu/us multi-region to .rep.googleapis.com host. Related #89891. Thanks @alkor2000 and @Wimcomander. ↗ 96 **PR #91058** fix(gemini) accept empty grounding metadata. Related #88528. Thanks @TarsTriggerBot. ↗ 97 **PR #91072** refactor(memory-wiki) store source sync state in sqlite. ↗ 98 **PR #91073** fix(openrouter) reconcile streamed generation cost. Related #68066. Thanks @chrispatil. ↗ 99 **PR #91032** docs(imessage) require DisableLibraryValidation on modern macOS; document macOS 26 injection gates. Thanks @omarshahine. ↗ 100 **PR #87933** fix(agents) suppress DeepSeek thinking for Foundry aliases. Related #90520. Thanks @MukundaKatta and @wlassalle724. ↗ 101 **PR #91037** fix(config) allow thinkingLevelMap in persisted model schema. Related #91011. Thanks @wsyjh8 and @chrisreddington. ↗ 102 **PR #89832** fix(config) allow requiresReasoningContentOnAssistantMessages in ModelCompatSchema. Related #89660. Thanks @KrasimirKralev and @kyKKK. ↗ 103 **PR #91088** refactor(matrix) store sync cache in sqlite. ↗ 104 **PR #90138** fix(minimax) exempt M3 from thinking-disabled wrapper. Thanks @IamVNIE. ↗ 105 **PR #91053** refactor store Zalo hosted media in plugin state. ↗ 106 **PR #91098** fix(test) type overflow resolver mock. Thanks @RomneyDa. ↗ 107 **PR #81277** fix(google) handle compressed Vertex ADC token refresh responses. Thanks @liaoandi. ↗ 108 **PR #91100** refactor(matrix) store crypto sidecars in sqlite. ↗ 109 **PR #90260** fix(agents) decode xai and venice tool-call arguments exactly once. Thanks @yetval. ↗ 110 **PR #90593** fix preserve LM Studio Responses tool arguments. Related #90585. Thanks @849261680 and @ceo-nada. ↗ 111 **PR #89109** fix(agents) block message-tool spam loops defeated by volatile message ids. Related #89090. Thanks @openperf and @wujiaming88. ↗ 112 **PR #90429** Fix LM Studio wizard prompter binding **PR #90429** Fix LM Studio wizard prompter binding. Thanks @christineyan4. ↗ 113 **PR #90780** perf(qqbot) narrow tool discovery cold load. Thanks @RomneyDa. ↗ 114 **PR #90504** fix(codex) preserve post-tool reasoning liveness. Thanks @fuller-stack-dev. ↗ 115 **PR #91113** fix align Xiaomi completions replay compat. Related #91106. Thanks @KrasimirKralev. ↗ 116 **PR #91108** refactor(memory-wiki) store import runs in sqlite. ↗ 117 **PR #91118** fix preserve Foundry Responses reasoning replay ids. Related #91033. Thanks @chrisreddington. ↗ 118 **PR #91125** fix strip Google provider prefix from Gemini paths. Related #71932. Thanks @soumoucookie. ↗ 119 **PR #90056** fix(doctor) merge disjoint openai-codex model entries into canonical openai provider. Related #90047. Thanks @openperf and @holgergruenhagen. ↗ 120 **PR #91127** refactor store sandbox registry in sqlite. ↗ 121 **PR #91131** fix migrate legacy agent registry schema via doctor. ↗ 122 **PR #91119** fix(outbound) keep Discord runtime adapters resolvable. Related #90162. Thanks @TurboTheTurtle and @thewilloftheshadow and @hoyanhan. ↗ 123 **PR #91128** fix(qqbot) migrate group tool policy config. ↗ 124 **PR #91133** refactor(plugin-sdk) persist dedupe state in sqlite. ↗ 125 **PR #90612** fix(agents) dispatch subagent spawn in process. Thanks @lanzhi-lee. ↗ 126 **PR #87323** fix(infra/agents) session-routing guard for coalesced gateway restart continuations (#86742). Thanks @openperf and @songshikang0111. ↗ 127 **PR #91101** fix(inbound-meta) apply head+tail body truncation to ReplyChain and ReplyToBody JSON paths (fixes #91042). Thanks @zenglingbiao and @wangwllu. ↗ 128 **PR #91201** feat(ios) clarify talk realtime fallback. Thanks @ngutman. ↗ 129 **PR #91233** fix(agents) prevent ReDoS in background-session name derivation. Thanks @Takhoffman and @yetval. ↗ 130 **PR #90798** fix(agents) materialize sandbox skills for rw sandboxes. Related #90410. Thanks @brokemac79 and @gbb-netizen. ↗ 131 **PR #91248** fix preserve live Ollama catalog metadata. Related #90315. Thanks @civiltox. ↗ 132 **PR #91041** fix(imessage) self-explaining private-API failures and dedicated send timeout. Thanks @omarshahine. ↗ 133 **PR #90029** feat add live provider model catalog helper. Thanks @fuller-stack-dev. ↗ 134 **PR #90752** feat(android) add theme mode selection. Thanks @Tosko4 and @joshavant. ↗ 135 **PR #90261** fix gate owner-only HTTP tools. Thanks @pgondhi987 and @joshavant. ↗ 136 **PR #90022** fix(codex) quarantine unreadable dynamic tools. Thanks @vincentkoc. ↗ 137 **PR #88822** fix(agents) compact lean local tool catalogs. Thanks @vincentkoc. ↗ 138 **PR #89350** fix(agents) guard prompt cache tool names. Thanks @vincentkoc. ↗ 139 **PR #91241** fix(outbound) preserve retries for budget-deferred deliveries. Thanks @849261680 and @Takhoffman. ↗ 140 **PR #91124** fix(agents) do not refresh lastUsedAt on MCP lease release. Related #91075. Thanks @openperf and @Takhoffman and @Atlas-crete. ↗ 141 **PR #90858** fix(imessage) gate split-send coalescing on imsg metadata. Thanks @omarshahine. ↗ 142 **PR #91235** fix(codex) preserve native subagent completion results. Related #91120. Thanks @849261680 and @Takhoffman and @jinon86. ↗ 143 **PR #91230** fix(cron) preserve isolated agent turn payload message. Related #91228. Thanks @849261680 and @Takhoffman and @AgentXaGent. ↗ 144 **PR #90480** feat(whatsapp) expand live QA coverage. Thanks @mcaxtr. ↗ 145 **PR #89712** feat(cron) support command jobs. Thanks @mbelinky. ↗ 146 **PR #90937** fix(gateway) preserve stale channel restart diagnostics. Related #90901. Thanks @snowzlm and @Takhoffman and @Tony-ooo. ↗ 147 **PR #91231** fix(anthropic) drop reasoning_content replay signatures. Related #91205. Thanks @849261680 and @Takhoffman and @bobgitmcgrath. ↗ 148 **PR #90897** fix #90452 Regression: Heartbeat exec completion still shows generic fallback text instead of actual output. Thanks @mushuiyu886 and @Takhoffman and @bizzle12368239. ↗ 149 **PR #91322** refactor move session metadata to SQLite. ↗ 150 **PR #91529** Fix transcript image redaction **PR #91529** Fix transcript image redaction. Related #90760. Thanks @joshavant and @devinkuhn. ↗ 151 **PR #91551** Fix config **PR #91551** Fix config.patch explicit array replacement. Thanks @joshavant. ↗ 152 **PR #85823** fix(whatsapp) route captured replies through successor controller after restart. Thanks @itsuzef and @mcaxtr. ↗ 153 **PR #89659** fix(feishu) retry on send rate-limit errors (230020/230006). Related #70879. Thanks @ladygege and @marshallm-create and @sliverp and @AxelHu. ↗ 154 **PR #91547** Fix Docker store seed target packages **PR #91547** Fix Docker store seed target packages. Related #91035. Thanks @sallyom and @laurenceputra. ↗ 155 **PR #91423** feat(qqbot) add /bot-group-allways command to toggle mention requirement. Thanks @cxyhhhhh. ↗
66 changes Open upstream ↗
01 **Governed plugin and skill installs ** the old dangerous-code scanner gives way to an operator install policy with clearer doctor, CLI, ClawHub, package, archive, source, upload, and marketplace recovery paths. (#89516) Thanks @joshavant and @vincentkoc. ↗ 02 **Safer channel delivery ** Telegram, Feishu, Discord, WhatsApp, and outbound sends now handle transcript mirroring, streamed finals, admin writeback, approval allowlists, poll modifiers, and setup state without corrupting delivery. (#88973, #89626, #89812, #89035, #89814, #89813, #89601) Thanks @pgondhi987, @Petru2224, @zhangguiping-xydt, @ppmuzyk, @codezz, @takhoffman, @vincentkoc, @harjothkhara, @obviyus, @glenn-agent, @kesslerio, and @leiJack-lo. ↗ 03 **Steadier chat and operator UI ** visible stream text, completed sends, Workboard keyboard navigation, dialog accessibility, lazy usage views, and Android companion flows retain their state through normal interaction. (#89801, #89777) Thanks @vincentkoc. ↗ 04 **Stricter safety checks ** config, policy, shell snapshots, exec prechecks, script limits, and Gateway startup reject malformed or unsafe input before it becomes runtime state. (#89701, #87074, #81488, #87056, #89480) Thanks @RomneyDa, @giodl73-repo, @mmaps, @drobison00, @vincentkoc, and @q1387154-spec. ↗ 05 **More reliable Gateway and model sessions ** session locks, abandoned Codex startup, ACP handoffs, custom-provider fanout, provider aliases, prompt caching, and memory checks recover without leaving a run wedged. (#89811, #89244) Thanks @RomneyDa, @takhoffman, @spencer2211, and @vincentkoc. ↗ 06 Plugins/security replace dangerous-code scanner enforcement with operator install policy, install-policy context, doctor checks, install/update CLI wiring, ClawHub metadata paths, and package/archive/source/upload lifecycle coverage. (#89516) Thanks @joshavant and @vincentkoc. ↗ 07 Policy add data-handling conformance checks and reject unsupported policy keys. (#87056, #87074) Thanks @giodl73-repo. ↗ 08 Telegram/channels show commentary and reasoning in progress drafts, share progress draft compositors across channel plugins, and keep Telegram polling stop/reset boundaries cheaper and more reliable. ↗ 09 UI/mobile add Workboard keyboard movement controls, tighten Workboard card operations, and improve Android companion-first shell UX. Thanks @vincentkoc. ↗ 10 **PR #88922** fix(google) forward stop sequences to Gemini generationConfig. Thanks @coder999999999. ↗ 11 **PR #89460** fix(models) preserve provider prompt cache boundaries. Related #89386. Thanks @Enominera. ↗ 12 **PR #89478** fix restore Skill Workshop view switcher. Thanks @shakkernerd. ↗ 13 **PR #76741** fix(kimi) strip anthropic cache markers. Related #76612. Thanks @BryanTegomoh and @vliuyt. ↗ 14 **PR #89480** fix recover suspicious gateway startup configs. Related #89331. Thanks @q1387154-spec. ↗ 15 **PR #87056** Policy add data handling conformance checks. Thanks @giodl73-repo. ↗ 16 **PR #81488** Harden node exec approval precheck env [AI] **PR #81488** Harden node exec approval precheck env [AI]. Thanks @mmaps and @drobison00. ↗ 17 **PR #89356** Add accessible Workboard movement controls **PR #89356** Add accessible Workboard movement controls. Thanks @BunsDev. ↗ 18 **PR #87074** fix(policy) reject unsupported policy keys. Thanks @giodl73-repo. ↗ 19 **PR #89601** fix(outbound) stop schema-padded poll modifiers from blocking send. Thanks @codezz and @Takhoffman. ↗ 20 **PR #88963** perf(telegram) avoid broad reset-boundary scan. Thanks @MonkeyLeeT. ↗ 21 **PR #89125** Suppress internal agent failure traces before channel delivery **PR #89125** Suppress internal agent failure traces before channel delivery. Thanks @fuller-stack-dev. ↗ 22 **PR #89701** fix(exec) reject corrupt shell snapshots. Thanks @RomneyDa. ↗ 23 **PR #89705** fix allowlist pending agent sqlite scaffold. Thanks @RomneyDa. ↗ 24 **PR #89704** Share channel progress draft compositor **PR #89704** Share channel progress draft compositor. Thanks @obviyus. ↗ 25 **PR #89708** perf(control-ui) coalesce chat metadata startup. Thanks @vincentkoc. ↗ 26 **PR #89337** fix report gateway health auth diagnostics. Related #89711. Thanks @RomneyDa. ↗ 27 **PR #88685** Render dashboard chat history incrementally **PR #88685** Render dashboard chat history incrementally. Related #87345. Thanks @alexzhu0 and @2xmncvcx92-dotcom. ↗ 28 **PR #89740** fix(gateway) stabilize webchat prompt cache affinity. Related #89139. Thanks @vincentkoc and @Enominera. ↗ 29 **PR #89191** fix(webchat) show sessions_send handoffs as forwarded. Related #89161. Thanks @849261680 and @Xj49688-lgtm. ↗ 30 **PR #89723** fix(auto-reply) surface fatal channel errors. Thanks @fuller-stack-dev. ↗ 31 **PR #89727** fix #87699 [Bug]: [BUG] UI shows agent "running" after conversation ends — requires manual page refresh every time. Thanks @zhangguiping-xydt and @csck-luoy. ↗ 32 **PR #88786** fix #71992 [Bug]: Control UI webchat duplicates every assistant reply on 2026.4.21 — regression from #5964/#39469. Thanks @zhangguiping-xydt and @rzhnrhjr6j-cloud and @astoreyai and @kAIborg24. ↗ 33 **PR #89530** fix(ui) preserve visible chat stream text. Related #67035. Thanks @osolmaz and @q7793527. ↗ 34 **PR #87072** feat(telegram) opt-in interleaved progress lane. Thanks @anagnorisis2peripeteia. ↗ 35 **PR #89771** perf(ui) start chat refresh before bootstrap. Thanks @vincentkoc. ↗ 36 **PR #89777** perf(ui) label delayed chat sends in telemetry. Thanks @vincentkoc. ↗ 37 **PR #89786** perf(gateway) overlap chat catalog startup. Thanks @vincentkoc. ↗ 38 **PR #89793** test(ui) cover control chat send timing phases. Thanks @vincentkoc. ↗ 39 **PR #89801** perf(ui) surface chat ACK server timing. Thanks @vincentkoc. ↗ 40 **PR #89355** Harden Workboard modal and drawer accessibility **PR #89355** Harden Workboard modal and drawer accessibility. Thanks @BunsDev. ↗ 41 **PR #89802** docs(web) document chat ACK timing metadata. Thanks @vincentkoc. ↗ 42 **PR #89391** fix(android) improve companion-first shell UX. Thanks @Tosko4. ↗ 43 **PR #89811** fix(agents) release session write lock if fence read throws on prompt release. Thanks @Takhoffman and @spencer2211. ↗ 44 **PR #89808** perf(ui) trace chat send server milestones. Thanks @vincentkoc. ↗ 45 **PR #89813** fix(telegram) isolate verbose status after streamed finals. Related #89540. Thanks @Takhoffman and @kesslerio. ↗ 46 **PR #89814** fix(feishu) wire setup runtime setter. Related #88024. Thanks @Takhoffman and @glenn-agent and @leiJack-lo. ↗ 47 **PR #85961** fix #85807 retain Telegram preview after generation race. Thanks @zhangguiping-xydt and @samson1357924. ↗ 48 **PR #89035** fix #88773 [Bug]: Telegram DM exec requires approval despite allowlist + ask:off — works in webchat, not in Telegram. Thanks @zhangguiping-xydt and @obviyus and @ppmuzyk. ↗ 49 **PR #88634** fix(telegram) prevent preview duplication in partial and block streaming modes. Related #87624. Thanks @jmao0001 and @tuckyapps. ↗ 50 **PR #89812** fix(outbound) keep channel send durable when transcript mirror fails (#89626). Thanks @Takhoffman and @harjothkhara and @Petru2224. ↗ 51 **PR #88973** fix(telegram) require admin for target writeback [AI]. Thanks @pgondhi987 and @vincentkoc. ↗ 52 **PR #89449** refactor(gateway) share duplicated test helpers. Thanks @vincentkoc. ↗ 53 **PR #88832** fix(telegram) slow polling restart storms. Thanks @TurboTheTurtle. ↗ 54 **PR #89960** test(channels) fix guardrail regex lint. Thanks @RomneyDa. ↗ 55 **PR #89244** fix(memory) warn after startup watcher pressure check. Thanks @RomneyDa. ↗ 56 **PR #89516** Add operator install policy and remove dangerous-code install... **PR #89516** Add operator install policy and remove dangerous-code install scanners. Thanks @joshavant. ↗ 57 **PR #90024** chore(release) update appcast for 2026.6.1. ↗ 58 **PR #89613** docs document auth profile failure policy contract. ↗ 59 **PR #89548** fix(agents) classify read-only shell commands as non-mutating. Thanks @Glucksberg. ↗ 60 **PR #89939** fix keep stream-to-parent spawns registered. Thanks @scotthuang. ↗ 61 **PR #88964** fix(agents) repair context-engine tool-result pairing. Related #88561. Thanks @MonkeyLeeT and @Finn-jiejie. ↗ 62 **PR #82219** fix(codex) accept first-party OpenAI plugin marketplaces (bundled and primary-runtime). Related #82216. Thanks @yaanfpv. ↗ 63 **PR #89998** revert(codex) revert first-party marketplace allowlist. Thanks @kevinslin. ↗ 64 **PR #89176** fix(browser) honor tab timeout for Chrome MCP. Related #88213. Thanks @MonkeyLeeT and @lamkan0210. ↗ 65 **PR #90043** fix restore Skill Workshop current chat toggle. Thanks @shakkernerd. ↗ 66 **PR #81422** fix(update) surface plugin channel fallbacks. Thanks @BKF-Gitty. ↗
145 changes Open upstream ↗
01 **Resilient agent and Codex runs ** interrupted tool calls, stale session bindings, compaction handoffs, auth-profile failover, reasoning-tag cleanup, yielded subagents, and generated-media delivery all recover without leaving work stranded. (#85798, #87484, #88182, #89220) Thanks @RomneyDa, @neeravmakwana, @joshavant, @omarshahine, @vincentkoc, @bgmbgm94, and @ksiyuna-claw. ↗ 02 **Reliable channel and mobile delivery ** WhatsApp, iMessage, Discord state, QQBot, and iOS Talk now preserve replies, typing, session state, QR-login recovery, and realtime connections across normal restart and transport failure paths. (#88183, #88866, #88948, #89015, #88231) Thanks @mcaxtr, @omarshahine, @sliverp, @Jensenwgd, @ngutman, @vincentkoc, and @alfredjbclaw. ↗ 03 **Faster Control UI chat ** startup, local drafts, incremental stream rendering, transcript caching, first connect, and post-send cleanup no longer compete with the active conversation. (#88952, #88960, #88998, #89030, #89106) Thanks @vincentkoc and @sallyom. ↗ 04 **Governed skills and plugins ** Skill Workshop proposals, disabled-skill snapshots, support-file approvals, plugin contracts, and external package boundaries are clearer and safer for operators. (#79173, #82326, #89336) Thanks @zeus1959, @sallyom, @RomneyDa, @maverikva, @vincentkoc, and @shakkernerd. ↗ 05 **Richer operator coordination ** Workboard goals, task-backed runs, and SQLite-backed plugin state make multi-agent work and installed-plugin discovery survive reloads cleanly. (#87469, #88794) Thanks @vincentkoc. ↗ 06 **More dependable providers ** Google defaults, provider IDs, model catalogs, OAuth/device-code flows, media timers, and reasoning output now stay valid across hosted and local runtimes. (#88512, #88781, #89343, #89379, #89400) Thanks @1052326311, @charles-openclaw, @zz327455573, @849261680, @xzh-xydt, @azgardtek, @google, @mrbrl, @nyuDSA, @vincentkoc, and @cjalden. ↗ 07 Skills let the `skill_workshop` agent tool apply, reject, and quarantine explicit proposals through the guarded review flow. Thanks @shakkernerd and @vincentkoc. ↗ 08 Skills let proposals carry approved support files under standard skill folders, with scanner, hash, and rollback safeguards. Thanks @shakkernerd and @vincentkoc. ↗ 09 Skills let pending proposals be revised in place with versioned, dated proposal frontmatter before approval. Thanks @shakkernerd. ↗ 10 Skills add Skill Workshop with pending proposals, CLI/Gateway review actions, rollback metadata, and the `skill_workshop` agent tool. Thanks @shakkernerd and @vincentkoc. ↗ 11 Skill Workshop add the Control UI navigation, styled dashboard, proposal today view, revision dialog, file preview modal, searchable preview files, reusable session handoff, and localized strings. Thanks @vincentkoc and @shakkernerd. ↗ 12 Plugins externalize Tokenjuice as the official `@openclaw/tokenjuice` plugin with npm and ClawHub publish metadata. ↗ 13 Plugins externalize the GitHub Copilot agent runtime as the official `@openclaw/copilot` plugin with npm and ClawHub publish metadata. ↗ 14 iOS add hosted push relay defaults, realtime Talk playback, and a guarded WebSocket ping path for more reliable mobile sessions. (#88096, #88105, #88231) Thanks @ngutman. ↗ 15 iOS support native iPad display layouts. ↗ 16 Android add installed-app inspection commands, notification picker helpers, and updated-system-app classification. ↗ 17 Workboard add orchestration primitives and agent coordination tools for multi-agent planning and run tracking. (#87469) ↗ 18 Workboard wire task-backed board runs and show task comments in the edit modal. ↗ 19 Code mode add internal namespaces for scoped agent/global sessions and exact namespace tool dispatch. (#88043) ↗ 20 Gateway support Tailscale Serve service names for local service routing. ↗ 21 Control UI add a Dreaming-tab agent selector and propagate the selected agent through Dreaming status, diary, and diary actions. (#78748) Thanks @stevenepalmer, @vincentkoc, and @ttomiczek. ↗ 22 Control UI add calmer chat composer controls, local draft typing state, and first-output latency instrumentation for active chat entry. (#88772, #88998) Thanks @vincentkoc. ↗ 23 Plugins add a SecretRef provider integration manifest contract. (#82326) Thanks @sallyom. ↗ 24 Plugin SDK add typed presentation command actions and the bounded `resolve_exec_env` hook for plugin-provided exec environment contributions. (#88721) Thanks @vincentkoc. ↗ 25 Plugins persist the plugin install index in SQLite so installed package lookup survives reloads with less filesystem scanning. (#88794) Thanks @vincentkoc. ↗ 26 Providers add MiniMax M3 model support. (#88860) ↗ 27 Tools/media allow validated host-local text document media sends while keeping unsafe plain-text media sends blocked. (#79658) Thanks @simplyclever914. ↗ 28 Doctor add disk space health checks and stabilize post-upgrade JSON probes. Thanks @vincentkoc. ↗ 29 Channels store inbound queues in SQLite and migrate iMessage monitor state to SQLite-backed tracking. (#88797) Thanks @vincentkoc. ↗ 30 Skills add the core skills index and centralize skills runtime loading, status, filtering, and prompt formatting. Thanks @shakkernerd. ↗ 31 **PR #88995** perf(ui) guard chat composer controls. Thanks @vincentkoc. ↗ 32 **PR #88998** perf(ui) keep chat draft local while typing. Thanks @vincentkoc. ↗ 33 **PR #89012** perf(ui) trace chat first output latency. Thanks @vincentkoc. ↗ 34 **PR #89019** perf(ui) speed up first global chat sends. Thanks @vincentkoc. ↗ 35 **PR #86953** fix(plugins) block untrusted workspace setup-only channel loads. Thanks @hxy91819 and @SebTardif. ↗ 36 **PR #89030** perf(control-ui) prioritize first connect startup. Thanks @vincentkoc. ↗ 37 **PR #89058** perf(control-ui) hydrate chat startup state. Thanks @vincentkoc. ↗ 38 **PR #89106** fix(ui) clear chat composer after send. Related #89108. Thanks @sallyom. ↗ 39 **PR #88974** fix bound remote media reference reads [AI]. Thanks @pgondhi987. ↗ 40 **PR #88966** fix allow admins to approve dependency guard. Thanks @RomneyDa. ↗ 41 **PR #89169** fix(ci) restore dist cache before artifact builds. Thanks @RomneyDa. ↗ 42 **PR #85798** fix(agents) actionable copy for exhausted auth-profile failover. Thanks @RomneyDa. ↗ 43 **PR #88689** Keep JSON CLI output clean during startup **PR #88689** Keep JSON CLI output clean during startup. Related #88602. Thanks @alexzhu0 and @toruvieI. ↗ 44 **PR #85351** fix(memory) retry transient FileProvider-backed reads. Related #85252. Thanks @NianJiuZst and @richardmqq. ↗ 45 **PR #89188** fix(memory-core) reduce Linux watcher fan-out. Related #89182. Thanks @RomneyDa. ↗ 46 **PR #88734** docs refresh ClawHub showcase cards. Thanks @vyctorbrzezowski. ↗ 47 **PR #89212** test reset gateway timers at test boundaries. Thanks @RomneyDa. ↗ 48 **PR #89181** fix(agents) dispatch auth failures by type. Thanks @RomneyDa. ↗ 49 **PR #89180** enhance(slack) route plugin approvals through native UI. Thanks @kevinslin. ↗ 50 **PR #89185** fix(memory) warn on gateway watcher FD risk. Related #71335. Thanks @RomneyDa and @chrisabad. ↗ 51 **PR #89135** fix(ui) render skill workshop tab. Thanks @Solvely-Colin. ↗ 52 **PR #89246** Revert "fix(memory) warn on gateway watcher FD risk". Thanks @RomneyDa. ↗ 53 **PR #88948** Keep iMessage typing active during tool work **PR #88948** Keep iMessage typing active during tool work. Related #75847. Thanks @omarshahine and @alfredjbclaw. ↗ 54 **PR #89220** fix(agents) avoid duplicate generated media fallback. Thanks @omarshahine. ↗ 55 **PR #88946** Fix live model inference edge cases **PR #88946** Fix live model inference edge cases. Related #44870, #63685, #74305, #83192, #83810, #84109, #84688, #84697, #84804, #85806, #85918, #86808, #87381, #87740, #87768, #88039, #88439, #88456, #88833, #88918, #89008, #89241, #89242. Thanks @86jkuncle and @behroozbc and @SimSef and @tassiocamara and @chac4l and @alfredpennyworthtc-netizen and @shichuzhu and @mz1009-web and @devinallen-07 and @garyd9 and @silvesterxm and @jsompis and @xiaoxuesheng123467 and @TitanBob2026 and @guzzijones and @fenglanhua and @Nassiel and @ge0el and @pigfoot and @yetval and @joshgaskin and @shadow-enthusiast. ↗ 56 **PR #89305** fix(agents) bypass stale auth for plugin harnesses. Related #85105. Thanks @saphoroth. ↗ 57 **PR #89297** docs add ClawHub CLI page. Thanks @Wang-Yeah623 and @Takhoffman. ↗ 58 **PR #89318** fix(auto-reply) guard missing dispatcher getFailedCounts without weakening the SDK type. Related #89116. Thanks @Takhoffman and @Alix-007 and @Bigzhangbig. ↗ 59 **PR #89321** fix honor channel model overrides in agent ingress. Related #60078. Thanks @davidbordenwi. ↗ 60 **PR #89328** Fix backup verifier for root-relative hardlink targets **PR #89328** Fix backup verifier for root-relative hardlink targets. Thanks @abnershang. ↗ 61 **PR #87907** fix(memory) validate memory index identity. Related #83333. Thanks @osolmaz and @jacka-L. ↗ 62 **PR #89347** fix repair model provider edge cases. Related #80347, #88357, #45269. Thanks @wherewolf87 and @bottenbenny and @Alfred-claw28. ↗ 63 **PR #89336** Fix private llm-core leaks in plugin SDK declarations **PR #89336** Fix private llm-core leaks in plugin SDK declarations. Thanks @RomneyDa. ↗ 64 **PR #89015** fix(qqbot) allow RFC2544 benchmark range for token fetch (#88984). Thanks @sliverp and @Jensenwgd. ↗ 65 **PR #89046** feat(android) add installed apps node command. Thanks @Tosko4. ↗ 66 **PR #88315** feat(agents) generalized native compaction ownership for CLI backends. Thanks @anagnorisis2peripeteia. ↗ 67 **PR #89075** fix(memory-core) keep startup cron retries quiet. Related #75889. Thanks @Takhoffman and @bennewell35 and @highfly-hi. ↗ 68 **PR #89049** fix(idle-timeout) honor provider timeout for no-timeout runs. Thanks @lanzhi-lee. ↗ 69 **PR #89047** fix hide sessions_spawn timeout overrides. Thanks @lanzhi-lee. ↗ 70 **PR #89036** fix(cron) reject blank delivery targets. Thanks @lanzhi-lee. ↗ 71 **PR #89354** fix redact trajectory exports consistently. Thanks @pgondhi987. ↗ 72 **PR #88101** fix(codex) trace app-server thread lifecycle timing. Related #84640. Thanks @ai-hpc and @crash2kx. ↗ 73 **PR #89243** fix guard in-band macOS LaunchAgent stop. Related #89174. Thanks @bek91. ↗ 74 **PR #87339** fix(discord) accumulate reasoning progress deltas. Related #83983. Thanks @giodl73-repo and @xueqingli1. ↗ 75 **PR #89298** fix(diagnostics) re-queue pending messages after stuck-session recovery aborts ghost run. Related #89208. Thanks @LiLan0125 and @ketos-jona. ↗ 76 **PR #88821** trace Correlate channel message diagnostics into one trace. Related #88811. Thanks @bek91. ↗ 77 **PR #89411** fix detect shrinkwrapped npm installs. Related #87732. Thanks @jasonftl. ↗ 78 **PR #87749** fix(messages) preserve inbound audio for message-tool TTS. Related #87708. Thanks @ai-hpc and @nikodim-ai. ↗ 79 **PR #84431** Treat soft plugin repair warnings as nonfatal **PR #84431** Treat soft plugin repair warnings as nonfatal. Related #83889. Thanks @TurboTheTurtle and @davinci282828. ↗ 80 **PR #78005** feat(status) detect externalized plugin version drift in --deep. Thanks @hussein1362. ↗ 81 **PR #89050** fix(sessions) preserve corrupt-header transcripts. Related #89037. Thanks @charles-openclaw and @yetval. ↗ 82 **PR #84314** fix QQBot credential backups bypass gateway state isolation. Related #84313. Thanks @coygeek. ↗ 83 **PR #89281** fix repeat doctor state migration repairs. Thanks @RomneyDa. ↗ 84 **PR #87952** fix(update) pin post-core plugin compatibility to the downgraded core version (#87914). Thanks @MukundaKatta and @giodl73-repo and @Niriakot. ↗ 85 **PR #89417** refactor tighten agent harness surfaces. ↗ 86 **PR #89400** fix(google) add missing gemini-3.1-flash-lite to google-vertex catalog. Related #89390. Thanks @xzh-xydt and @nyuDSA. ↗ 87 **PR #88699** fix(codex) clear stale context-engine projection after overflow retry. Related #88355. Thanks @SebTardif and @100yenadmin. ↗ 88 **PR #89379** fix(providers) use native reasoning mode for Gemini instead of tagged. Related #69220. Thanks @849261680 and @mrbrl. ↗ 89 **PR #84266** Surface unresolved OAuth sidecar auth failures **PR #84266** Surface unresolved OAuth sidecar auth failures. Related #84252. Thanks @TurboTheTurtle. ↗ 90 **PR #88879** feat(plugin-sdk) add resolve_exec_env hook. Thanks @lanzhi-lee. ↗ 91 **PR #89432** fix(qqbot) migrate state stores to sqlite kv. ↗ 92 **PR #89436** fix(llm) gate OpenAI-compatible reasoning output. Thanks @zz327455573. ↗ 93 **PR #87703** fix(agents) run before_agent_finalize for embedded agents. Related #87585. Thanks @ai-hpc and @lileilei-camera. ↗ 94 **PR #89440** fix(llm) keep OpenAI-compatible reasoning streams active. Related #84384. Thanks @teknolojay. ↗ 95 **PR #88976** fix(mistral) enable prompt cache key compat. Related #83709. Thanks @Alix-007 and @Net-Sentinel. ↗ 96 **PR #87379** fix audit and repair hooks token reuse with Gateway auth. Related #87376. Thanks @coygeek. ↗ 97 **PR #89701** fix(exec) reject corrupt shell snapshots. Thanks @RomneyDa. ↗ 98 **PR #89601** fix(outbound) stop schema-padded poll modifiers from blocking send. Thanks @codezz and @Takhoffman. ↗ 99 **PR #89731** fix backport gateway health credential handling. Thanks @RomneyDa. ↗ 100 **PR #87484** fix(agents) clear legacy auto fallback pins. Related #87467. Thanks @neeravmakwana and @bgmbgm94. ↗ 101 **PR #88182** Fix subagent DM completion delivery after yield **PR #88182** Fix subagent DM completion delivery after yield. Related #88042. Thanks @joshavant and @ksiyuna-claw. ↗ 102 **PR #88183** fix(whatsapp) retry QR login 408 timeouts. Thanks @mcaxtr. ↗ 103 **PR #88866** Persist Discord thread bindings in SQLite **PR #88866** Persist Discord thread bindings in SQLite. ↗ 104 **PR #88231** fix(ios) guard websocket ping continuation. Thanks @ngutman. ↗ 105 **PR #88952** perf(ui) cache chat transcript renders. Thanks @vincentkoc. ↗ 106 **PR #88960** perf(ui) record pending send paint timing. Thanks @vincentkoc. ↗ 107 **PR #79173** fix skip disabled skill snapshot env overrides. Related #79072. Thanks @zeus1959 and @maverikva. ↗ 108 **PR #82326** Add plugin manifest contract for SecretRef provider integrations **PR #82326** Add plugin manifest contract for SecretRef provider integrations. Thanks @sallyom. ↗ 109 **PR #87469** feat add core session goals. ↗ 110 **PR #88794** Persist plugin install index in SQLite **PR #88794** Persist plugin install index in SQLite. ↗ 111 **PR #88512** fix resolve google provider default API to google-generative-ai. Related #88480. Thanks @1052326311 and @azgardtek. ↗ 112 **PR #88781** fix(models) strip remaining provider self prefixes. Related #88770. Thanks @charles-openclaw and @cjalden. ↗ 113 **PR #88096** feat(ios) default to hosted push relay. Thanks @ngutman. ↗ 114 **PR #88105** feat(ios) add talk tab realtime playback. Thanks @ngutman. ↗ 115 **PR #88043** feat add internal code mode namespaces. ↗ 116 **PR #78748** fix(ui) add agent selector to dreaming tab. Related #63558. Thanks @stevenepalmer and @ttomiczek. ↗ 117 **PR #88772** feat calm composer controls. ↗ 118 **PR #88721** feat(plugin-sdk) add typed presentation command actions. ↗ 119 **PR #88860** feat(minimax) add MiniMax M3 support. ↗ 120 **PR #79658** Allow validated TXT/JSON/YAML media sends **PR #79658** Allow validated TXT/JSON/YAML media sends. Thanks @simplyclever914. ↗ 121 **PR #88797** Migrate iMessage monitor state to SQLite **PR #88797** Migrate iMessage monitor state to SQLite. ↗ 122 **PR #88724** fix persist ACP metadata in SQLite. ↗ 123 **PR #88730** fix(codex) stream final answer partials. Related #88405. Thanks @crash2kx. ↗ 124 **PR #88314** fix #76284 [Bug]: openclaw agents add blocked — cannot add Jon/Atlas as separate agents. Thanks @zhangguiping-xydt and @RicardoUKMX. ↗ 125 **PR #88896** fix harden CLI and plugin edge cases. ↗ 126 **PR #88764** fix(update) recognize manual-update launchd jobs. Related #88736. Thanks @TurboTheTurtle and @deonkretch. ↗ 127 **PR #77237** Preserve managed npm plugin root when install validation bloc... **PR #77237** Preserve managed npm plugin root when install validation blocks update. Thanks @zhuisDEV. ↗ 128 **PR #88767** fix(plugin-sdk) isolate provider catalog projection failures. Thanks @vincentkoc. ↗ 129 **PR #88807** fix(plugins) isolate web provider factory failures. Thanks @vincentkoc. ↗ 130 **PR #88285** Move cron persistence to SQLite **PR #88285** Move cron persistence to SQLite. ↗ 131 **PR #88294** fix(cron) include job name when reading single-job run history. Thanks @kip-claw. ↗ 132 **PR #85931** fix(memory) serialize qmd update writes across processes to stop SQLITE_BUSY. Related #66339. Thanks @openperf and @SakenW. ↗ 133 **PR #88129** fix keep live OpenClaw session locks during cleanup. ↗ 134 **PR #88136** fix(agents) centralize terminal run outcome precedence. Related #87444. Thanks @ssdatye. ↗ 135 **PR #88141** fix route generated media completions through requester agent. ↗ 136 **PR #88162** fix(agents) extend terminal outcome projections. ↗ 137 **PR #88229** fix(agents) normalize sessions_send message aliases. Related #88146. Thanks @zhangguiping-xydt and @jsonmez. ↗ 138 **PR #74715** fix(ui) show Communication Notifications tab. Thanks @VladyslavLevchuk. ↗ 139 **PR #87896** fix(feishu) fallback when accepted turns send no visible reply. Thanks @ArthurNie. ↗ 140 **PR #88749** fix(channels) recover failed progress draft starts. Related #83115. Thanks @SebTardif. ↗ 141 **PR #88803** fix(reply) preserve sessions_send external routes. Related #88044. Thanks @MonkeyLeeT and @Lvan185. ↗ 142 **PR #88820** fix(diagnostics) clear embedded-run activity when recovery declares lane idle. Related #88660. Thanks @openperf and @Iman-Sharif. ↗ 143 **PR #88288** fix(config) skip state-dir dotenv values that are unresolved shell references. Related #88274. Thanks @Alix-007 and @mathias15010. ↗ 144 **PR #88305** fix(browser) isolate Chrome MCP pending attach aborts. Related #88304. Thanks @rohitjavvadi. ↗ 145 **PR #74089** fix(openai/tts) handle [[tts:speed]] directive in OpenAI speech provider (#12163). Thanks @stainlu and @useramuser. ↗
409 changes Open upstream ↗
01 **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. ↗ 02 **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. ↗ 03 **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. ↗ 04 **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. ↗ 05 **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. ↗ 06 Workboard task details, Android notification app selection, and Dreaming ca... Workboard task details, Android notification app selection, and Dreaming candidate scoring gained broader operator controls. ↗ 07 Control UI now streams stable Markdown blocks and records more chat respons... Control UI now streams stable Markdown blocks and records more chat responsiveness signals to guide first-reply performance work. Thanks @vincentkoc. ↗ 08 **PR #87469** feat add core session goals. ↗ 09 **PR #88129** fix keep live OpenClaw session locks during cleanup. ↗ 10 **PR #88133** Fix heartbeat default run timeout **PR #88133** Fix heartbeat default run timeout. Related #87438. Thanks @ovrsr. ↗ 11 **PR #88132** fix move compaction planning off the event loop. Related #86358. Thanks @Mithril1991. ↗ 12 **PR #88137** fix ci mainline checks **PR #88137** fix ci mainline checks. Thanks @RomneyDa. ↗ 13 **PR #88140** perf centralize skills indexing and visibility. Thanks @shakkernerd. ↗ 14 **PR #82326** Add plugin manifest contract for SecretRef provider integrations **PR #82326** Add plugin manifest contract for SecretRef provider integrations. Thanks @sallyom and @joshavant. ↗ 15 **PR #88141** fix route generated media completions through requester agent. ↗ 16 **PR #87770** refactor share native approval route gates. Thanks @kevinslin. ↗ 17 **PR #88156** Refactor SQLite state base and plugin migration **PR #88156** Refactor SQLite state base and plugin migration. ↗ 18 **PR #87781** fix(codex) prevent false completion stalls during native streams. Thanks @keshavbotagent. ↗ 19 **PR #88136** fix(agents) centralize terminal run outcome precedence. Related #87444. Thanks @ssdatye. ↗ 20 **PR #88155** test(infra) avoid max fake-timer jumps. Thanks @RomneyDa. ↗ 21 **PR #88160** test(unit-fast) isolate fake-timer files. Thanks @RomneyDa. ↗ 22 **PR #84535** fix(gateway) resolve message actions against runtime config. Related #84530. Thanks @funmerlin and @joshavant. ↗ 23 **PR #88107** feat only include the current changelog section in tarball. Thanks @RomneyDa. ↗ 24 **PR #88130** fix(agents) preserve Codex auth for compaction fallback. Related #86820. Thanks @kopl-blip. ↗ 25 **PR #84814** fix(agents) classify embedded provider business denials for fallback. Related #48680. Thanks @Takhoffman and @yu-xin-c and @lovensky1992-wk. ↗ 26 **PR #88178** feat(workboard) add orchestration primitives. ↗ 27 **PR #88162** fix(agents) extend terminal outcome projections. ↗ 28 **PR #88182** Fix subagent DM completion delivery after yield **PR #88182** Fix subagent DM completion delivery after yield. Related #88042. Thanks @joshavant and @ksiyuna-claw. ↗ 29 **PR #88191** Fix Codex raw image generation media projection **PR #88191** Fix Codex raw image generation media projection. Related #87948. Thanks @joshavant and @mazetsoligarh-cell. ↗ 30 **PR #88134** fix(imessage) preserve SMS approval reply routes. Thanks @kevinslin. ↗ 31 **PR #88161** Fix restart sentinel internal continuations **PR #88161** Fix restart sentinel internal continuations. Related #87792. Thanks @joshavant and @chrispydizzle. ↗ 32 **PR #88199** ci extend platform checkout fetch timeout. Thanks @RomneyDa. ↗ 33 **PR #87796** feat(ci) autoscrub dependency lockfile-only PR changes. Thanks @RomneyDa. ↗ 34 **PR #88200** Refactor task state onto shared SQLite **PR #88200** Refactor task state onto shared SQLite. ↗ 35 **PR #88083** fix(agent) preserve media task success on delivery miss. Thanks @obviyus. ↗ 36 **PR #88127** perf(test) fix explicit-file Vitest wrapper hangs. Thanks @RomneyDa. ↗ 37 **PR #88183** fix(whatsapp) retry QR login 408 timeouts. Thanks @mcaxtr. ↗ 38 **PR #84234** fix(cli-runner) write-side flush gate + orphan-tool-use invalidator. Thanks @adele-with-a-b. ↗ 39 **PR #88231** fix(ios) guard websocket ping continuation. Thanks @ngutman. ↗ 40 **PR #88117** refactor extract LLM core packages. ↗ 41 **PR #88248** fix show chat errors as visible messages. ↗ 42 **PR #88250** refactor(agents) type media completion delivery misses. ↗ 43 **PR #88207** Fix Codex native thread overflow rotation **PR #88207** Fix Codex native thread overflow rotation. Thanks @fuller-stack-dev. ↗ 44 **PR #88109** refactor extract media generation core package. ↗ 45 **PR #88247** feat add hosted model providers. ↗ 46 **PR #88259** feat(workboard) add board ops recovery metadata. ↗ 47 **PR #87788** fix(codex) move skills list and memory pointer to collaboration instructions. Thanks @lastguru-net. ↗ 48 **PR #88262** fix(codex) stop injecting mirrored history into prompts. ↗ 49 **PR #88177** fix(codex) prevent post-tool edit stream timeouts. Thanks @keshavbotagent. ↗ 50 **PR #88265** refactor extract markdown core package. ↗ 51 **PR #88279** refactor move terminal core into package. ↗ 52 **PR #86179** feat Add Xiaomi Token Plan provider support. Related #86169. Thanks @NianJiuZst and @openclaws420. ↗ 53 **PR #88211** fix(plugins) resolve ${ENV_VAR} references in plugin config before handoff. Related #88195. Thanks @Marvinthebored and @Peetiegonzalez. ↗ 54 **PR #88284** fix(agents) harden autoreview Windows harness. Thanks @vincentkoc. ↗ 55 **PR #88260** Persist subagent registry in SQLite **PR #88260** Persist subagent registry in SQLite. ↗ 56 **PR #88217** refactor unify OpenAI provider identity. ↗ 57 **PR #88297** refactor extract media understanding common package. ↗ 58 **PR #88299** fix(gateway) recover channels after reload stop timeout. Thanks @obviyus. ↗ 59 **PR #88326** perf(cli) reduce room-event Claude cache churn. Thanks @obviyus. ↗ 60 **PR #88310** fix(test) include workflow lint target in routing expectation. Thanks @vincentkoc. ↗ 61 **PR #88225** fix(ui) stop pulsing completed stream segments. Thanks @scotthuang. ↗ 62 **PR #88298** fix classify ws pre-handshake close as benign. Related #88257. Thanks @akrimm702 and @survivor998. ↗ 63 **PR #88338** feat(workboard) persist orchestration metadata in sqlite. ↗ 64 **PR #88266** refactor extract model catalog core package. ↗ 65 **PR #88235** feat(ios) refresh app store metadata. Thanks @ngutman. ↗ 66 **PR #85258** fix(qqbot) deliver partial tool progress. Related #66509. Thanks @samzong and @vincentkoc and @gabrielduartesignart. ↗ 67 **PR #88349** Add per-agent SQLite cache store **PR #88349** Add per-agent SQLite cache store. ↗ 68 **PR #88135** fix(codex) refresh stale managed runtime plugin. Related #87650. Thanks @brokemac79 and @thoth-ctl. ↗ 69 **PR #68844** fix(outbound) pack newline-mode paragraphs up to limit. Thanks @kesslerio. ↗ 70 **PR #88236** fix(plugins) ignore helper files in extension roots. Related #88198. Thanks @mushuiyu886 and @mmhzlrj. ↗ 71 **PR #86089** [Fix] Deliver restart recovery replies **PR #86089** [Fix] Deliver restart recovery replies. Related #69249. Thanks @samzong and @slideshow-dingo. ↗ 72 **PR #88375** refactor route model catalog imports to core package. ↗ 73 **PR #85511** feat(ui) add collapsible toggle for recent sessions in sidebar. Related #85510. Thanks @NianJiuZst. ↗ 74 **PR #80560** fix(tui) distinguish /new and /reset command descriptions. Related #49517. Thanks @KhanCold and @KaysonYeh. ↗ 75 **PR #88229** fix(agents) normalize sessions_send message aliases. Related #88146. Thanks @zhangguiping-xydt and @jsonmez. ↗ 76 **PR #88387** refactor(matrix) move ephemeral state to plugin sqlite. ↗ 77 **PR #86755** test(tasks) cover task domain view mappers. Thanks @leno23. ↗ 78 **PR #76355** fix(install) show progress during npm install in non-interactive mode. Related #82305. Thanks @SebTardif. ↗ 79 **PR #77279** fix(media) dedupe identical path/url in inbound media-note formatter (#47587). Thanks @MoerAI and @yzjJosh. ↗ 80 **PR #82824** fix(gateway) explain ignored config-triggered restart when restart command is disabled. Thanks @wAngByg. ↗ 81 **PR #85979** fix(discord) omit undefined component registry fields [AI]. Thanks @funmerlin. ↗ 82 **PR #76091** Fix Discord reply typing lifecycle **PR #76091** Fix Discord reply typing lifecycle. Thanks @zhuisDEV. ↗ 83 **PR #88232** fix(models) prefer exact configured provider refs before aliases. Related #88218. Thanks @stevenepalmer and @herculeanfit1. ↗ 84 **PR #88276** fix(feishu) stream plain replies as cards. Thanks @qiangu. ↗ 85 **PR #80037** Expose resolved subagent model metadata **PR #80037** Expose resolved subagent model metadata. Thanks @guanbear. ↗ 86 **PR #78288** Agents/exec show target node name in exec tool transparency messages. Related #77719. Thanks @JiataiWang and @civiltox. ↗ 87 **PR #88408** feat expand workboard orchestration metadata. ↗ 88 **PR #87920** feat(gateway) forward OpenAI stop sequences through chat completions. Thanks @Lellansin. ↗ 89 **PR #87886** fix(skill-creator) sort files for deterministic .skill package order. Related #37748. Thanks @coder999999999 and @shuofengzhang. ↗ 90 **PR #88399** Improve MCP operability **PR #88399** Improve MCP operability. ↗ 91 **PR #88398** refactor move model catalog refs into core package. ↗ 92 **PR #88328** feat add Skill Workshop and skill research. Thanks @shakkernerd. ↗ 93 **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. ↗ 94 **PR #88429** ci keep harness changes on fast checks. ↗ 95 **PR #88430** fix(scripts) quiet minimal runtime asset copies. Thanks @vincentkoc. ↗ 96 **PR #88321** fix(codex) keep app-server continuation turns alive. Related #88196, #88331. Thanks @abnershang and @aounakram. ↗ 97 **PR #88435** refactor move model catalog normalization into core package. ↗ 98 **PR #88226** fix(llm) repair \u escapes that lack four hex digits in streaming JSON. Thanks @coder999999999. ↗ 99 **PR #88380** fix(ui) keep chat model selected after session switch. Related #86597. Thanks @brokemac79 and @xuli500177. ↗ 100 **PR #88285** Move cron persistence to SQLite **PR #88285** Move cron persistence to SQLite. ↗ 101 **PR #87915** fix(build) avoid stale agent-core dts warnings. Thanks @keshavbotagent. ↗ 102 **PR #68669** fix(agents) dedupe subagent browser session cleanup wrapper with dispatch flag. Related #68668. Thanks @Feelw00. ↗ 103 **PR #88411** refactor(msteams) persist conversation and poll stores in sqlite. ↗ 104 **PR #88303** Skip browser cleanup when browser is disabled **PR #88303** Skip browser cleanup when browser is disabled. Thanks @poison. ↗ 105 **PR #88416** Refactor subagent thread binding into core **PR #88416** Refactor subagent thread binding into core. ↗ 106 **PR #83956** feat(cli) add sessions tail progress view. Related #83441. Thanks @spacegeologist and @ndj888. ↗ 107 **PR #71648** fix(mcp) bound pendingClaudePermissions / pendingApprovals via TTL sweeper + close clear. Related #71646. Thanks @Feelw00. ↗ 108 **PR #88346** refactor extract web content core package. ↗ 109 **PR #71280** test(gateway) avoid brittle shutdown timer assertion. Thanks @hansolo949. ↗ 110 **PR #80686** fix(agents) extend session-write-lock payload-less orphan grace from 5s to 30s. Thanks @wAngByg. ↗ 111 **PR #88067** fix(responses) drop orphaned assistant msg\_\* id when reasoning is dropped (#88019). Thanks @BSG2000. ↗ 112 **PR #88417** [codex] Route denied exec approval followups to sessions **PR #88417** [codex] Route denied exec approval followups to sessions. Related #88167. Thanks @brokemac79 and @jhartman00. ↗ 113 **PR #85996** fix #85782 surface terminal TUI lifecycle errors. Thanks @zhangguiping-xydt and @vincentkoc and @shakkernerd. ↗ 114 **PR #88445** refactor source model catalog types from core. ↗ 115 **PR #88444** Classify release dependency ownership metadata **PR #88444** Classify release dependency ownership metadata. ↗ 116 **PR #82415** Fix /acp spawn cwd inheritance for target agent workspaces **PR #82415** Fix /acp spawn cwd inheritance for target agent workspaces. Thanks @summerview1997. ↗ 117 **PR #88448** refactor simplify sqlite cron persistence. ↗ 118 **PR #88268** fix #88214 [Feature]: Dashboard sidebar Recent sessions should filter by currently selected agent. Thanks @zhangguiping-xydt and @wujitianya. ↗ 119 **PR #86642** feat pass structured provider error signals to hooks. Thanks @fuller-stack-dev. ↗ 120 **PR #63840** fix(slack) preserve thread context for Agents & Assistants DM root messages. Related #63659. Thanks @zozo123 and @dev-ithitchhiker. ↗ 121 **PR #86924** fix scrub serialized tool-call text from replies. Thanks @fuller-stack-dev. ↗ 122 **PR #87093** fix promote serialized tool calls via repair package. Thanks @fuller-stack-dev. ↗ 123 **PR #88452** chore(release) update appcast for 2026.5.28. ↗ 124 **PR #88043** feat add internal code mode namespaces. ↗ 125 **PR #78748** fix(ui) add agent selector to dreaming tab. Related #63558. Thanks @stevenepalmer and @ttomiczek. ↗ 126 **PR #88455** Refactor cron migrations under doctor **PR #88455** Refactor cron migrations under doctor. ↗ 127 **PR #87929** fix(cron) preserve plugin delivery targets. Related #87905. Thanks @TurboTheTurtle and @xmoxmo. ↗ 128 **PR #87390** fix(ci) ignore fenced headings in proof parser. Thanks @MonkeyLeeT. ↗ 129 **PR #85248** fix(gateway) strip spurious tool call blocks when provider signals stop. Related #85161. Thanks @Jerry-Xin and @syncword. ↗ 130 **PR #83660** fix(browser) allow upload from inbound media directory. Related #83544. Thanks @spacegeologist and @scorpiord. ↗ 131 **PR #88467** feat improve MCP operator workflows. ↗ 132 **PR #84247** Refactor browser screenshot vision through shared media under... **PR #84247** Refactor browser screenshot vision through shared media understanding. Thanks @scotthuang. ↗ 133 **PR #88464** Move Workboard to relational SQLite **PR #88464** Move Workboard to relational SQLite. ↗ 134 **PR #88451** refactor unify OpenAI provider identity. ↗ 135 **PR #88459** refactor extract normalization core package. ↗ 136 **PR #84670** [codex] fix webchat full-message reader for truncated history **PR #84670** [codex] fix webchat full-message reader for truncated history. Related #84651. Thanks @NianJiuZst and @100yenadmin. ↗ 137 **PR #88462** fix(heartbeat) advance stale scheduler deferrals. Related #79380. Thanks @jorgemarmor. ↗ 138 **PR #88461** refactor(cron) split service timer helpers. ↗ 139 **PR #88427** fix(auth) bound inherited oauth expiry. ↗ 140 **PR #88458** fix clarify generated media reply prompts. ↗ 141 **PR #88421** [codex] Fix Telegram DM topic session routing **PR #88421** [codex] Fix Telegram DM topic session routing. Related #80212. Thanks @brokemac79 and @SergeyKerj. ↗ 142 **PR #88113** fix(commands) make /skill load workspace skills. Related #88056. Thanks @MonkeyLeeT and @shakkernerd. ↗ 143 **PR #85904** fix(slack) keep DM thread turns out of active steering. Thanks @guanbear. ↗ 144 **PR #88395** build(OpenClawKit) make ElevenLabsKit (talk/TTS) an optional package trait. Thanks @mochiexists and @atlascodesai. ↗ 145 **PR #88469** refactor(telegram) persist plugin state in sqlite. ↗ 146 **PR #88406** Fix iMessage startup watch replay **PR #88406** Fix iMessage startup watch replay. Thanks @obviyus. ↗ 147 **PR #87179** fix(discord) deliver same-session channel replies. Related #87157. Thanks @stevenepalmer and @neo-jacked-in. ↗ 148 **PR #88115** docs remove divider comments. ↗ 149 **PR #88319** fix(agents) skip below-target CLI compaction failures. Thanks @frankekn. ↗ 150 **PR #88552** Remove channel test isolation hack **PR #88552** Remove channel test isolation hack. ↗ 151 **PR #86176** Fix Telegram media message edits **PR #86176** Fix Telegram media message edits. Related #86161. Thanks @TurboTheTurtle and @crowneglobal. ↗ 152 **PR #88476** feat add Twilio SMS channel. ↗ 153 **PR #83992** fix(webchat) preserve refresh-visible history and composer state. Related #83344. Thanks @spacegeologist and @zachisfine. ↗ 154 **PR #88496** fix(auto-reply) redact secrets in config show output. Related #65623. Thanks @jason-allen-oneal and @coygeek. ↗ 155 **PR #88536** feat improve MCP operator controls. ↗ 156 **PR #84290** Doctor expose UI freshness health findings. Thanks @giodl73-repo. ↗ 157 **PR #88539** refactor(telegram) keep topic thread mapping plugin-local. ↗ 158 **PR #80391** fix(scripts) timeout crabbox wrapper sanity checks. Thanks @ejames-dev. ↗ 159 **PR #85990** Prefer Talk source-reply final text **PR #85990** Prefer Talk source-reply final text. Related #85275. Thanks @TurboTheTurtle and @BsnizND. ↗ 160 **PR #65914** fix(memory) respect qmd status timeout and skip checkpoint exports. Thanks @shawnduggan. ↗ 161 **PR #88555** feat(workboard) add worker dispatch CLI. ↗ 162 **PR #88018** fix(infra) guard against overwriting corrupt target session store during migration. Related #88017. Thanks @Feelw00. ↗ 163 **PR #88185** fix(cron) accept sub-second --at datetimes resolved in a timezone. Thanks @coder999999999. ↗ 164 **PR #88378** fix(xiaomi) support MiMo voicedesign TTS. Thanks @GimingRao. ↗ 165 **PR #70864** feat add scoped mention pattern policy. Thanks @patrick-slimelab. ↗ 166 **PR #87998** fix(agents) route per-turn media task hints below the cache boundary. Related #85203. Thanks @nxmxbbd and @AV500group. ↗ 167 **PR #75181** test(plugins) cover Link agent wallet bundle shape. Thanks @stainlu. ↗ 168 **PR #88347** fix(agents) strip malformed arg-value suffixes. Related #48780. Thanks @vincentkoc and @koden588-blip. ↗ 169 **PR #88578** docs document scoped mention patterns. ↗ 170 **PR #81808** chore(lint) enable object-shorthand. Thanks @tanshanshan. ↗ 171 **PR #70789** fix(ui) fix tool result pairing for sequential same-name tool calls. Related #70746. Thanks @chinar-amrutkar and @tarvis0523. ↗ 172 **PR #88011** fix(logging) align diagnostic recovery in-flight dedup keys. Related #88010. Thanks @Feelw00. ↗ 173 **PR #88574** Fix silent internal aborts after tool-use turns **PR #88574** Fix silent internal aborts after tool-use turns. Thanks @obviyus. ↗ 174 **PR #82219** fix(codex) accept first-party OpenAI plugin marketplaces (bundled and primary-runtime). Related #82216. Thanks @yaanfpv. ↗ 175 **PR #83719** feat(dreaming) add report-only shadow trial runner. Thanks @iFiras-Max1. ↗ 176 **PR #87772** fix(reply) deliver plugin binding replies. Related #87721. Thanks @MonkeyLeeT and @wingleungron. ↗ 177 **PR #74493** fix(cli) identity-only auth-epoch hashing for token credentials (#74312). Thanks @stainlu and @aderius. ↗ 178 **PR #88534** refactor extract media and ACP core packages. ↗ 179 **PR #79447** fix(model-auth) resolve per-entry apiKey profile ID references. Related #67423. Thanks @kinjitakabe and @presidenzo. ↗ 180 **PR #88577** fix(sms) diagnose Twilio webhook setup. ↗ 181 **PR #84628** [AI-assisted] fix(plugins) scope startup metadata manifest reads. Related #70533. Thanks @IWhatsskill and @jpippo364. ↗ 182 **PR #88582** Refactor cron SQLite runtime paths **PR #88582** Refactor cron SQLite runtime paths. ↗ 183 **PR #88595** perf speed up chat hydration and add 3D workboard. ↗ 184 **PR #75005** fix(media) allow explicit synthetic auth for media providers. Related #74644. Thanks @sqsge and @mozi1924. ↗ 185 **PR #75128** fix(boot) wrap BOOT.md in internal-runtime-context, strip from message-tool args (#53732). Thanks @stainlu and @alvaro630. ↗ 186 **PR #88599** fix(memory) retry transient embedding failures. Related #44166, #71784. Thanks @MrGeDiao and @kevinheinrichs. ↗ 187 **PR #88466** fix(gateway) guide dashboard auth after service repair. Related #88290. Thanks @sallyom and @drarturryzhov-boop. ↗ 188 **PR #88463** fix(ui) keep transient chat errors out of page headers. Thanks @sallyom. ↗ 189 **PR #88474** [AI-assisted] fix(gateway) avoid restarts for auth cooldown reloads. Related #88443. Thanks @IWhatsskill and @MrMaturin. ↗ 190 **PR #88603** fix(media) use typed auth for no-auth media providers. Related #74644. Thanks @mozi1924. ↗ 191 **PR #88605** refactor make OpenAI Codex legacy doctor-only. ↗ 192 **PR #88440** Retry stale CLI sessions inside runner lifecycle **PR #88440** Retry stale CLI sessions inside runner lifecycle. Related #77089. Thanks @brokemac79 and @clawdbotv2. ↗ 193 **PR #88393** fix(browser) document stable tab references. Thanks @FMLS and @hxy91819. ↗ 194 **PR #88340** fix(agents) classify expired thinking signatures. Related #88020. Thanks @Takhoffman and @BryanTegomoh and @bryanbaer. ↗ 195 **PR #88607** fix(devices) refresh paired device last-seen metadata. Related #81169. Thanks @vyctorbrzezowski and @deminson. ↗ 196 **PR #88613** fix queue subagent completion handoffs. ↗ 197 **PR #88609** refactor move plugin state stores to SQLite. ↗ 198 **PR #79363** fix(exec) allow known safe shell builtins in allowlist mode. Related #46056. Thanks @kinjitakabe and @aukei. ↗ 199 **PR #88617** fix(agents) preserve reasoning replay from model metadata. Related #88068. Thanks @syncword. ↗ 200 **PR #77953** fix(auto-reply) honor per-model thinking params. Thanks @tynamite. ↗ 201 **PR #88626** refactor(openai) confine legacy codex repair to doctor. ↗ 202 **PR #87887** fix(hooks) isolate slug-generator failures from shared auth profile (#71709). Thanks @openperf and @nikolaykazakovvs-ux. ↗ 203 **PR #88281** fix(tasks) reclaim ACP zombie runs blocking gateway restart. Related #88205. Thanks @openperf and @subaochen. ↗ 204 **PR #88619** refactor unify subagent handoffs into agent steering queue. ↗ 205 **PR #88004** fix(tui) skip history reload when final event has displayable output. Related #87922. Thanks @SebTardif and @darconadalabarga. ↗ 206 **PR #87962** fix(webchat) suppress stale active session row racing a completed turn (#87875). Thanks @MukundaKatta and @TunMax. ↗ 207 **PR #88050** fix(tui) use middle truncation for paths and commands in tool display. Related #87936. Thanks @SebTardif and @Joel-Claw. ↗ 208 **PR #86463** fix(auto-reply) warn on substantive private message-tool finals. Thanks @yaoyi1222. ↗ 209 **PR #88554** docs clarify Android token comments. ↗ 210 **PR #87959** fix(tui) preserve pending local runs during session sync. Thanks @nao860226-rgb and @vincentkoc. ↗ 211 **PR #82224** feat(codex) add portable Codex command pickers. Thanks @yaanfpv. ↗ 212 **PR #88637** chore bump OpenClaw version to 2026.5.31. ↗ 213 **PR #88587** fix(agents) normalize prefixed Anthropic fallback model ids (#88560). Thanks @TurboTheTurtle and @cjalden. ↗ 214 **PR #88351** fix(doctor) diagnose malformed provider catalogs. Thanks @vincentkoc. ↗ 215 **PR #88618** refactor expand acp core package. ↗ 216 **PR #87538** fix(agents) model-scope cooldown for transport timeout (#87462). Thanks @openperf and @fenglanhua. ↗ 217 **PR #88623** fix(agents) release session lock on manual abort. Related #88600. Thanks @williammu. ↗ 218 **PR #88588** fix(agents) avoid synthetic tool results during parallel races (#88168). Thanks @TurboTheTurtle and @jhartman00. ↗ 219 **PR #88636** feat add MCP code-mode namespace. ↗ 220 **PR #88558** fix(gateway) enforce OpenAI tool_choice required/function contracts. Thanks @Lellansin. ↗ 221 **PR #88628** fix scope plugin tools and async media starts. ↗ 222 **PR #84007** fix(agents) inherit subagent thinking defaults. Related #55790. Thanks @stevenepalmer and @vrurg. ↗ 223 **PR #81795** Fix Control UI agent thinking defaults **PR #81795** Fix Control UI agent thinking defaults. Related #81760. Thanks @jbetala7 and @caiming0331. ↗ 224 **PR #74418** fix(agents) recognize params.thinking=false and "disabled"/"none" as thinking=off. Related #74374. Thanks @yelog and @simmssun-hashh. ↗ 225 **PR #88583** fix(gateway) reject pre-reset run lifecycle events from clobbering the rotated session row. Related #88538. Thanks @openperf and @tianxiaochannel-oss88. ↗ 226 **PR #88612** fix(models) keep auth login out of main config. Related #88565. Thanks @corleonexie-maker. ↗ 227 **PR #88655** fix(gateway) reject stale lifecycle session updates. Related #88538. Thanks @tianxiaochannel-oss88. ↗ 228 **PR #88658** fix(agents) report stale session locks without cleanup. ↗ 229 **PR #88661** ci stabilize Testbox changed checks. ↗ 230 **PR #88641** feat add exec shell snapshot cache. ↗ 231 **PR #84232** fix(messages) use best-effort for implicit tool-only source replies. Related #84078. Thanks @tianxiaochannel-oss88. ↗ 232 **PR #88381** fix(agents) preserve runtime tools in lean mode. Thanks @vincentkoc. ↗ 233 **PR #88527** fix(discord) ping mention-bearing final replies under live preview (#88360). Thanks @openperf and @hughbeyond. ↗ 234 **PR #88659** refactor clean up ACP package metadata and helpers. ↗ 235 **PR #88652** fix(codex) restore bounded recovery continuity. Related #88352, #88354. Thanks @100yenadmin. ↗ 236 **PR #82739** fix(macos) prevent duplicate menu bar icons. Thanks @afalk42. ↗ 237 **PR #87975** fix(slack) avoid forced threads for replyToMode off. Thanks @lawrencetran. ↗ 238 **PR #86397** fix(discord) PluralKit DM pairing identity + `direct` peer regex (#86332). Thanks @Sanjays2402. ↗ 239 **PR #88601** fix(sms) cover native proof follow-ups. Thanks @clawSean. ↗ 240 **PR #88670** fix(agents) retry transient stale session locks. ↗ 241 **PR #80996** Fix Google Chat message tool thread replies **PR #80996** Fix Google Chat message tool thread replies. Related #80995. Thanks @franco-viotti. ↗ 242 **PR #88549** fix(memory-core) reclaim orphaned dreaming sessions with surviving transcripts. Related #88322. Thanks @Alix-007 and @TheDenStudios. ↗ 243 **PR #88557** fix(terminal) clamp wide graphemes in narrow table cells. Related #88556. Thanks @jbetala7. ↗ 244 **PR #87904** fix route iMessage DM media through attachment handoff. Related #87597. Thanks @HOYALIM and @omarshahine and @TurboTheTurtle. ↗ 245 **PR #88547** feat(github-copilot) add Claude Opus 4.8 to default model catalog. Thanks @saju01. ↗ 246 **PR #88428** fix(discord) route thread bindings to plugin owners. Related #64199. Thanks @SYU8384 and @hoh-dev-bot. ↗ 247 **PR #85612** fix(slack) keep one draft message in progress mode. Thanks @mycarrysun. ↗ 248 **PR #88500** fix release abandoned provider streams. Related #67461. Thanks @samzong and @jakedwyer. ↗ 249 **PR #85691** fix(doctor) auto-repair stale session snapshot paths on --fix. Related #85689. Thanks @ggzeng. ↗ 250 **PR #86737** fix(ios) subscribe to per-session transcripts so group chats update in real time (#80231). Thanks @yetval and @jm7v7fgpdy-sketch. ↗ 251 **PR #88642** fix(whatsapp) suppress spurious typing indicator on silent tool-only runs. Related #450. Thanks @Bluetegu and @thesash. ↗ 252 **PR #88635** fix(secrets) treat Codex app-server marker as non-secret. Thanks @vortexopenclaw. ↗ 253 **PR #88525** feat(deepseek) show provider balance in usage status. Thanks @litang9. ↗ 254 **PR #88563** fix(agents) resolve exact static-catalog models for plugin-harness cold start (#88510). Thanks @yetval and @wlassalle724. ↗ 255 **PR #87818** fix(ollama) yield during dense stream processing. Thanks @vincentkoc and @udaymanish6. ↗ 256 **PR #88665** refactor move delivery queues to SQLite. ↗ 257 **PR #88676** fix(auto-reply) add memory flush failure tracking with retry exhaustion. Thanks @Jerry-Xin. ↗ 258 **PR #88672** fix(plugins) reuse current metadata snapshot in provider hot paths. Thanks @masatohoshino. ↗ 259 **PR #88678** feat add typed MCP code-mode API. ↗ 260 **PR #77882** fix(feishu) gate bitable tools by tools config. Thanks @glfruit. ↗ 261 **PR #59172** fix(cli) extend holiday tagline dates through 2030. Thanks @alkor2000. ↗ 262 **PR #88252** fix(agents) avoid full stream replay on text deltas. Thanks @vincentkoc. ↗ 263 **PR #59500** fix extend CA bundle auto-injection to all 8 Node version managers. Related #59494. Thanks @alkor2000. ↗ 264 **PR #87855** fix(telegram) handle ENOENT race in spool drain recovery rename. Related #87847. Thanks @SebTardif and @ppanphper. ↗ 265 **PR #88677** refactor clean up ACP translator and manager tests. ↗ 266 **PR #88715** perf(plugins) avoid duplicate provider hook load probes. ↗ 267 **PR #88675** refactor move plugin state slices to sqlite. ↗ 268 **PR #88153** fix(agents) count stream deltas incrementally. Thanks @vincentkoc. ↗ 269 **PR #87698** fix(gateway) emit subagent_ended hook for api.runtime.subagent.run() (#59164). Thanks @sweetcornna and @Amyssjj. ↗ 270 **PR #81692** fix(doctor) detect stale gateway service version metadata. Thanks @wAngByg. ↗ 271 **PR #87549** fix(agents) validate context engine assemble result shape. Related #75541. Thanks @Pluviobyte and @tyyim. ↗ 272 **PR #88720** refactor extract ACP translator session updates. ↗ 273 **PR #85666** fix #85124 skip Anthropic API keys for usage status. Thanks @zhangguiping-xydt and @rqlangley. ↗ 274 **PR #88722** refactor make Telegram message cache SQLite-only. ↗ 275 **PR #88724** fix persist ACP metadata in SQLite. ↗ 276 **PR #86917** fix(session-store) rewrite generated transcript paths on rollover. Thanks @Sunjae-k and @sunjae-1. ↗ 277 **PR #84419** fix(session) prefer real tool result over synthetic error in transcript repair. Thanks @Jerry-Xin. ↗ 278 **PR #88725** refactor extract ACP manager runtime handle cache. ↗ 279 **PR #88721** feat(plugin-sdk) add typed presentation command actions. ↗ 280 **PR #79658** Allow validated TXT/JSON/YAML media sends **PR #79658** Allow validated TXT/JSON/YAML media sends. Thanks @simplyclever914. ↗ 281 **PR #87618** fix(daemon) detect system-scope systemd gateway units on Linux (#87577). Thanks @yetval and @fisherman86-ai. ↗ 282 **PR #84988** Refresh Node Docker base image digests **PR #84988** Refresh Node Docker base image digests. Related #84981. Thanks @LibraHo. ↗ 283 **PR #85931** fix(memory) serialize qmd update writes across processes to stop SQLITE_BUSY. Related #66339. Thanks @openperf and @SakenW. ↗ 284 **PR #78793** fix(approvals) interpolate request id into "Reply with:" line. Thanks @itsuzef. ↗ 285 **PR #88730** fix(codex) stream final answer partials. Related #88405. Thanks @crash2kx. ↗ 286 **PR #80801** fix(auth) force re-login flag, remediation hint, and session-scoped fallback skip cache. Thanks @MertBasar0. ↗ 287 **PR #88729** refactor extract ACP runtime handle ensure flow. ↗ 288 **PR #79040** fix(gateway) guard buildGroupDisplayName behind group/channel chatType. Related #55354. Thanks @sebuh-infsol and @toruvieI. ↗ 289 **PR #77952** fix(discord) bound REST entity cache to prevent unbounded Map growth. Related #77975. Thanks @fede-kamel. ↗ 290 **PR #88733** refactor extract ACP runtime resume state. ↗ 291 **PR #77924** fix(memory-core) preserve phase signals on read errors. Related #77881. Thanks @bennewell35 and @SimbaKingjoe. ↗ 292 **PR #88314** fix #76284 [Bug]: openclaw agents add blocked — cannot add Jon/Atlas as separate agents. Thanks @zhangguiping-xydt and @RicardoUKMX. ↗ 293 **PR #77394** fix(agents) sanitize raw HTTP 401 provider errors in user-visible replies (#56197). Thanks @jeffrey701 and @lokamir. ↗ 294 **PR #88739** refactor extract ACP turn runner. ↗ 295 **PR #77998** fix(skills) clear workspaceVersions entry when skills watcher is disabled. Related #77997. Thanks @fede-kamel. ↗ 296 **PR #77527** fix(gateway) rate-limit pre-auth bootstrap-token verify to prevent mutex DoS. Related #77978. Thanks @fede-kamel. ↗ 297 **PR #88744** refactor extract ACP close session flow. ↗ 298 **PR #88731** refactor migrate voice-call call logs through doctor. ↗ 299 **PR #87522** fix force preflight compaction before oversized agent turns. Related #87234. Thanks @ArthurNie. ↗ 300 **PR #75061** fix preserve workspaces during state-only uninstall. Related #75052. Thanks @Jason-Bai and @XueJourney. ↗ 301 **PR #79465** Fix ACP command bypass for channel text commands **PR #79465** Fix ACP command bypass for channel text commands. Thanks @RoeeJ. ↗ 302 **PR #88747** refactor extract ACP runtime option commands. ↗ 303 **PR #74715** fix(ui) show Communication Notifications tab. Thanks @VladyslavLevchuk. ↗ 304 **PR #88691** feat(gateway) support Tailscale Serve service names. Related #88629. Thanks @charles-openclaw and @resYuto. ↗ 305 **PR #88749** fix(channels) recover failed progress draft starts. Related #83115. Thanks @SebTardif. ↗ 306 **PR #88029** fix(agents) atomic auth.json write to prevent credential lockout on crash. Related #88028. Thanks @Feelw00. ↗ 307 **PR #85277** fix(openai) avoid stale Responses message id replay. Thanks @latensified. ↗ 308 **PR #79173** fix skip disabled skill snapshot env overrides. Related #79072. Thanks @zeus1959 and @maverikva. ↗ 309 **PR #88752** refactor split ACP manager session flows. ↗ 310 **PR #79149** fix(ci) guard workflow template injection. Related #68428. Thanks @WT-WSL and @visionik. ↗ 311 **PR #74089** fix(openai/tts) handle [[tts:speed]] directive in OpenAI speech provider (#12163). Thanks @stainlu and @useramuser. ↗ 312 **PR #88763** feat add code-mode MCP API files. ↗ 313 **PR #87896** fix(feishu) fallback when accepted turns send no visible reply. Thanks @ArthurNie. ↗ 314 **PR #88761** [codex] Surface disabled Codex plugin routes in doctor lint **PR #88761** [codex] Surface disabled Codex plugin routes in doctor lint. Related #88751. Thanks @brokemac79 and @jalehman. ↗ 315 **PR #88759** fix repair providerless Codex session overrides. Thanks @earlvanze. ↗ 316 **PR #88740** fix(hooks) pass media metadata to internal message_received hook. Thanks @SebTardif. ↗ 317 **PR #88695** fix(agents) wait for cron media completions. Related #88001. Thanks @nailujac. ↗ 318 **PR #88762** fix(ui) show Workboard comments in edit modal. Thanks @MonkeyLeeT. ↗ 319 **PR #88765** fix(agents) publish owned announcement session writes. Related #88703. Thanks @TurboTheTurtle and @neo-hu. ↗ 320 **PR #59196** feat(doctor) add disk space health check for state directory. Thanks @alkor2000. ↗ 321 **PR #79260** feat(doctor) add --post-upgrade --json mode for plugin-compat findings. Thanks @arniesaha. ↗ 322 **PR #88486** fix(diagnostics) carry session UUID on interactive dispatch events. Thanks @arniesaha. ↗ 323 **PR #84904** fix avoid replaying Responses item ids when store is disabled. Thanks @zhanghang02. ↗ 324 **PR #82828** fix(daemon) preserve container service env across regen. Thanks @wAngByg. ↗ 325 **PR #88755** fix(agents) expose session status route context. Related #84544. Thanks @nxmxbbd and @lykeion-dev. ↗ 326 **PR #88781** fix(models) strip remaining provider self prefixes. Related #88770. Thanks @charles-openclaw and @cjalden. ↗ 327 **PR #88131** fix(logging) refresh file log hostname per write. Related #87258. Thanks @lonexreb and @mmhzlrj. ↗ 328 **PR #88667** fix #81214 [Bug]: OpenClaw 2026.5.7 subagent regression. Thanks @zhangguiping-xydt and @GreyWolfRon. ↗ 329 **PR #88764** fix(update) recognize manual-update launchd jobs. Related #88736. Thanks @TurboTheTurtle and @deonkretch. ↗ 330 **PR #88727** fix(feishu) preserve long streaming replies. Related #88631. Thanks @MonkeyLeeT and @Leorand-dev. ↗ 331 **PR #88512** fix resolve google provider default API to google-generative-ai. Related #88480. Thanks @1052326311 and @Xin and @azgardtek. ↗ 332 **PR #88756** feat add Skill Workshop Control UI. Thanks @shakkernerd. ↗ 333 **PR #88610** fix suppress raw provider errors in channel delivery. Related #69737. Thanks @jason-allen-oneal and @alexisperumal. ↗ 334 **PR #88808** perf hydrate chat history session metadata. ↗ 335 **PR #88735** fix(agents) harden runtime tool schema quarantine. Thanks @vincentkoc. ↗ 336 **PR #88221** fix(nostr) decode npub allowFrom entries to hex correctly. Thanks @DocNR and @hypoxicdrive. ↗ 337 **PR #88772** feat calm composer controls. ↗ 338 **PR #88388** fix(agents) guard transport payload sanitizer against non-string input. Related #60113. Thanks @Pluviobyte and @cursoragent and @wujiaming88. ↗ 339 **PR #88149** fix(agents) cap bootstrap snapshot cache. Thanks @yozakura-ava. ↗ 340 **PR #88545** fix(memory-core) stop dream diary fallback from leaking raw staging fragments. Related #88391. Thanks @Alix-007 and @Carme99. ↗ 341 **PR #88289** fix(microsoft-foundry) skip DeepSeek V4 thinking params on Foundry fallback. Thanks @silvesterxm. ↗ 342 **PR #88209** fix(subagents) roll formatTokenShort over to "m" at 1000k. Thanks @coder999999999. ↗ 343 **PR #88008** fix(tasks) persist task store before in-memory mutation to prevent sqlite divergence. Related #88007. Thanks @Feelw00. ↗ 344 **PR #88306** fix(gateway) hide phantom agent store rows from sessions.list. Related #57376. Thanks @Alix-007 and @smarchetti. ↗ 345 **PR #88760** fix(doctor) report runtime tool schema errors. Thanks @vincentkoc. ↗ 346 **PR #88495** fix(imessage) tolerate sub-second self-chat reflection skew. Thanks @colmbrogan. ↗ 347 **PR #88797** Migrate iMessage monitor state to SQLite **PR #88797** Migrate iMessage monitor state to SQLite. ↗ 348 **PR #87981** fix(cron) retire MCP runtimes on isolated cron timeout and dispose. Related #87821. Thanks @Jerry-Xin and @zachisfine. ↗ 349 **PR #88410** fix(gateway) harden MCP loopback tool schemas. Thanks @vincentkoc. ↗ 350 **PR #88100** fix(doctor) quiet tool policy removal audits. Related #87798. Thanks @giodl73-repo and @oalansilva. ↗ 351 **PR #88804** fix(agents) preserve stop-finished OpenAI tool calls. Related #88791. Thanks @MonkeyLeeT and @kiagentkronos-cell. ↗ 352 **PR #88802** test(agents) cover nonfatal trajectory flush timeout. Related #88520. Thanks @TurboTheTurtle and @novac42code. ↗ 353 **PR #88819** fix(workboard) wire task-backed board runs. Thanks @vincentkoc. ↗ 354 **PR #88608** fix(minimax) use account OAuth device endpoints. Thanks @MatthewSchleder. ↗ 355 **PR #88794** Persist plugin install index in SQLite **PR #88794** Persist plugin install index in SQLite. ↗ 356 **PR #88827** Add Vertex API key model config regression coverage **PR #88827** Add Vertex API key model config regression coverage. Related #88816. Thanks @TurboTheTurtle and @randompup. ↗ 357 **PR #77237** Preserve managed npm plugin root when install validation bloc... **PR #77237** Preserve managed npm plugin root when install validation blocks update. Thanks @zhuisDEV. ↗ 358 **PR #88288** fix(config) skip state-dir dotenv values that are unresolved shell references. Related #88274. Thanks @Alix-007 and @mathias15010. ↗ 359 **PR #87848** fix(status) resolve gateway auth secrets for deep audit. Related #87815. Thanks @ai-hpc and @kAIborg24. ↗ 360 **PR #88807** fix(plugins) isolate web provider factory failures. Thanks @vincentkoc. ↗ 361 **PR #88518** fix(plugins) isolate cached tool runtime siblings. Thanks @vincentkoc. ↗ 362 **PR #88851** Persist OpenRouter model cache in SQLite **PR #88851** Persist OpenRouter model cache in SQLite. ↗ 363 **PR #88485** fix(agents) guard vanished workspaces. Related #88333. Thanks @TurboTheTurtle and @HT-Moh. ↗ 364 **PR #88825** perf streamline chat startup metadata. ↗ 365 **PR #88723** fix(doctor) respect explicit PI runtime policy. Related #88706. Thanks @toruvieI. ↗ 366 **PR #88365** fix(infra) bridge WSL clipboard through shell. Related #88080. Thanks @vincentkoc and @YaneCheung. ↗ 367 **PR #88785** fix restore backgrounded in-flight runs on TUI switch-back via gateway snapshot. Thanks @williamliu-ai. ↗ 368 **PR #87992** feat(ios) support native iPad display. Thanks @EmpX2025. ↗ 369 **PR #88846** fix preserve no-policy native hook fallback. Thanks @woodym-dotcom. ↗ 370 **PR #81264** fix(installer) align Node version floor with package engine. Thanks @kiranmagic7. ↗ 371 **PR #87838** test(agents) include Ollama in small live model matrix. Thanks @vincentkoc. ↗ 372 **PR #88860** feat(minimax) add MiniMax M3 support. ↗ 373 **PR #88305** fix(browser) isolate Chrome MCP pending attach aborts. Related #88304. Thanks @rohitjavvadi. ↗ 374 **PR #88814** fix(ci) repair current main checks. Thanks @vincentkoc. ↗ 375 **PR #88855** fix(microsoft-foundry) satisfy extension lint. Thanks @RomneyDa. ↗ 376 **PR #88824** test consolidate plugin registration contracts. Thanks @RomneyDa. ↗ 377 **PR #88847** test(ui) remove stylesheet grep tests. Thanks @RomneyDa. ↗ 378 **PR #88704** fix(memory) rehydrate daily list promotions. Related #87854. Thanks @MonkeyLeeT and @KingYiKa. ↗ 379 **PR #88848** test(agents) use neutral tool schema fixtures. Thanks @vincentkoc. ↗ 380 **PR #88817** fix(agents) return schema lookup misses in-band. Related #88813. Thanks @ksj3421 and @cjalden. ↗ 381 **PR #88866** Persist Discord thread bindings in SQLite **PR #88866** Persist Discord thread bindings in SQLite. ↗ 382 **PR #88801** fix(hooks) expose inbound reply metadata before dispatch. Related #88521. Thanks @TurboTheTurtle and @hoyanhan. ↗ 383 **PR #88865** docs clarify diffs language pack additions. Thanks @RomneyDa. ↗ 384 **PR #88849** docs continue inline comment pass. ↗ 385 **PR #87077** fix(ui) bypass service worker for top-level navigations. Thanks @nayrosk. ↗ 386 **PR #88394** fix(plugins) fail closed on trusted policy errors. Thanks @vincentkoc. ↗ 387 **PR #88758** docs(imessage) document SSH wrapper TCC send failure. Related #79289. Thanks @TurboTheTurtle. ↗ 388 **PR #88859** fix(mattermost) route send attachments through upload. Related #87930. Thanks @vincentkoc and @NewCoffee7477. ↗ 389 **PR #88830** feat(dreaming) score candidates with shadow trial results. Thanks @iFiras-Max1. ↗ 390 **PR #88803** fix(reply) preserve sessions_send external routes. Related #88044. Thanks @MonkeyLeeT and @Lvan185. ↗ 391 **PR #88294** fix(cron) include job name when reading single-job run history. Thanks @kip-claw. ↗ 392 **PR #88896** fix harden CLI and plugin edge cases. ↗ 393 **PR #88767** fix(plugin-sdk) isolate provider catalog projection failures. Thanks @vincentkoc. ↗ 394 **PR #88892** feat(ui) improve Workboard task details. Thanks @vincentkoc. ↗ 395 **PR #88806** fix(memory-lancedb) reject envelope metadata sludge (incl. marker-free shapes). Thanks @amittell. ↗ 396 **PR #88921** fix(ui) keep first control chat sends responsive. Thanks @vincentkoc. ↗ 397 **PR #87484** fix(agents) clear legacy auto fallback pins. Related #87467. Thanks @neeravmakwana and @bgmbgm94. ↗ 398 **PR #88904** fix(android) add notification app picker. Thanks @Tosko4. ↗ 399 **PR #88820** fix(diagnostics) clear embedded-run activity when recovery declares lane idle. Related #88660. Thanks @openperf and @Iman-Sharif. ↗ 400 **PR #88897** refactor(copilot) compact sessions through SDK state. ↗ 401 **PR #88924** fix(agents) strip streamed reasoning tags. Related #88741. Thanks @kdonthar. ↗ 402 **PR #88937** fix(ui) render pending sends in chat thread. Thanks @vincentkoc. ↗ 403 **PR #88949** fix(ui) scroll pending sends into view. Thanks @vincentkoc. ↗ 404 **PR #88952** perf(ui) cache chat transcript renders. Thanks @vincentkoc. ↗ 405 **PR #88960** perf(ui) record pending send paint timing. Thanks @vincentkoc. ↗ 406 **PR #88972** perf(ui) debounce chat draft persistence. Thanks @vincentkoc. ↗ 407 **PR #88978** perf(ui) skip closed slash menu rerenders. Thanks @vincentkoc. ↗ 408 **PR #88982** fix(test) wait for telegram timer flushes. Thanks @vincentkoc. ↗ 409 **PR #88989** perf(ui) guard chat transcript rerenders. Thanks @vincentkoc. ↗
21 changes Open upstream ↗
01 Agent and Codex runtime recovery is steadier subagents keep cwd/workspace separation, hook context stays prompt-local, session locks release on timeout abort while live OpenClaw locks survive cleanup, stale restart continuations are avoided, and Codex app-server/helper failures no longer tear down shared runtime state. (#87218, #86875, #87409, #87399, #87375, #88129) ↗ 02 Channel delivery and session identity got safer across outbound plugin hook... Channel delivery and session identity got safer across outbound plugin hooks, Matrix room ids, iMessage reactions/approvals, Slack final replies, Discord recovered tool warnings, runtime-config message actions, WhatsApp profile auth roots, Telegram polling, and Microsoft Teams service URL trust checks. (#73706, #75670, #87366, #87451, #87334, #84535, #82492, #83304, #87160) ↗ 03 Mobile and chat surfaces got a broader refresh the iOS Pro UI, hosted push relay default, realtime Talk tab playback, Gateway chat transport, onboarding, Talk permissions, WebChat reconnect delivery, and session picker behavior now preserve more state across reconnects and empty searches. (#87367, #87531, #87682, #88096, #88105) Thanks @ngutman and @BunsDev. ↗ 04 Browser, channel, and automation inputs are stricter Browser tool timeouts, viewport/tab indices, Gateway ports, cron retry handling, Discord component ids, schema array refs, Telegram callback pages, and channel progress callbacks now reject malformed values earlier and preserve the intended delivery context. (#82887) ↗ 05 Provider, media, and document coverage expands with Claude Opus 4 Provider, media, and document coverage expands with Claude Opus 4.8, Fal Krea image schemas, NVIDIA featured models, MiniMax streaming music responses, encrypted PDF extraction, voice model catalogs, GitHub Copilot agent runtime support, and a Codex Supervisor plugin path for delegated Codex workflows. (#87845, #87890, #80775, #84764, #87751, #87794) ↗ 06 CLI, auth, doctor, and provider paths fail faster and recover more clearly:... CLI, auth, doctor, and provider paths fail faster and recover more clearly: malformed numeric/version options are rejected, workspace dotenv provider credentials are ignored, heartbeat defaults, OAuth/token lifetimes, and local service startup requests are bounded, agent auth health labels are clearer, legacy `api_key` auth profiles migrate to canonical form, and restart guidance is actionable. (#87398, #86281, #87361, #88133, #83655, #87559, #88088, #85924) Thanks @vincentkoc and @giodl73-repo. ↗ 07 Plugin and Gateway hot paths do less repeated work while preserving cache c... Plugin and Gateway hot paths do less repeated work while preserving cache correctness for install records, config JSON parsing, tool search catalogs, session stores, manifest model rows, auto-enabled plugin config, browser tokens, viewer assets, and release-split external plugin packages. (#86699) ↗ 08 Release, QA, and E2E validation now bound more log, artifact, harness, and... Release, QA, and E2E validation now bound more log, artifact, harness, and cross-OS waits so failing lanes produce proof instead of hanging or false-greening. ↗ 09 Status show active subagent details in status output. ↗ 10 Diffs split the default language pack and expand default Diffs language coverage while keeping the host floor aligned. (#87370, #87372) Thanks @RomneyDa. ↗ 11 ClawHub add plugin display names plus skill verification and trust surfaces. (#87354, #86699) Thanks @thewilloftheshadow and @Patrick-Erichsen. ↗ 12 iOS refresh the dev app with Pro Command, Chat, Agents, Settings, hosted push relay defaults, and realtime Talk playback wired to gateway sessions, diagnostics, chat, and realtime Talk. (#87367, #88096, #88105) Thanks @Solvely-Colin and @ngutman. ↗ 13 Docs clarify Codex computer-use setup, paste-token stdin auth setup, macOS gateway sleep troubleshooting, native Codex hook relay recovery, container model auth, install deployment cards, device-token admin gating, CLI setup flow compatibility, Notte cloud browser CDP setup, and backport targets. (#87313, #63050, #87685) Thanks @bdjben, @liaoandi, and @thewilloftheshadow. ↗ 14 PDF/tools use ClawPDF for PDF extraction, support encrypted PDF extraction, and surface MCP structured content in agent tool results. (#87670, #87751) ↗ 15 Providers add Claude Opus 4.8 support, Fal Krea image model schemas, NVIDIA featured model catalogs, MiniMax streaming music responses, and provider-backed voice model catalogs. (#87845, #87890, #80775, #84764, #87794) Thanks @eleqtrizit and @vincentkoc. ↗ 16 Codex/GitHub add the GitHub Copilot agent runtime and the Codex Supervisor plugin package. ↗ 17 Plugins externalize GitHub Copilot and Tokenjuice as official install-on-demand plugins with npm and ClawHub publish metadata. ↗ 18 Workboard add agent coordination tools for tracking and handing off active agent work. ↗ 19 Discord show commentary in progress drafts so live Discord runs expose useful in-progress context. (#85200) ↗ 20 Plugin SDK add a reply payload sending hook for plugins that need to deliver channel-owned replies and flatten package types for SDK declarations. (#82823, #87165) Thanks @piersonr and @RomneyDa. ↗ 21 Policy add policy comparison, ingress-channel conformance, and sandbox-posture conformance checks. (#85572, #85744, #86768) ↗
9 changes Open upstream ↗
01 Safer local/runtime boundaries OpenClaw now rejects unsafe command wrappers, malformed CLI numeric options, unsafe Node runtime env overrides, no-auth Tailscale exposure, and non-admin device-role pairing approvals before they can affect live runs. (#87308, #87305, #87292, #87146) ↗ 02 Matrix and auto-reply delivery are steadier mention previews stay inert, final mention replies deliver normally, shared-DM notices are awaited, MXID parsing ignores filenames, and reasoning-prefixed `NO_REPLY` responses stay suppressed. ↗ 03 Provider and agent reliability improved across OpenAI-compatible embeddings... Provider and agent reliability improved across OpenAI-compatible embeddings, cached token usage, Anthropic/Codex/Claude runtime state, unsupported tool-schema quarantine, heartbeat templates, and session fallback errors. (#85269, #82062, #85416, #86855) ↗ 04 Plugin and package release paths got tighter Pixverse ships as an external video plugin with region selection, package exclusions and shrinkwrap inventory match the published npm shape, and release/package smoke commands fail bounded instead of hanging. ↗ 05 Gateway hot paths do less rediscovery by reusing current plugin metadata fi... Gateway hot paths do less rediscovery by reusing current plugin metadata fingerprints, stable plugin index fingerprints, read-only session metadata, active working stores, status fast paths, and auth/env snapshots. (#86439) ↗ 06 Memory add a core OpenAI-compatible embedding provider for local and hosted OpenAI-style endpoints, with config, doctor, and docs support. (#85269) Thanks @dutifulbob. ↗ 07 Plugin SDK mark memory-specific embedding provider registration as deprecated compatibility and surface non-bundled usage in plugin compatibility diagnostics. (#85072) Thanks @mbelinky. ↗ 08 Pixverse add video generation provider support, API region selection, and external plugin publishing. ↗ 09 Plugins expose approval action metadata for plugin-driven approval surfaces. ↗
31 changes Open upstream ↗
01 Faster Gateway and replies startup avoids repeated plugin, channel, session, usage-cost, warning, scheduled-service, and filesystem scans; visible replies separate user-facing sends from slower follow-up work; Gateway runtime/session caches churn less under load. ↗ 02 Transcripts are core transcript-backed meeting summaries, source-provider chunks, cleaned user turns, media provenance, Codex mirrors, WebChat replies, and CLI/TUI replay now use one more reliable transcript path. ↗ 03 More channels are production-ready Telegram keeps typing/progress context and forum topics, iMessage handles attachment roots, remote media staging, and duplicate local Messages sources, WhatsApp restores group/media behavior, Discord improves voice playback and model picking, and Signal/iMessage/WhatsApp get reaction approvals. ↗ 04 Better voice and Talk realtime Talk runs can be inspected, steered, cancelled, or followed up from Web UI and Discord voice; wake-name handling is more tolerant without letting ambient speech trigger agents. ↗ 05 Safer content boundaries Browser snapshot reads honor SSRF policy, system-event text cannot spoof nested prompt markers, fetched file text is wrapped as external content, ClickClack inbound sender allowlists run before agent dispatch, stale device tokens are rejected, and serialized tool-call text is scrubbed from replies. ↗ 06 Providers, Codex, and local models are steadier named auth profiles, OpenAI sampling params, Codex app-server resume/timeout/usage-limit recovery, dynamic tool-schema guards, xAI usage-limit surfacing, Ollama top-p normalization, and local approval resolution reduce provider-specific dead ends. ↗ 07 More reliable install/update/release paths Alpine installs, trusted runtime fallback roots, stable update channels, Docker/package timeouts, Windows Scheduled Tasks, Windows/macOS proof lanes, Testbox/Crabbox delegation, plugin publish checks, and macOS runner bootstraps all got hardened. ↗ 08 Better observability Activity tab, gateway secret-prep traces, tool/model stream progress, explicit fast-mode status, systemd Gateway hygiene, OpenTelemetry LLM spans, release performance evidence, and richer telemetry signals make failures easier to inspect. ↗ 09 Transcripts add core transcript capture and source-provider support for transcript-backed meeting summaries, including the renamed Transcripts docs, CLI surface, source-provider chunks, and cleaned user-turn persistence. ↗ 10 Auth add named model login profiles and supported credential migration for Hermes, OpenCode, and Codex auth profiles, with explicit opt-out and non-interactive controls. (#85667) Thanks @fuller-stack-dev. ↗ 11 Diagnostics trace gateway secret preparation, classify skill/tool usage, surface model stream progress, add OpenTelemetry LLM content spans, and expose alertable telemetry for blocked tools, failover, stale sessions, liveness, oversized payloads, and webhook ingress. (#83019, #80370, #86191) ↗ 12 Channels add Signal reaction approvals, iMessage thumb approval reactions, and WhatsApp thumb approval reaction support so mobile approval flows work without textual `/approve` commands. (#85894, #85952, #85477) ↗ 13 Agents/API forward OpenAI sampling params through the Gateway and expose estimated context-budget status for active agent runs. (#84094) ↗ 14 TUI/status queue prompts submitted while an agent is busy and show explicit fast-mode state plus richer systemd Gateway hygiene in status output. (#86722, #87115, #86976) ↗ 15 Exec approvals hide durable approval actions that are unavailable for the current prompt and keep approval runtime tokens local-only so stale prompts cannot offer misleading controls. (#86270, #86359) ↗ 16 Plugin SDK add reaction approval helpers and keep diagnostic event root exports discoverable across function-name and alias-bound module graphs. (#86735, #87084) ↗ 17 Android/iOS add the Android pair-new-gateway action and improve mobile Talk mode surfaces, including iOS realtime Talk mode and Android offline voice/gateway recovery. (#86798, #86355) Thanks @ngutman. ↗ 18 Performance cache plugin metadata snapshots, package realpaths, stable gateway metadata, model cost indexes, channel resolution, usage-cost indexes, and session/auth hot-path facts so common Gateway and reply paths do less rediscovery. (#84649, #85843, #86517, #86678) ↗ 19 Voice expose shared realtime turn-context tracking through the realtime voice SDK and reuse it for Discord speaker attribution and wake-name context recovery. ↗ 20 Voice reuse shared realtime output activity tracking in Google Meet command and node audio bridges, including recent-output checks for local barge-in detection. ↗ 21 Voice expose shared realtime output activity tracking through the realtime voice SDK and reuse it for Discord playback activity and barge-in decisions. ↗ 22 Voice expose shared realtime consult question matching, speakable-result extraction, and alias-aware forced-consult coordination through the realtime voice SDK, then reuse it in Gateway Talk, Voice Call, and Discord voice paths. ↗ 23 Voice share activation-name matching and consult-transcript screening through the realtime voice SDK so Discord, browser voice, and meeting surfaces can reuse one implementation. ↗ 24 Cron default `cron.maxConcurrentRuns` to 8 so scheduled automations and their isolated agent turns can make progress in parallel without explicit configuration. ↗ 25 QA-Lab add `qa coverage --match <query>` so focused proof selection can discover matching scenarios from existing metadata before running live or remote lanes. ↗ 26 Discord/model picker surface an alpha-bucket select (e.g. `A–G (12) · H–N (18) · O–Z (5)`) when the provider list or a provider's model list exceeds 25 items, so configs with `provider/*` wildcards stay one click from the right page instead of paginating through prev/next; falls back to numeric chunks when every item shares the same first letter. (#86181) Thanks @rendrag-git. ↗ 27 Control UI add an ephemeral Activity tab for sanitized live tool activity summaries without persisting raw telemetry. Fixes #12831. Thanks @BunsDev. ↗ 28 Build include `ui:build` in the `full` and `ciArtifacts` profiles of `scripts/build-all.mjs` so `pnpm build` always rebuilds `dist/control-ui` after `tsdown` cleans `dist`, removing the second-command requirement and the missing-asset failure mode for source/runtime installs and CI artifact uploads. (#85206) ↗ 29 iOS improve Talk mode with direct realtime voice sessions, compact toolbar status, and responsive voice waveform feedback. (#86355) Thanks @ngutman. ↗ 30 Media replace the Sharp image backend with Rastermill for metadata, resizing, EXIF orientation, and PNG alpha-preserving optimization so OpenClaw no longer installs Sharp or the WhatsApp Jimp fallback for image processing. (#86437) ↗ 31 Codex update the bundled Codex CLI to 0.134.0 and keep native compaction disabled for budget-triggered app-server turns so OpenClaw owns the recovery boundary. (#86772) ↗
47 changes Open upstream ↗
01 Gateway/perf reuse process-stable channel catalog reads, avoid repeated bundled-channel boundary checks, and rotate gateway watch CPU profiles so benchmark runs do not accumulate unbounded artifacts. ↗ 02 Gateway/perf reuse immutable plugin metadata snapshots across startup, config, model, channel, setup, and secret metadata readers so hot paths avoid repeated plugin file stats and manifest registry reloads. ↗ 03 Gateway/perf lazy-load startup-idle plugin work, core gateway method handlers, and the embedded ACPX runtime so Gateway health and ready signals no longer wait on unused handler trees or ACPX probes. ↗ 04 Gateway/perf cache plugin SDK public-surface alias maps and skip irrelevant macOS Linuxbrew PATH probes so Gateway startup avoids repeated filesystem walks and slow missing-directory stats. ↗ 05 Transcripts add the initial transcript capture and source-provider foundation, including auto-start capture config, manual transcript imports, read-only transcript access, and Discord voice as the first live source. ↗ 06 Docs/channels/config add Signal `configPath`, Telegram wildcard topic defaults, local-time backup archive names, Termux home fallback, include-path validation, secret-scanner-safe placeholder guidance, Gemini CLI/Antigravity media guidance, and macOS VM auto-login guidance. Thanks @NorseGaud, @yudistiraashadi, @huangqian8, @VibhorGautam, @maweibin, @tianxingleo, @IgnacioPro, and @xzcxzcyy-claw. ↗ 07 Docs clarify model-usage portability, Codex migration prerequisites, status bootstrap wording, thread-bound subagent limits, hook ownership, and config-preserving safety guidance. Thanks @aniruddhaadak80, @leno23, @TomDjerry, @matthewxmurphy, @vincentkoc, and @stablegenius49. ↗ 08 Docs clarify README onboarding and Gateway startup paths, WhatsApp QR/408 recovery, cron output language prompts, skill advanced features, gateway upstream 403 troubleshooting, and plugin fallback override guidance. Thanks @deepujain, @Zacxxx, @Jah-yee, @neyric, @usimic, @Renu-Cybe, @BigUncle, and @SeashoreShi. ↗ 09 Docs clarify context-pruning ratio bounds, local dashboard recovery, CLI env markers, remote onboarding token behavior, and Peekaboo Bridge permissions for subprocess agents. Thanks @ayesha-aziz123, @dishraters, @hougangdev, and @brandonlipman. ↗ 10 Docs clarify browser CDP diagnostics, Plugin SDK allowlist imports, status-reaction timing defaults, queue steering behavior, limited-tool troubleshooting, cron HEARTBEAT handling, Telegram multi-agent groups, Bitwarden SecretRef setup, and EasyRunner deployments. Thanks @Quratulain-bilal, @mbelinky, @Mickey-, @vancece, @xenouzik, @posigit, @surlymochan, @janaka, and @choiking. ↗ 11 Crabbox/Testbox run clean sparse-checkout Testbox syncs from a temporary full checkout and route remote changed gates through Corepack pnpm. ↗ 12 Docs clarify IPv4-only Gateway BYOH binding, trusted-proxy scope clearing, Android pairing approval, macOS Accessibility grants, Zalo profile env vars, password-store SecretRef setup, and Chinese memory navigation. Thanks @itskai-dev, @gwh7078, @longstoryscott, @MoeJaberr, and @yuaiccc. ↗ 13 Docs consolidate GLM under Z.AI, add the Upstash Box install guide and Gateway exposure runbook, clarify MEDIA directives, Copilot and Voyage setup, config path quoting, real behavior proof, and memory-file write guidance. Thanks @BobDu, @alitariksahin, @Jefsky, @musaabhasan, @OmerZeyveli, @leno23, @WuKongAI-CMU, @luoyanglang, and @majin1102. ↗ 14 Docs clarify media provider credentials, Codex/OpenClaw code-mode boundaries, Slack and Telegram ack reactions, Feishu dynamic agents, secrets plaintext boundaries, memory guidance, and Chinese glossary terms. Thanks @nielskaspers, @cosmopolitan033, @drclaw-iq, @alexgduarte, @zccyman, @chengoak, and @cassthebandit. ↗ 15 Packaging exclude documentation images and assets from the npm tarball, reducing published package size without affecting runtime docs search or CLI behavior. Thanks @SebTardif. ↗ 16 Media understanding stop auto-probing Gemini CLI and use Antigravity CLI only as a lower-priority image/video fallback after configured provider APIs. ↗ 17 Agents/subagents limit default sub-agent bootstrap context to `AGENTS.md` and `TOOLS.md`, keeping persona, identity, user, memory, heartbeat, and setup files out of delegated workers by default. (#85283) Thanks @100yenadmin. ↗ 18 Maintainer skills exclude plugin SDK/API boundary work from `openclaw-landable-bug-sweep` so bugbash sweeps stay focused on small paper-cut fixes. ↗ 19 QA-Lab/diagnostics extend the OpenTelemetry smoke harness to prove trace, metric, and log export, and add first-class Prometheus and observability smoke aliases. ↗ 20 Plugin SDK add a generic channel-message poll sender so channel plugins can expose poll delivery without depending on channel-specific SDK facades. ↗ 21 Crabbox keep the local wrapper's provider validation synced with the installed Crabbox binary while preserving supported aliases such as `docker` and `blacksmith`. (#85302) Thanks @hxy91819. ↗ 22 Maintainer skills add `openclaw-landable-bug-sweep` for producing five small, reviewed, CI-green OpenClaw bugfix PRs from issue/PR sweeps. ↗ 23 Control UI/chat add search and Load More pagination to the chat session picker, keeping initial session loads bounded while making older conversations reachable. (#85237) Thanks @amknight. ↗ 24 CLI/onboarding start classic onboarding when bare `openclaw` runs before an authored config exists, while keeping configured installs on Crestodian. (#72343) Thanks @fuller-stack-dev. ↗ 25 Agents/runtime internalize the former Pi agent runtime into OpenClaw, remove legacy package dependencies, and keep Pi-named SDK aliases only as deprecated plugin compatibility. ↗ 26 Discord allow configuring a bounded `agentComponents.ttlMs` callback registry lifetime for long-running component workflows, with per-account overrides and a 24-hour cap. (#84189) Thanks @100menotu001. ↗ 27 xAI/Grok reuse xAI OAuth auth profiles for Grok `web_search`, thread active-agent auth through web search, add Grok model aliases, and let media providers declare default operation timeouts. (#85182) Thanks @fuller-stack-dev. ↗ 28 Plugin SDK add row-level session workflow helpers and deprecate `loadSessionStore` so plugins can read and patch sessions without depending on the legacy whole-store shape. (#84693) Thanks @efpiva. ↗ 29 Gateway/plugins reuse a compatible Gateway startup plugin registry during dispatch so safe plugin dispatches avoid redundant registry loading. (#84324) Thanks @ai-hpc. ↗ 30 Plugins/SDK add a general `embeddingProviders` capability contract and registration API so embeddings can become a reusable provider surface outside memory-specific adapters. ↗ 31 Dependencies refresh provider, plugin, UI, and tooling packages, update `protobufjs` to 8.4.0 to clear the current npm advisory, and carry the Claude ACP completion patch forward to `@agentclientprotocol/claude-agent-acp` 0.36.1. ↗ 32 Agents/tools remove the old sender-owner tool gating path so configured tools stay visible for trusted sessions while command and channel-action auth still carry real sender identity. ↗ 33 QA-Lab add curated mock JSONL replay fixtures and first-drift reporting for runtime-parity audits. (#80323, refs #80176) Thanks @100yenadmin. ↗ 34 QA-Lab add a QA bus tool-trace visibility scenario for sanitized tool-call assertions. ↗ 35 QA-Lab replace generic evidence framing in seeded scenario prompts with concrete observed QA behavior. ↗ 36 QA-Lab list named scenario packs in the coverage report so personal-agent privacy coverage stays visible in audits. ↗ 37 QA-Lab list live transport lane membership in the coverage report so real transport checks stay separate from seeded qa-channel scenarios. ↗ 38 Release/package run package integrity checks before package acceptance lanes so public install/update validation fails before private QA assets can leak into the package. ↗ 39 QA-Lab include the optional 100-turn runtime parity soak in release-soak artifacts so long-run Codex/Pi transcript drift stays visible outside the default gate. (#80395) Thanks @100yenadmin. ↗ 40 QA-Lab add a live-only long-context progress watchdog scenario for Codex app-server timeout and stalled-run sentinels. (#80323) Thanks @100yenadmin. ↗ 41 QA-Lab tag gateway restart recovery and streaming final-integrity scenarios as live-only runtime parity lanes. (#80323) Thanks @100yenadmin. ↗ 42 QA-Lab add a personal-agent failure recovery scenario that checks honest partial status, retry boundaries, and local recovery artifacts. (#83872) Thanks @iFiras-Max1. ↗ 43 QA-Lab include an opt-in `update.run` package self-upgrade sentinel for destructive latest-package recovery checks. ↗ 44 QA-Lab add Codex plugin lifecycle and auth-profile fixture coverage for missing installs, pinned-version drift, first-turn install ordering, and doctor migration safety. (#80323, refs #80174) Thanks @100yenadmin. ↗ 45 Models/perf pre-warm the provider auth-state map at gateway startup so `/models` and every model-listing call short-circuits the per-provider plugin / external-CLI discovery on the hot path. Per-call cost drops from ~20 s to ~5 ms (~4,100×); the one-time startup warm resets and re-warms after hot reloads. (#84816) Thanks @sjf. ↗ 46 Release/security ship the root npm package and OpenClaw-owned npm plugins with generated shrinkwrap, support bundled plugin runtime dependencies for suitable plugin tarballs, and require review for lockfile/shrinkwrap changes so published installs use locked dependency graphs. ↗ 47 Tests/perf isolate doctor core health check unit coverage from real skills/workspace discovery so `doctor-core-checks` no longer dominates unit perf while keeping one real skills-readiness smoke. (#84493) Thanks @frankekn. ↗
8 changes Open upstream ↗
01 Exec approvals remove the old `cat SKILL.md && printf ... && <skill-wrapper>` allowlist compatibility path so skill files must be loaded with the read tool and only the real skill executable is auto-allowed. ↗ 02 Discord let voice sessions follow configured Discord users into voice channels, with allowed-channel checks, multi-user handoff, bounded reconciliation, and DAVE recovery preservation. (#84264) Thanks @fuller-stack-dev. ↗ 03 Discord/voice include bounded `IDENTITY.md`, `USER.md`, and `SOUL.md` profile context in realtime voice session instructions by default, with `voice.realtime.bootstrapContextFiles: []` available to disable it. (#84499) Thanks @fuller-stack-dev. ↗ 04 Dependencies bump the bundled Codex harness to `@openai/codex` `0.132.0` and refresh the app-server model-list docs for the new catalog. ↗ 05 CLI/policy add the bundled Policy plugin for policy-backed channel conformance checks, doctor lint findings, and opt-in workspace repair. (#80407) Thanks @giodl73-repo. ↗ 06 Agents/config allow `agents.list[].experimental.localModelLean` so lean local-model mode can be enabled for one configured agent instead of globally. (#84073) Thanks @dutifulbob. ↗ 07 Providers/xAI add device-code OAuth login so remote and headless setups can authorize xAI without a localhost browser callback. (#84005) Thanks @fuller-stack-dev. ↗ 08 Providers/OpenRouter honor provider-level `params.provider` routing policy for OpenRouter requests, with model and agent params overriding the defaults. Thanks @amknight. ↗
44 changes Open upstream ↗
01 Agents clarify that fixes should default to clean bounded refactors, lean internals, and explicit plugin SDK/API deprecation paths. ↗ 02 Agents/tools normalize Swagger/OpenAPI refs and OpenAPI schema annotations when preparing tool parameter schemas. ↗ 03 Dependencies update `@openclaw/proxyline` to 0.3.3. ↗ 04 Dependencies update Pi packages to 0.75.1 and raise the minimum supported Node.js 22 line to 22.19. ↗ 05 Docker/Podman add `OPENCLAW_IMAGE_APT_PACKAGES` as the runtime-neutral image build arg for extra apt packages while keeping `OPENCLAW_DOCKER_APT_PACKAGES` as a legacy fallback. (#62431) Thanks @urtabajev. ↗ 06 Gateway/ACPX attribute startup probe, config, runtime, and resource-count costs in restart traces without changing readiness behavior. (#83300) Thanks @samzong. ↗ 07 Gateway overlap startup logging and plugin-service startup with channel sidecars to reduce restart ready latency while preserving `/readyz` sidecar gating. (#83301) Thanks @samzong. ↗ 08 Plugins/admin-http-rpc allow trusted admin HTTP RPC clients to start and wait for web QR login flows. (#83259) Thanks @liorb-mountapps. ↗ 09 Mac app redesign Settings pages with consistent card layouts, cached navigation, cleaner permissions/voice/skills/cron/exec/debug panes, and steadier spacing around the native sidebar. ↗ 10 Mac app refine Voice & Talk recognition-language and wake-phrase settings so they use the same compact card rows as the rest of Settings. ↗ 11 Skills rename the repo-local Codex closeout review skill and helper to `autoreview` while preserving the Codex-first fallback behavior. ↗ 12 Skills add a meme-maker skill for curated template search, local SVG/PNG rendering, Imgflip hosted rendering, and Know Your Meme provenance links. ↗ 13 Skills CLI allow `openclaw skills install` and `openclaw skills update` to target shared managed skills with `--global`. (#74466) Thanks @Marvae. ↗ 14 Browser surface pending and recently handled modal dialogs in snapshots, return `blockedByDialog` when an action opens a modal, and allow `browser dialog --dialog-id` to answer pending dialogs. ↗ 15 Browser CLI add `openclaw browser evaluate --timeout-ms` so long-running page functions can extend both the evaluate action and request timeout budgets. (#83447) Thanks @eefreenyc. ↗ 16 Codex app-server scope OpenClaw prompt guidance by runtime surface so native Codex keeps Codex-owned base/personality instructions while OpenClaw contributes only runtime context, delivery guidance, and explicitly scoped command hints. (#83454) Thanks @100yenadmin. ↗ 17 Docker/Podman add `OPENCLAW_IMAGE_PIP_PACKAGES` for opt-in Python package installation in local image builds. (#83771) Thanks @stephenredmond-straiteis. ↗ 18 Agents/tools shorten built-in tool descriptions and schema hints across media, messaging, sessions, cron, Gateway, web, image/PDF, TTS, nodes, and plan tools while preserving routing guardrails. ↗ 19 Skills add node inspector debugging, fused diagram generation, and throwaway spike workflow skills. ↗ 20 CLI/plugins add `defineToolPlugin` plus `openclaw plugins build`, `validate`, and `init` for typed simple tool plugins with generated manifest metadata, optional tool declarations, and context factories. ↗ 21 Agents/skills tighten bundled skill prompts and metadata, quote skill descriptions, refresh current CLI/API guidance, and update embedded sherpa-onnx runtime downloads. ↗ 22 Skills update the Obsidian skill to target the official `obsidian` CLI and require its registered binary instead of the third-party `obsidian-cli`. ↗ 23 Skills add a Python debugging skill for pdb, breakpoint(), post-mortem inspection, and debugpy remote attach. ↗ 24 Codex add `/codex plugins list`, `enable`, and `disable` for managing configured native Codex plugins from chat without editing config by hand. ↗ 25 Plugins/messages add presentation capability limits for channel renderers, adapt rich message controls before native rendering, and mark legacy `interactive`/Slack directive producer APIs as deprecated. ↗ 26 Plugins/subagents store channel delivery routes as canonical session metadata and deprecate ad hoc subagent hook delivery-origin fields in favor of core route projection. ↗ 27 Proxy support HTTPS managed forward-proxy endpoints and scoped `proxy.tls.caFile` CA trust for proxy endpoint TLS. (#79171) Thanks @jesse-merhi. ↗ 28 QA-Lab add first-hour 20-turn and optional 100-turn runtime parity scenarios, with tier metadata for standard and soak QA gates. Fixes #80338; refs #80337. Thanks @100yenadmin. ↗ 29 QA-Lab add `openclaw qa suite --runtime-parity-tier` and wire the standard Codex-vs-Pi tier into release checks separately from optional/live-only/soak lanes. Fixes #80337. Thanks @100yenadmin. ↗ 30 QA-Lab add a live-only Codex Pi-shaped Read vocabulary canary so runtime parity catches native workspace-read prompt compatibility drift. (#80323) Thanks @100yenadmin. ↗ 31 QA-Lab add live-only harness self-health scenarios for plugin hook crashes, manifest contract errors, and WebChat direct-reply self-message routing. (#80323) Thanks @100yenadmin. ↗ 32 QA-Lab add runtime tool fixture scenarios and coverage reporting for Codex-native workspace tools, OpenClaw dynamic tools, and optional plugin-backed tools. Fixes #80173. Thanks @100yenadmin. ↗ 33 QA-Lab expose runtime tool fixture coverage through `openclaw qa coverage --tools`, with optional suite-summary evaluation for parity gate artifacts. Thanks @100yenadmin. ↗ 34 QA-Lab schedule a live-frontier Codex-vs-Pi runtime token-efficiency artifact lane in the all-lanes QA workflow. Fixes #80175. Thanks @100yenadmin. ↗ 35 QA-Lab hard-gate required OpenClaw dynamic runtime-tool drift in the standard Codex-vs-Pi tier with a blocking release-check verifier and publish the tool coverage report artifact. Fixes #80339; refs #80319. Thanks @100yenadmin. ↗ 36 QA-Lab add the personal-agent approval-denial scenario so the benchmark pack verifies denied local reads stop cleanly without tool progress or fixture leaks. (#83150) Thanks @iFiras-Max1. ↗ 37 QA-Lab extend the personal-agent benchmark pack with a local task followthrough scenario for proof-backed pending, blocked, and done status reporting. Thanks @iFiras-Max1. ↗ 38 QA-Lab add a report-only dreaming shadow-trial scenario so candidate memory promotion can be evaluated without mutating `MEMORY.md`. Thanks @iFiras-Max1. ↗ 39 Gateway/performance add `pnpm test:restart:gateway` benchmark tooling for repeated restart readiness, downtime, trace, and resource-slope evidence. (#83299) Thanks @samzong. ↗ 40 Android switch Talk Mode to realtime Gateway relay voice sessions with streaming mic input, realtime audio playback, tool-result bridging, and on-screen transcripts. (#83130) Thanks @sliekens. ↗ 41 Gateway/config expose config lookup reload metadata so tools can distinguish restart-required, hot-reloadable, and no-op fields before applying config edits. Fixes #81409. (#81612) Thanks @LLagoon3. ↗ 42 Telegram add allowlisted native DM draft previews for transient tool progress while keeping final answers on the normal persistent delivery path. (#83622) Thanks @akrimm702. ↗ 43 QA-Lab add a personal-agent share-safe diagnostics artifact scenario so support handoffs keep useful status while omitting raw personal content. Thanks @iFiras-Max1. ↗ 44 QA-Lab add a personal-agent no-fake-progress scenario so completion claims stay tied to local evidence instead of unsupported external progress. (#83824) Thanks @iFiras-Max1. ↗
23 changes Open upstream ↗
01 Control UI move settings-only destinations into the Settings workspace and add sidebar recent-session shortcuts plus a one-click new-session action. ↗ 02 Control UI speed up scoped settings pages by loading required config before schema refreshes, caching burst schema responses, and opening Communications on lighter message settings first. ↗ 03 Control UI simplify the Cron Jobs workspace with modal job creation, collapsed filters, and an empty state aimed at first-time setup. ↗ 04 Security/audit add `security.audit.suppressions` for intentionally accepted audit findings, keeping suppressed matches out of the active summary while preserving them in JSON output with an active suppression notice. (#76949) Thanks @100menotu001. ↗ 05 Agents/subagents label delegated task and subagent completion handoffs as ready for parent review, and tell requester agents to review/verify results before calling them done. (#78985) Thanks @100menotu001. ↗ 06 Providers/media add fal and OpenRouter music-generation providers for the shared `music_generate` tool, including fal MiniMax/ACE/Stable Audio endpoints and OpenRouter Lyria audio output. ↗ 07 Maintainer tooling warn before running JS package commands on raw Crabbox AWS boxes, pointing maintainers to Actions hydration or Blacksmith Testbox for CI-like proof. ↗ 08 Control UI show provider quota usage in the Overview card and Chat header, and recover stale Chat in-progress state after missed terminal events. (#82647) ↗ 09 Mac app remote setup can now be preconfigured from `openclaw-mac configure-... Mac app remote setup can now be preconfigured from `openclaw-mac configure-remote`, skips onboarding when config is already complete, supports direct LAN/Tailnet gateway URLs, allows private same-origin Control UI loads, and owns the SSH tunnel process when SSH is selected. ↗ 10 Providers/xAI add xAI Grok OAuth login for SuperGrok subscribers, letting `xai/*` models and xAI media/tool providers authenticate without `XAI_API_KEY`. ↗ 11 CLI/cron add `openclaw cron run --wait` with timeout and poll interval controls, plus exact `cron.runs --run-id` filtering so automation can block on one queued manual run. (#81929) Thanks @ificator. ↗ 12 Maintainer tooling route Crabbox skill defaults through the repo brokered AWS config, leaving Blacksmith Testbox as an explicit opt-in instead of the broad-proof default. ↗ 13 CLI/onboarding localize the setup wizard and bundled channel setup flows for English, Simplified Chinese, and Traditional Chinese. (#80645) Thanks @GaosCode. ↗ 14 Agents/skills cache hydrated `resolvedSkills` across warm gateway turns while keying reuse by the redacted effective config, reducing redundant skill snapshot rebuilds without crossing config-gated skill boundaries. (#81451) Thanks @solodmd. ↗ 15 Group chat add core inbound event classification with opt-in `messages.groupChat.unmentionedInbound: "room_event"`, so always-on unmentioned room chatter can run as quiet context and speak visibly only via the message tool. (#81317) Thanks @obviyus. ↗ 16 Codex/context engines bind thread-bootstrap projection epochs to Codex app-server threads, carry redacted tool-result context into fresh threads, and rotate backend threads when projection state changes. (#82351) Thanks @jalehman. ↗ 17 Agents/media run `image_generate` through the shared async media-generation task lifecycle in session-backed chats, with task status, duplicate guarding, and message-tool completion delivery matching music/video. ↗ 18 Gateway add opt-in restart trace logs for restart signal, active-work drain, close, next-start, ready, and memory spans. (#82396) Thanks @samzong. ↗ 19 Gateway/performance split startup benchmark HTTP-listen timing from full gateway-ready timing and add post-bind plugin and sidecar diagnostics to restart-readiness traces. (#82603) Thanks @samzong. ↗ 20 QA-Lab add a deterministic local personal-agent scenario pack covering reminders, threaded replies, scoped memory recall, redaction, and safe tool followthrough. (#78219) Thanks @iFiras-Max1. ↗ 21 QA-Lab add `--pack personal-agent` for `openclaw qa suite` so maintainers can run the accepted personal-agent scenario pack by selector. (#82760) Thanks @iFiras-Max1. ↗ 22 QA-Lab add a private Codex-vs-Pi runtime parity axis with runtime-pair suite runs, parity reports, and release-check wiring. (#80238) Thanks @100yenadmin. ↗ 23 Slack add Slack assistant thread lifecycle support with assistant view manifest entries, suggested prompts, thread-scoped assistant sessions, and Slack-provided assistant context. Fixes #80787. Thanks @mobybot27. ↗
28 changes Open upstream ↗
01 Channels/SDK add normalized command turn facts to channel turn construction and expose command-turn helpers for plugin inbound contexts. ↗ 02 Agents/config support per-agent bootstrap profile overrides for `contextInjection`, `bootstrapMaxChars`, and `bootstrapTotalMaxChars`, inheriting from `agents.defaults` when omitted. Fixes #69966. Thanks @BunsDev. ↗ 03 Dependencies route root ambient Node proxy agents through `@openclaw/proxyline` and drop root `proxy-agent`, `https-proxy-agent`, and `minimatch` dependencies. ↗ 04 Canvas lazy-load HTTP host, hosted media resolver, CLI implementation, and tool runtime modules so Gateway startup only pays Canvas implementation cost on first use. (#82001) Thanks @samzong. ↗ 05 Control UI/i18n add a `pnpm ui:i18n:report` baseline report for hardcoded-copy focus areas and locale fallback metadata. (#81320) Thanks @samzong. ↗ 06 Maintainer tooling add a repo-local `codex-review` skill for Codex closeout reviews, including local dirty-work and PR-branch review helpers that rerun until no accepted/actionable findings remain and avoid unsupported inline prompts with `--base`. ↗ 07 Maintainer tooling fail CI when pull requests add package patch files or pnpm patched dependencies, preserving the upstream-and-bump dependency workflow. ↗ 08 Codex app-server stream commentary preambles into editable channel progress drafts without promoting them to final answers. ↗ 09 Codex migration remove the bundled `codex-cli` backend and repair legacy `codex-cli/*` model refs to the Codex app-server route on `openai/*`. ↗ 10 Gateway/plugins add a descriptor-backed gateway method registry so plugin-owned RPC methods carry scope metadata, preserve hidden core collision checks, and keep advertised method lists separate from internal core handlers. (#82063) ↗ 11 Gateway/startup add owner-level startup trace attribution for auth, plugin loading, lookup counts, and plugin sidecar services. (#81738) Thanks @samzong. ↗ 12 Plugins/hooks expose the resolved effective `contextTokenBudget` plus source/reference metadata on `llm_output` and sanitized `model_call_*` hook events/contexts so plugin cost and context-health alerts can use agent-level context caps. Fixes #64327. Thanks @BunsDev. ↗ 13 Channels/status reactions wire `StatusReactionController` into WhatsApp message turns (queued → thinking → tool → done/error lifecycle, on par with Telegram and Discord), add `deploy`/`build`/`concierge` emoji categories with tool-token routing, and replace the status reaction defaults with self-explanatory emoji (🧠thinking, ðŸ› ï¸ tool, 💻 coding, 🌠web, â³ stallSoft, âš ï¸ stallHard, ✅ done, ⌠error, ðŸ—œï¸ compacting) so stall and lifecycle reactions read as status indicators instead of emotional commentary. Fixes #59077. (#80612) Thanks @gado-ships-it. ↗ 14 Control UI add a browser-local Text size setting in Appearance and Quick Settings, scaling chat and dense UI text while keeping inputs above the mobile Safari focus-zoom threshold. Fixes #8547. Thanks @BunsDev. ↗ 15 Gateway/plugins add a default-off `admin-http-rpc` plugin for selected control-plane methods, with security docs and no core endpoint config. (#81806) Thanks @liorb-mountapps. ↗ 16 Docs add a dedicated ds4 provider page with local DeepSeek V4 Flash config, on-demand startup, context sizing, and live verification steps. ↗ 17 Release validation add a package-installed Docker user-journey lane that verifies onboarding, mocked model setup, external plugin install/uninstall, ClickClack outbound/inbound messaging, Gateway restart survival, and doctor. ↗ 18 Release validation add package-installed Docker lanes for real TTY onboarding, media and memory persistence, published-package upgrade journeys, and local marketplace plugin install/update/uninstall coverage. ↗ 19 Maintainers add a Clawdtributor skill for Discrawl-backed contributor PR triage, live status checks, and compact review formatting. ↗ 20 Telegram support Mini App `web_app` buttons in generic message presentation payloads, allowing `openclaw message send --presentation` to render Telegram Web App inline buttons for private chats. (#81356) Thanks @jzakirov. ↗ 21 Scripts add `OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree` so high-capacity local worktrees can use independent heavy-check locks while shared locks remain the default. Fixes #80729. (#80734) Thanks @samzong. ↗ 22 Agents/subagents deliver native `sessions_spawn` tasks in the child session's first visible `[Subagent Task]` message instead of hiding the task in the sub-agent system prompt, keeping delegation auditable without duplicating tokens. Fixes #78592. Thanks @bradestes and @stainlu. ↗ 23 Messages/queue make mid-turn prompts steer active runs by default via `/queue steer`, preserve `/queue followup` and `/queue collect` for users who want messages to queue by default, and make `/steer` continue as a normal prompt when steering is unavailable. (#77023) Thanks @fuller-stack-dev. ↗ 24 Voice Call/Telnyx add realtime media-streaming call support for conversational voice calls. (#81024) Thanks @dynamite-bud. ↗ 25 Dependencies add release dependency evidence reports, npm advisory gating, and PR dependency-change awareness so maintainers can review dependency risk before and during releases. Thanks @joshavant. ↗ 26 Gateway expose optional `isHeartbeat` metadata on agent event payloads so clients can distinguish scheduled heartbeat runs from ordinary chat runs. (#80610) Thanks @medns. ↗ 27 Agents add `agents.defaults.runRetries` and `agents.list[].runRetries` config for embedded Pi runner retry loop limits. (#80661) Thanks @medns. ↗ 28 Codex add node-backed Codex CLI session listing and binding so an OpenClaw conversation can continue an existing Codex CLI session running on a paired node. ↗
248 changes Open upstream ↗
01 Amazon Bedrock externalize the Bedrock and Bedrock Mantle provider packages so core installs no longer pull AWS SDK dependencies unless those providers are installed. ↗ 02 Plugins externalize Slack, OpenShell sandbox, and Anthropic Vertex so their runtime dependency cones install only when those plugins are installed. ↗ 03 Control UI/WebChat add a persisted auto-scroll mode selector so users can keep the current near-bottom behavior, always follow streaming output, or turn automatic streaming scroll off and use the New messages button manually. Fixes #7648 and #81287. Thanks @BunsDev. ↗ 04 ACP add `acp.fallbacks` so ACP turns can try configured backup runtime backends when the primary backend is unavailable before any output is emitted. (#69542) Thanks @kaseonedge. ↗ 05 Gateway/OpenAI HTTP honor `max_completion_tokens` and `max_tokens` on inbound `/v1/chat/completions` requests so client-provided token caps reach the upstream provider via `streamParams.maxTokens`, with `max_completion_tokens` taking precedence when both are sent. Thanks @Lellansin. ↗ 06 Models/OpenAI CLI auth make `openclaw models auth login --provider openai` start the ChatGPT/Codex account login by default, while `--method api-key` remains the explicit OpenAI API-key setup path. ↗ 07 Google/Gemini normalize retired Gemini 3 Pro Preview ids inside explicit SDK OAuth auth-result config patches, so provider helpers emit `google/gemini-3.1-pro-preview` for Gemini 3.1 testing. ↗ 08 Google/Gemini normalize retired Gemini 3 Pro Preview ids inside SDK OAuth auth-result default config patches, so helper-built provider auth flows emit `google/gemini-3.1-pro-preview` for Gemini 3.1 testing. ↗ 09 Google/Gemini normalize retired Gemini 3 Pro Preview ids returned by direct `openclaw models auth login --set-default` provider auth flows before writing config, so Gemini testing targets `google/gemini-3.1-pro-preview`. ↗ 10 Google/Gemini normalize retired Gemini 3 Pro Preview ids in per-agent config defaults and auth patches, so agent-specific emitted config keeps targeting `google/gemini-3.1-pro-preview`. ↗ 11 Google/Gemini normalize retired Gemini 3 Pro Preview ids in provider catalog rows when API-key onboarding only reapplies the agent default, so emitted config keeps testing `google/gemini-3.1-pro-preview`. ↗ 12 Google/Gemini normalize retired Gemini 3 Pro Preview ids in `config set` mutation output for agent overrides and provider catalog rows, so current config emits `google/gemini-3.1-pro-preview`. ↗ 13 Google/Gemini canonicalize provider-qualified retired Gemini 3 Pro Preview refs during Google forward-compatible model resolution, so emitted config uses `google/gemini-3.1-pro-preview` for Gemini 3.1 testing. ↗ 14 Google/Gemini normalize proxy-prefixed retired Gemini 3 Pro Preview catalog rows, so emitted configs use `google/gemini-3.1-pro-preview` for Gemini 3.1 testing. ↗ 15 Google/Gemini normalize retired Gemini 3 Pro Preview ids inside per-agent model overrides before writing config, so agent-specific config emits `google/gemini-3.1-pro-preview` for Gemini 3.1 testing. ↗ 16 Google/Gemini normalize retired Gemini 3 Pro Preview ids in subagent, heartbeat, compaction, and subagent-tool model config during writes, so current config keeps emitting `google/gemini-3.1-pro-preview`. ↗ 17 Docs/subagents document `agents.defaults.subagents.announceTimeoutMs` in the sub-agent and configuration references. (#75509) Thanks @akrimm702. ↗ 18 Cron add direct `cron.get`, `openclaw cron get <id>`, and agent-tool `get` support for inspecting one stored cron job by id. (#75117) Thanks @samzong. ↗ 19 Agents/tools add per-sender tool policies with canonical channel-scoped sender keys, so operators can restrict dangerous tools by requester identity across global, agent, group, core, bundled, and plugin tool surfaces. (#66933) Thanks @JerranC. ↗ 20 ACP expose Gateway session lineage metadata through ACP session listings and session info snapshots so clients can render subagent graphs without private Gateway side channels. (#73458) Thanks @samzong. ↗ 21 Channels/iMessage add `openclaw channels status --channel <name>` filtering and document the BlueBubbles-to-imsg cutover path so operators can probe iMessage without starting both channel monitors. (#80706) Thanks @omarshahine. ↗ 22 CI: add a non-blocking `plugin-inspector-advisory` artifact to Plugin Prere... CI: add a non-blocking `plugin-inspector-advisory` artifact to Plugin Prerelease so release runs capture bundled plugin compatibility triage without changing the blocking gate. ↗ 23 Runtime/Fly detect Fly Machines as container environments from their runtime env vars, so gateway bind and Bonjour defaults match remote container launches. (#80209) Thanks @liorb-mountapps. ↗ 24 Providers/fal route GPT Image 2 and Nano Banana 2 reference-image edit requests to `/edit` with `image_urls` array, enforce NB2 edit geometry using `aspect_ratio` and `resolution` params, lift Fal edit mode input-image caps to 10 for GPT Image 2 and 14 for Nano Banana 2, and allow aspect-ratio hints in edit mode. (#77295) Thanks @leoge007. ↗ 25 Control UI show a plain HTML recovery panel when the app module never registers, giving blank dashboard pages a retry path and browser-extension troubleshooting link. Fixes #44107. Thanks @BunsDev. ↗ 26 Docs rename the broad tools nav to Capabilities, keep automation and agent coordination as sections, and keep the tools overview focused on tools, skills, and plugins. https://docs.openclaw.ai/tools ↗ 27 Build enable additional low-churn oxlint rules for promise, TypeScript, and runtime footgun checks. ↗ 28 Build enable stricter Vitest lint rules for focused, disabled, conditional, hook, matcher, and expectation hazards. ↗ 29 Build pin explicit oxfmt defaults in the shared formatter config to keep formatting behavior stable across upgrades. ↗ 30 TypeScript enable stricter compiler checks for implicit returns, side-effect imports, overrides, and unused production code. ↗ 31 Logging add targeted model transport, payload, SSE, and code-mode diagnostics with redacted URL handling. ↗ 32 Agents/code mode add opt-in generic QuickJS-WASI code mode that exposes `exec`/`wait` while hiding enabled tools behind a catalog bridge. ↗ 33 Agents allow `session.agentToAgent.maxPingPongTurns` up to 20 while keeping the default at 5 for longer agent-to-agent reply chains. Fixes #52382. (#52400) Thanks @thirumaleshp. ↗ 34 Agents add per-agent `tools.message.crossContext` overrides so sandboxed/public agents can restrict message sends to the current conversation without changing the global bot policy. ↗ 35 Agents add per-agent `tools.message.actions.allow` overrides so sandboxed/public agents can expose and enforce send-only message tools. ↗ 36 Agents omit the sandbox workspace marker from compact command progress previews while keeping internal sandbox diagnostics unchanged. ↗ 37 Agents widen progress draft command preview lines by 50% so Discord inline tool updates preserve more useful command context. ↗ 38 Codex app-server retire timed-out app-server clients after bounded turn interrupts so Discord agents do not reuse a CPU-spinning Codex process after an attempt timeout. ↗ 39 Codex app-server default migrated native plugin destructive-action policy to enabled while preserving explicit global and per-plugin false overrides. ↗ 40 Build upgrade workspace package management to pnpm 11 and keep Docker, install, update, and release workflows on the pnpm 11 config surface. (#79414) Thanks @altaywtf. ↗ 41 Build align Telegram QA workflows and git source installs with the pnpm 11 workspace build allowlist surface. (#80588) Thanks @altaywtf. ↗ 42 Models add provider-level `localService` startup for on-demand local model servers before OpenAI-compatible requests, including one-shot model probes. ↗ 43 Agents trim default system prompt guidance and send-only message tool schemas to reduce prompt tokens while preserving GPT-5 personality guidance. ↗ 44 Context add `/context map` to send a treemap image of the current session context contributors. (#79867) ↗ 45 Slack add `unfurlLinks` and `unfurlMedia` config for bot `chat.postMessage` replies, including per-account overrides, so Slack link and media previews can be suppressed without workspace-wide settings. Fixes #48435. (#80145) Thanks @esegev1 and @HemantSudarshan. ↗ 46 Slack add explicit `replyBroadcast` support for text and Block Kit thread replies so agents can opt into Slack's parent-channel `reply_broadcast` behavior. (#64365) Thanks @tony88331. ↗ 47 Slack preserve mention target/source metadata in inbound prompt context so agents can distinguish direct bot mentions from implicit thread wakes that mention someone else. Fixes #79025. (#75356) Thanks @tmimmanuel. ↗ 48 Slack canonicalize outbound delivery-mirror routes for native DM channel IDs to the peer user session so `message.send` calls to `D...` targets do not split the same Slack DM thread into a channel session. Fixes #80091. (#80111) Thanks @bek91. ↗ 49 Plugin SDK deprecate public subpaths that existed for at least one month and have no bundled extension production imports, keep legacy barrel/test/zod subpath package exports for backwards compatibility, and track both sets in the SDK surface report. ↗ 50 Plugin SDK deprecate public subpaths currently used by only one or two bundled plugin owners, keeping them importable while steering new plugin code to focused shared SDK seams or plugin-owned APIs. ↗ 51 Plugin SDK remove the owner-specific `provider-auth-login` public subpath after moving Chutes, GitHub Copilot, and OpenAI Codex auth flows back to provider-owned modules. ↗ 52 Plugin SDK remove provider-specific model, stream, and xAI compatibility helpers from public exports after moving bundled callers to provider-owned modules. ↗ 53 Plugin SDK expose runtime-supplied active model metadata to native plugin tool factories for diagnostics and plugin-owned policy decisions. Fixes #77857. Thanks @jamiezigelbaum. ↗ 54 QA/Mantis add Telegram live PR evidence automation with Convex-leased credentials, Crabbox transcript capture, motion GIF previews, and inline PR comments. ↗ 55 QA/Mantis add a Telegram desktop scenario builder that leases Crabbox, installs native Telegram Desktop, configures an OpenClaw Telegram gateway with leased bot credentials, and records VNC screenshot/video artifacts. ↗ 56 Discord/voice add realtime voice diagnostics for speaker turns, playback resets, barge-in detection, and audio cutoff analysis. ↗ 57 Talk add `talk.realtime.instructions` so operators can append realtime voice style instructions while preserving OpenClaw's built-in agent-consult guidance. (#79081) Thanks @VACInc. ↗ 58 Discord/voice default test and source installs to the pure-JS `opusscript` decoder by ignoring optional native `@discordjs/opus` builds, avoiding slow native addon compiles outside dedicated voice-performance lanes. ↗ 59 Discord/voice add an opt-in native `@discordjs/opus` install script and decoder preference for live voice-performance lanes without charging unrelated Docker/tests for native addon builds. ↗ 60 Discord/voice add `voice.allowedChannels` to restrict voice joins and bot voice-state moves to configured channels while preserving open voice behavior when unset. ↗ 61 Gateway/skills add an opt-in private skill archive upload install path gated by `skills.install.allowUploadedArchives`, so trusted Gateway clients can stage and install zip-backed skills only when operators explicitly enable the code-install surface. (#74430) Thanks @samzong. ↗ 62 Codex app-server enable Codex native code-mode-only for harness threads so deferred OpenClaw dynamic tools run through Codex's own searchable code execution surface instead of a PI-style wrapper. ↗ 63 Dependencies refresh workspace pins and patch targets, including ACPX `@agentclientprotocol/claude-agent-acp` `0.33.1`, Codex ACP `0.14.0`, Baileys `7.0.0-rc10`, Google GenAI `2.0.1`, OpenAI `6.37.0`, AWS SDK `3.1045.0`, Kysely `0.29.0`, Tlon skill `0.3.6`, Aimock `1.19.5`, and tsdown `0.22.0`. ↗ 64 Dependencies refresh workspace pins for Anthropic SDK, Smithy shared ini loading, Playwright, YAML, Aimock, TypeScript native preview, Vitest, Oxlint/Oxfmt, Vite, and pnpm 11.1.0. ↗ 65 Dependencies hard-pin non-peer direct dependency specs across bundled packages and add a changed-check guard so runtime installs resolve the exact versions tested by maintainers. ↗ 66 Dependencies move embedded Pi packages to the `@earendil-works` namespace, refresh Twitch Twurple packages, and move `@openclaw/fs-safe` from the GitHub release pin to the published npm package. ↗ 67 Build route Testbox changed-check delegation through Crabbox and remove the OpenClaw-specific Blacksmith Testbox helper scripts. ↗ 68 Agents/compaction preserve scoped background exec/process session references across embedded compaction and after-turn runtime contexts without exposing sessions from unrelated scopes. Fixes #79284. (#79307) Thanks @TurboTheTurtle. ↗ 69 Agents/process tell agents to inspect background sessions with `process log` before sending interactive input and to use `waitingForInput`/`stdinWritable` hints from `log`/`poll`. ↗ 70 CLI/onboarding improve setup, onboarding, configure, and channel command wayfinding so terminal flows explain the next useful command instead of relying on terse setup labels. ↗ 71 Agents/Codex remove the configurable Codex dynamic-tools profile so Codex app-server always owns workspace, edit, patch, exec, process, and plan tools while OpenClaw integration tools remain available. ↗ 72 macOS app update the Peekaboo bridge dependency to Peekaboo 3.0.0. ↗ 73 Dependencies refresh workspace pins and move the WhatsApp plugin from `@whiskeysockets/baileys` to `baileys` while keeping the `7.0.0-rc10` runtime. ↗ 74 Plugin SDK add bundled-plugin session actions, `sendSessionAttachment`, and Cron-backed `scheduleSessionTurn`/tag cleanup under the grouped session namespace. Replaces #75578/#75581/#75588 and part of #73384/#74483. Thanks @100yenadmin. ↗ 75 Plugin SDK/media-understanding add `extractStructuredWithModel(...)` plus the optional provider-side `extractStructured(...)` seam so trusted plugins can run bounded image-first structured extraction with optional supplemental text context through provider-owned runtimes such as Codex. ↗ 76 Exec approvals add `tools.exec.commandHighlighting` so parser-derived command highlighting in approval prompts can be enabled globally or per agent. (#79348) Thanks @jesse-merhi. ↗ 77 Codex app-server mirror native Codex subagent spawn lifecycle events into Task Registry so app-server child agents appear in task/status surfaces without relying on transcript text. (#79512) Thanks @mbelinky. ↗ 78 Skills add `skills.load.allowSymlinkTargets` so intentional symlinked skill folders can resolve into trusted sibling repos without disabling root containment. ↗ 79 Agents/tools add core Tool Search so agents can search and call large OpenClaw, MCP, and client tool catalogs through one compact PI bridge. ↗ 80 Doctor warn when a per-agent model config omits the `fallbacks` key and `agents.defaults.model.fallbacks` is non-empty. Covers both string-form (`"model": "..."`) and partial-object form (`"model": { "primary": "..." }`) — both silently clobber the defaults chain at runtime. Use `"fallbacks": []` to explicitly opt out of fallbacks, or add `"fallbacks": [...]` to inherit or override. Fixes #79369. ↗ 81 Chat commands add `/think default` and `/fast default` to clear session overrides and inherit configured/provider defaults. (#79385) Thanks @VACInc. ↗ 82 Dependencies refresh workspace dependency pins and lockfile, including `@openai/codex` `0.130.0`, `acpx` `0.7.0`, AWS SDK `3.1044.0`, OpenTelemetry `0.217.0`, `typebox` `1.1.38`, `vite` `8.0.11`, `oxfmt` `0.48.0`, and `oxlint` `1.63.0`, and update the Codex harness model snapshot for the new bundled app-server catalog. ↗ 83 Plugins/install add guarded plugin install overrides so onboarding and repair tests can route specific plugins to registry specs or local `npm pack` artifacts via environment variables. ↗ 84 Tests/Docker add Codex on-demand install and live plugin-tool dependency E2E lanes for packaged onboarding and npm-pack plugin proof. ↗ 85 Plugins/ACPX accept an optional `args` array in `agents.<name>` config so paths and flag values containing spaces stay intact when spawning ACP agent processes. Thanks @TheArchitectit and @BunsDev. ↗ 86 Agents inject the current provider/model identity into system prompts, including configured prompt overrides and CLI hook prompt replacements, so agents can answer model-identity questions from the actual runtime selection. ↗ 87 Agents/subagents add prompt-only `agents.defaults.subagents.delegationMode` and per-agent overrides with `suggest`/`prefer` modes, and centralize config-backed system prompt resolution across embedded, CLI, compaction, and command-export prompt surfaces. ↗ 88 Agents/subagents add stronger delegation orchestration guidance, `sessions_yield` wait guidance, stable `taskName` aliases, and active-child runtime prompt context for spawned sub-agent work. ↗ 89 Plugins/CLI add the optional bundled `oc-path` plugin, providing `openclaw path` for surgical `oc://` access to markdown, JSONC, and JSONL workspace files. ↗ 90 Plugins/SDK add unified model catalog registration for text, image, video, and music providers, including `providerCatalogEntry` manifests, shared media list help, live catalog caching, and per-model video capability overlays. ↗ 91 Plugin SDK add presentation helpers for controls-only interactive rendering and opt-in empty fallback text so rich channel renderers can share `MessagePresentation` semantics without duplicating native cards or components. ↗ 92 CLI make parser, startup, config, guardrail, channel, agent, task, session, and MCP failures explain what happened and point to the next recovery command. ↗ 93 GitHub Copilot refresh the model catalog from `${baseUrl}/models` so per-account entitlement and accurate context windows surface at runtime; static manifest catalog (now including `gpt-5.5`) remains the fallback when discovery is disabled or the API is unreachable. ↗ 94 Active Memory support concrete `plugins.entries.active-memory.config.toolsAllow` recall tool names for custom memory plugins while keeping the built-in memory-core default on `memory_search`/`memory_get` and preserving `memory_recall` automatically for `plugins.slots.memory: "memory-lancedb"`. ↗ 95 Active Memory report normal `NONE` recall decisions as `status=no_relevant_memory`, keep unavailable and failed recall paths distinct, and avoid caching no-summary recall results so ordinary no-context turns no longer look like broken `status=empty` memory. Fixes #79812. (#80015) Thanks @TurboTheTurtle. ↗ 96 Telegram share the grammY API throttler across polling and ad hoc send clients for the same bot token, so visible draft previews and CLI sends use one quota gate. Thanks @anagnorisis2peripeteia. ↗ 97 Feishu resolve group policy/tool context from the trusted chat target for group turns while keeping the speaker in `From`, so @mention replies do not drop the configured group id. Fixes #79457. Thanks @greyxiong. ↗ 98 Telegram/Feishu honor configured per-agent and global `reasoningDefault` values when deciding whether channel reasoning previews should stream or stay hidden, addressing the preview-default part of #73182. Thanks @anagnorisis2peripeteia. ↗ 99 QQBot mark recognized framework slash commands as text-command turns before reply dispatch so `/models`, `/status`, and `/new` responses stay visible in QQ Bot C2C conversations. Fixes #79310. Thanks @rollingshmily. ↗ 100 Docker run the runtime image under `tini` so long-lived containers reap orphaned child processes and forward signals correctly. (#77885) Thanks @VintageAyu. ↗ 101 Logging/redaction redact quoted HTTP client secret fields and auth/cookie headers in shared log and formatted error output. Related #71211 and #65623. (#75033) Thanks @liaoandi. ↗ 102 Gateway/SDK document and stabilize the task ledger RPC surface for `tasks.list`, `tasks.get`, and `tasks.cancel`, including generated Swift model typing for optional task summaries. Thanks @BunsDev. ↗ 103 Google/Gemini normalize retired `google/gemini-3-pro-preview` and `google-gemini-cli/gemini-3-pro-preview` selections to `google/gemini-3.1-pro-preview` before they are written to model config. ↗ 104 Google/Gemini emit canonical `google/gemini-3.1-pro-preview` ids from configured provider catalog rows so model list and selection paths can test Gemini 3.1 instead of retired Gemini 3 Pro. ↗ 105 Google/Gemini normalize nested proxy-provider catalog ids like `google/gemini-3-pro-preview` to `google/gemini-3.1-pro-preview`, so Kilo-style configured catalogs test Gemini 3.1 instead of the retired Gemini 3 Pro id. ↗ 106 Google/Gemini canonicalize provider-onboarding model alias maps so setup flows preserve settings under `google/gemini-3.1-pro-preview` instead of re-emitting retired Gemini 3 Pro config keys. ↗ 107 Google/Gemini canonicalize retired Gemini 3 Pro Preview ids inside Google dynamic model resolution so runtime clones also use `google/gemini-3.1-pro-preview`. ↗ 108 Google/Gemini canonicalize provider-auth default model results before setup hooks and picker returns so auth flows do not re-emit retired `google/gemini-3-pro-preview` selections. ↗ 109 Amazon Bedrock support `serviceTier` parameter for Bedrock models, configurable via `agents.defaults.params.serviceTier` or per-model in `agents.defaults.models`. Valid values: `default`, `flex`, `priority`, `reserved`. (#64512) Thanks @mobilinkd. ↗ 110 Control UI read the Quick Settings exec policy badge from `tools.exec.security` instead of the non-schema `agents.defaults.exec.security` path, so configured `full`/`deny` values render accurately. Fixes #78311. Thanks @FriedBack. ↗ 111 Control UI/usage add transcript-backed historical lineage rollups for rotated logical sessions, with current-instance vs historical-lineage scope controls and long-range presets so usage history stays visible after restarts and updates. Fixes #50701. Thanks @dev-gideon-llc and @BunsDev. ↗ 112 Agents/failover harden state-aware lane suspension by persisting quota resume transitions, restoring configured lane concurrency, preserving non-quota failure reasons, and exporting model failover events through diagnostics OTLP. Thanks @BunsDev. ↗ 113 Control UI/Windows add the SPA-side WebView2 bridge for native hosts so draft text can update the chat composer and the ready handshake is wired through the app lifecycle. (#69633) Thanks @AlexAlves87. ↗ 114 Channels/streaming make progress draft labels scroll away with other progress lines, render structured tool rows as compact emoji/title/details, show web-search queries from provider-native argument shapes, and skip empty Discord apply-patch starts until a patch summary exists. (#79146) ↗ 115 Runtime/performance avoid full-array sorting while auto-selecting providers, resolving supported thinking levels, picking node last-seen timestamps, and extracting Codex usage-limit messages. Thanks @shakkernerd. ↗ 116 Plugins/doctor avoid full-array sorting while selecting ClawHub search/archive results and bounded dreaming doctor entries. Thanks @shakkernerd. ↗ 117 Agents/compaction keep contributor diagnostics to a bounded top-three selection without sorting the full history. Thanks @shakkernerd. ↗ 118 Sessions/UI avoid full-array sorting while selecting ACPX leases, Google Meet calendar events, and latest chat sessions. Thanks @shakkernerd. ↗ 119 Plugin SDK mark direct `deliverOutboundPayloads` and legacy reply-dispatch bridges as deprecated compatibility substrate, enrich `sendDurableMessageBatch` with explicit durable send outcomes, migrate bundled send/turn paths off deprecated APIs, and enforce the split with `check:deprecated-api-usage`. ↗ 120 OpenAI/Talk let browser realtime Talk, Gateway relay/Voice Call realtime bridges, and OpenAI realtime transcription use `openai-codex` OAuth when no direct API key is configured, make Google Meet `test_speech` honor `mode: "bidi"`, expose Control UI launch options for provider/model/voice/transport/VAD/reasoning, and update the default OpenAI realtime voice model to `gpt-realtime-2`. Thanks @Solvely-Colin. ↗ 121 Telegram preserve the channel-specific 10-option poll cap in the unified outbound adapter so over-limit polls are rejected before send. (#78762) Thanks @obviyus. ↗ 122 Telegram/streaming continue over-limit draft previews in a new message instead of stopping when rendered preview text crosses Telegram's message limit. (#74508) Thanks @anagnorisis2peripeteia. ↗ 123 Slack route handled top-level channel turns in implicit-conversation channels to thread-scoped sessions when Slack reply threading is enabled, keeping the root turn and later thread replies on one OpenClaw session. (#78522) Thanks @zeroth-blip. ↗ 124 Telegram re-probe the primary fetch transport after repeated sticky fallback success so transient IPv4 or pinned-IP fallback promotion can recover without a gateway restart. Fixes #77088. (#77157) Thanks @MkDev11. ↗ 125 Agents/harness skip tool-result middleware validation when no handler is registered, and sanitize incoming tool result `details` (functions, symbols, bigints, cycles, oversized payloads) before middleware sees them. Tool emitters legitimately produce raw dependency payloads on `details`, and the harness owes any registered middleware a JSON-safe view of that payload; otherwise a no-op middleware (e.g. bundled `tokenjuice` on the `pi` runtime) causes the validator to reject every tool result and silently substitute a failure sentinel, dropping outbound Discord messages, exec output, cron results, and any other tool whose payload carries non-serializable values. Thanks @solomonneas. ↗ 126 Runtime/install raise the supported Node 22 floor to `22.16+` so native SQLite query handling can rely on the `node:sqlite` statement metadata API while continuing to recommend Node 24. (#78921) ↗ 127 Discord/voice make duplicate same-guild auto-join entries resolve to the last configured channel so moving an agent between voice channels does not keep joining the stale channel. ↗ 128 Discord/voice add realtime `/vc` modes so Discord voice channels can run as STT/TTS, a realtime talk buffer with the OpenClaw agent brain, or a bidi realtime session with `openclaw_agent_consult`. ↗ 129 Discord/voice add bounded realtime gateway logs for voice channel joins, realtime model/voice selection, transcripts, consult routing/answers, and playback start, allow OpenAI realtime Discord sessions to disable input-triggered response interruption for echo-heavy rooms while keeping explicit Discord barge-in available for new and already-active speakers, and allow voice turns to target an existing Discord channel agent session. ↗ 130 Discord/voice add `voice.realtime.minBargeInAudioEndMs` and let the realtime provider own playback clearing, so speaker echo no longer cuts OpenAI realtime model audio at `audioEndMs=0` while low-echo rooms can opt back into immediate barge-in with `0`. ↗ 131 Discord/voice make `agent-proxy` the default voice mode so realtime voice acts as the microphone/speaker extension of the routed OpenClaw agent session, with `stt-tts` remaining available as an explicit fallback. ↗ 132 Discord/voice route default `agent-proxy` realtime turns through the OpenClaw consult handoff with owner-level tool access and a forced-consult transcript fallback, matching the Codex-style voice front end while keeping the routed agent authoritative. ↗ 133 Discord/voice keep OpenAI realtime bidi consults quiet while the supervisor agent is still working, accept Codex-style `conversation.item.done` function-call events, and preserve continuing tool results through the gateway relay so the OpenAI realtime bridge reliably routes consults before speaking the final answer. ↗ 134 Discord/voice include a bounded one-line STT transcript preview in verbose voice logs so live voice debugging shows what speakers said before the agent reply. ↗ 135 Codex app-server pin the managed Codex harness and Codex CLI smoke package to `@openai/codex@0.129.0`, defer OpenClaw integration dynamic tools behind Codex tool search by default, and accept current Codex service-tier values so legacy `fast` settings survive the stable harness upgrade as `priority`. ↗ 136 Codex app-server annotate message-tool-only direct chat turns in the dynamic `message` tool spec so visible replies are sent through `message(action="send")` instead of staying private. (#79704) ↗ 137 Agents/PI route explicit OpenAI Codex Responses runs through PI's native WebSocket-capable transport and remove OpenClaw's custom OpenAI Responses WebSocket stack while preserving auth injection, run abort signals, and prompt cache boundary stripping. ↗ 138 Models/config allow `compat.thinkingFormat` values `qwen` and `qwen-chat-template` for configured OpenAI-compatible Qwen models, preserving them through catalog normalization and mapping `/think` levels to `enable_thinking` or `chat_template_kwargs.enable_thinking`. Fixes #79677. (#79777) Thanks @indulgeback. ↗ 139 Codex app-server default implicit local stdio app-server permissions to guardian when Codex system requirements disallow the YOLO approval, reviewer, or sandbox value, including hostname-scoped remote sandbox entries, avoiding turn-start failures on managed hosts that permit only reviewed approval or narrower sandboxes. ↗ 140 Plugins/install run managed npm-root install, uninstall, prune, and repair commands from the managed root without a redundant `--prefix .`, avoiding npm 10.9.3 Arborist crashes on native Windows WhatsApp plugin installs. Fixes #78514. (#78902) Thanks @melihselamett-stack. ↗ 141 Config/schema/Windows detect direct execution of the base config schema generator with `pathToFileURL` so Windows paths with backslashes still run the `--check` and `--write` command body. (#52989) Thanks @easyteacher. ↗ 142 Discord/voice stream ElevenLabs TTS directly into Discord playback and send ElevenLabs latency optimization as the documented query parameter so spoken replies can start sooner. ↗ 143 Discord/voice keep TTS playback running when another user starts speaking, ignore new capture during playback to avoid feedback loops, and downgrade expected receive-stream aborts to verbose diagnostics. ↗ 144 iMessage expose native private-API message actions through `imsg rpc` for reactions, edits, unsends, replies, rich sends, attachments, and group management when `imsg status --json` reports the required bridge capabilities. ↗ 145 Gateway/tasks reconcile stale CLI run-context tasks whose live run context disappeared even when a child session row remains, and apply the default bounded reload deferral timeout to channel hot reloads so stale task records cannot block Discord/Slack/Telegram reloads forever. ↗ 146 Gateway/heartbeat keep stripped `HEARTBEAT_OK` acknowledgements out of pending final-delivery replay and let recent ack-only pending state proceed to the next heartbeat run instead of creating a self-refreshing requests-in-flight loop. Fixes #79258. Thanks @haumanto. ↗ 147 Gateway/sessions keep session-store index writes atomic while skipping durable fsync inside the writer lock, reducing cron and channel-turn starvation on slow filesystems and addressing the session-store strand of #73655. Thanks @mmartoccia. ↗ 148 Discord/voice make `openclaw channels capabilities --channel discord --target channel:<id>` and `channels status --probe` audit voice-channel permissions, including auto-join targets, so missing Connect/Speak/Read Message History permissions show up before `/vc join`. ↗ 149 Gateway/restart expose `skipDeferral` on the `gateway.restart.request` RPC and add `openclaw gateway restart --safe --skip-deferral` so operators can bypass the safe-restart deferral gate when a pinned task run prevents the OpenClaw-aware restart from draining. Surfaces the existing internal `scheduleGatewaySigusr1Restart({ skipDeferral })` semantics added in #71637 to a public surface, complementing `gateway.reload.deferralTimeoutMs`. Refs #76162. Thanks @solomonneas. ↗ 150 Discord/streaming default Discord replies to progress draft previews so tool/work activity appears in one edited Discord message unless `channels.discord.streaming.mode` is set to `off`. ↗ 151 OpenAI/realtime default realtime voice to `gpt-realtime-2`, use the GA Realtime WebSocket session shape for backend OpenAI bridges, and cover backend, WebRTC, Google Live, and Gateway relay paths in the live Talk smoke. (#79130) ↗ 152 Update/Windows spawn the post-core-update child process with `stdio:"pipe"` on Windows so PowerShell/CMD console handles are not inherited, preventing the terminal from hanging after `openclaw update` completes. Fixes #78445. (#78483) Thanks @Beandon13. ↗ 153 Plugins/install add `npm-pack:<path.tgz>` installs so local npm pack artifacts run through the same managed npm-root install, lockfile verification, dependency scan, and install-record path as registry npm plugins. ↗ 154 Channels/plugins show configured official external channels as missing-plugin status rows and send errors with exact install/doctor repair commands after raw package-manager upgrades leave Feishu or WhatsApp uninstalled. Fixes #78702 and #78593. Thanks @MarkMa84 and @mkupiainen. ↗ 155 Matrix move the Matrix channel back to an official external ClawHub/npm plugin so core installs no longer need Matrix SDK runtime dependencies. ↗ 156 Matrix attach `com.openclaw.presentation` metadata to semantic presentation replies so OpenClaw-aware Matrix clients can render rich buttons, selects, context rows, and dividers while stock clients keep the plain text fallback. (#73312) Thanks @kakahu2015. ↗ 157 Codex app-server disarm the short post-tool completion watchdog after current-turn activity, expose `appServer.turnCompletionIdleTimeoutMs`, and include raw assistant item context in idle-timeout diagnostics so status-only post-tool stalls stop failing as idle. Fixes #77984. Thanks @roseware-dev and @rubencu. ↗ 158 Codex app-server release the session lane after a completed assistant message item goes quiet without `turn/completed`, and stop global rate-limit notifications from keeping stuck turns alive. ↗ 159 Plugin skills/Windows publish plugin-provided skill directories as junctions on Windows so standard users without Developer Mode can register plugin skills without symlink EPERM failures. Fixes #77958. (#77971) Thanks @hclsys and @jarro. ↗ 160 Process tool show input-wait hints from `log` and `poll` for idle interactive background sessions so operators can inspect stuck CLIs and resume them with existing input actions. Fixes #33957. Thanks @bitloi and @vincentkoc. ↗ 161 Shell env/Windows hide the login-shell environment probe child window so gateway startup and shell-env refreshes do not flash a console on Windows. Fixes #78159. (#78266) Thanks @BradGroux. ↗ 162 MS Teams surface blocked Bot Framework egress by logging JWKS fetch network failures and adding a Bot Connector send hint for transport-level reply failures. Fixes #77674. (#78081) Thanks @Beandon13. ↗ 163 Windows/restart skip duplicate scheduled-task `/Run` calls when the gateway task is already running, using a locale-stable PowerShell task-state probe before retrying. Fixes #52044. (#52487) Thanks @andyk-ms. ↗ 164 Media/host-read allow buffer-verified ZIP archives in the host-local media validator so agents can send ZIP attachments via the message tool. Fixes #78057. (#78292) Thanks @Linux2010. ↗ 165 Gateway/sessions fast-path already-qualified model refs while building session-list rows so `openclaw sessions` and Control UI session lists avoid heavyweight model resolution on large stores. (#77902) Thanks @ragesaq. ↗ 166 Contributor PRs remind external contributors to redact private information like IP addresses, API keys, phone numbers, and non-public endpoints from real behavior proof. Thanks @pashpashpash. ↗ 167 ACP bridge relay Gateway exec approval prompts from active ACP turns to the ACP client's `session/request_permission` handler before resolving the Gateway approval. Thanks @amknight. ↗ 168 Codex/plugins enable migrated source-installed `openai-curated` Codex plugins in the same Codex harness thread with explicit `codexPlugins` config, cached app readiness, and fail-closed destructive-action policy. Thanks @kevinslin. ↗ 169 Codex/plugins enforce native plugin destructive-action policy with Codex app-level `destructive_enabled` config instead of OpenClaw-maintained per-tool deny lists, leave plugin app `open_world_enabled` on by default, and invalidate existing plugin app thread bindings so old generated app config is rebuilt. Thanks @kevinslin. ↗ 170 QQBot/Skills translate QQBot skill descriptions surfaced in the Skills UI so English-language users no longer see Chinese metadata. Fixes #77810. Thanks @eabase. ↗ 171 Image generation include enabled generation providers such as fal in provider discovery even when another image provider is already active. Fixes #78141. Thanks @leoge007. ↗ 172 Slack keep Socket Mode's native reconnect enabled so transient ping/pong misses can recover without forcing a full provider rebuild. Fixes #77933. Thanks @bmoran1022 and @brokemac79. ↗ 173 Cron preserve cron timeout results when an isolated agent turn's `cron-nested` lane watchdog fires, preventing internal command-lane or model-fallback timeout text from being persisted. Fixes #77703. (#78168) Thanks @brokemac79 and @transxtech. ↗ 174 PR triage mark external pull requests with `proof: supplied` when Barnacle finds structured real behavior proof, keep stale negative proof labels in sync across CRLF-edited PR bodies, and let ClawSweeper own the stronger `proof: sufficient` judgement. ↗ 175 ACPX/Codex preserve trusted Codex project declarations when launching isolated Codex ACP sessions, avoiding interactive trust prompts in headless runs. Thanks @Stedyclaw. ↗ 176 ACPX/Codex reap stale OpenClaw-owned ACPX/Codex ACP process trees on startup and after ACP session close, preventing orphaned harness processes from slowing the Gateway. Thanks @91wan. ↗ 177 ACP bridge implement stable session list, resume, and close handlers so ACP clients can page Gateway sessions, rebind existing sessions without replay, and close bridge sessions cleanly. Thanks @amknight. ↗ 178 ACP bridge replay complete ledger-backed ACP sessions on load, including user prompts, tool updates, session metadata, and usage snapshots, while keeping older sessions on the existing transcript fallback. Thanks @amknight. ↗ 179 ACP sessions allow parent agents to inspect and message their own spawned cross-agent ACP sessions without enabling broad agent-to-agent visibility. Thanks @barronlroth. ↗ 180 Talk/voice unify realtime relay, transcription relay, managed-room handoff, Voice Call, Google Meet, VoiceClaw, and native clients around a shared Talk session controller and add the Gateway-managed `talk.session.*` RPC surface. ↗ 181 Diagnostics/Talk export bounded Talk lifecycle/audio metrics and session recovery metrics through OpenTelemetry and Prometheus without exposing transcripts, audio payloads, room ids, turn ids, or session ids. ↗ 182 Logging/Talk route shared Talk lifecycle events into bounded file and OTLP log records while keeping transcript text, audio payloads, turn ids, call ids, and provider item ids out of logs. ↗ 183 Voice Call/realtime add opt-in OpenClaw agent voice context capsules and consult-cadence guidance so Gemini/OpenAI realtime calls can sound like the configured agent without consulting the full agent on every ordinary turn. Thanks @scoootscooob. ↗ 184 Telegram/streaming keep draft preview rotation from reusing a pre-tool assistant preview after visible tool or media output lands between compaction replay and the next assistant message. Thanks @vincentkoc. ↗ 185 Telegram/performance skip non-forum topic-cache setup, defer status reaction variant work until reactions are needed, and reuse ack reaction gating during message context assembly. Thanks @vincentkoc. ↗ 186 Telegram/performance reduce command-menu CPU and allocation work when many native, plugin, and custom commands are registered. (#79717) Thanks @drsolveit. ↗ 187 CLI/migrate add bulk on/off and skip controls to interactive Codex skill migration, leaving conflicting skill copies unchecked by default. (#77597) Thanks @kevinslin. ↗ 188 CLI/migrate show native Codex plugin names before truncated plan items and prompt for plugin activation explicitly during interactive Codex migration instead of silently keeping every planned plugin. Thanks @kevinslin. ↗ 189 CLI/migrate leave already configured target Codex plugins unchecked in the interactive plugin selector and show a `plugin exists` conflict hint while keeping new plugin activations selected by default. Thanks @kevinslin. ↗ 190 CLI/migrate return cleanly without apply confirmation when interactive Codex migration leaves both skill copies and native plugin activations unselected. Thanks @kevinslin. ↗ 191 Gateway/sessions extend the per-call sessions-list `rowContext` cache with memoization for `resolveSessionDisplayModelIdentityRef`, thinking metadata, and `resolveModelCostConfig` so deterministic per-row resolvers run once per unique `(provider, model[, agentId])` tuple instead of once per session. Cuts CPU on `sessions.list` for stores with many sessions sharing a small set of model tuples; behavior is unchanged for callers that pass no `rowContext`. Thanks @rolandrscheel. ↗ 192 Cron CLI add `openclaw cron list --agent <id>`, normalize the requested agent id, and include jobs without a stored agent id under the configured default agent while keeping `cron list` unfiltered when no agent is supplied. Fixes #77118. Thanks @zhanggttry. ↗ 193 Slack/performance reduce message preparation, stream recipient lookup, and thread-context allocation overhead on Slack reply hot paths. Thanks @vincentkoc. ↗ 194 Control UI/chat strip untrusted sender metadata from live streams and transcript display, preserve canvas preview anchors, and stop operator UI clients from injecting their internal client id as sender identity. Fixes #78739. Thanks @tmimmanuel, @guguangxin-eng, @hclsys, and @BunsDev. ↗ 195 Control UI/chat collapse consecutive duplicate text messages into one bubble with a count so repeated text-only messages stay compact without hiding nearby context. ↗ 196 Control UI/chat and Sessions label inherited thinking defaults separately from explicit overrides while preserving provider-supplied option labels. Fixes #77581. Thanks @BunsDev and @Beandon13. ↗ 197 Agents/runtime add prepared runtime foundation contracts for carrying provider, model, tool, TTS, and outbound runtime facts through later reply-path migrations. Thanks @mcaxtr. ↗ 198 Control UI/WhatsApp keep Show QR available for unlinked WhatsApp accounts while switching linked accounts to the explicit Relink action and showing Wait for scan only when a QR is active. Thanks @BunsDev. ↗ 199 Gateway/performance reuse the compatible plugin metadata snapshot across dashboard and channel agent turns so auto-enabled runtime config does not repeatedly rescan plugin metadata before provider calls. Thanks @shakkernerd. ↗ 200 Gateway/performance reuse current plugin metadata for provider activation, auth/env candidate lookup, and bundle settings during dashboard and channel agent turns while keeping the configless secret-target cache unscoped and refusing stale unscoped reuse when plugin discovery roots differ. Thanks @shakkernerd. ↗ 201 Gateway/performance avoid resolving plugin auto-enable metadata twice in one runtime config pass, reducing repeated dashboard turn metadata scans. Thanks @shakkernerd. ↗ 202 Control UI/performance pre-scope config tab schemas before rendering, load Channels with cached/runtime status before manual probes, preserve channel rows through failed status summaries, and keep stale slow probes from replacing newer snapshots. Thanks @BunsDev. ↗ 203 Auth/providers pass `config` and `workspaceDir` lookup context through to provider-id resolution so workspace-scoped auth aliases resolve correctly when no explicit alias map is supplied. Thanks @shakkernerd. ↗ 204 Gateway/diagnostics add startup phase spans, active work labels, stale terminal bridge markers, and opt-in sync-I/O tracing in `pnpm gateway:watch` so slow Gateway turns are easier to attribute from logs and stability diagnostics. ↗ 205 QA/Mantis add an opt-in Discord thread attachment before/after scenario that creates a real thread, calls `message.thread-reply` with `filePath`, and captures baseline/candidate screenshot evidence. ↗ 206 Discord preserve `filePath` and `path` attachments when replying to a thread with the message tool. ↗ 207 QA/Mantis add visual desktop tasks with Crabbox MP4 recording, screenshot capture, and optional image-understanding assertions, and preserve video artifacts in Mantis before/after reports. ↗ 208 QA/WhatsApp add `pnpm openclaw qa whatsapp` for live DM canary and pairing-gate coverage using two pre-linked WhatsApp Web sessions from the QA credential pool. ↗ 209 CI/Crabbox default owned AWS fallback to `standard` multi-region capacity with broker hints enabled, reserving `beast` for explicit CPU-bound maintainer lanes. ↗ 210 Plugins/install run managed npm-root install, rollback, repair, and uninstall mutations with legacy peer resolution so removing one plugin cannot rehydrate a stale registry `openclaw` package into the shared root. Thanks @vincentkoc. ↗ 211 Plugin SDK add `openclaw/plugin-sdk/channel-message` lifecycle helpers for `defineChannelMessageAdapter`, `deliverInboundReplyWithMessageSendContext`, send/receive/live/state contracts, durable final-delivery capability derivation, capability proof helpers, and normalized message receipts. ↗ 212 Plugin SDK add `createChannelMessageAdapterFromOutbound` so channel plugins can derive durable message adapters from proven outbound adapters without duplicating send/receipt bridge code. ↗ 213 Plugin SDK add `actions.prepareSendPayload(...)` so channel plugins can shape message-tool sends into durable payloads while core owns queueing, hooks, retry, recovery, and acknowledgements. ↗ 214 Plugin SDK make the legacy `channel-reply-pipeline` subpath a compatibility wrapper over the shared reply core while steering root compat deprecations toward `plugin-sdk/channel-message`. ↗ 215 Plugin SDK move Discord, Slack, Mattermost, and Matrix live-preview finalization onto `plugin-sdk/channel-message` and attach message receipts to Telegram finalized previews plus Teams native stream finals, so preview edits and stream finals are represented in the message lifecycle instead of draft-only helpers. ↗ 216 Telegram persist the polling restart watermark after successful update dispatch instead of at handler entry, leaving failed updates retryable while still coalescing completed offsets safely. ↗ 217 Plugin SDK/fs-safe expose reusable atomic replacement, sibling-temp writes, and cross-device move fallback helpers through `plugin-sdk/security-runtime`, and move OpenClaw's duplicated safe filesystem write paths onto the shared `@openclaw/fs-safe` package. ↗ 218 Plugin SDK/fs-safe route browser, media, channel, and QA external output producers through staged fs-safe writes before final publication. (#78768) ↗ 219 Plugin SDK/fs-safe rename the public temp workspace helpers to `tempWorkspace`, `withTempWorkspace`, `tempWorkspaceSync`, and `withTempWorkspaceSync`, matching the cleaner `@openclaw/fs-safe` API before the package is published. ↗ 220 Core/performance trim reply payload routing, heartbeat filtering, tool display, core tool assembly, channel directory, task status, and Slack approval formatting helper chains with direct bounded scans. Thanks @vincentkoc. ↗ 221 Control UI/performance keep chat, config, and channel refreshes responsive by decoupling slow history/schema/status work, reducing the client history window, and logging over-budget chat/config renders. Refs #77060, #45698, #47979, #44107. Thanks @BunsDev. ↗ 222 QA/Mantis reuse Crabbox desktop/browser capture tooling and pnpm store caches during Slack desktop smoke runs, reducing per-scenario setup work before screenshots and videos are captured. ↗ 223 QA/Mantis add Slack desktop hydrate modes and per-phase timing reports so warm prehydrated VNC leases can skip source install/build while cold runs still prove the full source checkout. ↗ 224 QA/Mantis pass the runtime env through desktop-browser Crabbox and artifact-copy child commands, so embedded Mantis callers can provide Crabbox credentials without mutating the parent process. Thanks @vincentkoc. ↗ 225 QA/Mantis return the copied Slack desktop screenshot path even when remote Slack QA fails, so the CLI still prints the failure screenshot artifact. Thanks @vincentkoc. ↗ 226 QA/Mantis accept Blacksmith Testbox `tbx_...` lease ids from desktop smoke warmup, so provider overrides do not fail before inspect/run. Thanks @vincentkoc. ↗ 227 Plugins/SDK add bounded `before_agent_finalize` retry instructions so workflow plugins can request one more model pass. Thanks @100yenadmin. ↗ 228 Plugin SDK add plugin-owned `SessionEntry` slot projection and scoped trusted-policy session extension reads. (#75609; replaces part of #73384/#74483) Thanks @100yenadmin. ↗ 229 Plugin SDK/Gateway add scoped `plugins.sessionAction` dispatch and plugin-attributed `emitAgentEvent` support so plugins can expose typed session actions and workflow events to trusted clients. (#75578; replaces part of #73384/#74483) Thanks @100yenadmin. ↗ 230 Plugins/SDK expose host-derived tool target paths to `before_tool_call` and trusted policy hooks so workflow plugins can reason about known file targets without reparsing tool envelopes. (#75605) Thanks @100yenadmin. ↗ 231 Control UI/WebChat show a persistent compact context usage indicator from fresh session token data before the high-pressure warning state, while keeping the existing compaction prompt threshold. Fixes #46398; refs #45048, #50071, and #73744. Thanks @walterwkchoy, @AxelrodAI, @Brissux, @vincentkoc, and @BunsDev. ↗ 232 Contributor PRs require external pull requests to include after-fix real behavior proof from a real OpenClaw setup, with terminal screenshots, console output, redacted runtime logs, linked artifacts, and copied live output treated as valid evidence while unit tests, mocks, lint, typechecks, snapshots, and CI remain supplemental only. ↗ 233 Plugins/catalog add an `@tencent-weixin/openclaw-weixin` external entry pinned to `2.4.1` so onboarding and `openclaw channels add` can install the Tencent Weixin (personal WeChat) channel by default. (#77269) Thanks @pumpkinxing1. ↗ 234 Developer tooling add checked-in VS Code Gateway debugging configs and an opt-in `OUTPUT_SOURCE_MAPS=1` source-map build path for breakpoints in TypeScript source. (#45710) Thanks @SwissArmyBud. ↗ 235 Managed proxy add `proxy.loopbackMode` for Gateway loopback control-plane traffic, allowing operators to keep the default Gateway loopback bypass, force loopback Gateway traffic through the proxy, or block it. (#77018) Thanks @jesse-merhi. ↗ 236 Telegram/native commands show the current thinking level above the `/think` level picker so users can see the active setting before changing it. (#78278) Thanks @obviyus. ↗ 237 Plugins/hooks add a `before_agent_run` pass/block gate that can stop a user prompt before model submission while preserving a redacted transcript entry for the user, and clarify that raw conversation hooks require `hooks.allowConversationAccess=true`. (#75035) Thanks @jesse-merhi. ↗ 238 Config/Nix keep startup-derived plugin enablement, gateway auth tokens, control UI origins, and owner-display secrets runtime-only instead of rewriting `openclaw.json`; in Nix mode, config writers, mutating `openclaw update`, plugin lifecycle mutators, and doctor repair/token-generation now refuse with agent-first nix-openclaw guidance. (#78047) Thanks @joshp123. ↗ 239 Plugin SDK add a generic `api.runtime.llm.complete` host completion helper with runtime-derived caller attribution, config-gated model/agent overrides, session-bound context-engine access, request-scoped config, audit metadata, and normalized usage attribution. (#64294) Thanks @DaevMithran. ↗ 240 Control UI/exec approvals highlight parsed shell command fragments that may deserve extra review in approval prompts. (#77153) Thanks @jesse-merhi. ↗ 241 Channels/iMessage honor `channels.imessage.groups.<chat_id>.systemPrompt` (and the `groups["*"]` wildcard) by forwarding it as `GroupSystemPrompt` on inbound group turns, mirroring the byte-identical resolver semantic from WhatsApp where defining the key as an empty string on a specific group suppresses the wildcard fallback. Brings iMessage to parity with the per-group `systemPrompt` pattern already supported by Discord, Telegram, IRC, Slack, GoogleChat, and the retired BlueBubbles channel. Fixes #78285. (#79383) Thanks @omarshahine. ↗ 242 iMessage add opt-in inbound catchup that replays messages received while the gateway was offline (crash, restart, mac sleep) on next startup. Enable with `channels.imessage.catchup.enabled: true`; tunables for `maxAgeMinutes`, `perRunLimit`, `firstRunLookbackMinutes`, and `maxFailureRetries`. Persists a per-account cursor under the OpenClaw state dir (`<openclawStateDir>/imessage/catchup/`), replays each row through the live dispatch path so allowlists/group policy/dedupe behave identically on replayed and live messages, and force-advances past wedged guids after `maxFailureRetries` to prevent stuck cursors. Extends the persisted echo-cache retention window so the agent's own outbound rows from before a gap are not re-fed as inbound on replay. Includes a regenerated `src/config/bundled-channel-config-metadata.generated.ts` so the runtime AJV schema accepts the new `channels.imessage.catchup` block. Fixes #78649. (#79387) Thanks @omarshahine. ↗ 243 Channels/Yuanbao bump the bundled `openclaw-plugin-yuanbao` npm spec from `2.11.0` to `2.13.0` in the official external channel catalog and refresh the pinned integrity hash, so fresh installs and catalog-driven reinstalls pick up the newer Yuanbao channel plugin release. (#79620) Thanks @loongfay. ↗ 244 Gateway/OpenAI-compatible Chat Completions support function `tools`, `tool_choice`, `tool_calls`, and `role: "tool"` follow-up turns while keeping tool-call stream finalization aligned with the command result and reporting client-tool name conflicts as invalid requests. (#66278) Thanks @Lellansin. ↗ 245 Providers/Mistral add `mistral-medium-3-5` to the bundled catalog with reasoning support. Thanks @sliekens. ↗ 246 Docs/Mistral document Medium 3.5 setup, local infer smoke usage, adjustable reasoning, and the Mistral HTTP 400 caveat for `reasoning_effort="high"` with `temperature: 0`. ↗ 247 Channels/iMessage remove the bundled BlueBubbles channel surface and deprecate BlueBubbles-backed iMessage setup in OpenClaw. Existing `channels.bluebubbles` configs must migrate to `channels.imessage` using `imsg` on a signed-in Mac or an SSH wrapper, and non-macOS default `imsg` configs now report remote-Mac wrapper guidance. ↗ 248 Proxy replace OpenClaw managed HTTP/WebSocket/fetch interception internals with Proxyline while preserving Gateway loopback routing policy. (#79857) Thanks @jesse-merhi. ↗