diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1bfbf10b238..c5088eb57aa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -253,1744 +253,2408 @@ Docs: https://docs.openclaw.ai
## 2026.7.1
+OpenClaw v2026.7.1 brings major Control UI and onboarding overhauls, major updates to the official iOS, Android, and macOS apps, expanded model and provider support including GPT-5.6 compatibility, Tencent Hy3, and Meta Muse Spark 1.1, and stronger Codex and connected coding-agent workflows. Telegram, Slack, Discord, and Apple Messages each receive substantial updates, while Gateway crash loops, scheduled work, remote browser control, workspace terminals, sessions, and goals also improve. There are also many general fixes and refinements throughout OpenClaw.
+
+[Full release notes](https://docs.openclaw.ai/releases/2026.7.1)
+
### Highlights
-- **New models and providers:** add Featherless, Claude Sonnet 5 and Mythos 5, Meta Muse Spark 1.1, and ClawRouter; make GPT-5.6 the new-setup default with `/think ultra` for Sol and Terra plus `max` for Luna, honor Z.AI `max`, and refresh model availability after OAuth renewal. (#101092, #98254, #101238, #102873, #103070, #103163, #99658, #99759, #98333, #103581, #98021, #104778, #102289) Thanks @vincentkoc, @vortexopenclaw, @HamidShojanazeri, @davemorin, @Solvely-Colin, @jalehman, @steipete-oai, @bdjben, @obviyus, @sallyom, @anyech, @100yenadmin, and @fuller-stack-dev.
-- **Control UI and native macOS chat:** make sessions primary with a minimal searchable sidebar, compact context ring, reasoning-effort slider, cleaner dashboard chrome, and a native macOS session browser with model and thinking pickers, slash commands, transcript export, and context usage. (#99289, #99838, #100386, #101103, #101497)
-- **Conversational onboarding:** Crestodian now runs a real agent-loop setup across the CLI, web install, and macOS app, with AI-guided provider setup, model-judged approvals bound to exact operations, masked credential prompts, and deterministic fallback when no model is available. (#99935, #100029, #100656, #101887) Thanks @fuller-stack-dev.
-- **Offline and spoken mobile chat:** iOS and Android now pre-paint bounded per-gateway session and transcript caches offline; Apple Watch gains full voice turns, and iOS can speak replies through configured Gateway TTS with on-device fallback. (#100219, #100227, #100283, #100770, #100771)
-- **Session organization and generated titles:** generate concise session titles through utility-model routing and add Gateway-backed groups, unread state, rename, fork, archive, and delete controls, plus group management across web, iOS, and Android. (#87643, #100814, #101117, #101234) Thanks @zhangguiping-xydt and @Juliangsm.
-- **Telegram and Codex continuity:** pair Codex through private `/login`, steer active runs with `/steer` and `/tell`, preserve messages when transcript acknowledgement is missing, adopt durable turns safely, and recover final sends across Telegram formatting and flood-wait failures. (#98006, #98126, #98786, #103664, #103916) Thanks @100yenadmin, @Kyzcreig, @obviyus, and @jalehman.
-- **Startup and upgrade recovery:** run container migrations before Gateway readiness, stop recoverable legacy state from blocking startup, and enter control-plane-safe mode after repeated unclean boots instead of restart flapping. (#101881, #104529) Fixes #98565 Thanks @sallyom, @jacobtomlinson, @bdjben, @obviyus, and @shakkernerd.
+#### Control UI
-### Changes
+The [Control UI](https://docs.openclaw.ai/web/control-ui) now works more like one browser workspace for conversations and parallel work. Chats receive clearer titles, recent sessions are easier to find, pin, group, rename, fork, archive, and mark read, and multiple sessions can sit in resizable panes that return after a reload. Drag-and-drop placement, a denser Sessions page, and a live Tasks view make it easier to move between active work without juggling browser tabs.
-- **Meta provider:** add bundled `muse-spark-1.1` Responses API support with streaming, tool calls, encrypted reasoning replay, onboarding, exact-model live validation, and standalone npm/ClawHub distribution as `@openclaw/meta-provider`. (#102873, #103070, #103163) Thanks @HamidShojanazeri, @davemorin, @Solvely-Colin, @jalehman, and @vincentkoc.
-- **Android chat agent selector:** switch the active agent directly from the live chat screen while keeping chat, Talk mode, and home canvas on the same canonical session. (#80422) Thanks @bcperry and @joshavant.
-- **Gateway host status:** show the connected Gateway's host, network address, OS, runtime, uptime, CPU, memory, and disk details in Control UI Settings. (#100478)
-- **Gateway crash-loop recovery:** persist boot outcomes, enter control-plane-safe mode after repeated unclean starts, hold transport and provider activation until recovery, and exit with `EX_CONFIG` for fatal configuration errors so systemd and launchd stop restart flapping. Thanks @obviyus.
-- **iOS offline chat:** pre-paint recent sessions and canonical transcripts from a protected, bounded per-gateway cache, keep sending disabled offline, and purge cached conversation text when pairing is reset. (#100219)
-- **Slack progress indicators:** use Slack's native assistant thread status and rotating loading messages by default while keeping acknowledgement reactions static; lifecycle reaction updates now require `messages.statusReactions.enabled: true`.
-- **Control UI Talk controls:** keep voice, model, sensitivity, and other realtime defaults in Settings → Communications → Talk, and use the composer microphone caret to select any browser audio input. (#101046)
-- **Cron model selection:** choose an agent-turn model in Control UI Quick Create and show configured or default models in cron job rows and details. (#95341) Thanks @ly85206559.
-- **Control UI GitHub previews:** show issue and pull request state, title, author, activity, comments, and change statistics in hover and keyboard-focus cards. (#100434)
-- **Logbook work journal:** add a disabled-by-default bundled plugin that turns paired-node screen snapshots into a private timeline, daily standup, and timeline-grounded Q&A in a plugin-contributed Control UI tab. (#99930)
-- **Control UI message context:** reveal per-message token, context, and model details from the timestamp on hover or activation instead of showing a separate Context button.
-- **Control UI session titles:** reveal truncated recent-session names with a reduced-motion-safe hover animation.
-- **Control UI sidebar navigation:** show a small customizable pinned destination set, keep the remaining pages under More, move Settings to the footer, and persist sidebar customization in the browser. (#100296) Thanks @vincentkoc.
-- **Control UI sidebar usage:** remove the provider usage quota row from the expanded sidebar while keeping usage details available in the chat composer and Usage page. Thanks @shakkernerd.
-- **Android chat code highlighting:** render fenced Kotlin, Swift, TypeScript, JavaScript, Python, Bash, and JSON blocks with bounded, theme-aware syntax colors while preserving plain rendering for unknown, partial, or oversized blocks. (#100217)
-- **Gateway TTS playback:** add an operator-scoped `tts.speak` RPC that returns configured-provider speech as inline whole-clip audio for remote clients. (#100770)
+Chat controls are clearer while work is in progress. The composer keeps attachments, model choice, voice, reasoning, send and stop state, and message actions usable across screen sizes; Talk users can choose or refresh a microphone from settings and get readable permission guidance on narrow screens; quoted replies preserve the point being answered; and compact tool rows keep inputs, results, images, progress, errors, approvals, and steering available without overwhelming the conversation.
-- **Control UI context usage:** show context-window progress, latest-run input/output tokens, and the active model when the chat context ring is opened.
-- **Apple Watch voice turns:** dictate a message from the Watch chat and hear the new OpenClaw reply spoken on the Watch, with explicit silent-message and stop-speaking controls. (#100224) Thanks @vincentkoc.
-- **Conversational onboarding:** add a real agent-loop Crestodian setup flow across the CLI, Gateway, web install, and macOS app, with typed operations, exact approval binding, masked credential prompts, isolated session transcripts, and safe handoff to the normal agent. Thanks @vincentkoc.
-- **Generated session titles:** name new Control UI sessions from their first message, and add default/per-agent `utilityModel` routing for lower-cost session, topic, and thread title generation. Thanks @Juliangsm, @zhangguiping-xydt, and @vincentkoc.
-- **ClawRouter routing and quotas:** add the bundled ClawRouter provider plugin with credential-scoped dynamic model discovery, OpenAI-compatible and native Anthropic/Gemini transports, and managed budget reporting across OpenClaw usage surfaces. (#99658)
-- **Model and provider coverage:** add GPT-5.6 support, use Nemotron Super's 1M context window, and preserve explicit OpenRouter authentication headers. (#98333, #98726, #98187) Thanks @steipete-oai, @eleqtrizit, @sunlit-deng, @laurencebrown, and @shakkernerd.
-- **CLI and node workflows:** add `openclaw attach`, node context-path support, actionable device-approval recovery guidance, soft-resume CLI sessions when prompt metadata changes, and clearer plugin install exit diagnostics. (#96454, #97679, #98115, #98146, #98497, #99822) Thanks @anagnorisis2peripeteia, @obviyus, @wm0018, @welfo-beo, @RomneyDa, @Sanjays2402, and @vincentkoc.
-- **Cron and usage:** add exit-triggered schedules, detached session-targeted runs, and an in-flight job doctor warning, while making the existing usage footer easier to wrap on Telegram. (#92037, #98755, #98620, #92877) Thanks @anagnorisis2peripeteia, @obviyus, @EthanSK, @masatohoshino, @Marvinthebored, and @vincentkoc.
-- **Native apps and localization:** modernize iOS presentation, Chat, Talk, onboarding, and reconnect flows; add Gateway speech providers; improve QR onboarding and protocol recovery; install the local Gateway from macOS; localize core Apple and Android surfaces; and add Swedish mobile localization. (#98452, #98736, #99243, #98376, #98302, #98385, #99767, #97110, #97111, #97112, #97113, #98043) Thanks @jcooley8, @Tony-ooo, @joelnishanth, @cursoragent, @joshavant, @vincentkoc, and @yeager.
-- **Messaging capabilities:** add native iMessage polls, Telegram Codex pairing and steering, Telegram multi-lane progress summaries, and Signal target aliases. (#98421, #98006, #98126, #98907, #95738) Thanks @omarshahine, @lobster, @100yenadmin, @Kyzcreig, @Marvinthebored, and @jesse-merhi.
-- **Local inference and chat controls:** auto-discover Ollama inference nodes, add Control UI session-first navigation, reasoning controls, and command picking, and keep OpenClaw control tools available when deferred tool search selects the wrong tool family. (#99234, #99289, #99426, #99838, #99561) Thanks @100yenadmin, @joshavant, @VicZhang6, @Solvely-Colin, and @vincentkoc.
-- **Doctor and diagnostics:** expose auth-profile, workspace, device-pairing, channel-plugin, memory-provider, systemd exhaustion, and Windows LAN firewall findings. (#97125, #97358, #97366, #97496, #97968, #98291, #98666) Thanks @giodl73-repo, @masatohoshino, and @joshavant.
-- **Policy repair previews:** show review-required Gateway bind and denied node-command changes during `doctor --fix` without applying them or counting the findings as repaired. (#99776) Thanks @giodl73-repo.
-- **Conversation and review controls:** prepare scoped conversation capability profiles and add Cursor Agent as an autoreview engine. (#98536, #97348) Thanks @hxy91819.
+Usage information is easier to understand from both [status views](https://docs.openclaw.ai/cli/status) and the browser. The Usage page compares recent estimated spend and daily values without repeated reloads or hovering, shows each provider, model, agent, or channel's share, and can include provider-reported plans, quotas, balances, budgets, and Anthropic or OpenAI billing details. Seven-, thirty-, and ninety-day charts now keep zero-activity days visible, large all-agent reports limit concurrent work to reduce slowdowns and memory pressure, and chat-level context panels and completed-message details show the active model, tokens, cache use, context pressure, and estimated cost.
-### Fixes
+Mobile pairing, Gateway health, desktop-node approvals, linked GitHub work, workspace files, scheduled jobs, worktrees, Workboard items, and background tasks are now available closer to the conversation. Their status, permissions, and next steps are also clearer.
-- **Codex runtime switching:** accept the bundled Codex runtime for both `codex/*` and `openai/*` model routes while keeping unsupported provider/runtime pairs rejected. (#103762)
-- **LM Studio and xAI repaired tool calls:** emit the terminal tool-call event before completion when promoting serialized plain-text tool calls, preserving the complete streaming lifecycle for consumers.
-- **Browser actions on Node 24:** keep browser request cancellation bound to the client and response lifetime instead of Node 24.16+'s prematurely aborted body-stream signal, preventing valid POST actions from failing after JSON parsing. Thanks @obviyus and @vincentkoc.
-- **SecretRef model credentials:** keep resolved provider secrets behind process-local sentinels through auth storage, stream setup, SDK configuration, and managed local-provider probing, then inject plaintext only at the final network or provider-plugin boundary while retaining exact-value log redaction. (#102008, #102009)
-- **Telegram token redaction:** redact bot tokens even when log transports split them across chunks, preventing fragmented credentials from escaping structured and streamed logs. (#103861) Thanks @vincentkoc.
-- **Telegram durable turn adoption:** complete spooled updates only after durable agent adoption, detach adopted turns from the ingress reply fence, and suppress superseded replies so recovery cannot leak stale or duplicate responses. (#103664, #103952, #103965) Thanks @obviyus and @vincentkoc.
-- **Task delivery recovery:** normalize legacy delivery statuses while restoring task records so older queued work becomes runnable instead of aborting registry recovery. (#103946) Fixes #103168 Thanks @bek91, @theo674, and @obviyus.
-- **Diagnostics provider evidence:** emit one deduplicated `provider.request` timeline event for every completed or failed model call, so opt-in timelines can prove real provider traffic without double-counting terminal paths. Fixes #103063 Thanks @vincentkoc.
-- **Lean local model shell access:** keep `exec` directly visible beside the default structured Tool Search controls so coding-tuned local models can use their shell fallback instead of searching for missing domain tools. (#101607) Thanks @vincentkoc and @maweibin.
-- **OAuth refresh contention diagnostics:** keep local lock paths out of user-facing refresh failures and avoid duplicate failure prefixes while preserving structured provider and profile classification. (#101573) Thanks @vincentkoc.
-- **Exec approval prompts:** keep background-disabled fallback warnings out of pending gateway/node approvals and show them only after a command actually runs in the foreground. (#101561) Thanks @vincentkoc.
-- **Direct poll delivery:** route direct and hybrid channel polls through the owning outbound adapter while preserving gateway-mode routing and channel option checks. (#99950) Thanks @NianJiuZst and @shakkernerd.
-- **Agent wait hard-timeout snapshots:** preserve canonical hard-timeout phase and timestamps when the outer `agent.wait` timer wins the retry-grace race, while leaving queue, draining, and restart-cancelled waits correctable. (#89367) Thanks @Pick-cat and @sunnydongbo.
-- **Control UI typed approvals:** send `/approve` commands immediately through the authorized Gateway command path while an agent run is blocked instead of queueing the command behind that run. (#101532) Thanks @vincentkoc.
-- **Microsoft Teams Graph response bounds:** cap successful file-upload and chat JSON reads so oversized Microsoft Graph responses cannot be buffered without limit. (#97784) Thanks @Alix-007.
-- **Packaged speech runtime:** stop treating package-backed `speech-core` as a bundled plugin sidecar, restoring TTS startup in npm installs while release checks keep true activation-bypassing facades package-complete. (#89899, #89425) Thanks @zhangguiping-xydt, @ant1b0t, and @vincentkoc.
-- **Container image upgrades:** run versioned state migrations and plugin convergence before Gateway readiness when reusing mounted state, failing closed with `doctor --fix` recovery guidance instead of serving half-upgraded state. (#101881) Fixes #98565 Thanks @sallyom, @jacobtomlinson, and @shakkernerd.
-- **Plugin update reliability:** preserve plugins successfully switched through ClawHub during core updates instead of processing them a second time and disabling them after a redundant transient failure. (#105405) Thanks @vincentkoc.
-- **Codex app-server protocol:** require app-server 0.143 or newer, remove pre-0.142 wire-shape compatibility, migrate retired `on-failure` approval settings to `on-request` in Codex configuration and saved bindings, teach Codex to retrieve deferred native `spawn_agent` through `tool_search` so native subagent task mirroring works on search-capable models, and update the managed runtime to 0.144.1 for code-mode host installation and missing-host fallback reliability. Thanks @vincentkoc.
-- **Android hardware keyboard chat:** send with unmodified Enter on physical keyboards while preserving Shift+Enter and other modified Enter combinations for multiline input. (#101239) Thanks @3ninyt3nin-creator and @vincentkoc.
-- **CJK Markdown emphasis:** render adjacent Chinese, Japanese, and Korean emphasis punctuation through the shared Markdown pipeline instead of leaking literal markers across channels. (#101230, #101120) Thanks @nicknmorty and @j08577600-jpg.
-- **Backup retry cleanup:** close partial archive output handles and isolate each retry path after live-write failures, preventing Windows `EBUSY` locks from cascading across attempts or leaving stale temp archives. (#101449, #101464) Thanks @ZOOWH, @LiLan0125, @vincentkoc, @aniruddhaadak80, @shakkernerd, and @obviyus.
-- **Codex yielded native subagents:** keep the parent app-server subscription and shared client alive until yielded native subagent completion delivery settles, preventing lost wakeups and leaked one-shot cleanup. Thanks @vincentkoc.
-- **Delivery recovery pacing:** pace eligible outbound and restart-continuation replays after gateway startup so outage backlogs do not burst into channel rate limits, while preserving the wall-clock recovery budget. (#101118, #101058) Thanks @ZengWen-DT, @aniruddhaadak80, and @vincentkoc.
-- **Outbound pre-connect recovery:** clear stale platform-send evidence atomically when a connect or DNS failure proves no request was sent, allowing queued Discord and other channel messages to replay after connectivity returns without weakening the unknown-send duplicate guard. (#101024, #100979) Thanks @SunnyShu0925 and @tiffanychum.
-- **Discord streamed finals:** send completion replies as fresh messages so inactive channels become unread, while preserving targeted mentions without escalating `@everyone` or `@here`. (#99711, #99662) Thanks @davelutztx and @xena68.
-- **OpenAI-compatible SSE parsing:** recognize event streams mislabeled as JSON without prepending a second `data:` prefix, preserving valid streamed responses from non-conforming providers. (#96503) Thanks @ZengWen-DT and @54meteor.
-- **Meta Model API contract:** use the current Meta endpoint and output-token field so `muse-spark-1.1` validation and live requests match the provider contract. (#103680) Fixes #103667 Thanks @vincentkoc, @HamidShojanazeri, @davemorin, @Solvely-Colin, and @jalehman.
-- **LM Studio embedding preload:** honor model- and provider-level context-window limits when preloading embedding models, preventing avoidable GPU out-of-memory failures. (#100750) Thanks @zak-li, @ZOOWH, and @hxz398.
-- **Provider overload messaging:** keep rate-limited responses classified for retry and fallback behavior while using overload wording when the provider supplies no explicit retry detail. (#98165) Thanks @SunnyShu0925.
-- **Microsoft Teams attachment metadata:** bound Bot Framework `attachmentInfo` JSON reads and cancel oversized streams before they can exhaust Gateway memory. (#99125) Thanks @ly85206559.
-- **Agent auth copy order:** preserve the source agent's portable auth-profile precedence when copying credentials to a new agent while excluding skipped profiles and transient auth state. (#100833) Thanks @machine3at.
-- **Memory session repair:** keep daily dreaming ingestion bookkeeping outside session-corpus audit and repair so `memory status --fix` preserves healthy daily state. (#93389) Thanks @Alix-007 and @vincentkoc.
-- **Remote browser CDP policy:** allow the configured CDP control host through an existing hostname allowlist without widening page navigation policy, while keeping strict-policy discovery bound to the configured control authority. (#100986, #100819) Thanks @NianJiuZst, @SarinV, and @vincentkoc.
-- **Config unset diagnostics:** explain when an inherited or default configuration value cannot be unset instead of reporting a misleading successful deletion. (#96557) Thanks @moeghashim.
-- **Crestodian command probes:** contain stdout and stderr stream failures while keeping child-process close and spawn errors authoritative, preventing unhandled probe crashes. (#100741) Thanks @lsr911.
-- **Feishu mention forwarding:** fail closed when the bot Open ID is unavailable so group messages cannot be misclassified as explicit bot mentions. (#100891) Thanks @zhangguiping-xydt.
-- **Cron edit delivery:** preserve each job's implicit delivery mode when applying partial delivery updates, so disabling best-effort delivery no longer turns detached job announcements off. (#100846) Thanks @machine3at and @vincentkoc.
-- **Control UI session creation:** keep newly created sessions at the front of the stable sidebar order after selecting another session. Thanks @shakkernerd.
-- **Control UI file previews:** keep large Skill Workshop files responsive with cached, offscreen-contained text chunks while preserving wrapped content, stable file switching, full-file copy, and clean focus behavior. (#101319) Thanks @xianshishan, @shakkernerd, and @vincentkoc.
-- **FTS-only memory startup:** skip plugin capability discovery when `memorySearch.provider` is explicitly `none`, avoiding an unnecessary cold-start scan.
-- **Control UI agent model labels:** show each selected agent's effective model in the Default picker option instead of the global model. (#100719, #77440) Thanks @hyspacex and @jwong-art.
-- **Control UI inbound image previews:** render canonical inbound media references through the authenticated ticket route after chat-history reloads. (#100725, #89591) Thanks @sweetcornna, @vergissberlin, and @shakkernerd.
-- **Small-context compaction:** cap the effective reserve against the known model context window so small local models do not enter compaction from the first token. (#100621) Thanks @vincentkoc.
-- **Detail-less provider failures:** keep opaque upstream failures from cooling API-key auth profiles while preserving WHAM-backed OpenAI OAuth health checks and configured model fallback. (#100617) Thanks @fabasi, @fengjikui, and @vincentkoc.
-- **Plugin install diagnostics:** suppress the misleading hook-pack fallback after plugin install failures only when the hook manifest is absent, while preserving actionable malformed hook-pack errors. (#100554) Thanks @vincentkoc and @obviyus.
-- **Config validation diagnostics:** emit each unchanged sanitized validation-warning payload once per config path, reset deduplication after a clean validation, and preserve the warning fingerprint across transient invalid reads and failed refreshes. (#100569, #25574) Thanks @vincentkoc and @mcaxtr.
-- **Config size-drop guard:** compare writes against canonical bytes for parseable object configs instead of raw BOM and indentation overhead, while preserving raw audit telemetry and the conservative malformed-input fallback. (#100591, #71865) Thanks @vincentkoc and @balric-seo.
-- **Control UI coalesced updates:** show a clear queued-restart completion banner when an update joins an already-running Gateway restart. (#93082) Thanks @goutamadwant and @motacola.
-- **Control UI connection errors:** preserve structured pairing and authentication failures for pending RPC callers while keeping generic disconnect behavior unchanged. (#54758) Thanks @ruanrrn.
-- **iOS embedded terminal:** open the terminal-only Control surface directly while native Gateway authentication connects instead of exposing the Web UI login screen.
-- **TUI startup status:** show `starting up` during post-connect initialization without overwriting active-run or reconnect state. (#93999) Thanks @ml12580 and @sanjarcode.
-- **Control UI restart recovery:** recover stale bundle pages through a bounded whole-document refresh after Gateway updates or restarts. (#99111) Thanks @ZengWen-DT and @ITOrity.
-- **TUI active Gateway ports:** follow the verified active local Gateway port when no explicit URL, port, or remote target is configured. (#73338, #42461) Thanks @haishmg, @vincentkoc, and @jackm1688.
-- **Apple chat run recovery:** restore active responses from canonical Gateway history after reconnects, foreground resumes, and event gaps, while preserving gateway user-turn identity across Codex and Copilot transcript mirrors to prevent duplicate rows. (#100277)
-- **Claude CLI streamed replies:** preserve assistant text already received from Claude CLI when its terminal result envelope is empty, preventing false empty-response failover after a complete streamed answer. (#90450) Thanks @totobusnello.
-- **Phone identity normalization:** canonicalize stray plus signs, preserve non-phone iMessage handles, and reject digit-free Signal identities across shared channel routing. (#100467) Thanks @morluto.
-- **Tlon scry response bounds:** cap successful Urbit scry JSON reads and cancel oversized streams instead of buffering unbounded peer responses. (#100376) Thanks @hugenshen.
-- **Source build portability:** keep tsdown configuration self-contained so builds do not depend on resolving the tsdown package from unrun's temporary module directory. Thanks @vincentkoc.
-- **Agent tool-call decoding:** preserve surrogate-range numeric HTML entities as literal text while still decoding valid supplementary-plane values, preventing malformed model output from injecting lone UTF-16 surrogates into tool arguments. (#99564) Thanks @mikasa0818, @vincentkoc, @shakkernerd, and @maweibin.
-- **Gateway event dispatch:** catch and log lazy subscriber setup and handler failures instead of leaking unhandled promise rejections. (#100401) Thanks @cxbAsDev.
-- **Ollama fallback routing:** classify incomplete native streams through the Ollama provider hook so configured model fallbacks can advance. (#100482) Thanks @TurboTheTurtle, @8kfcf95jvp-oss, and @vincentkoc.
-- **Diffs rendering:** render viewer and image output from one SSR preload, preserve language-pack highlighting through hydration, normalize language hints case-insensitively, skip identical before/after inputs with an explicit `changed` result, report truthful file-render and input errors, cache hash-pinned viewer runtimes, and prefer canonical file settings over stale aliases. (#100487) Thanks @vincentkoc.
-- **Remote browser reliability:** bound persistent Playwright tab enumeration by the existing remote CDP timeout budget and retire timed-out connection attempts so late completions cannot restore a stuck connection. (#80147, #58968) Thanks @HemantSudarshan and @KeaneYan.
-- **Browser attachment downloads:** return managed URL, filename, and path metadata when direct Playwright navigation starts an attachment download, while validating final URLs before saving bytes and preserving single-owner explicit downloads. (#48045, #89416) Thanks @zhangguiping-xydt and @roinou532.
-- **Browser action downloads:** return managed URL, filename, and path metadata when agent actions trigger downloads, while preserving explicit ownership, validating final URLs before saving bytes, and quarantining policy-denied tabs without closing them. (#93250, #93307) Thanks @sunlit-deng and @scorpiord.
-- **Managed browser cookie persistence:** initialize new isolated macOS headless profiles with a non-interactive encryption key while preserving existing profile keys, and close Chromium through CDP before bounded signal fallback so persistent logins survive graceful browser and Gateway restarts. (#96704, #98284) Thanks @TurboTheTurtle and @shakkernerd.
-- **MCP OAuth response bounds:** reject body-less foreign error bodies without calling their inherently unbounded `text()` fallback, while preserving HTTP status and headers for safe SDK diagnostics. (#98143) Thanks @Pick-cat, @wangmiao0668000666, and @vincentkoc.
-- **Tlon image upload bounds:** cap remote image fetches before upload and fail closed on oversized or stalled responses instead of buffering them without a limit. (#100374) Thanks @hugenshen.
-- **Control UI approval prompts:** keep stale resolve failures and busy-state cleanup from leaking across newer approvals or Gateway reconnects. (#98394) Thanks @haruaiclone-droid.
-- **macOS service SecretRefs:** preserve generated env-file values for SecretRefs that remain in config when stale Gateway LaunchAgents are repaired or reinstalled without those variables in the invoking shell. (#99124) Thanks @mushuiyu886 and @1Wanker.
-- **Anthropic OAuth callbacks:** keep the provider-required `localhost` redirect URI stable while allowing the local callback listener to bind an explicit loopback host. (#96917) Thanks @xialonglee, @riazrahaman, and @vincentkoc.
-- **Prompt-release media delivery:** accept active-leaf-preserving side appends while an embedded run temporarily releases its session lock, so successive message-tool media replies merge without a false session-takeover failure. (#100490) Thanks @scotthuang and @vincentkoc.
-- **Control UI Skills filters:** align agent and search controls, use translated labels, and preserve native checkbox and radio sizing. (#100526) Thanks @evan-YM and @vincentkoc.
-- **Control UI completed-run state:** bind active and completed updates to run identities so stale completions keep Send available while newer runs remain active. (#100527) Thanks @tiffanychum, @davidstoll, and @shakkernerd.
-- **Control UI context usage:** keep stale cached totals visible as approximate without triggering warning styling or Compact actions. (#89772) Thanks @bladin and @snsczssl.
-- **Control UI file previews:** remove the duplicate Escape header hint while retaining the Close-button shortcut hint and Escape behavior. (#100528) Thanks @xianshishan and @vincentkoc.
-- **Control UI autonomous tool failures:** preserve an earlier Tool error outcome across later autonomous recovery turns. (#100514) Thanks @qingminglong and @yetval.
-- **Agent empty replies:** surface a visible failure when a completed interactive turn has no deliverable reply, including queued follow-ups, while preserving explicit silence, pending continuations, and committed side effects, honoring queued send policies, and treating compaction notices as progress. (#100456) Thanks @mushuiyu886 and @grox2012.
-- **Subprocess, maintenance, and output hardening:** keep child output failures from crashing exec and TUI sessions, isolate remote skill refresh and subagent sweeps, surface skill-scan and approval diagnostics, sanitize ANSI and stray parameter markup without losing visible text, and stop Android audio capture cleanly on device loss. (#100440) Thanks @cxbAsDev, @wendy-chsy, @tzy-17, @nankingjing, @NianJiuZst, @LavyaTandel, and @maweibin.
-- **Docker sandbox command output:** fail and terminate Docker sandbox operations when stdout/stderr capture breaks instead of returning success with incomplete output. (#100523) Thanks @cxbAsDev and @vincentkoc.
-- **Android push-to-talk lifecycle:** serialize gateway PTT preparation with app foreground and Manual Mic ownership so delayed work cannot restart, replace, or tear down a newer capture. (#100552) Thanks @xialonglee.
-- **Lean local-model tools:** trim media generation, TTS, and PDF tools from lean agent surfaces while preserving explicit config and runtime opt-ins. (#88881) Thanks @vincentkoc.
-- **iOS development app identity:** keep the development app labeled OpenClaw while using its distinct debug icon to differentiate it from release builds.
-- **Android chat recovery:** preserve optimistic user messages and locally owned runs while reconnect and sequence-gap history snapshots catch up, preventing sent messages from disappearing or stale runs from taking ownership. (#100197)
-- **iOS QR gateway handoff:** stop VisionKit before delivering scanned setup codes, and keep deferred auth, approval, Watch, and foreground-node work bound to its originating gateway across reconnects. (#99572) Thanks @PollyBot13.
-- **Agent terminal failures:** surface a safe interactive reply when an agent run ends without visible output, while preserving completed message-tool delivery and heartbeat-specific guidance. (#99304) Thanks @moeedahmed and @maweibin.
-- **MCP loopback tool results:** preserve schema-valid text, image, and embedded-resource content through HTTP tool calls while rendering malformed or protocol-incompatible blocks as safe text. (#100336) Thanks @tzy-17, @OpenClawKobian99, @vincentkoc, @shakkernerd, and @maweibin.
-- **Control UI tool-result images:** render direct image content blocks from Gateway history and make the delayed-send scroll E2E setup deterministic. (#100295) Thanks @lzyyzznl, @Pandah97, @rquinones84, and @maweibin.
-- **Control UI live tool ordering:** keep assistant stream text before its matching tool card when browser and Gateway timestamps disagree. (#93184) Thanks @Pick-cat and @lileilei-camera.
-- **IRC Unicode messages:** split outbound PRIVMSG payloads on UTF-16 code-point boundaries so emoji cannot be cut into lone surrogates. (#96572) Thanks @WeeLi-009, @vincentkoc, @mushuiyu886, and @cursoragent.
-- **OpenAI realtime voice greetings:** prevent server VAD from creating a second outbound greeting while an explicit greeting response owns the turn, without disabling caller interruption. (#86285) Thanks @giodl73-repo and @jnikolaidis.
-- **Realtime voice tools:** filter malformed tool names at each OpenAI, Azure, and Google realtime payload boundary while preserving provider-specific valid names. (#89175) Thanks @vincentkoc.
-- **Discord voice status:** treat Discord error 10065 as a normal disconnected state while preserving unrelated REST failures. (#90969) Thanks @asock.
-- **Discord voice accounts:** isolate `@discordjs/voice` connections by Discord account and recover auto-join when gateway readiness predates listener registration. (#87530) Thanks @geekhuashan.
-- **iOS Voice Wake cleanup:** avoid initializing the microphone audio pipeline while disabling inactive Voice Wake, preventing simulator launch aborts and unnecessary audio setup.
-- **Reliability edge cases:** reject sub-millisecond cron durations, preserve generated proposal newlines, normalize blank integer inputs and fail embedded LSP startup promptly, surface persistence and memory-close failures, keep UTF-16 and plugin package verification correct, propagate Android cancellation, and defer Codex relay registry writes until listening. (#100399) Thanks @cxbAsDev, @snotty, @lin-hongkuan, @849261680, @qingminglong, @anyech, @masatohoshino, @Simon-XYDT, @xialonglee, @nankingjing, @609NFT, and @vincentkoc.
-- **Voice Call completed status:** resolve finalized calls from the full retained event store across Gateway, tool, and CLI status paths while preserving active-call lookup performance. (#99797) Thanks @Darren2030, @NiTeCoMM-code, and @maweibin.
-- **Agent stop recovery:** prevent late-aborting prompts from reacquiring orphaned session locks after teardown, so `/stop` leaves the conversation ready for the next turn.
-- **Message delivery status:** report failed and partially failed best-effort channel delivery instead of returning a success-shaped message-tool result. (#99928) Thanks @masatohoshino.
-- **WhatsApp credential recovery:** restore malformed primary auth state from a valid backup during startup. (#99070) Thanks @LeonidasLux.
-- **WhatsApp quoted replies:** preserve bot-authored outbound quote metadata so replies to those messages keep their reply bubble in WhatsApp Desktop. (#94879) Thanks @Bartok9, @seikosantana, and @vincentkoc.
-- **WhatsApp reconnect catch-up:** admit recently missed Baileys `append` messages during a bounded reconnect window while preserving startup stale-history guards. (#80642) Thanks @VishalJ99.
-- **WhatsApp restart recovery:** stop automatic restart loops after logged-out or connection-replaced disconnects until the account reconnects. (#78511) Thanks @openperf and @rutherlesdev.
-- **Local Gateway CLI auth:** keep loopback CLI token/password calls off durable device scopes so read probes cannot block later write/admin commands behind a stale pairing baseline. (#95997) Thanks @vincentkoc.
-- **Plugin module identity:** keep OpenClaw package chunks on Node's native module graph when jiti transforms plugin entries, preventing duplicate evaluation and class identity drift. (#88384) Thanks @vincentkoc and @ScientificProgrammer.
-- **Shell completion repair:** generate core-only caches during doctor and update repair while preserving full plugin command completion for onboarding and explicit user rebuilds. (#76235) Thanks @joshavant.
-- **MCP schema diagnostics:** attribute draft-2020-12 compiler failures to the external MCP schema so malformed patterns produce actionable setup errors. Thanks @vincentkoc.
-- **Windows Scheduled Task recovery:** keep clean early exits inside the existing bounded launch poll, falling back only when neither the task process nor Gateway listener becomes observable.
-- **iMessage group warnings:** suppress the false drop-all startup warning when an effective group sender allowlist can admit groups, and point true empty-allowlist configurations at the correct remedy. (#100046)
-- **Control UI mobile login:** keep Gateway recovery guidance visible after connection failures, make the disconnected gate scroll safely on constrained screens, and improve mobile keyboard and tap-target behavior. (#100208)
-- **TUI streaming:** render delta-only assistant events in live Gateway and embedded TUI sessions instead of waiting for the final response. (#83000) Thanks @flashosophy.
-- **Model aliases:** resolve provider-qualified aliases during session and chat-command model switches without collisions when providers share a display alias. (#100209) Thanks @sahilsatralkar, @david-r-jones, @shakkernerd, and @vincentkoc.
-- **TUI new-session hooks:** create `/new` sessions through the shared Gateway lifecycle so command and session hooks receive the completed parent transcript in both Gateway and embedded modes, while preventing rollover during an active turn. (#100241, #49918) Thanks @BingqingLyu, @caopulan, @LonExplorer-coder, and @vincentkoc.
-- **TUI abort diagnostics:** show sanitized tool argument-validation summaries for aborted runs in both Gateway and local TUI modes without exposing raw model arguments. (#91002) Thanks @wsyjh8 and @taerlandsen.
-- **iOS Watch replies:** persist queued quick replies in the gateway-scoped chat outbox and submit them through idempotent chat delivery, preventing losses, duplicates, and cross-gateway sends after reconnects. (#100372) Thanks @NianJiuZst.
-- **iOS Gateway auth retry:** restrict stored device-token retry to parsed loopback hosts and reject wildcard bind addresses, preventing remote lookalike hostnames from receiving trusted retry credentials. (#99859) Thanks @ly85206559 and @vincentkoc.
-- **Bedrock Mantle discovery:** bound model-catalog fetch time and response size, and release rejected response bodies so stalled, oversized, or failed provider responses fall back safely. (#99961) Thanks @zhangguiping-xydt and @shakkernerd.
-- **Discord thread-title prompts:** truncate generated-title message and channel context on UTF-16 boundaries so emoji cannot leave malformed model prompt text. (#101551) Thanks @Alix-007, @vincentkoc, @mushuiyu886, and @cursoragent.
+The rework also strengthens the paths underneath those controls. Dashboard connects and reconnects use less temporary Gateway memory, reducing false pressure warnings, while temporary Gateway restarts and stale assets recover more cleanly. Path-routed Gateways keep the right destination and credentials, saved choices survive refreshes, and authentication, protocol, update, and pairing failures show more useful next steps instead of leaving the page stuck or ambiguous.
-- **Mobile pairing routes:** advertise verified persistent Tailscale Serve fallbacks alongside `gateway.bind=lan` setup URLs, show every route in the Control UI and CLI, and let iOS save the first reachable endpoint. (#100280) Thanks @shakkernerd.
-- **Control UI terminal tabs:** vertically center the new-session button in the terminal tab strip.
-- **Control UI composer scrollbar:** show the message-field scrollbar only when the draft actually overflows its autosized height.
-- **Control UI terminal cursor:** hide the browser-native contenteditable caret so the integrated terminal shows only its canvas-rendered cursor.
-- **macOS SSH tunnels:** resolve user-installed SSH `ProxyCommand` helpers through the app's managed PATH while preserving inherited connection environment, so remote aliases work after Finder and sanitized-script launches.
-- **Control UI OpenAI speed picker:** show only Standard and Fast choices for OpenAI models.
-- **Control UI terminal rendering:** adopt the shared `@openclaw/libterminal` browser lifecycle and add Nerd Font fallbacks so icon-enabled shell listings render their glyphs when a compatible local font is installed.
-- **Slack transcript history:** let Codex app-server own its persisted assistant replies so Slack does not append redundant delivery-mirror rows, while the Control UI keeps legacy duplicate mirrors hidden. Thanks @bek91.
-- **Control UI chat history:** hide redundant channel-final delivery mirrors when the preceding app-server assistant reply already shows the same text.
-- **Control UI chat spacing:** keep the first message comfortably clear of the topbar with a responsive minimum transcript inset.
-- **ClawRouter auth profiles:** resolve credential-scoped catalog models during agent runs when the proxy key is stored in an auth profile, and document plugin and model allowlists.
-- **Telegram durability:** retry restart-dropped media, survive transient polling errors, dead-letter poison updates, preserve forwarded rich text, route plugin callbacks correctly, keep progress updates in one stable multi-line window, map self-hosted Bot API container paths through trusted host roots, and fall back safely when Telegram rejects rich final replies. (#98102, #98735, #98775, #98776, #97174, #98907, #91984, #98786) Thanks @luoyanglang, @DaveArcher18, @obviyus, @goldmar, @Marvinthebored, @Dizesales, @shakkernerd, @AiLucasdz, and @RomneyDa.
-- **Cross-channel inbound media:** preserve captions and expose unavailable-attachment notices when WhatsApp, LINE, Signal, iMessage, Microsoft Teams, Feishu, Mattermost, or Zalo cannot materialize inbound media, instead of dispatching phantom placeholders or dropping media-only turns. (#100092)
-- **Agent and context reliability:** preserve runtime overrides, steered subagent tasks, fallback tool-call hints, and legacy reseed attachments; soft-resume CLI sessions across prompt-only drift; improve harness-aware context estimation; time out silent local streams; recover mid-stream failures; and cap Gateway run-cache growth. (#92237, #77539, #99851, #99839, #99822, #97928, #98525, #95430, #77973) Thanks @sercada, @amittell, @obviyus, @liuhao1024, @yetval, @osolmaz, @lzyyzznl, @vincentkoc, @alexelgier, and @fede-kamel.
-- **Provider and network safety:** bound oversized or malformed responses across Moonshot, MiniMax, Anthropic OAuth, Discord, Matrix, SMS, browser, update, embeddings, Tlön, and Inworld paths. (#96502, #96322, #96644, #97693, #97662, #97999, #98455, #98508, #98554, #98496, #98660) Thanks @hugenshen, @cursoragent, @lsr911, @solodmd, @Alix-007, @wings1029, @lzyyzznl, @sunlit-deng, @vincentkoc, and @Pandah97.
-- **Channel delivery and routing:** keep Slack replies in active thread sessions, preserve account-bound delivery routes, apply response prefixes, and suppress internal traces and unwanted fallback replies. (#97168, #98240, #93639, #97989, #80928) Thanks @LiuwqGit, @gorkem2020, @yetval, @ZengWen-DT, @alexuser, @UnClouded77, and @vincentkoc.
-- **Cron correctness:** preserve provider and model selections on timeouts, retain startup catch-up deferrals across maintenance reads, keep action-required output, clear blank thinking overrides, and preserve provider-owned daily-reset sessions. (#95943, #94022, #96393, #96293, #98356) Thanks @ZengWen-DT, @cursoragent, @luke-renjoy, @RichChen01, @vincentkoc, @yetval, @snowzlmbot, @nz365guy, @takamasa-aiso, and @shakkernerd.
-- **Memory and session recovery:** detect unindexed transcripts, preserve notes through transient reads, avoid cross-directory resumes, disambiguate reserved wiki index pages, and skip empty QMD sync work. (#97857, #98360, #97785, #94326, #90030) Thanks @zw-xysk, @CHE10X, @qingminglong, @yetval, @vincentkoc, @sahibzada-allahyar, and @ruben2000de.
-- **Windows and execution:** bind allowlisted execution to the validated Windows path, propagate `PATHEXT`, normalize inbound paths case-insensitively, and prevent cleanup crashes on Windows. (#98260, #98093, #97630, #97901) Thanks @eleqtrizit, @wendy-chsy, @VectorPeak, @paulcam206, and @shakkernerd.
-- **Mobile and UI stability:** preserve iOS chat line breaks and final replies, improve Android pairing and TLS recovery, hide expired pairing cards, keep workspace file rails scrollable, restore copy-path over plain HTTP, and stop rubber-band scrolling in the Mac app Control UI. (#98304, #98117, #98366, #98439, #98483, #98049, #98646, #98611, #98764, #99830) Thanks @joshavant, @Jabato01, @ooiuuii, @wuqxuan, @645648406-max, @zw-xysk, @ZengWen-DT, and @adinballew.
-- **Codex and approval flows:** report ChatGPT authentication correctly, rename destructive approval mode to `ask`, classify `get_goal` read statuses accurately, and derive terminal-idle timeouts from the explicit run deadline. (#91240, #98501, #98659, #85296) Thanks @849261680, @ukstem, @kevinslin, @yetval, @alkor200, @vincentkoc, and @alkor2000.
-- **Configuration and plugin health:** restrict config traversal to owned properties, preserve config-health recovery state, surface unloadable channel plugins, preserve defaulted provider base URLs during patches, validate bundled plugin updates by manifest contract, resolve public artifacts from installed plugin roots, and retain legacy ClawHub families where required. (#99846, #99728, #96397, #98396, #98010, #98819, #98249) Thanks @vincentkoc, @zenglingbiao, @joshavant, @jalehman, @ccbridle, @849261680, @momothemage, @weltmaister, @LiLan0125, @herove, @amknight, @KelTech-Services, and @Patrick-Erichsen.
-- **Runtime process safety:** prevent unhandled child-stream errors in SSH tunnels, supervisors, and MCP stdio transports; keep auto-replies from waiting on transcript mirroring; and avoid splitting Unicode characters in approval previews and LINE outbound fields. (#99800, #99802, #99803, #99549, #99566, #98994) Thanks @cxbAsDev, @vincentkoc, @Shagrat2, @mikasa0818, and @LEXES7.
-- **Node runtime compatibility:** installers, the CLI launcher, doctor, and the macOS app now reject incompatible Node 23 runtimes and guide users toward supported Node 22 or 24 releases. (#99832) Thanks @vincentkoc and @fuller-stack-dev.
-- **SQLite WAL safety:** require Node releases with a patched SQLite runtime, verify the loaded library before opening state databases, and make installers upgrade and validate unsafe runtimes across supported platforms. (#106065) Thanks @vincentkoc.
-- **Installer temporary-file cleanup:** remove Node staging directories and pnpm workspace rewrite files when downloads or rewrites fail. (#103725) Thanks @SebTardif.
-- **QQBot media delivery:** scope sandbox-generated media sends to the active session's workspace so `/workspace/...` and relative generated-file paths resolve safely across QQBot media tags, structured payloads, and streaming delivery. (#92872) Thanks @zhangguiping-xydt and @sliverp.
+Responsive layouts keep chat history and controls usable on phones, tablets, short landscape screens, and large desktops. Keyboard and focus behavior, contrast, assistive labels, copying, scrolling, and touch targets are more consistent, while navigation, pairing, voice, schedule, and status text reaches more supported languages.
-### Complete contribution record
+- New Control UI chats now receive concise sidebar titles from their first message, and operators can route dashboard, Telegram topic, and Discord thread title generation through a smaller `utilityModel`. [#87643](https://github.com/openclaw/openclaw/pull/87643) Thanks @juliangsm, @zhangguiping-xydt.
+- Paired administrators can now create a mobile setup QR or copyable code from Control UI Nodes and use it to connect an official iOS or Android app. [#94672](https://github.com/openclaw/openclaw/pull/94672) Thanks @bkudiess, @douhualili.
+- Control UI now makes conversations easier to create, find, and switch from a populated session sidebar, while keeping context pressure and provider quota information close at hand. [#99289](https://github.com/openclaw/openclaw/pull/99289) Related [#99288](https://github.com/openclaw/openclaw/issues/99288).
+- The Control UI sidebar now focuses on sessions and a few default destinations while letting users pin their preferred pages and keep those choices across reloads. [#100296](https://github.com/openclaw/openclaw/pull/100296)
+- The redesigned Control UI composer keeps attachments, provider and model selection, voice, run state, and message actions clearer and more stable across mobile and desktop layouts. [#100461](https://github.com/openclaw/openclaw/pull/100461) Thanks @fuller-stack-dev.
+- Control UI Talk users can choose and refresh a microphone on narrow screens and read clear permission guidance when browser access is blocked. [#101377](https://github.com/openclaw/openclaw/pull/101377) Thanks @fuller-stack-dev.
+- Control UI chat can now show multiple resizable sessions side by side or stacked, preserve the pane layout across reloads, and keep the active pane usable on narrow screens. [#100754](https://github.com/openclaw/openclaw/pull/100754)
+- The Control UI now has a live Tasks page where operators can inspect active and recent background work, open its session, refresh details, and cancel queued or running tasks when authorized. [#100789](https://github.com/openclaw/openclaw/pull/100789)
+- Session lists across web and mobile now support pinned and custom groups, shared read and unread status, background-output indicators, transcript forking, and in-place rename, archive, move, and delete actions. [#100814](https://github.com/openclaw/openclaw/pull/100814)
+- The Control UI Sessions page now fits more useful status and actions on a typical screen, with row details opening to reveal labels, tuning controls, and checkpoint history instead of forcing routine sideways scrolling. [#100943](https://github.com/openclaw/openclaw/pull/100943)
+- Control UI users can drag a session directly into the current pane or onto any side to create a split, with a preview showing where it will land. [#101191](https://github.com/openclaw/openclaw/pull/101191)
+- Operators can configure token or full per-reply usage footers once with `messages.responseUsage`, while users can turn them off or reset a session to the inherited default. [#89762](https://github.com/openclaw/openclaw/pull/89762) Thanks @marvinthebored, @obviyus, @peetiegonzalez.
+- The Control UI Usage page now makes recent estimated costs, daily values, and each provider, model, agent, or channel's share easier to compare without repeated reloads or hovering. [#100432](https://github.com/openclaw/openclaw/pull/100432)
+- The Usage page now shows provider-reported plans, quotas, reset times, balances, spending, and budgets alongside OpenClaw session analysis, including OpenRouter and Venice coverage. [#100520](https://github.com/openclaw/openclaw/pull/100520)
+- Control UI Usage can now show Anthropic and OpenAI daily spend, tokens, requests, top models, and billing categories for today, seven days, and thirty days when admin credentials are configured. [#100672](https://github.com/openclaw/openclaw/pull/100672)
+- Daily token and cost charts now include zero-activity days across bounded date ranges, so 7-day, 30-day, and 90-day views show the full calendar period instead of shrinking around active days. [#81467](https://github.com/openclaw/openclaw/pull/81467) Thanks @adapepper.
+- All-agent cost reports on large installations now limit concurrent Gateway work so the dashboard is less likely to slow down, time out, or add memory pressure. [#101589](https://github.com/openclaw/openclaw/pull/101589) Thanks @vincentkoc, @zw-xysk.
+- Hovering or keyboard-focusing a public GitHub issue or pull request in Control UI chat now previews its status, title, author, activity, comments, and change size without leaving the conversation. [#100434](https://github.com/openclaw/openclaw/pull/100434)
+- File paths in Control UI chats are now clickable, opening a searchable syntax-highlighted preview at the cited line with options to reveal, copy, or open the file in a supported editor. [#100679](https://github.com/openclaw/openclaw/pull/100679)
+- Control UI connection failures now show actionable messages such as "Pairing required" instead of replacing them with a generic gateway disconnect. [#54758](https://github.com/openclaw/openclaw/pull/54758) Thanks @ruanrrn.
+- Control UI sessions using full verbose output now open tool inputs and results by default, reducing repeated clicks during debugging and review. [#74398](https://github.com/openclaw/openclaw/pull/74398) Thanks @samrusani.
+- The Control UI context indicator now remains visible with an approximate cached total while a response is active, without using stale data for urgent warnings or the Compact action. [#89772](https://github.com/openclaw/openclaw/pull/89772) Thanks @bladin.
+- Control UI and WebChat no longer let a non-terminal internal tool failure dominate the transcript with a red error banner after the assistant has already produced a normal final answer. [#90122](https://github.com/openclaw/openclaw/pull/90122) Thanks @harjothkhara.
+- A default agent selected in the Control UI now remains selected after refresh without saving unrelated unfinished settings. [#91457](https://github.com/openclaw/openclaw/pull/91457) Thanks @zengwen-dt.
+- Segmented streaming replies in Control UI WebChat now stay under one assistant avatar and footer instead of appearing as several separate responses. [#92063](https://github.com/openclaw/openclaw/pull/92063) Related [#63956](https://github.com/openclaw/openclaw/issues/63956). Thanks @contentfree, @harjothkhara.
+- Dashboard WebChat users can right-click a completed message and reply with visible quote context instead of manually copying and formatting it. [#92654](https://github.com/openclaw/openclaw/pull/92654) Thanks @programmingwtf, @vincentkoc.
+- After an update installs, the Control UI now says when a Gateway restart is already in progress instead of making the Update button appear unresponsive. [#93082](https://github.com/openclaw/openclaw/pull/93082) Thanks @goutamadwant.
+- Live tool-using replies in Control UI WebChat now keep the assistant's introduction ahead of the tool card, even when browser and Gateway clocks differ. [#93184](https://github.com/openclaw/openclaw/pull/93184) Thanks @pick-cat.
+- Control UI Quick Create now lets users choose a model for an agent-turn cron job and shows whether existing jobs use that model or the default. [#95341](https://github.com/openclaw/openclaw/pull/95341) Thanks @ly85206559.
+- Control UI WebChat can now show Codex preamble and commentary while tools are running, with a choice to hide or retain that progress after the final answer. [#95708](https://github.com/openclaw/openclaw/pull/95708) Thanks @obviyus, @ragesaq.
+- Long reply IDs containing emoji or other supplementary characters now remain valid when shortened for WebChat and Gateway reply directives instead of being cut into malformed text. [#96938](https://github.com/openclaw/openclaw/pull/96938) Thanks @ly-wang19.
+- Long tool activity details now remain readable when shortened for chat, UI, or logs, even when an emoji or other supplementary character falls at the cutoff. [#96958](https://github.com/openclaw/openclaw/pull/96958) Thanks @bartok9, @ly-wang19, @vincentkoc.
+- WebChat now shows long provider and model names together with the selected reasoning level in the composer, while narrow screens retain a sensible overflow limit. [#96990](https://github.com/openclaw/openclaw/pull/96990) Thanks @maweibin, @xiayingren123.
+- Agents can use targetless `message.send` for progress or intermediate updates in the current WebChat without an explicit destination. [#97167](https://github.com/openclaw/openclaw/pull/97167) Related [#96840](https://github.com/openclaw/openclaw/issues/96840). Thanks @mantiscartography, @zhangguiping-xydt.
+- New Control UI chats now use the selected model's current context window instead of inheriting an outdated, smaller limit from a parent session. [#97332](https://github.com/openclaw/openclaw/pull/97332) Thanks @galiniliev.
+- WebChat stays on the newest reply when assistant audio or video finishes loading, while respecting readers who intentionally scrolled upward. [#97575](https://github.com/openclaw/openclaw/pull/97575) Thanks @turbotheturtle.
+- Control UI pages for multiple Gateways on one domain now stay connected to the Gateway named by their path instead of reusing a sibling page's saved destination. [#97665](https://github.com/openclaw/openclaw/pull/97665) Thanks @alix-007.
+- `/pair qr` now delivers a scannable code in Telegram and Control UI or a readable code in the TUI without storing the one-time setup secret in chat history. [#97933](https://github.com/openclaw/openclaw/pull/97933) Thanks @joshavant.
+- Expired `/pair qr` cards in Control UI now clearly say the code is unusable and direct users to generate a fresh one. [#98049](https://github.com/openclaw/openclaw/pull/98049) Related [#98039](https://github.com/openclaw/openclaw/issues/98039). Thanks @ooiuuii.
+- Expired mobile-pairing codes now explain how to run `/pair qr` again in the selected language. Sources: [bb4afe4](https://github.com/openclaw/openclaw/commit/bb4afe40ae6dbd1c711d22cdaee0b36cf404e5f8), [da9308d](https://github.com/openclaw/openclaw/commit/da9308ddb73113b54c860eafe8d8c2a81b860e41), [dfaec18](https://github.com/openclaw/openclaw/commit/dfaec1888d7ab3f5464ddd5a4a0b6f9fa9cfdb68), [6b7986e](https://github.com/openclaw/openclaw/commit/6b7986e14e00978e4a0b30faf324b3a21f35c717), [21af6e7](https://github.com/openclaw/openclaw/commit/21af6e7b19bfcea5da47316bac973eeb2d211ce8), [4e62124](https://github.com/openclaw/openclaw/commit/4e621240e8da1783657b87ea0c53a750274ea377), [6cd0106](https://github.com/openclaw/openclaw/commit/6cd0106bbc20b9d42a3d714f09e3ced3607fb208), [a72a641](https://github.com/openclaw/openclaw/commit/a72a64136ea047a05a0558f41760b57480ae5e5e), [a143ae4](https://github.com/openclaw/openclaw/commit/a143ae4e7dfea84b209948cd26044b8d8aec77e3), [cd30b1c](https://github.com/openclaw/openclaw/commit/cd30b1c3eeef9eb1b20b858aebb805698cded6f2), [f69e27a](https://github.com/openclaw/openclaw/commit/f69e27afa2b4fb99e169c51a49f39c3fb7e09c21), [ccddbee](https://github.com/openclaw/openclaw/commit/ccddbeea6a104fdf292a9d6ba2e8cca60dd21631), [9ed03df](https://github.com/openclaw/openclaw/commit/9ed03df44d812ccb14b2e69897be7e3209b65770), [f84243f](https://github.com/openclaw/openclaw/commit/f84243fe3fb4d83adb97e88baf607329ab9e9aa2), [3d06ee9](https://github.com/openclaw/openclaw/commit/3d06ee9ed78e946cc02d5b7af9e974c331e60e96), [9bd071e](https://github.com/openclaw/openclaw/commit/9bd071ead3d14e533e619acac075dba2c40bc9ec), [405b7a5](https://github.com/openclaw/openclaw/commit/405b7a52c159f996fc9a7dfc3bc899e2f3411ba0), [1a160ce](https://github.com/openclaw/openclaw/commit/1a160cec093e48141912e8b2f92a5c5ea007e6b5).
+- Control UI now shows channel-triggered agent runs as in progress, so users can tell that messages from channels such as Weixin are actively being handled. [#98257](https://github.com/openclaw/openclaw/pull/98257) Thanks @scotthuang.
+- The Control UI workspace rail now gives long Project files lists their own scrollbar so files remain browsable without spilling off screen. [#98646](https://github.com/openclaw/openclaw/pull/98646) Related [#98566](https://github.com/openclaw/openclaw/issues/98566). Thanks @645648406-max, @wuqxuan.
+- Session Workspace file paths can now be copied from Chat even when the Control UI runs over plain HTTP or another context without the standard Clipboard API. [#98764](https://github.com/openclaw/openclaw/pull/98764) Related [#98759](https://github.com/openclaw/openclaw/issues/98759). Thanks @adinballew, @zengwen-dt.
+- Tool-heavy Control UI chats now use compact expandable activity rows, so commands and results take less space while full details stay one click away. [#99763](https://github.com/openclaw/openclaw/pull/99763)
+- The Control UI now stays fixed during trackpad overscroll on Mac and desktop browsers while chat threads and lists continue scrolling normally. [#99830](https://github.com/openclaw/openclaw/pull/99830)
+- Control UI chat is easier to scan with quieter composer controls, a Faster-to-Smarter reasoning slider, and connection status that no longer competes with persistent version text. [#99838](https://github.com/openclaw/openclaw/pull/99838) Related [#99837](https://github.com/openclaw/openclaw/issues/99837).
+- Mounted deep links, Set Default, authenticated avatars, cron alerts, and Workboard scrolling now behave correctly again across the Control UI. [#100106](https://github.com/openclaw/openclaw/pull/100106)
+- Administrators can now open mobile pairing from any Control UI page or Quick Settings, while non-admin operators continue to see the action disabled with an access explanation. [#100157](https://github.com/openclaw/openclaw/pull/100157)
+- The Control UI now shows a ready mobile-pairing QR code immediately even when the pending-device list is slow, then adds approval requests when they arrive. [#100179](https://github.com/openclaw/openclaw/pull/100179)
+- Control UI users can select and copy tool activity without toggling its row, and failed tools no longer repeat redundant error indicators. [#100199](https://github.com/openclaw/openclaw/pull/100199) Thanks @steipete-oai.
+- The Gateway Dashboard login now fits and behaves better on phones and short windows, with larger touch targets, easier URL entry, and reachable recovery help. [#100208](https://github.com/openclaw/openclaw/pull/100208)
+- Control UI users can organize large session lists by custom group, channel, kind, agent, or date, with persistent assignments and drag-and-drop management. [#100262](https://github.com/openclaw/openclaw/pull/100262)
+- Users can open the Control UI context ring to inspect exact context use, the latest input and output token counts, and the active model without leaving chat. [#100264](https://github.com/openclaw/openclaw/pull/100264)
+- Images returned by tools such as `read` now appear directly in the Control UI conversation instead of only being mentioned in text. [#100295](https://github.com/openclaw/openclaw/pull/100295) Thanks @lzyyzznl, @pandah97, @rquinones84.
+- Control UI tool activity now combines matching calls and results into one consistent row, removes repeated labels and categories, and keeps inputs, outputs, previews, and real errors accessible. [#100318](https://github.com/openclaw/openclaw/pull/100318)
+- The Control UI context panel now shows the latest run's estimated total cost and available input, output, cache-read, and cache-write breakdowns beside the provider and model. [#100379](https://github.com/openclaw/openclaw/pull/100379)
+- The Control UI sidebar now keeps all pinned chats visible alongside nine ordinary recent chats in a more compact, conversation-focused desktop and tablet layout. [#100386](https://github.com/openclaw/openclaw/pull/100386)
+- The Control UI composer now shows reasoning level clearly, keeps Talk and its settings together, and preserves usable model controls on phone and landscape layouts. [#100445](https://github.com/openclaw/openclaw/pull/100445)
+- Control UI Talk now starts from a simpler composer while administrators can set durable provider, transport, timing, and reasoning defaults in Settings. [#100453](https://github.com/openclaw/openclaw/pull/100453)
+- Temporary Gateway disconnects no longer replace an authenticated Control UI page with the login screen, preserving dashboard context while automatic reconnection continues. [#100479](https://github.com/openclaw/openclaw/pull/100479)
+- The Control UI Cron Jobs page now uses compact summaries, clear status cues, expandable details, and an overflow menu so large job lists are faster to review. [#100646](https://github.com/openclaw/openclaw/pull/100646)
+- The Control UI sidebar now keeps recent chats in place while switching, combines search entry points, supports touch session actions, and reduces unnecessary chrome. [#100648](https://github.com/openclaw/openclaw/pull/100648)
+- Images received through Telegram, iMessage, and other channels now reappear inline when users revisit Control UI chat history after a reload. [#100725](https://github.com/openclaw/openclaw/pull/100725) Thanks @sweetcornna, @vergissberlin.
+- The Control UI goal pill now supports pause, resume, clear, inspection, and edit preparation with live timing and token details, while command and TUI users can reword a goal without resetting its budget. [#100736](https://github.com/openclaw/openclaw/pull/100736)
+- The Control UI keeps Overview, Workboard, Agents, and More visible while allowing the session list to use available height and scroll independently. [#100742](https://github.com/openclaw/openclaw/pull/100742)
+- Assistant documents downloaded from the Control UI now keep recognizable original filenames instead of exposing UUID-suffixed staging names. [#100743](https://github.com/openclaw/openclaw/pull/100743)
+- Copying code from a long Control UI reply now keeps the chat at the same reading position instead of jumping upward. [#100807](https://github.com/openclaw/openclaw/pull/100807) Thanks @jvlegod.
+- Desktop Control UI users can choose whether Enter sends or inserts a new line, with Command+Enter or Ctrl+Enter available as the send shortcut and the choice retained for that Gateway. [#100810](https://github.com/openclaw/openclaw/pull/100810) Thanks @moomx, @vincentkoc.
+- Switching Control UI chats no longer unexpectedly moves the selected session to the top, and users can choose stable creation order or recently updated order for the sidebar. [#100927](https://github.com/openclaw/openclaw/pull/100927) Thanks @shakkernerd, @vyctorbrzezowski.
+- Control UI Settings now use consistent `/settings/...` paths while old bookmarks continue to work, making reloads and links more reliable on hosted or reverse-proxied installations. [#100928](https://github.com/openclaw/openclaw/pull/100928) Thanks @vyctorbrzezowski.
+- Control UI navigation now places branding, search, and sidebar controls where desktop and mobile users expect them, with clearer active sessions, compact timestamps, and easier terminal access. [#101017](https://github.com/openclaw/openclaw/pull/101017) Thanks @shakkernerd, @vyctorbrzezowski.
+- The Control UI sidebar collapse control now sits in the sidebar it affects instead of looking like an unrelated topbar or terminal button. [#101038](https://github.com/openclaw/openclaw/pull/101038)
+- Control UI Talk users can choose the system default or any browser-visible microphone beside the Talk button and receive a clear message when a saved device is unavailable. [#101100](https://github.com/openclaw/openclaw/pull/101100)
+- Sidebar session groups can now be renamed, removed without deleting sessions, created while empty, or disabled to restore one flat recent-session list. [#101117](https://github.com/openclaw/openclaw/pull/101117)
+- The Control UI now shows Workboard navigation only when Workboard is enabled and presents a cleaner collapsed sidebar with clearer icons and status spacing. [#101123](https://github.com/openclaw/openclaw/pull/101123)
+- The Control UI now puts search, sidebar access, theme choice, and macOS branding in clearer, more predictable locations with accurate screen-reader labels. [#101497](https://github.com/openclaw/openclaw/pull/101497)
+- Temporary Gateway drops no longer push Control UI content down with a full-width banner, so the dashboard stays in place while a compact Retry notice appears. [#101812](https://github.com/openclaw/openclaw/pull/101812)
+- Temporary Gateway disconnects now use a calmer, dashboard-native reconnect pill with the same Retry and accessibility behavior. [#101844](https://github.com/openclaw/openclaw/pull/101844)
+- Control UI commentary settings now use the selected language across the supported translations in this release. Sources: [34badde](https://github.com/openclaw/openclaw/commit/34badde1d983c247cd6b16ad8f5b4e1f9891c0f1), [a9cb866](https://github.com/openclaw/openclaw/commit/a9cb866f62fe9c2f7c8f9a8c3ef1a23cae556781), [ce9166d](https://github.com/openclaw/openclaw/commit/ce9166d1cd8404db51004bbdd5edc95d229788c8), [6b67ada](https://github.com/openclaw/openclaw/commit/6b67ada87ad934f6dd8afbda95830381b3767247), [006c2f7](https://github.com/openclaw/openclaw/commit/006c2f7a2b28433753521f2f9f729ba0032b51ff), [6bdffa5](https://github.com/openclaw/openclaw/commit/6bdffa501bcf8eb1b3b13122b6e2e76149693f07), [b4476ab](https://github.com/openclaw/openclaw/commit/b4476ab72f9d74a946ef0cc963e4d26dab280e45), [5b5c623](https://github.com/openclaw/openclaw/commit/5b5c6237c236b79a894c6d2c1dd4d3bd7e5188f3), [1520d09](https://github.com/openclaw/openclaw/commit/1520d0980741c85407c4e2037dfd5fb9d8f9d1c4), [6140326](https://github.com/openclaw/openclaw/commit/614032676d16bf2dd98030e7925f14ad52f5618e), [75bd44a](https://github.com/openclaw/openclaw/commit/75bd44a94bfb096010273ae14935b9cd90ccc2d3), [c1aeaf9](https://github.com/openclaw/openclaw/commit/c1aeaf9287ec25428ed1e673d869e193e930ba6b), [49edc0a](https://github.com/openclaw/openclaw/commit/49edc0a8af2f06cca21cd6df2abd81a7d99a574c), [cb69ce7](https://github.com/openclaw/openclaw/commit/cb69ce7ba84f7252acd3b87653a0a91b7442f41d), [bb0af61](https://github.com/openclaw/openclaw/commit/bb0af61d20277cf91205e6fe561dc7cccfc8e969), [0dcfbb0](https://github.com/openclaw/openclaw/commit/0dcfbb09d807800585219a4363eb67438b006f40), [db73ece](https://github.com/openclaw/openclaw/commit/db73ece2de77053433a767bcc587348d5a77fef1), [21e6fc9](https://github.com/openclaw/openclaw/commit/21e6fc948b1977b5702ab4c981dacf4d0b3b6de6).
+- The All Sessions sidebar label now uses the selected language across the supported Control UI translations in this release. Sources: [b2c3dc2](https://github.com/openclaw/openclaw/commit/b2c3dc2d55f8bef05f2c8107b9c9b867653aec20), [61347a5](https://github.com/openclaw/openclaw/commit/61347a5054e6c4fce8dee39509c104521b087c7e), [a2674b6](https://github.com/openclaw/openclaw/commit/a2674b6aa4333a6c37ddb3cf7a4c7f52924c37c6), [bbabad4](https://github.com/openclaw/openclaw/commit/bbabad4031c3cab4f0e685fb0fcab183520291ab), [8909289](https://github.com/openclaw/openclaw/commit/89092893fea34eefecca09076d643a5b08f62498), [22552d6](https://github.com/openclaw/openclaw/commit/22552d6e667fa8c35ff236f85d3d3e1aa66872fb), [96e3615](https://github.com/openclaw/openclaw/commit/96e361558e7367f452a2b400fc8120c3a4f6fc72), [452351c](https://github.com/openclaw/openclaw/commit/452351cc7152abdd765445a2109726e5278b153f), [5e9a62c](https://github.com/openclaw/openclaw/commit/5e9a62cc1945850b72d7944e937fef969c9f8ed1), [0a9648b](https://github.com/openclaw/openclaw/commit/0a9648ba4766e0c5da87866d6c7299bb07ede4fa), [a803589](https://github.com/openclaw/openclaw/commit/a8035892b1f04b20f1b8e687094e6e7a18dee45c), [7c30ff8](https://github.com/openclaw/openclaw/commit/7c30ff8a60896a290de07af45d0176d2e30069e5), [e3d2878](https://github.com/openclaw/openclaw/commit/e3d2878af44f7095436d6754f73431b9add676b1), [620f2e3](https://github.com/openclaw/openclaw/commit/620f2e3112016622c59350e4aaf71a0e448d0c1a), [aa0f36c](https://github.com/openclaw/openclaw/commit/aa0f36cb0632ae283493f9d01f3d9819548b5107), [c336256](https://github.com/openclaw/openclaw/commit/c336256309956b18ff4c211ab62481c6dcd59d8b), [64dd688](https://github.com/openclaw/openclaw/commit/64dd68899e6b9f8b15c9a3c533e470ba6e36d7a5), [e2ecbc8](https://github.com/openclaw/openclaw/commit/e2ecbc85b7fe30b3096f86ba9cb189fb43807850).
+- The Control UI mobile-pairing flow now appears in the selected language across 18 supported locales instead of mixing localized screens with English setup text. [c78b0d5](https://github.com/openclaw/openclaw/commit/c78b0d59f5a2becf7e3e0f0bb5d470f72e8526ed)
+- A failed Control UI login or Gateway connection now immediately shows the error, recovery steps, and relevant documentation link instead of hiding them in a collapsed panel. [f9e194e](https://github.com/openclaw/openclaw/commit/f9e194e4a122f0c142c23f1bc9603466add7eb03)
+- The web sidebar now reliably fills pinned and overflow navigation routes, keeping destinations such as Worktrees available. [55a0012](https://github.com/openclaw/openclaw/commit/55a0012c44b52af2f22982cc85568e6e5d0df5c7) Thanks @vincentkoc.
+- Non-English Control UI users now see translated cron overflow-menu and "run if due" labels, including the assistive label for more actions. [2585d6b](https://github.com/openclaw/openclaw/commit/2585d6b2e8202149576f643259c932406a6f8294)
+- The Control UI microphone-access warning for realtime voice input now appears in the user's selected language. [68c85ef](https://github.com/openclaw/openclaw/commit/68c85effcd1e0a1c65673397a206e53bf7d672ac)
+- The Control UI sidebar now builds cleanly with session grouping and drag-to-split behavior intact after stray merge-conflict text was removed. [0e3ce24](https://github.com/openclaw/openclaw/commit/0e3ce24cc8cd16faa78d87b12b114fcf24a42d87)
+- Hindi and Russian users can now receive matching Control UI translations, and documentation operators can generate those language editions through the existing locale workflow. [689baa5](https://github.com/openclaw/openclaw/commit/689baa5c1e48be2aa31564fd5c3fd21bf4dfb754) Thanks @vincentkoc.
+- During device pairing, `/ pair qr` now follows the same authorized pairing flow as `/pair qr` without starting an agent turn or disrupting the existing Control UI route. [#98262](https://github.com/openclaw/openclaw/pull/98262) Thanks @brokemac79.
+- Opening or reconnecting the Control UI dashboard now uses much less temporary Gateway memory, reducing false `rss_growth` warnings while preserving requested usage totals. [#100054](https://github.com/openclaw/openclaw/pull/100054) Thanks @nianjiuzst.
+- Control UI Settings now shows a remote Gateway's host identity, address, operating system, runtime, uptime, CPU load, memory, and free disk space without requiring SSH. [#100478](https://github.com/openclaw/openclaw/pull/100478)
+- The Control UI now shows execution approvals for supported desktop nodes and rejects pending, unsupported, or policy-blocked requests before they reach the node. [#100505](https://github.com/openclaw/openclaw/pull/100505) Thanks @vincentkoc.
+- A configured `ui.seamColor` now changes Control UI buttons, highlights, selections, and focus rings, while invalid values fall back cleanly. [#93699](https://github.com/openclaw/openclaw/pull/93699) Thanks @dennis-lynch, @goutamadwant.
+- QR codes and other half-block text art in the Control UI now preserve spacing, scroll when needed, and copy with enough padding to remain usable. [#93869](https://github.com/openclaw/openclaw/pull/93869) Thanks @emg110, @vincentkoc.
+- Open Control UI tabs now switch to the active build after a service-worker update, reducing stale JavaScript, CSS, and protocol mismatch errors after upgrades. [#96141](https://github.com/openclaw/openclaw/pull/96141) Thanks @andrewccctechlink, @brokemac79.
+- Chat clients can now match each pending user message to its exact Gateway-confirmed message, reducing duplicate or mismatched bubbles during interleaved turns. [#96273](https://github.com/openclaw/openclaw/pull/96273) Thanks @datus1982, @wyf027.
+- Clicking a cron job's History button now gives immediate feedback and scrolls directly to that job's updated run history. [#96281](https://github.com/openclaw/openclaw/pull/96281) Thanks @wyf027, @yzhong52.
+- Control UI token totals near one million now display as `1.0M` instead of the confusing `1000k`. [#96298](https://github.com/openclaw/openclaw/pull/96298) Thanks @ly-wang19.
+- Usage Mosaic and usage summaries now show near-million token totals as `1.0M` instead of `1000.0K`. [#96450](https://github.com/openclaw/openclaw/pull/96450) Thanks @ly-wang19.
+- The Voice, Model, and Sensitivity controls in Control UI Talk settings now align consistently in one row without duplicate selected-value text disturbing the layout. [#96925](https://github.com/openclaw/openclaw/pull/96925) Thanks @evan-ym.
+- Control UI approval prompts no longer inherit failures from older requests or re-enable controls while the current decision is still being processed. [#98394](https://github.com/openclaw/openclaw/pull/98394) Thanks @haruaiclone-droid.
+- Control UI now stops retrying after detecting an incompatible Gateway protocol and shows the update or reload guidance needed to reconnect. [#98414](https://github.com/openclaw/openclaw/pull/98414) Thanks @haruaiclone-droid.
+- On phones and other short landscape screens, the Control UI composer now scrolls within a bounded area so chat history and all composing controls remain accessible. [#98683](https://github.com/openclaw/openclaw/pull/98683) Related [#98615](https://github.com/openclaw/openclaw/issues/98615). Thanks @jin-li, @qingminglong.
+- The Control UI now retries after a temporary failed load during a Gateway restart or stale-asset transition instead of remaining stuck until the page is refreshed manually. [#99111](https://github.com/openclaw/openclaw/pull/99111) Thanks @zengwen-dt.
+- Large pasted PNG screenshots can now be sent through Control UI webchat without failing during attachment processing. [#99213](https://github.com/openclaw/openclaw/pull/99213) Thanks @jincheng-xydt, @vincentkoc.
+- The Control UI mobile-pairing flow is now fully localized for Hindi and Russian users, from setup-code creation through pending-device management. [#100040](https://github.com/openclaw/openclaw/pull/100040)
+- The Control UI workspace rail now sits flush with the window and uses less space when collapsed, removing the empty strip without overlapping chat. [#100088](https://github.com/openclaw/openclaw/pull/100088)
+- Control UI chat history now hides only exact duplicate final delivery mirrors, leaving legitimate repeated sends, forwards, and distinct replies visible. [#100136](https://github.com/openclaw/openclaw/pull/100136)
+- Control UI chats now leave consistent space above the first message across phones, standard desktops, and tall windows. [#100144](https://github.com/openclaw/openclaw/pull/100144) Thanks @steipete-oai.
+- Control UI Settings now offers a persistent Simple/Advanced switch, cleaner Appearance controls, and a Pending label only when a Context Profile change is actually staged. [#100147](https://github.com/openclaw/openclaw/pull/100147)
+- Control UI tool-call bubbles and error badges now share clean right-edge alignment, so failed activity is easier to scan on phone-sized and desktop chats. [#100163](https://github.com/openclaw/openclaw/pull/100163) Thanks @steipete-oai.
+- OpenAI users now see only the supported Standard and Fast choices in the Control UI speed picker, with inherited Fast mode shown correctly. [#100190](https://github.com/openclaw/openclaw/pull/100190)
+- Short drafts in the Control UI composer no longer show an unnecessary scrollbar gutter, while long drafts still scroll when needed. [#100252](https://github.com/openclaw/openclaw/pull/100252)
+- Clearing a session label now removes the old name promptly from other subscribed Control UI clients without requiring a full refresh. [#100266](https://github.com/openclaw/openclaw/pull/100266)
+- Desktop Control UI users can hover a shortened recent-session name to reveal its hidden tail and distinguish similar conversations without opening each one. [#100276](https://github.com/openclaw/openclaw/pull/100276)
+- The expanded Control UI sidebar no longer repeats provider quota information already available in chat, Overview, and Usage views. [#100356](https://github.com/openclaw/openclaw/pull/100356) Thanks @shakkernerd.
+- Completed Control UI messages now use the timestamp to open token, cache, context, cost, and model details instead of adding a separate Context control to every footer. [#100391](https://github.com/openclaw/openclaw/pull/100391) Thanks @steipete-oai.
+- Autonomous session history now keeps an earlier failed cron or scheduled turn marked as an error even after a later turn succeeds or the page reloads. [#100514](https://github.com/openclaw/openclaw/pull/100514) Thanks @qingminglong.
+- The Control UI Skills page now shows readable Agent and Search labels with aligned filters and correctly sized selection controls. [#100526](https://github.com/openclaw/openclaw/pull/100526) Thanks @evan-ym.
+- After a Control UI reply finishes, the composer now stays on Send despite delayed completed-run state, while a real new run still switches it to Stop. [#100527](https://github.com/openclaw/openclaw/pull/100527) Thanks @tiffanychum.
+- Control UI and Skill Workshop file previews now show a single Escape shortcut hint while retaining Escape-to-close behavior. [#100528](https://github.com/openclaw/openclaw/pull/100528) Thanks @xianshishan.
+- Expanded Control UI tool activity no longer repeats the tool name and icon, making completed and in-progress calls quicker to scan. [#100606](https://github.com/openclaw/openclaw/pull/100606)
+- Clearing a Control UI session model override now shows the selected agent's own default model rather than the unrelated global default. [#100719](https://github.com/openclaw/openclaw/pull/100719) Thanks @hyspacex.
+- Assistant-sent documents in WebChat now download with their original server-provided filename, including Unicode names, instead of opening as an unnamed browser document. [#100728](https://github.com/openclaw/openclaw/pull/100728) Thanks @lptrichor.
+- The Control UI now accepts `/steer` guidance during an active run instead of incorrectly replying `No active run`. [#100803](https://github.com/openclaw/openclaw/pull/100803) Thanks @hackerismydream.
+- New Control UI sessions now stay visible at the front of the sidebar after users switch to another chat, without requiring a page refresh. [#100981](https://github.com/openclaw/openclaw/pull/100981) Thanks @shakkernerd.
+- Worktrees management now lives under Control UI Settings instead of occupying a top-level sidebar item, while existing deep links remain valid. [#100995](https://github.com/openclaw/openclaw/pull/100995)
+- Long `/btw` answers in the desktop Control UI now stay within the browser window and scroll inside the result card, while mobile retains full-card scrolling. [#101169](https://github.com/openclaw/openclaw/pull/101169) Thanks @snoutfirst.
+- Finished chats no longer remain stuck with a busy spinner in the Control UI sidebar, even when an older Gateway update arrives afterward. [#101293](https://github.com/openclaw/openclaw/pull/101293) Thanks @fuller-stack-dev.
+- Large Skill Workshop support files now scroll, switch, filter, wrap, and copy without freezing or severely slowing the Control UI. [#101319](https://github.com/openclaw/openclaw/pull/101319) Thanks @shakkernerd, @xianshishan.
+- Users can stay signed in to multiple path- or query-routed Control UI gateways on one HTTPS origin without one gateway overwriting another's device token. [#101352](https://github.com/openclaw/openclaw/pull/101352) Thanks @fuller-stack-dev.
+- Control UI users can type `/approve` to release a waiting exec prompt without the decision getting queued behind the blocked chat run. [#101532](https://github.com/openclaw/openclaw/pull/101532) Thanks @vincentkoc.
+- Control UI build errors now keep emoji and other supplementary characters intact when command output is shortened for display. [#101591](https://github.com/openclaw/openclaw/pull/101591) Thanks @maweibin.
+- Workboard cards can now be edited, moved, archived, stopped, opened, or deleted directly from the detail drawer, while read-only viewers still see no mutation controls. [#101658](https://github.com/openclaw/openclaw/pull/101658) Thanks @momothemage, @princebansal.
+- The Control UI microphone button is now visually quieter while idle and more distinct while recording, making the current voice state easier to recognize. [#101843](https://github.com/openclaw/openclaw/pull/101843)
+- Users with saved working dashboard credentials no longer see the login screen flash briefly while Control UI reconnects. [#101849](https://github.com/openclaw/openclaw/pull/101849)
+- Typing anywhere in the active Control UI chat now places the first character in the message composer without stealing input from the command palette. [#102210](https://github.com/openclaw/openclaw/pull/102210) Thanks @shakkernerd.
-This audited record covers the complete 66e676d29b92d040716376a75aca32bad655cfac..e0ce12504d428779bb5023d4f1442f4b92261f49 history: 1536 merged PRs. The generation manifest also supplies direct commits as editorial input; the grouped notes above prioritize user impact.
+#### Setup and onboarding
-Shipped baseline exclusions: v2026.6.11 (10 PRs: #87298, #89949, #90811, #92020, #92657, #93466, #93650, #93767, #93810, #97118).
+[Onboarding](https://docs.openclaw.ai/cli/onboard) now offers clearer paths to a usable first chat. Fresh CLI installs enter guided setup, configured installs open the TUI, and conversational Crestodian setup remains optional. Android and macOS guide users through [pairing](https://docs.openclaw.ai/channels/pairing), permissions, local or remote setup, and recovery; macOS can also test detected Claude Code, Codex, Gemini CLI, API-key, and supported provider-catalog choices before saving them. Interrupted authentication or channel setup retains earlier choices, while users without a working model are guided through credential and model selection instead of being sent into an unusable chat. Owners and administrators can also renew an expired Codex or OpenAI login through private Telegram, Web UI, Discord, or Slack commands without SSH access.
-#### Pull requests
+Existing installations receive safeguards before their working state is changed. [Doctor](https://docs.openclaw.ai/cli/doctor) and updates refuse to replace an unreadable configuration, Doctor preserves model tuning while merging retired entries, and [extended-stable updates](https://docs.openclaw.ai/install/updating) retain the selected release channel. Container upgrades complete migrations and plugin repairs before reporting readiness, and unsafe runtimes are stopped before they can open OpenClaw state databases.
-- **PR #96502** fix(moonshot): bound video description JSON response reads. Thanks @hugenshen and @cursoragent.
-- **PR #98249** Preserve legacy ClawHub family for selected plugins. Thanks @Patrick-Erichsen.
-- **PR #93820** fix(imessage): recognize MiniMax mm: reasoning tags in reflection guard (completes #93767). Thanks @Alix-007.
-- **PR #94096** fix(usage): reject inverted startDate-endDate range in usage.cost and sessions.usage. Thanks @Alix-007.
-- **PR #97125** Doctor: expose auth profile findings. Thanks @giodl73-repo.
-- **PR #98256** fix(mcp): require owner for Claude permission replies. Thanks @eleqtrizit.
-- **PR #98142** fix(cli): stop `pairing list` crashing with empty channel enum. Thanks @RomneyDa.
-- **PR #98260** fix(exec): bind Windows allowlist execution path. Thanks @eleqtrizit.
-- **PR #97168** fix(slack): prefer current thread session for inherited outbound replies. Related #96535. Thanks @LiuwqGit and @gorkem2020.
-- **PR #97769** fix(plugins): apply output text transforms to toolcall_delta and toolcall_end events. Related #97761. Thanks @ZOOWH and @get-viti.
-- **PR #96544** fix(doctor): merge colliding model-ref map keys instead of dropping. Thanks @yetval and @vincentkoc.
-- **PR #97177** fix(memory-wiki): gracefully handle unparsable YAML frontmatter in vault scans (#96125). Thanks @SunnyShu0925 and @cow11023.
-- **PR #97167** fix #96840: [Bug]: Targetless message.send fails with 'Action send requires a target' in WebChat despite docs stating source-reply sink should handle it. Thanks @zhangguiping-xydt and @MantisCartography.
-- **PR #98302** fix(ios): advance onboarding step after QR scan. Related #98297. Thanks @joelnishanth and @cursoragent.
-- **PR #96644** fix(anthropic-oauth): bound OAuth token endpoint response reads. Thanks @solodmd.
-- **PR #96397** fix: warn when configured channel plugins cannot load. Thanks @849261680.
-- **PR #96359** test: migrate src/commands tests to shared temp dir helpers. Thanks @xialonglee.
-- **PR #96293** fix(cron): clear agentTurn thinking override by blanking the field. Related #96287. Thanks @ZengWen-DT and @takamasa-aiso.
-- **PR #96058** test: prefer shared temp dir helpers in auto-reply and install-fallback tests. Thanks @xialonglee.
-- **PR #97785** fix(sessions): avoid cross-cwd recent resumes. Related #96542. Thanks @qingminglong and @yetval.
-- **PR #97698** fix(pdf): reject empty parsed page ranges before native analysis. Thanks @zhangguiping-xydt.
-- **PR #97693** fix(discord): bound requestDiscord happy-path response reads to prevent OOM. Thanks @Alix-007.
-- **PR #97683** fix(irc): guard surrogate-range codepoints in \u literal-escape decoder. Thanks @WeeLi-009.
-- **PR #96938** fix(utils): keep reply directive ids unicode-safe. Thanks @ly-wang19.
-- **PR #97857** fix(memory): detect unindexed session transcripts in status mode (fixes #97814). Thanks @zw-xysk and @CHE10X.
-- **PR #98094** fix(android): clarify gateway auth recovery states. Thanks @qingminglong.
-- **PR #98205** test(gateway): add unit tests for node wake state tracking and testing seam. Thanks @zenglingbiao.
-- **PR #98115** fix: surface node approval guidance from devices CLI. Thanks @welfo-beo.
-- **PR #97898** docs: clarify source checkout Node floor. Related #97792. Thanks @lin-hongkuan and @aniruddhaadak80.
-- **PR #94526** test(telegram): add regression test for forum topic message_thread_id with streamed reasoning. Related #89352. Thanks @xialonglee and @pmika.
-- **PR #98145** fix(device-pairing): don't churn requestId on subset re-requests. Thanks @RomneyDa.
-- **PR #98267** fix(system-prompt): move exec-approval + Authorized Senders below cache boundary. Related #98261. Thanks @headbouyJB.
-- **PR #98304** fix: preserve iOS chat line breaks. Related #98028. Thanks @joshavant and @Jabato01.
-- **PR #98187** fix(openrouter): send explicit auth headers. Related #97934. Thanks @sunlit-deng and @laurencebrown.
-- **PR #95708** fix: show WebChat preamble progress during tool activity. Thanks @ragesaq.
-- **PR #98210** fix(gateway): iOS Talk treats SecretRef-backed API keys as missing. Related #98209. Thanks @ooiuuii.
-- **PR #98009** test(infra): add unit tests for SQLite number normalization. Thanks @dwc1997.
-- **PR #98087** test(config): add unit tests for resolveExecCommandHighlighting. Thanks @solodmd.
-- **PR #98219** test(utils): add unit tests for chunkItems. Thanks @zenglingbiao.
-- **PR #98093** fix(core): propagate caller env PATHEXT through isExecutableFile on Windows. Thanks @wendy-chsy.
-- **PR #97973** fix(matrix): guard JSON.parse against malformed homeserver response bodies. Thanks @lsr911.
-- **PR #97999** fix(sms): guard Twilio JSON.parse against malformed API response bodies. Thanks @lsr911.
-- **PR #98043** Add Swedish mobile app localization. Thanks @yeager.
-- **PR #98144** fix(tui): correct disconnect copy for device scope upgrades. Thanks @RomneyDa.
-- **PR #98240** fix(agents): keep merged delivery routes account-bound. Thanks @yetval.
-- **PR #98226** Redact bare Fireworks API keys. Related #98225. Thanks @ooiuuii.
-- **PR #98319** docs: publish release notes for v2026.6.11. Thanks @hannesrudolph.
-- **PR #98257** fix: show in-progress status for channel runs. Thanks @scotthuang.
-- **PR #97931** fix(gateway): keep provider-owned CLI sessions across the daily default reset. Thanks @yetval.
-- **PR #98325** docs: refresh docs map for v2026.6.11. Thanks @hannesrudolph.
-- **PR #97929** fix(auto-reply): stop level directives from eating the next message word. Thanks @yetval.
-- **PR #97928** fix(agents): estimate harness role sizes in context guard char estimator (fixes #97927). Thanks @liuhao1024 and @yetval.
-- **PR #97861** fix(compaction): count bashExecution and summary turns in pre-prompt overflow precheck. Thanks @yetval.
-- **PR #97137** doctor: add memory search lint findings. Thanks @giodl73-repo.
-- **PR #97358** Doctor: expose workspace status findings. Thanks @giodl73-repo.
-- **PR #95622** test(qa-lab): harden whatsapp qa scenarios. Thanks @mcaxtr.
-- **PR #98346** fix: prevent skill-creator from bypassing workshop proposals. Related #96054. Thanks @momothemage and @xianshishan.
-- **PR #98169** fix(heartbeat): scope commitment fan-out prompts. Thanks @bdjben.
-- **PR #97366** Doctor: expose device pairing findings. Thanks @giodl73-repo.
-- **PR #98366** fix: Android TLS fingerprint verification times out on slow handshakes. Related #98365. Thanks @joshavant.
-- **PR #98353** fix(ios): open app on Chat by default. Thanks @BsnizND.
-- **PR #98352** fix(security): warn on agent skill MCP boundary drift. Thanks @momothemage.
-- **PR #98347** fix: retry image describe fallback models. Thanks @momothemage.
-- **PR #98117** fix(ios): avoid transient duplicate final replies. Related #98116. Thanks @ooiuuii and @joshavant.
-- **PR #98293** fix(gateway): emit stale exec approval followup diagnostics. Thanks @BsnizND.
-- **PR #98376** fix(ios): use Gateway speech providers in Talk. Related #98153. Thanks @Tony-ooo.
-- **PR #66685** Suppress expired exec approval followup warnings. Thanks @pfrederiksen.
-- **PR #98385** fix: show actionable mobile protocol mismatch recovery. Related #98384. Thanks @joshavant.
-- **PR #98146** fix(cli): explain how to recover from device approve deadlock. Thanks @RomneyDa.
-- **PR #98423** improve(ios): clarify Control and Talk visual hierarchy. Related #98397.
-- **PR #98217** fix(doctor): recover legacy cron archive across devices. Thanks @masatohoshino.
-- **PR #98333** feat(openai): add GPT-5.6 series support. Related #98296. Thanks @steipete-oai.
-- **PR #96393** fix(cron): preserve action-required command output. Related #96346. Thanks @snowzlmbot and @nz365guy.
-- **PR #98429** fix(ios): classify TLS fingerprint timeouts. Thanks @joshavant.
-- **PR #98439** fix: Android setup codes accept local mDNS gateway hosts. Thanks @joshavant.
-- **PR #98443** fix(ios): improve light and dark appearance contrast. Related #98440.
-- **PR #97742** fix(llm): preserve structured tool result text across providers. Thanks @snowzlmbot.
-- **PR #97968** fix(status): surface unregistered memory embedding providers. Thanks @masatohoshino.
-- **PR #92237** fix(agents): preserve runtime settings overrides [AI-assisted]. Thanks @sercada.
-- **PR #95888** fix(active-memory): caveat mutable ops facts; mark truncated recall as incomplete. Thanks @spencer2211.
-- **PR #98291** fix(gateway): surface systemd start-limit exhaustion. Thanks @masatohoshino.
-- **PR #90517** fix(gateway): hint missing external plugin for web login. Related #83277. Thanks @TUARAN and @carol-iung.
-- **PR #98369** test(infra): add unit tests for SQLite user_version pragma helper. Thanks @dwc1997.
-- **PR #98340** fix: extension api.exec leaves child processes after timeout. Related #98335. Thanks @ooiuuii.
-- **PR #92063** fix(ui): collapse duplicate assistant groups during segmented streaming. Related #63956. Thanks @harjothkhara and @contentfree.
-- **PR #98354** fix(infra): guard delivery queue inflate against corrupted entry_json. Thanks @Pick-cat.
-- **PR #90566** fix(agents): warn on cron announce skip. Related #68561. Thanks @sahibzada-allahyar and @Mibslee.
-- **PR #98371** fix(ports): validate lsof PID parsing before assignment. Thanks @lzyyzznl.
-- **PR #98356** fix(cron): keep provider-owned CLI sessions across the daily default reset. Thanks @yetval.
-- **PR #98395** test(shared): add unit tests for account enabled guard. Thanks @dwc1997.
-- **PR #98411** fix(agents): recover thinking errors from provider body. Related #98308. Thanks @sunlit-deng and @clearhorizoninvestments.
-- **PR #98494** docs(skills): support variable landable sweep batches. Thanks @vincentkoc.
-- **PR #91240** fix: report Codex ChatGPT status auth. Related #91099. Thanks @849261680 and @ukstem.
-- **PR #98370** test(agents): add unit tests for thinking block detection. Thanks @dwc1997.
-- **PR #96711** test: prefer shared temp dir helpers in config, gateway, cron, crestodian, and state tests. Thanks @xialonglee.
-- **PR #98483** fix: Android QR scan starts gateway pairing. Thanks @joshavant.
-- **PR #95230** fix docs-list-mdx-pages. Thanks @hugenshen.
-- **PR #96322** fix(minimax): bound JSON response reads to prevent OOM. Thanks @lsr911.
-- **PR #95348** fix config-chmod-warning. Thanks @hugenshen and @cursoragent.
-- **PR #95229** fix(copilot): guard against undefined runtime.state during cli-metadata registration. Related #94516. Thanks @sunlit-deng and @cuihaijun.
-- **PR #94636** fix(memory): skip raw snippets during promotion. Thanks @tayoun.
-- **PR #94013** [AI] fix(feishu): guard partial channelRuntime in monitor startup. Thanks @xydt-tanshanshan.
-- **PR #98049** fix: hide expired pairing QR cards in Control UI. Related #98039. Thanks @ooiuuii.
-- **PR #96094** fix(memory): prove live manager recovery after CLI reindex. Related #91167. Thanks @849261680 and @kiagentkronos-cell.
-- **PR #98482** fix: advertise route-aware LAN Control UI links. Thanks @joshavant.
-- **PR #71537** Recover archived (.reset) session transcripts in memory hook + session-logs skill. Thanks @injinj.
-- **PR #96375** docs(config-agents): correct built-in alias table for opus and gpt. Thanks @niks999.
-- **PR #98453** docs(gateway): fix Telegram streaming default in config-channels.md. Thanks @solodmd.
-- **PR #98533** fix: repair hosted CI baseline assertions.
-- **PR #98421** feat(imessage): native poll support — create, read, vote. Thanks @omarshahine and @lobster.
-- **PR #98318** docs(matrix): document missing streaming.progress mode, progress sub-fields, and mentionPatterns config. Thanks @wm0018 and @vincentkoc.
-- **PR #97753** docs(onboard): document 11 missing non-interactive CLI flags. Thanks @wm0018 and @vincentkoc.
-- **PR #97851** fix(mattermost): bound null-body error response reads. Thanks @Pick-cat.
-- **PR #98360** fix(memory-wiki): preserve notes after transient page reads. Related #98345. Thanks @qingminglong and @vincentkoc and @yetval.
-- **PR #98551** test: fix stale core test type failures. Thanks @RomneyDa.
-- **PR #98455** fix(browser): bound error body read in fetchHttpJson to prevent OOM. Thanks @wings1029.
-- **PR #95906** fix(code-mode): surface QuickJS error name and message to the model. Thanks @ZengWen-DT and @vincentkoc.
-- **PR #97901** fix(agents): stop copilot autoreview cleanup crash on Windows. Thanks @paulcam206.
-- **PR #97923** fix(slack): truncate served arg-menu option labels on a surrogate boundary. Thanks @LEXES7.
-- **PR #98010** fix(update): validate bundle plugin payloads by manifest contract. Related #97985. Thanks @LiLan0125 and @herove.
-- **PR #85296** fix(codex): derive terminal-idle watchdog from explicit run timeout. Thanks @alkor2000 and @vincentkoc.
-- **PR #97110** feat(i18n): add native app locale inventory. Thanks @vincentkoc.
-- **PR #98396** fix: allow config.patch with defaulted provider baseUrl. Related #98270. Thanks @momothemage and @weltmaister.
-- **PR #98503** fix(usage-bar): use Object.hasOwn instead of in operator to avoid prototype chain pollution. Related #98466. Thanks @chenyangjun-xy and @zhangLei99586.
-- **PR #97111** feat(android): localize core gateway surfaces. Thanks @vincentkoc.
-- **PR #97630** fix(media): normalize Windows inbound paths case-insensitively. Thanks @VectorPeak.
-- **PR #82638** fix(agents): skip implicit provider discovery when models.mode is 'replace' [AI-assisted]. Related #66957. Thanks @eldar702 and @wangzhengshu.
-- **PR #87917** fix sessions json lineage metadata. Related #80286. Thanks @zhangguiping-xydt and @islandpreneur007.
-- **PR #93639** fix(message-tool): apply messages.responsePrefix to outbound sends. Thanks @ZengWen-DT.
-- **PR #94440** fix: #94432 classify Cloudflare challenge 403 as upstream_html instead of auth_html. Thanks @lzyyzznl and @pbm9z95m6z-hue.
-- **PR #98119** fix: reduce Docker build memory pressure. Related #98118. Thanks @zyzo.
-- **PR #97679** feat(node): add --context-path flag to node run/install for reverse-p…. Related #97678. Thanks @wm0018.
-- **PR #98339** fix(irc): classify host-less nick!user allowlist entries as mutable. Thanks @yetval.
-- **PR #97662** fix(matrix): bound raw transport response reads to prevent OOM. Thanks @Alix-007.
-- **PR #98137** fix: hoist timer declaration to avoid TDZ ReferenceError in abortable delay. Thanks @zhangLei99586.
-- **PR #98134** fix: clear timeout timer in Tailscale binary probe Promise.race. Thanks @zhangLei99586.
-- **PR #97989** fix(sms): stop internal tool-trace banners from reaching SMS replies. Thanks @ZengWen-DT.
-- **PR #97972** fix(browser): CDP auth fails with percent-encoded credentials. Thanks @VectorPeak.
-- **PR #98063** fix(reply): suppress tool-error progress delivery when messages.suppressToolErrors is set. Thanks @moeedahmed.
-- **PR #94964** fix(reload): cancel deferred channel reload on in-process restart. Related #79487. Thanks @lzyyzznl and @tseller.
-- **PR #98598** fix: restore main lint after timer repairs. Related #98462, #98464. Thanks @zhangLei99586.
-- **PR #98587** fix(slack): guard relay WebSocket frame JSON.parse against malformed input. Thanks @lsr911 and @vincentkoc.
-- **PR #90030** fix(memory-core): skip qmd zero-hit search sync. Related #90023. Thanks @sahibzada-allahyar and @ruben2000de.
-- **PR #98493** fix(transcripts): close readline interface and destroy read stream on error exit. Related #98467. Thanks @wangmiao0668000666 and @zhangLei99586.
-- **PR #98497** fix(cli): show exit code when plugin npm install returns empty output. Thanks @Sanjays2402 and @vincentkoc.
-- **PR #97112** feat(apple): localize core native app surfaces. Thanks @vincentkoc.
-- **PR #98610** fix: restore tooling CI after transcript test addition.
-- **PR #77539** fix(subagent): preserve steered task text on restart redispatch. Thanks @amittell.
-- **PR #97113** feat(i18n): refresh all native locale artifacts. Thanks @vincentkoc.
-- **PR #98620** feat(doctor): warn about in-flight cron jobs. Thanks @masatohoshino.
-- **PR #98605** test(shared): add unit tests for human-readable list formatting. Thanks @dwc1997.
-- **PR #97348** feat(autoreview): support cursor-agent engine. Thanks @hxy91819.
-- **PR #95943** fix(cron): preserve provider/model on isolated-run timeout row. Related #95873. Thanks @ZengWen-DT and @cursoragent and @luke-renjoy.
-- **PR #94149** fix(status): bound systemd service probes so status cannot hang on a wedged systemctl (#84698). Thanks @ZengWen-DT and @cursoragent and @zus-assistant.
-- **PR #88159** fix(cli): retry logs.tail after journal fallback in logs follow. Thanks @anyech and @vincentkoc.
-- **PR #98508** fix(update-check): bound npm registry JSON response read to prevent OOM. Thanks @lzyyzznl.
-- **PR #98496** fix(tlon): bound error response body reads to prevent OOM. Thanks @Pandah97.
-- **PR #98554** fix(openai): bound embedding batch file downloads. Thanks @sunlit-deng and @vincentkoc.
-- **PR #98652** fix: stop invalid message timeouts from stalling.
-- **PR #77973** fix(gateway): cap agentRunCache to prevent unbounded growth under run fan-out. Related #77976. Thanks @fede-kamel and @vincentkoc.
-- **PR #98525** fix(agents): time out local streams without first event. Thanks @osolmaz.
-- **PR #94022** fix(cron): persist startup catch-up deferral ids in service state to prevent read-RPC clobber. Related #93935. Thanks @RichChen01 and @vincentkoc and @yetval.
-- **PR #98623** fix: media tools skip env-key provider plugins when auto-selecting models. Thanks @medns.
-- **PR #98665** fix(claude-cli): return updatedInput in can_use_tool allow response for Claude Code 2.1. Related #95171. Thanks @yetval and @carterdawson.
-- **PR #94250** fix(feishu): send blocks as independent messages when blockStreaming is enabled. Related #55027. Thanks @xialonglee and @vincentkoc and @ZichaoLong.
-- **PR #93379** fix(whatsapp): thread authDir through command authorization and owner bypass for LID JID resolution. Related #77755. Thanks @xialonglee and @jiveshkalra.
-- **PR #98646** fix: keep workspace rail file sections scrollable. Related #98566. Thanks @wuqxuan and @645648406-max.
-- **PR #98602** fix: iOS Talk fallback settings opens Voice & Talk. Related #98593. Thanks @PollyBot13.
-- **PR #98611** fix(ui): add overflow-y:auto to workspace rail sections to prevent file list overflow (fixes #98566). Thanks @zw-xysk and @645648406-max.
-- **PR #98619** fix(qa-lab): credential lease requests fail on oversized Convex broker responses. Thanks @ZengWen-DT.
-- **PR #94326** fix(memory-wiki): disambiguate the reserved index page stem for synthesis and ingest. Thanks @yetval and @vincentkoc.
-- **PR #98659** fix(codex): classify get_goal read statuses as successful dynamic tool calls. Thanks @yetval.
-- **PR #96856** fix(codex): successful sessions_spawn and goal tool results recorded as failures. Thanks @nxmxbbd.
-- **PR #98660** fix(inworld): guard voices JSON.parse against malformed API response bodies. Thanks @solodmd.
-- **PR #95430** fix(embedded-agent-runner): pump async streamFn through pumpStreamWithRecovery for mid-stream error recovery. Related #95429. Thanks @lzyyzznl and @vincentkoc and @alexelgier.
-- **PR #98644** fix: tool summaries preserve emoji truncation boundaries. Thanks @ZengWen-DT.
-- **PR #80928** fix(telegram): suppress fallback reply when plugin command returns suppressReply: true. Related #80756. Thanks @alexuser and @UnClouded77.
-- **PR #98701** fix: prevent agents-tools message test timeouts.
-- **PR #92877** fix(usage): make built-in footer easier to wrap on Telegram. Thanks @Marvinthebored.
-- **PR #98126** Restore Telegram /steer for active Codex runs. Related #81594. Thanks @100yenadmin and @Kyzcreig.
-- **PR #92037** feat(cron): on-exit schedule — wake on a watched command's exit. Thanks @anagnorisis2peripeteia.
-- **PR #98452** feat(ios): modernize the app with iOS 26 Liquid Glass.
-- **PR #98006** Add Telegram /login Codex pairing flow. Thanks @100yenadmin.
-- **PR #98735** fix(telegram): preserve rich forwarded message text. Thanks @obviyus.
-- **PR #97962** refactor(qa): use transport-native actions in flow scenarios. Thanks @RomneyDa.
-- **PR #98726** fix(nvidia): use Nemotron Super 1M context. Thanks @eleqtrizit.
-- **PR #98691** fix(imessage): shed emoji anywhere in poll-vote echo match. Thanks @omarshahine.
-- **PR #97174** Fix Telegram plugin callback routing. Thanks @goldmar.
-- **PR #89597** fix: migrate QQBot credential backups to SQLite KV.
-- **PR #98536** feat: prepare scoped conversation capability profiles.
-- **PR #92274** fix(agents): classify embedded prompt lock error as permanent announce failure. Related #91527. Thanks @fsdwen and @zackchiutw.
-- **PR #98102** fix(telegram): durably retry inbound media dropped during restart (#98076). Thanks @luoyanglang and @DaveArcher18.
-- **PR #98755** fix(cron): detach session-targeted runs. Related #98121. Thanks @obviyus and @EthanSK.
-- **PR #96065** fix(install): manage config-secretref env refs via OPENCLAW_SERVICE_MANAGED_ENV_KEYS. Thanks @Darren2030 and @obviyus.
-- **PR #98666** fix: diagnose Windows LAN Gateway firewall blocks. Thanks @joshavant.
-- **PR #98501** fix(codex): rename destructive approval mode to ask. Related #98499. Thanks @kevinslin.
-- **PR #98775** fix(telegram): survive transient getUpdates errors and stop per-send cache rewrites. Related #98772, #98773. Thanks @obviyus.
-- **PR #98776** fix(telegram): back off, dead-letter, and tombstone spooled updates so poison messages cannot block or duplicate. Related #98774. Thanks @obviyus.
-- **PR #96454** feat(cli): openclaw attach — launch an external harness bound to a gateway session. Thanks @anagnorisis2peripeteia and @obviyus.
-- **PR #98786** fix(telegram): final replies no longer drop on rejected rich entities, captions, quotes, or long flood waits. Related #98778. Thanks @obviyus.
-- **PR #97496** Doctor: expose channel plugin blocker findings. Thanks @giodl73-repo.
-- **PR #98792** fix(ci): restore docs and test type checks.
-- **PR #98736** improve(ios): simplify Talk controls and composer alignment.
-- **PR #98183** fix(gateway): distinguish reachable gateway from failed status probe. Thanks @masatohoshino.
-- **PR #98808** docs(telegram): move maintainer decisions into scoped AGENTS.md with reliability invariants. Thanks @obviyus.
-- **PR #98138** fix: guard setDeep against empty keys array in Chrome profile decoration. Thanks @zhangLei99586.
-- **PR #92283** fix(agents): don't inject A2A turns into isolated-cron sessions_send (#92257). Thanks @harjothkhara and @vincentkoc and @nailujac.
-- **PR #98812** fix(codex): preserve plugin app approvals in side conversations.
-- **PR #97889** fix(discord): guard JSON.parse against malformed API response bodies. Thanks @lsr911.
-- **PR #98689** fix(wizard): reject loose gateway port input. Related #98681. Thanks @qingminglong.
-- **PR #98720** fix(nostr): clear per-relay publish timeout timer to prevent dangling handles. Related #98463. Thanks @wangmiao0668000666 and @zhangLei99586.
-- **PR #98787** fix(memory-wiki): retry transient existing-page reads in wiki_apply and chatgpt import. Thanks @yetval and @vincentkoc.
-- **PR #98818** fix(ci): recover incomplete Swift build caches.
-- **PR #98811** feat(ios): modernize navigation and settings. Related #98803.
-- **PR #98843** docs: update mobile app release messaging. Thanks @joshavant.
-- **PR #93209** test: prefer auto-cleaning temp dir helper. Thanks @hxy91819.
-- **PR #98789** fix(telegram): sends and actions without an account id ignore the configured defaultAccount. Thanks @yetval.
-- **PR #98806** fix(telegram): webhook updates survive crashes and restarts via durable spooling. Related #98777. Thanks @obviyus.
-- **PR #98688** fix(fal): route grok-imagine and nano-banana-2-lite edits to correct endpoints. Thanks @davenicoll and @vincentkoc.
-- **PR #98891** fix(agents): normalize non-array tool-result content at transcript ingest. Related #98825. Thanks @obviyus and @snowzlmbot.
-- **PR #98781** fix(imessage): poll render vote-cue, cross-run echo suppression, and comment fold. Thanks @omarshahine.
-- **PR #97500** Doctor: expose tool result cap findings. Thanks @giodl73-repo.
-- **PR #98769** fix: Telegram replies duplicate recent context after sent replies. Related #98767. Thanks @rabsef-bicrym.
-- **PR #98933** fix(agents): stop gateway crash from wedged claude-cli turns and persist heartbeat session bindings. Related #98894, #98895. Thanks @obviyus.
-- **PR #98934** fix(agents): recover claude-cli context-overflow sessions and keep retry artifacts alive. Related #98897. Thanks @obviyus.
-- **PR #98908** refactor(agents): fold assistant string normalization into transcript ingest. Thanks @obviyus.
-- **PR #98738** fix(agents): fail fast with attributable reason after MCP stdio session dies mid-run. Thanks @masatohoshino and @vincentkoc.
-- **PR #98879** fix: backup skips volatile cache paths. Related #98865. Thanks @ZengWen-DT and @vincentkoc and @carterstebbins23-spec.
-- **PR #98942** fix(agents): unify claude-cli output classification across live and one-shot paths. Related #98896. Thanks @obviyus.
-- **PR #98932** fix(anthropic): restore Fable 5 Vertex simple completions.
-- **PR #98947** fix(cron): restore persistent session targets.
-- **PR #96523** fix(agents): preserve embedded OpenAI completions usage. Thanks @ly85206559 and @vincentkoc.
-- **PR #98758** perf(build): reduce plugin SDK declaration package size. Related #98757. Thanks @RomneyDa.
-- **PR #98877** fix(mattermost): include later team members in peer directory. Related #98871. Thanks @qingminglong.
-- **PR #98953** feat(ios): refine the chat experience. Related #98929.
-- **PR #98876** fix(terminal): preserve sibling home-prefix paths. Related #98872. Thanks @qingminglong.
-- **PR #98930** feat(ios): PR1 brand color palette overhaul. Thanks @joelnishanth.
-- **PR #94566** fix(android): make offline chat actionable. Thanks @Tosko4.
-- **PR #98955** fix(agents): preserve fresh tool result text under aggregate cap. Related #98874. Thanks @momothemage and @lamkan0210.
-- **PR #98059** [codex] Support Android selected photo access. Thanks @NianJiuZst.
-- **PR #98914** fix(android): return settings details to their originating tab on Back. Thanks @Lokimorty.
-- **PR #98898** fix(ios): back from settings details returns to the originating screen. Thanks @Lokimorty.
-- **PR #98235** fix(feishu): include video upload duration. Thanks @areslp.
-- **PR #98966** fix(discord): gate guild metadata reads [AI]. Thanks @pgondhi987.
-- **PR #98985** fix: clean up iOS About page copy. Related #98943. Thanks @sahilsatralkar.
-- **PR #98856** fix(ios): gateway error shows twice on the Settings Gateway page. Thanks @Lokimorty.
-- **PR #98936** fix: Control row icons use inconsistent row styling (iOS). Related #98916. Thanks @sahilsatralkar.
-- **PR #98040** [codex] Fix Android camera snap cleanup. Thanks @NianJiuZst.
-- **PR #99039** fix(macos): stop runtime config-health sidecar access. Related #98917. Thanks @momothemage and @P51moustache.
-- **PR #92667** ci: add process exec CodeQL security shard. Thanks @hxy91819.
-- **PR #98055** [codex] Gate Android Talk capture starts in background. Thanks @NianJiuZst.
-- **PR #98067** [codex] Cancel Android gateway pending RPCs on close. Thanks @NianJiuZst.
-- **PR #98698** fix(android): show specific gateway auth-recovery reason instead of generic label. Related #98046. Thanks @masatohoshino and @ccaprani.
-- **PR #83826** test(android): poll for stale TLS probe cleanup in auth test. Thanks @NeatGuyCoding.
-- **PR #98983** fix(agents): handle variadic claude --mcp-config and serialize gemini credential staging. Related #98944, #98945. Thanks @obviyus.
-- **PR #99145** fix(auto-reply): suppress room-event notice leaks. Thanks @obviyus.
-- **PR #99144** fix(auto-reply): default room events to silence. Thanks @obviyus.
-- **PR #98608** fix: Mattermost fails to load after configured plugin repair. Related #98564. Thanks @jacobtomlinson.
-- **PR #99143** fix(telegram): keep group history always on. Related #99142. Thanks @obviyus.
-- **PR #99159** fix(agents): claude-cli lifecycle cleanup — loopback fail-loud, exit-0 failover, bounded reseed, image sweep, one prepare cleanup owner. Related #98946. Thanks @obviyus.
-- **PR #98391** Expose disk space doctor lint findings. Thanks @giodl73-repo.
-- **PR #98835** fix(config/sessions): narrow reply-session initialization revision to identity fields. Related #98672. Thanks @moguangyu5-design and @jalehman and @AaronFaby.
-- **PR #99123** fix(android): ignore chat events with missing assistant role in voice text extraction. Thanks @ly85206559 and @cursoragent.
-- **PR #99147** fix(android): preserve split SMS permission grants. Thanks @NianJiuZst.
-- **PR #99107** fix(android): bracket IPv6 hosts in manual gateway URL composition. Thanks @ly85206559 and @cursoragent.
-- **PR #99158** fix: require Android contact and calendar write permissions in onboarding. Thanks @NianJiuZst.
-- **PR #99110** fix(android): strip ws scheme prefix from manual gateway host input. Related #87216. Thanks @ly85206559 and @cursoragent and @ruben2000de.
-- **PR #99212** fix(ci): session concurrency test flakes during child handshake.
-- **PR #94385** fix(feishu): preserve button command values in fallback text and add Feishu comment guidance with callback privacy. Related #69754. Thanks @xialonglee and @1yihui.
-- **PR #98563** fix: route iOS OpenAI realtime Talk through WebRTC. Thanks @PollyBot13.
-- **PR #99204** fix: require Android contact and calendar write permissions. Thanks @NianJiuZst.
-- **PR #99134** fix: OAuth refresh failures report reauth instead of stale success. Related #99120. Thanks @100yenadmin.
-- **PR #99153** fix: clean up Android camera clips on cancellation. Thanks @NianJiuZst.
-- **PR #99118** [codex] fix(memory-lancedb): align apache arrow peer dependency. Related #90295. Thanks @allenhurff and @joshavant.
-- **PR #98066** fix: keep iOS LAN QR pairing authenticated after bootstrap. Related #98064. Thanks @ooiuuii.
-- **PR #99155** fix: stop iOS screen recording after cancellation. Thanks @NianJiuZst.
-- **PR #95973** fix(telegram): explain disabled plugin approval failures. Related #95800. Thanks @MonkeyLeeT and @ChrisBot2026.
-- **PR #99233** fix: ignore test-only network CI guard lines. Thanks @joshavant.
-- **PR #98951** fix: strict guarded fetch fails before managed proxy DNS. Related #98925. Thanks @momothemage and @sandl99.
-- **PR #99137** fix: prevent Voice Wake crash after Talk audio capture. Thanks @PollyBot13.
-- **PR #99052** fix: Update Dark/Light mode UI control appearance. Related #98995. Thanks @sahilsatralkar.
-- **PR #99245** fix(ios): return chat to originating control detail. Thanks @Solvely-Colin.
-- **PR #92602** fix(android): queue node events until gateway connect. Related #79552. Thanks @ashishpatel26 and @hectorrp13.
-- **PR #98277** fix: keep Android gateway settings save idempotent. Thanks @Solvely-Colin.
-- **PR #99256** fix(auto-reply): single canonical group history and deduped turn metadata. Related #99218. Thanks @obviyus.
-- **PR #99259** fix(android): use Bluetooth microphones for voice capture. Related #96241. Thanks @gwtaylor.
-- **PR #98751** test(qa): prove native command targeting across QA transports. Thanks @RomneyDa.
-- **PR #98779** test(qa): cover expanded Crabline bindings. Thanks @RomneyDa.
-- **PR #99262** test(qa): cover Crabline Signal sends. Thanks @RomneyDa.
-- **PR #99261** refactor(shared): establish lazy runtime loader foundation. Thanks @RomneyDa.
-- **PR #99264** test(qa): cover Crabline Mattermost sends. Thanks @RomneyDa.
-- **PR #99265** test(qa): cover Crabline Matrix sends. Thanks @RomneyDa.
-- **PR #98400** Expose heartbeat template doctor lint findings. Thanks @giodl73-repo.
-- **PR #98695** Expose legacy plugin manifest doctor lint findings. Thanks @giodl73-repo.
-- **PR #99278** refactor(shared): consolidate core leaf lazy loaders. Thanks @RomneyDa.
-- **PR #99274** fix(zalo): match native bot identity fields. Thanks @RomneyDa.
-- **PR #99126** test(discord): clarify and guardrail gateway proxy selection. Related #98266. Thanks @svuppala2006 and @joshavant and @sallyom.
-- **PR #99290** feat(ios): add licenses settings screen. Thanks @joshavant.
-- **PR #98907** fix(telegram): distinguish and render streamed reasoning/commentary progress lanes. Thanks @Marvinthebored.
-- **PR #99294** fix(qa): stagger isolated worker startup. Thanks @RomneyDa.
-- **PR #99276** fix(memory-wiki): source imports crash on unreadable pages. Thanks @obviyus.
-- **PR #99296** refactor(shared): consolidate gateway and stateful runtime lazy loaders. Thanks @RomneyDa.
-- **PR #98768** Allow alternate Zalo Bot API roots. Thanks @RomneyDa.
-- **PR #99298** refactor(shared): consolidate Discord Slack and Telegram lazy loaders. Thanks @RomneyDa.
-- **PR #99307** fix(memory-wiki): avoid implicit error coercion. Thanks @RomneyDa.
-- **PR #99306** feat(auto-reply): persist ambient room events as transcript rows. Related #99257. Thanks @obviyus.
-- **PR #99302** refactor(shared): consolidate remaining channel lazy loaders. Thanks @RomneyDa.
-- **PR #99303** test(qa): cover Crabline Zalo transport. Thanks @RomneyDa.
-- **PR #99299** feat(android): add licenses settings screen. Thanks @joshavant.
-- **PR #99220** fix(ios): onboarding Retry Connection does nothing after editing gateway details. Related #99219. Thanks @abdullahtas0.
-- **PR #98749** refactor(shared): consolidate provider and utility lazy loaders. Thanks @RomneyDa.
-- **PR #99355** fix(ci): restore Telegram and plugin SDK guard checks. Thanks @RomneyDa.
-- **PR #88899** fix(android): render chat content through Markdown. Related #88014. Thanks @Pluviobyte and @Iman-Sharif.
-- **PR #99310** test(qa): migrate channel streaming evidence to transport flow. Thanks @RomneyDa.
-- **PR #99350** fix(ios): add Photos permission controls. Related #99046. Thanks @Tony-ooo.
-- **PR #99361** refactor(plugins): consolidate record guards. Thanks @RomneyDa.
-- **PR #99359** refactor(shared): consolidate core record guards. Thanks @RomneyDa.
-- **PR #97208** fix: avoid DeepSeek-native thinking on OpenRouter V4. Related #97196. Thanks @NianJiuZst and @patelmm79.
-- **PR #99385** fix(sessions): scope ambient transcript watermark to session id. Related #99373. Thanks @obviyus.
-- **PR #99389** fix(auto-reply): restore per-turn message-tool delivery contract. Related #99371. Thanks @obviyus.
-- **PR #98269** fix(android): derive Voice readiness from Gateway catalog. Related #98268. Thanks @Solvely-Colin.
-- **PR #92872** fix(qqbot): allow scoped sandbox media sends. Thanks @zhangguiping-xydt and @sliverp.
-- **PR #99414** fix(android): expose exact gateway recovery actions. Related #98045, #98046. Thanks @ccaprani.
-- **PR #99289** feat: session-first sidebar, compact context ring, and warm light theme for the Control UI. Related #99288.
-- **PR #99234** feat(nodes): add auto-discovered Ollama inference. Related #99228.
-- **PR #97095** fix: memory_search honors generic embedding providers. Thanks @849261680.
-- **PR #98841** fix(gateway): include session label in deriveSessionTitle fallback chain. Related #98742. Thanks @SunnyShu0925 and @BSG2000.
-- **PR #99301** fix(feishu): catch unhandled promise rejection in streaming card flush timer. Thanks @lwy-2.
-- **PR #99391** fix(compaction): count nested tool result content. Related #99375. Thanks @LZY3538 and @imchloe92.
-- **PR #99407** fix(daemon): avoid loading full gateway logs during diagnostics. Thanks @sunlit-deng.
-- **PR #99291** Fix/issue 98958 gateway lock fd leak. Related #98958. Thanks @chenyangjun-xy and @zhangLei99586.
-- **PR #99475** fix(ios): contacts.add crashes the app via unfetched CNContactFormatter keys. Thanks @abdullahtas0.
-- **PR #98003** fix(anthropic): wire buildGuardedModelFetch into the Cloudflare createClient branch. Thanks @wangmiao0668000666.
-- **PR #99425** fix: strip conda env marker from host tool runs. Related #99424. Thanks @ooiuuii and @krissding.
-- **PR #99398** fix(cli): reject unsafe sessions tail counts. Thanks @qingminglong.
-- **PR #98855** fix: chat.send no reply when thinking metadata is set. Thanks @jesse-merhi.
-- **PR #98752** Rework Android gateway onboarding setup. Thanks @jesse-merhi.
-- **PR #99446** fix(agents): preserve fd find failures. Thanks @zhangguiping-xydt.
-- **PR #99152** fix(config): use Object.hasOwn instead of in operator in restoreOriginalValueOrThrow. Thanks @zenglingbiao.
-- **PR #99460** fix: redact dotted API key activity previews. Related #99459. Thanks @ooiuuii.
-- **PR #99455** fix: long mobile media recordings time out. Thanks @NianJiuZst.
-- **PR #99410** fix(subagents): match requesterSessionKey when controllerSessionKey differs in list filter. Related #75593. Thanks @sheyanmin and @aaajiao.
-- **PR #98791** feat(signal): show status reactions during inbound replies. Thanks @jesse-merhi.
-- **PR #98683** fix(ui): keep landscape composer compact. Related #98615. Thanks @qingminglong and @jin-li.
-- **PR #99428** fix(logging): redact Telegram bot tokens from timeout URLs. Related #96982. Thanks @xialonglee and @liuhaiyang14.
-- **PR #99217** Preserve Codex output after missing turn completion. Thanks @100yenadmin and @Sedrak-Hovhannisyan and @fuller-stack-dev.
-- **PR #99520** fix(gateway): declare the dev agent required by the gateway e2e session key. Related #99513. Thanks @masatohoshino.
-- **PR #95738** feat(signal): add target aliases. Thanks @jesse-merhi.
-- **PR #98258** improve: make native chat scrolling reader-managed. Related #98255. Thanks @christopheraaronhogg.
-- **PR #99506** fix: keep always-on group fallback messages in dispatch. Related #99457. Thanks @LZY3538 and @zqchris.
-- **PR #89671** fix(google-meet): force English Meet UI via hl=en so automation works on any locale. Thanks @Unayung.
-- **PR #98130** fix(infra): bound jsonl-socket response buffer to prevent OOM. Thanks @Pick-cat.
-- **PR #99526** fix(agents): preserve primitive tool result output. Related #99523. Thanks @snowzlm.
-- **PR #99525** fix(imessage): recognize bare hex group chat identifiers as chat targets. Related #89235. Thanks @MatthewDelprado.
-- **PR #99098** fix: harden native i18n identifier filtering. Thanks @hxy91819.
-- **PR #99099** fix: harden docs map heading rendering. Thanks @hxy91819.
-- **PR #98725** Expose legacy plugin dependency doctor lint findings. Thanks @giodl73-repo.
-- **PR #99595** fix(agents): keep cli session binding facts session-stable. Related #99372. Thanks @obviyus.
-- **PR #90152** fix(telegram): stop duplicate fallback when dispatch fails after final reply. Thanks @zhangguiping-xydt.
-- **PR #98729** Expose stale plugin runtime symlink doctor lint findings. Thanks @giodl73-repo.
-- **PR #99591** fix(android): preserve numeric invoke error codes. Thanks @ly85206559.
-- **PR #98406** Expose WhatsApp responsiveness doctor lint findings. Thanks @giodl73-repo.
-- **PR #99570** fix(android): reject IPv6 zone IDs in gateway endpoint URLs. Thanks @ly85206559 and @cursoragent.
-- **PR #99557** fix(android): filter device and internal sessions from thread picker. Thanks @ly85206559 and @cursoragent.
-- **PR #99568** fix(android): block self-package notification forwarding in allowlist mode. Thanks @ly85206559 and @cursoragent.
-- **PR #99592** fix(android): parse talk directive aliases case-insensitively. Thanks @ly85206559.
-- **PR #99477** fix: avoid iOS node permission prompts. Thanks @NianJiuZst.
-- **PR #99374** improve(qa): standardize script evidence output. Thanks @RomneyDa.
-- **PR #99468** improve: tighten iOS Control row density. Related #99439. Thanks @sahilsatralkar.
-- **PR #99642** test: avoid cross-OS socket close event race. Thanks @RomneyDa.
-- **PR #89967** fix(macos): LaunchAgent starts gateway on external home volumes. Related #87199. Thanks @zhangguiping-xydt and @joshdaynard.
-- **PR #98613** fix(media): guard ffprobe JSON parse against malformed output. Thanks @Pick-cat.
-- **PR #97839** fix: log terminal session persistence failures. Related #97795. Thanks @LZY3538 and @cxbAsDev and @snotty and @lin-hongkuan and @849261680 and @qingminglong and @anyech and @masatohoshino and @Simon-XYDT and @xialonglee and @nankingjing and @aniruddhaadak80.
-- **PR #99247** feat: clarify iOS Location Always permission flow. Thanks @PollyBot13.
-- **PR #98224** fix(auto-reply): strip stray punctuation before silent-reply token detection. Thanks @SunnyShu0925.
-- **PR #97328** fix(google): rotate Gemini API keys for LLM requests. Thanks @MonkeyLeeT.
-- **PR #99661** fix(macos): remote mode fails with managed SSH aliases.
-- **PR #99649** fix(qa): defer partial Crabline recorder rows. Related #99648. Thanks @RomneyDa.
-- **PR #99211** Expose legacy cron store doctor lint findings. Thanks @giodl73-repo.
-- **PR #99629** test(qa): redact script evidence diagnostics. Thanks @RomneyDa.
-- **PR #99647** Fix Slack retry for session init conflicts. Thanks @steipete-oai.
-- **PR #99628** improve: enforce canonical QA scenario ownership. Related #99627. Thanks @RomneyDa.
-- **PR #99632** refactor(qa): simplify transport adapter contracts. Related #99622. Thanks @RomneyDa.
-- **PR #99656** test(qa): use full-turn budget for native stop recovery. Related #99655. Thanks @RomneyDa.
-- **PR #99605** fix(google): bound OAuth token error response reads. Thanks @mushuiyu886.
-- **PR #99679** fix(qa): consume Crabline events without recorder polling. Related #99664. Thanks @RomneyDa.
-- **PR #99687** refactor(infra): consolidate SHA-256 digest helpers. Related #99675. Thanks @RomneyDa.
-- **PR #98796** [AI-assisted] feat(android): add chat command controls. Thanks @IWhatsskill.
-- **PR #99671** refactor: consolidate number coercion callers. Related #99667. Thanks @RomneyDa.
-- **PR #99640** fix: CLI agent session resume churns when owner and non-owner alternate in a group. Related #99633. Thanks @obviyus.
-- **PR #99682** refactor(models): consolidate catalog ref parsing. Related #99674. Thanks @RomneyDa.
-- **PR #99566** fix(exec): avoid splitting surrogate pairs in approval display. Thanks @mikasa0818.
-- **PR #99702** refactor: remove redundant unique-list aliases. Related #99697. Thanks @RomneyDa.
-- **PR #99246** feat(ios): implement branded typography design system. Thanks @joelnishanth and @cursoragent.
-- **PR #99710** fix(build): Docker package preparation misses plugin SDK declarations. Thanks @RomneyDa.
-- **PR #99715** refactor: consolidate image data URL formatting. Thanks @RomneyDa.
-- **PR #98764** fix(ui): copy workspace file paths over plain HTTP. Related #98759. Thanks @ZengWen-DT and @adinballew.
-- **PR #99678** fix(build): forward default exports through stable runtime aliases. Related #99677. Thanks @headbouyJB and @vincentkoc.
-- **PR #99370** fix(file-transfer): don't inline zero-byte files as image content blocks. Thanks @2loch-ness6 and @vincentkoc.
-- **PR #99540** fix(doctor): shell completion install fails doctor when profile is read-only. Related #99237. Thanks @rballiance and @hunglp6d.
-- **PR #99718** refactor(text): consolidate cleanup owners. Thanks @RomneyDa.
-- **PR #98819** fix(plugins): resolve public artifacts from installed plugin roots. Related #98740. Thanks @amknight and @KelTech-Services.
-- **PR #99721** refactor: consolidate async timing helpers. Thanks @RomneyDa.
-- **PR #99722** fix: group agent session resume churns when messages toggle between @-mention and plain. Related #99696. Thanks @obviyus.
-- **PR #99676** refactor: consolidate string reader mechanics. Related #99663. Thanks @RomneyDa.
-- **PR #99705** improve(qa): execute runtime scenarios through Docker. Thanks @RomneyDa.
-- **PR #99231** improve: native iOS look with stock SwiftUI navigation, forms, chat, and talk visualizer. Related #99195. Thanks @marvkr.
-- **PR #99549** fix(auto-reply): don't block reply completion on transcript mirror. Thanks @Shagrat2.
-- **PR #99736** fix(qa): prevent smoke gateways from losing built files. Related #99734. Thanks @RomneyDa.
-- **PR #99658** feat(providers): add ClawRouter routing and quotas. Related #99657.
-- **PR #99238** Expose channel preview warning doctor findings. Thanks @giodl73-repo.
-- **PR #99759** fix(providers): resolve ClawRouter auth-profile models.
-- **PR #99561** fix: keep OpenClaw control tools available when tool_search misroutes. Related #99464. Thanks @100yenadmin and @joshavant.
-- **PR #99750** refactor: consolidate exact boolean coercion. Thanks @RomneyDa.
-- **PR #99753** refactor: consolidate abort primitives. Thanks @RomneyDa.
-- **PR #99426** feat: add slash command picker in chat composer. Thanks @VicZhang6 and @Solvely-Colin.
-- **PR #99771** refactor: consolidate free-port test helpers. Thanks @RomneyDa.
-- **PR #99755** refactor: consolidate policy-free deferred promises. Thanks @RomneyDa.
-- **PR #99719** refactor(net): consolidate URL protocol predicates. Thanks @RomneyDa.
-- **PR #99743** fix: avoid native command QA timeout under CI contention. Thanks @RomneyDa.
-- **PR #99368** fix(qa): prevent qa smoke ci timeouts under gateway concurrency. Thanks @RomneyDa.
-- **PR #99778** refactor(scripts): share regexp literal escaping. Thanks @RomneyDa.
-- **PR #99737** test: add executable runtime fixture canaries. Thanks @RomneyDa.
-- **PR #99735** test(qa): exercise Gateway and MCP scenarios over real transports. Thanks @RomneyDa.
-- **PR #99784** fix(qa): stabilize primary smoke runtime evidence. Thanks @RomneyDa.
-- **PR #99726** fix(onboard): skip unavailable skill installers via lifecycle readiness preflight. Thanks @fuller-stack-dev and @Sedrak-Hovhannisyan.
-- **PR #99793** ci: reuse one package in QA smoke.
-- **PR #99767** feat(macos): install and run the local Gateway automatically. Related #99764.
-- **PR #99820** ci: increase artifact Testbox memory.
-- **PR #99822** feat: soft-resume CLI sessions on prompt drift instead of hard invalidation. Related #99729. Thanks @obviyus.
-- **PR #99129** fix(markdown-core): use Object.hasOwn instead of in operator in parseFrontmatterBlock. Thanks @zenglingbiao and @vincentkoc.
-- **PR #99803** fix(mcp): suppress unhandled error on stderr pipe in stdio transport. Thanks @cxbAsDev and @vincentkoc.
-- **PR #99802** fix(supervisor): suppress unhandled stream errors on child stdout/stderr. Thanks @cxbAsDev and @vincentkoc.
-- **PR #99800** fix(ssh-tunnel): handle spawn error to prevent unhandled rejection crash. Thanks @cxbAsDev and @vincentkoc.
-- **PR #99653** fix(cli): hide synthetic Claude reseed prompts. Related #99646. Thanks @ZOOWH and @vincentkoc and @Jeehut.
-- **PR #99728** fix(config): preserve recovery state during config-health migration. Related #99280. Thanks @joshavant and @jalehman and @ccbridle.
-- **PR #99839** fix(gateway): preserve legacy reseed attachments. Thanks @vincentkoc.
-- **PR #99830** fix: stop rubber-band bounce of the Control UI shell in the Mac app web view.
-- **PR #99851** fix(agents): preserve fallback tool-call hints. Thanks @vincentkoc.
-- **PR #98994** fix(line): truncate outbound altText, location, menu, and code fields on code point boundaries. Thanks @LEXES7 and @vincentkoc.
-- **PR #99846** fix(config): restrict config paths to own properties. Thanks @vincentkoc and @zenglingbiao.
-- **PR #99861** fix(telegram): one outbound rich-HTML normalizer and one rich-to-plain fallback policy. Related #99833. Thanks @obviyus.
-- **PR #99866** fix(telegram): classify inbound events from the canonical mention decision so direct mentions stop lurking. Related #99854. Thanks @obviyus.
-- **PR #99832** fix: reject incompatible Node 23 runtimes. Thanks @fuller-stack-dev.
-- **PR #99243** Polish iOS onboarding and chat critique fixes. Thanks @jcooley8.
-- **PR #99714** perf(usage): shrink durable usage cache entries. Related #99511. Thanks @dexhunter and @wayne524.
-- **PR #99838** feat: declutter the Control UI shell — reasoning effort slider, borderless composer controls, version out of the sidebar. Related #99837.
-- **PR #99600** fix: outbound recovery can replay already sent replies. Thanks @zhangguiping-xydt.
-- **PR #99891** fix(agents): preserve images on CLI fallback. Thanks @vincentkoc.
-- **PR #99821** feat(codex): share native threads across Codex clients. Related #99781.
-- **PR #99893** fix(discord): hide internal Code Mode wait progress.
-- **PR #99850** refactor: consolidate duplicated plugin state and doctor migration plumbing onto SDK seams. Related #99841.
-- **PR #99901** refactor: consolidate core stream cleanup, watchdog locality, and approval text duplication.
-- **PR #99635** feat(whatsapp): add requester-bound MeowCaller calls. Related #99634.
-- **PR #99527** fix(edit): keep mismatch hint truncation unicode-safe. Thanks @mikasa0818.
-- **PR #99902** fix(agents): preserve mixed image attachment order. Thanks @vincentkoc.
-- **PR #99816** fix(agents): derive conversation scope from trusted group facts.
-- **PR #99817** refactor(agents): require one resolved capability profile per run.
-- **PR #99877** fix(slack): preserve time colons in interactive labels. Related #99823. Thanks @qingminglong and @rodja.
-- **PR #99915** feat: allow custom sandbox image tags.
-- **PR #99909** improve: speed up QA report source errors.
-- **PR #99855** fix(transcripts): mark delivery mirrors as artifacts. Thanks @vincentkoc.
-- **PR #99900** refactor(ui): dedupe chat styles and make the styles.css import order real. Related #99899.
-- **PR #99931** fix(slack): warn when bot token authenticates as user. Related #98357. Thanks @ooiuuii.
-- **PR #99879** fix(tui): coalesce busy submit notices. Thanks @vincentkoc.
-- **PR #99940** improve: speed up plugin SDK surface checks.
-- **PR #99944** fix(slack): remove unused unsafe auth fetch helper. Thanks @miorbnli.
-- **PR #99932** refactor: consolidate markdown code fences, error coercion, and byte-identical helper pairs.
-- **PR #99906** fix(anthropic): fall back to Claude Opus 4.8 when Fable 5 safety classifiers decline a request.
-- **PR #99945** test: skip real restart waits in update CLI tests.
-- **PR #99949** fix: improve agent runtime correctness from upstream Pi. Related #99924.
-- **PR #99962** docs: clarify plugin package live proof. Thanks @hxy91819.
-- **PR #99955** [codex] fix(copilot): preserve BYOK bearer auth through proxy. Thanks @hxy91819.
-- **PR #99973** docs: sync plugin package snippets.
-- **PR #99969** test: speed up Crabbox wrapper coverage.
-- **PR #99988** test: speed up Docker scheduler coverage.
-- **PR #95463** fix(slack): bridge presentation capabilities and renderPresentation through channel outbound facade. Related #95440. Thanks @ZOOWH and @kayla-waves.
-- **PR #99249** Keep workspace suggestions opt-in for doctor lint. Thanks @giodl73-repo.
-- **PR #99352** feat(release): add monthly npm extended-stable publication. Thanks @kevinslin.
-- **PR #100002** perf: defer realtime smoke live imports.
-- **PR #95313** fix(slack): allow channel-id reads for name-allowlisted channels. Thanks @jontsai.
-- **PR #100008** improve: speed up package candidate safety tests.
-- **PR #94672** feat: pair mobile devices from the Control UI. Thanks @bkudiess and @douhualili.
-- **PR #85507** fix(slack): include assistant loading messages. Thanks @emergentash.
-- **PR #96312** fix(slack): stop logging inbound message previews. Thanks @steipete-oai.
-- **PR #99717** test(qa): run the real CLI channel picker. Thanks @RomneyDa.
-- **PR #100035** fix(agents): replay images across cli fallback. Thanks @vincentkoc.
-- **PR #99766** refactor(voice-call): reuse shared webhook path normalization. Thanks @RomneyDa.
-- **PR #99786** refactor: reuse shared number clamp. Thanks @RomneyDa.
-- **PR #99852** fix(acpx): handle MCP proxy stdio pipe errors. Thanks @sunlit-deng and @vincentkoc.
-- **PR #98510** feat: add session thread management. Related #88568. Thanks @Maziyang2.
-- **PR #99777** refactor(providers): table-drive paired catalogs. Thanks @RomneyDa.
-- **PR #100053** fix: tests in nested git worktrees load bundled plugins from the enclosing checkout. Related #100052.
-- **PR #100039** improve(matrix): generate executable QA route and state evidence. Related #100038. Thanks @RomneyDa.
-- **PR #97727** fix(slack): include attachment text in thread context. Thanks @chthtlo.
-- **PR #100051** fix(telegram): report inbound media download failures. Related #100000. Thanks @batyaro777.
-- **PR #100027** chore: update dependencies. Related #99952.
-- **PR #99788** refactor(infra): consolidate identifier digest mechanics. Thanks @RomneyDa.
-- **PR #99790** refactor(models): share strict model ref parsing. Thanks @RomneyDa.
-- **PR #99744** refactor(infra): consolidate bounded HTTP body reads. Thanks @RomneyDa.
-- **PR #100040** fix(ui): localize mobile pairing in Hindi and Russian.
-- **PR #99960** fix(cron): roll back live scheduler state when persisting add/update/remove fails. Thanks @masatohoshino and @vincentkoc.
-- **PR #99811** feat(update): support extended-stable package updates. Related #99808. Thanks @kevinslin.
-- **PR #99785** refactor: consolidate unique string list helpers. Thanks @RomneyDa.
-- **PR #98559** improve(web-fetch): speed up provider fallback loading. Thanks @vincentkoc.
-- **PR #99250** Keep legacy WhatsApp crontab lint opt-in. Thanks @giodl73-repo.
-- **PR #83718** fix(memory-core): treat dreaming fence marker lines as inside-fence in promotion guard (#80613). Thanks @grifjef and @p0pfan.
-- **PR #100081** fix(gateway): harden embedded terminal policy. Related #77362. Thanks @rayncc.
-- **PR #100006** fix: roll rounded durations into seconds. Related #99978. Thanks @qingminglong.
-- **PR #100083** chore: update oxlint tsgolint.
-- **PR #100087** fix(tooling): accept pnpm separator in web fetch benchmark. Thanks @vincentkoc.
-- **PR #91984** fix(telegram): resolve local Bot API container file paths against trustedLocalFileRoots [AI-assisted]. Thanks @Dizesales and @AiLucasdz.
-- **PR #100015** fix(release): block stale Codex runtime pins. Related #99951. Thanks @fuller-stack-dev and @100yenadmin.
-- **PR #100069** test: make the local pnpm test gate green on macOS hosts. Related #100025.
-- **PR #87643** feat: add utility models and generated session titles. Related #77165. Thanks @zhangguiping-xydt and @Juliangsm.
-- **PR #99121** policy: cover gateway node commands. Thanks @giodl73-repo.
-- **PR #100024** feat: refactor the Control UI architecture. Thanks @shakkernerd.
-- **PR #100054** fix(gateway): read usage-cost cache once per agent in sessions.usage. Related #100041. Thanks @NianJiuZst and @justronin.
-- **PR #82895** fix(slack): preserve interaction thread status. Related #82886. Thanks @WuKongAI-CMU and @tianxiaochannel-oss88.
-- **PR #100084** fix(slack): preserve custom identity while streaming. Related #58737. Thanks @MoerAI and @FergusClare.
-- **PR #100089** feat(gateway): terminal detach/reattach with output replay, terminal.list, terminal.text. Related #100085.
-- **PR #100106** fix(ui): repair router refactor regressions.
-- **PR #99401** feat(cli): render claude CLI native thinking with /reasoning gating. Thanks @Marvinthebored.
-- **PR #100077** fix(agents): scale aggregate tool-result budget with context window and compact on pressure. Related #100042. Thanks @obviyus.
-- **PR #99688** refactor: consolidate safe JSON parsing. Related #99665. Thanks @RomneyDa.
-- **PR #100061** refactor(types): remove redundant local aliases. Thanks @RomneyDa.
-- **PR #100012** fix: detect localized Windows netstat listeners. Related #99984. Thanks @qingminglong and @vincentkoc.
-- **PR #99746** refactor(security): consolidate secret primitives. Thanks @RomneyDa.
-- **PR #100108** test(ui): stabilize Control UI suite routing. Thanks @vincentkoc.
-- **PR #99763** improve(ui): flatten chat tool-call rows into a scannable list. Related #99760.
-- **PR #99691** refactor: consolidate exact keyed async queues. Related #99683. Thanks @RomneyDa.
-- **PR #99740** refactor(plugin-sdk): consolidate tool result helpers. Thanks @RomneyDa.
-- **PR #94990** fix(feishu): emit non-empty value schema for bitable write tools (#94547). Thanks @TwinsLee.
-- **PR #84335** fix(slack): forward per-agent identity overlay on heartbeat and runtimeSend (#84297). Thanks @Rohang2005 and @aw-stevens.
-- **PR #53467** feat(slack): add ignoreOtherMentions channel config. Related #89625. Thanks @hanamizuki and @SaebAmini.
-- **PR #100114** fix(qa-channel): handle metadata-free final replies. Thanks @vincentkoc.
-- **PR #100047** fix(gateway): truncateCloseReason drops partial UTF-8 code point instead of emitting mojibake. Related #99976. Thanks @NarahariRaghava.
-- **PR #100119** fix(channels): expose inbound media download failures [AI-assisted]. Related #100092.
-- **PR #97514** Doctor: expose systemd linger findings. Thanks @giodl73-repo.
-- **PR #100128** feat(ui): adopt shared libterminal runtime. Related #100126.
-- **PR #95447** fix(agents): use CJK-aware token estimation for tool results. Thanks @moguangyu5-design and @vincentkoc.
-- **PR #100123** fix(tui): queue prompts while the agent is busy. Related #89059, #90012. Thanks @SebTardif and @kevinlp.
-- **PR #91584** Fail closed when Slack mention detection is unavailable. Thanks @hiragram and @openclaw-agent.
-- **PR #100059** [AI-assisted] fix(android): polish home overview layout. Thanks @IWhatsskill.
-- **PR #100013** fix: keep subagent truncation within max length. Related #99979. Thanks @qingminglong.
-- **PR #100122** chore: enable array fill lint rule.
-- **PR #100136** fix(chat): hide duplicate channel delivery mirrors.
-- **PR #100096** fix(infra): roll session warning durations across unit boundaries. Related #99978. Thanks @NarahariRaghava and @vincentkoc.
-- **PR #99165** fix(qa-lab): bound suite runtime gateway JSON response reads. Thanks @hugenshen.
-- **PR #100144** fix(ui): add chat transcript top spacing. Thanks @steipete-oai.
-- **PR #100135** fix(agents): preserve spill-file pointers through elision and spill truncated web_fetch output. Related #100112. Thanks @obviyus.
-- **PR #99419** fix(cli): include aliases in shell completion. Related #99406. Thanks @AmirF194 and @vincentkoc and @Jack-dev-ops.
-- **PR #99686** policy: classify doctor fix recommendations. Thanks @giodl73-repo.
-- **PR #100117** fix(tui): isolate embedded event listener failures. Thanks @cxbAsDev.
-- **PR #79938** Warn on shared Slack Socket Mode connections. Thanks @jeffvsutherland.
-- **PR #100148** fix(agents): queued CLI reasoning bridge + thinking token progress for claude-cli's withheld-text wire. Thanks @obviyus.
-- **PR #100088** fix(ui): chat workspace panel leaves an empty gap when collapsed.
-- **PR #100143** fix(status): hide healthy plugin summary.
-- **PR #100151** fix(auto-reply): deliver model directive acknowledgements.
-- **PR #100060** [AI-assisted] fix(android): polish Voice text truncation. Thanks @IWhatsskill.
-- **PR #100160** fix: preserve Codex transcript ownership. Thanks @steipete-oai.
-- **PR #100163** fix(ui): align activity error badges. Thanks @steipete-oai.
-- **PR #100090** [AI-assisted] fix(android): prevent gateway setup button clipping. Thanks @IWhatsskill.
-- **PR #82253** feat(slack): support per-channel replyToMode. Thanks @truiem-bot.
-- **PR #100159** fix(whatsapp): replace expired terminal QR on refresh.
-- **PR #100164** fix(agent): hide code mode wait progress.
-- **PR #100142** docs: rewrite published docs grounded in current source. Related #100141.
-- **PR #99896** fix(plugins): stage git plugin clone on target filesystem to avoid EXDEV. Related #99885. Thanks @Bartok9 and @vincentkoc and @CarelvanHeerden.
-- **PR #100157** feat(ui): make mobile pairing easy to find. Related #100154.
-- **PR #100183** test(docs): align rewrite guards with current wording. Thanks @vincentkoc.
-- **PR #100182** docs: restore source-backed contract details.
-- **PR #100186** docs: align source contract wording.
-- **PR #99059** refactor: extract reusable AI runtime package. Related #99040.
-- **PR #100188** fix(tui): keep local commands out of model prompts. Related #71592. Thanks @goslingmanagment.
-- **PR #100147** fix(control-ui): declutter Settings and make Simple/Advanced switch persistent. Related #100145.
-- **PR #99050** fix(whatsapp): serialize overlapping Web sends. Related #99049. Thanks @ooiuuii.
-- **PR #98850** fix(google-meet): bound JSON response body reads to prevent OOM. Thanks @Pandah97.
-- **PR #95211** test(tui): lock dunder markdown rendering. Related #90769. Thanks @zhangguiping-xydt and @wscurran.
-- **PR #100191** fix(acp-core): keep fallback error redaction. Thanks @lin-hongkuan.
-- **PR #97746** fix(discord): reuse stored sessionId across voice (stt-tts) turns. Related #97688. Thanks @Sanjays2402 and @karabaralex.
-- **PR #100199** fix(ui): make tool activity rows selectable and less repetitive. Thanks @steipete-oai.
-- **PR #100203** fix(cron): job edits no longer break CLI-backend runs by stripping the default toolsAllow marker. Thanks @obviyus.
-- **PR #89962** fix(discord): fall back to text when voice delivery fails. Thanks @danhayman.
-- **PR #100214** fix(macos): preserve PATH for SSH helpers.
-- **PR #99935** feat(crestodian): conversational agent-loop onboarding across CLI, web install, and macOS app. Related #99934.
-- **PR #100223** fix(crestodian): repair post-merge checks.
-- **PR #100204** fix: land nine small correctness fixes. Thanks @LiLan0125 and @cxbAsDev and @lin-hongkuan and @ZOOWH and @liuhao1024 and @mikasa0818 and @Pandah97 and @harjothkhara and @sunlit-deng.
-- **PR #100190** fix(ui): show only Standard and Fast for OpenAI speed.
-- **PR #100240** fix(ui): hide duplicate terminal caret.
-- **PR #97480** fix(slack): reconcile ambiguous sends before replay. Thanks @joeyfrasier.
-- **PR #95349** fix(agents): strip system-event prefix from modelPrompt when before_prompt_build hooks add context. Related #95323. Thanks @openperf and @vincentkoc and @gorkem2020.
-- **PR #100179** fix(ui): publish mobile setup independently.
-- **PR #100205** fix(reply): prevent foreground delivery deadlock. Related #99061. Thanks @nathan-nazareth.
-- **PR #100239** docs(release): carry approval through publish. Thanks @vincentkoc.
-- **PR #100029** feat(crestodian): run CLI harnesses on the agent loop via a ring-zero MCP server.
-- **PR #100222** feat(ios): distinguish debug app builds.
-- **PR #100220** docs: default agent validation to remote runners.
-- **PR #100243** fix: stabilize OpenClawKit contract and chat tests.
-- **PR #99806** fix(subagents): killed subagent runs stay running in the task list. Thanks @masatohoshino.
-- **PR #100249** fix(build): restore package artifact declarations. Thanks @vincentkoc.
-- **PR #100252** fix(ui): hide idle composer scrollbar.
-- **PR #99864** fix(compaction): avoid cached usage overcount. Related #99843. Thanks @LZY3538 and @jrex-jooni.
-- **PR #100256** fix(ui): center terminal new-session button.
-- **PR #100259** fix(ios): remove debug icon outer rim.
-- **PR #100125** fix: DashScope and Moonshot endpoints misclassified as custom when the provider plugin is not installed.
-- **PR #100253** docs(maint): raise PR close batch limit.
-- **PR #100251** fix(tui): keep skill approvals in the terminal. Related #100250. Thanks @vincentkoc.
-- **PR #100206** chore(ci): fail CI when gateway events go unhandled by the mobile apps. Related #100198.
-- **PR #100200** chore(android): add deterministic chat streaming replay test harness.
-- **PR #99865** fix(android): default manual TLS port to 18789 except Tailscale hosts. Thanks @ly85206559 and @cursoragent.
-- **PR #100127** fix(qqbot): channel status keeps reporting connected after the gateway websocket dies. Thanks @masatohoshino and @vincentkoc.
-- **PR #100046** fix(imessage): false group drop-all startup warning when groupAllowFrom is set without groups.
-- **PR #100242** feat(scripts): serialize pr prepare gates and add remote Testbox test gate. Related #100226.
-- **PR #100210** chore: sync canonical autoreview skill.
-- **PR #100263** fix(voice-call): share webhook replay tracking. Thanks @xialonglee.
-- **PR #100258** fix: harden small runtime and installer edge cases. Thanks @UditDewan and @cxbAsDev and @Simon-XYDT and @sunlit-deng and @mushuiyu886 and @connermo and @Gfaerny and @ly85206559 and @harjothkhara.
-- **PR #100244** fix(core): keep backend truncation UTF-16 safe. Thanks @xialonglee and @vincentkoc and @ZengWen-DT.
-- **PR #78511** fix(gateway): stop terminal WhatsApp restart loops. Related #78419. Thanks @openperf and @rutherlesdev.
-- **PR #89585** docs: document replay history normalization contract.
-- **PR #87695** fix(types): unblock changed gate checks. Thanks @vincentkoc.
-- **PR #89558** docs: document embedded compaction context contracts.
-- **PR #100328** fix(ios): own gateway setup deep-link delivery.
-- **PR #100208** fix(ui): mobile-optimize gateway dashboard login gate.
-- **PR #100260** fix(google): normalize Live function declarations.
-- **PR #100261** fix(voice-call): normalize mapped proxy addresses. Related #86525. Thanks @rohitjavvadi.
-- **PR #100255** fix(voice-call): auto-respond to webhook transcripts. Related #79118. Thanks @dvy.
-- **PR #100264** feat(ui): show context usage details.
-- **PR #80642** fix(whatsapp): bound reconnect catch-up replies. Thanks @VishalJ99.
-- **PR #100283** feat(ios): add Apple Watch voice turns. Related #100224.
-- **PR #100209** fix(models): resolve provider-qualified aliases. Related #75163. Thanks @sahilsatralkar and @david-r-jones.
-- **PR #94879** fix(whatsapp): preserve bot-authored quote replies. Related #91445. Thanks @Bartok9 and @seikosantana.
-- **PR #100241** fix(tui): run new sessions through lifecycle hooks. Related #49918. Thanks @caopulan and @LonExplorer-coder.
-- **PR #99070** fix(whatsapp): restore malformed credentials from backup. Thanks @LeonidasLux.
-- **PR #91276** fix(pre-commit): quote Python dependency range. Thanks @deepujain.
-- **PR #96002** fix(gateway): keep local CLI shared auth off device scopes. Related #95997. Thanks @vincentkoc.
-- **PR #100318** fix(ui): simplify grouped tool activity.
-- **PR #100288** feat: verify AI access during macOS onboarding before the first chat. Related #100286.
-- **PR #83000** fix(tui): render delta-only assistant streams. Related #82988. Thanks @flashosophy.
-- **PR #88384** fix(plugins): keep openclaw chunks native in jiti. Related #85057. Thanks @vincentkoc and @ScientificProgrammer.
-- **PR #99928** fix(outbound): report honest message delivery status. Thanks @masatohoshino.
-- **PR #100346** docs(changelog): record WhatsApp delivery fixes.
-- **PR #100344** fix(plugins): preserve jiti native module config.
-- **PR #76235** [codex] Fix doctor completion cache plugin loading.
-- **PR #100317** fix(pairing): advertise reachable Tailnet routes. Related #100280.
-- **PR #100266** fix(ui): clear session labels across subscribed clients.
-- **PR #89619** fix(agents): wrap bundle MCP schema setup errors. Thanks @vincentkoc.
-- **PR #100356** fix: remove sidebar usage quota. Thanks @shakkernerd.
-- **PR #99690** policy: repair automatic narrowing findings. Thanks @giodl73-repo.
-- **PR #76245** [codex] Fallback when Windows gateway task exits early.
-- **PR #91002** fix(tui): surface safe tool-validation abort diagnostics. Related #90982. Thanks @wsyjh8 and @taerlandsen.
-- **PR #100355** test(ios): import pairing protocol model.
-- **PR #100332** fix(ci): bound hosted gate workflow pagination.
-- **PR #100262** feat(control-ui): session grouping with drag & drop and channel categorization.
-- **PR #100372** fix(ios): persist queued Watch replies. Thanks @NianJiuZst.
-- **PR #100093** Doctor: expose write-config blocker findings. Thanks @giodl73-repo.
-- **PR #100278** fix(ci): catch native-only mobile protocol drift. Related #100198.
-- **PR #99954** feat(clickclack): publish durable agent activity rows (commentary + tool). Thanks @ragesaq.
-- **PR #100370** fix(ios): avoid inactive Voice Wake audio startup.
-- **PR #100221** fix(test): unit-fast tests inherit live host config.
-- **PR #100340** fix(tui): suppress unhandled rejection from editor submit handlers. Thanks @cxbAsDev.
-- **PR #100105** docs: tailor imsg skill for OpenClaw agents. Thanks @omarshahine.
-- **PR #155** docs: clarify personal vs private in README. Related #125. Thanks @mbelinky and @omarshahine and @olinorwell.
-- **PR #100276** feat(ui): scroll truncated sidebar session names on hover.
-- **PR #100391** fix(ui): reveal message context on timestamp hover. Thanks @steipete-oai.
-- **PR #100379** feat(ui): show provider costs in context popover.
-- **PR #100398** docs: explain remote Android screen mirroring. Related #100396.
-- **PR #100019** improve: keep isolated tests under one second. Related #100018.
-- **PR #100399** fix: land ten small reliability fixes. Related #98650. Thanks @cxbAsDev and @snotty and @lin-hongkuan and @849261680 and @qingminglong and @anyech and @masatohoshino and @Simon-XYDT and @xialonglee and @nankingjing and @609NFT.
-- **PR #100207** feat(chat-ui): syntax-highlighted code blocks and native tables in chat markdown.
-- **PR #99930** feat(logbook): automatic work journal plugin with Control UI timeline tab. Related #99867.
-- **PR #99797** fix(voice-call): resolve completed calls from the persisted store on status misses. Related #96586. Thanks @Darren2030 and @NiTeCoMM-code.
-- **PR #100418** fix(gateway): clarify URL override auth recovery. Thanks @gmays.
-- **PR #93636** fix(infra): tolerate deleted cwd across startup, PATH, home-dir, and TUI [AI-assisted]. Related #73676. Thanks @ml12580 and @oldsix-cell.
-- **PR #100336** fix(gateway): preserve non-text MCP content blocks through loopback normalizer. Related #100329. Thanks @tzy-17 and @OpenClawKobian99.
-- **PR #96572** fix(irc): chunk PRIVMSG on UTF-16 boundary to avoid lone surrogates. Thanks @WeeLi-009.
-- **PR #100437** fix(test): bound local full-suite RAM. Related #100429.
-- **PR #100201** chore(ios): add deterministic streaming replay test harness for the shared chat pipeline.
-- **PR #100384** feat(android): restore in-flight runs after reconnect.
-- **PR #100277** fix(ios): restore in-flight runs after reconnect.
-- **PR #100337** fix(agents): surface real plugin approval rejection reason to agent. Related #100212. Thanks @tzy-17 and @pallaoro.
-- **PR #99572** fix(ios): defer QR pairing after scanner dismissal. Related #99571. Thanks @PollyBot13.
-- **PR #99304** fix: surface terminal agent run failures. Thanks @moeedahmed.
-- **PR #100295** fix(ui): render direct tool-result image blocks inline in chat (#50779). Thanks @lzyyzznl and @Pandah97 and @rquinones84.
-- **PR #100441** docs(changelog): record five landed fixes.
-- **PR #98699** fix(cron): preserve delivery thread id type across SQLite round-trip. Thanks @yetval.
-- **PR #100420** test: stabilize load-sensitive test families that break gates under parallel load.
-- **PR #96178** fix(browser): resolve act targetId aliases before mismatch check. Related #96176. Thanks @ZengWen-DT and @don068589.
-- **PR #86285** fix(voice-call): avoid OpenAI realtime double greeting. Related #85846. Thanks @giodl73-repo and @jnikolaidis.
-- **PR #100227** feat(android): read-only offline cache for chat sessions and transcripts.
-- **PR #100453** Simplify Talk controls and move advanced defaults to Settings. Thanks @steipete-oai.
-- **PR #100416** feat(ios): haptic feedback for chat send, completion, and failure.
-- **PR #100290** feat(android): durable offline command outbox for chat sends.
-- **PR #100107** Preserve provider settings during onboarding updates. Thanks @frank-beans.
-- **PR #100296** feat(ui): declutter the Control UI sidebar with customizable pinned nav and a More section. Related #100287.
-- **PR #100389** fix: heartbeat survives transient filesystem read races. Related #99994. Thanks @ogarciarevett and @markr9805.
-- **PR #100330** fix(agents): prevent ReDoS in MCP glob-to-regex wildcard matching. Thanks @lsr911.
-- **PR #90969** [codex] fix discord missing voice state handling. Thanks @asock.
-- **PR #99138** fix(irc): long non-ASCII messages are silently truncated at the 512-byte line limit. Thanks @yetval.
-- **PR #100417** feat(ios): export chat transcripts as Markdown via the share sheet.
-- **PR #100440** fix: harden subprocess, maintenance, and output paths. Thanks @cxbAsDev and @wendy-chsy and @tzy-17 and @nankingjing and @NianJiuZst.
-- **PR #100456** fix(auto-reply): surface empty interactive completions. Related #99712. Thanks @mushuiyu886 and @grox2012.
-- **PR #100464** docs: credit empty-reply fix contributor.
-- **PR #89175** fix(realtime): filter malformed provider tool names. Thanks @vincentkoc.
-- **PR #100459** fix(ci): install release packaging dependencies. Thanks @vincentkoc.
-- **PR #91519** feat(qa-lab): add Codex Slack approval scenarios. Thanks @kevinslin.
-- **PR #100446** fix(imessage): plain-send fallback for threaded replies + db-scoped recovery cursor (#99638). Thanks @omarshahine and @brianbeals.
-- **PR #100382** fix(android): stabilize shell navigation layout. Thanks @IWhatsskill.
-- **PR #98394** fix: ignore stale approval resolve errors. Related #98392. Thanks @haruaiclone-droid.
-- **PR #87530** fix(discord): isolate voice connections and close auto-join race. Thanks @geekhuashan.
-- **PR #100462** fix(slack): prefer native status by default. Thanks @steipete-oai.
-- **PR #100473** docs(changelog): credit voice fixes.
-- **PR #100469** fix(release): package legacy candidates without AI workspace. Thanks @vincentkoc.
-- **PR #100445** feat(chat-ui): redesign composer bottom bar with split Talk control and reasoning-effort chip.
-- **PR #100463** fix(macos): reduce idle CPU wakeups. Related #100451.
-- **PR #100432** feat(ui): add comparative cost analysis. Related #100405.
-- **PR #100484** fix(codex): ignore missing mirrored session history. Thanks @vincentkoc and @litang9.
-- **PR #88881** fix(agents): trim media tools in lean mode. Thanks @vincentkoc.
-- **PR #100488** fix(macos): dashboard window keeps a dead SSH tunnel port after tunnel restart. Related #100476.
-- **PR #100483** fix: land ten small reliability fixes. Related #100423. Thanks @aniruddhaadak80 and @NianJiuZst and @morluto and @ZengWen-DT and @cxbAsDev and @zenglingbiao and @xialonglee and @jincheng-xydt and @Pandah97 and @versatagent.
-- **PR #99450** fix(openai): bound realtime voice websocket payload at 16 MiB. Thanks @sunlit-deng.
-- **PR #100375** fix(slack): react action rejects emoji glyphs; member-info userId affordance unclear. Thanks @gorkem2020.
-- **PR #100448** feat: publish plugins with extended-stable releases. Thanks @kevinslin.
-- **PR #100466** fix(ios): simplify development app name.
-- **PR #100217** feat(android): syntax-highlighted code blocks in chat.
-- **PR #100495** docs(changelog): stage remote browser reliability fix.
-- **PR #100487** fix(diffs): share SSR preloads and repair language-pack hydration.
-- **PR #100497** test(macos): remove stale Crestodian onboarding test. Thanks @steipete-oai.
-- **PR #98143** fix(agents): bound body-less MCP HTTP text responses. Related #97521. Thanks @Pick-cat and @wangmiao0668000666.
-- **PR #100049** fix(android): synchronize realtime tool completions. Thanks @qingminglong.
-- **PR #80147** fix(browser): time out remote tab enumeration. Related #58968. Thanks @HemantSudarshan and @KeaneYan.
-- **PR #99555** fix(gateway-protocol): trim connect error detail codes in readConnectErrorDetailCode. Thanks @ly85206559 and @cursoragent.
-- **PR #100219** feat(ios): read-only offline cache for chat sessions and transcripts.
-- **PR #100499** fix(build): make tsdown configs self-contained. Thanks @steipete-oai.
-- **PR #100474** refactor(auto-reply): harden empty reply delivery.
-- **PR #87433** [codex] Honor all ack scope for room events. Related #87368. Thanks @scoootscooob and @paul-phan.
-- **PR #98284** fix(browser): persist managed Chrome cookies across restarts. Related #96704. Thanks @TurboTheTurtle.
-- **PR #99023** fix: avoid English audio prompt for non-English STT hints. Related #98970. Thanks @NianJiuZst and @FlyVeryHigh.
-- **PR #100507** docs(changelog): note browser cookie persistence.
-- **PR #100401** fix(gateway): catch lazy import rejections in runtime event subscriptions. Thanks @cxbAsDev.
-- **PR #80293** fix: apply thread routing to plugin actions. Thanks @artdaal.
-- **PR #99859** fix(ios): reject loopback-prefix hosts for auth retry. Thanks @ly85206559.
-- **PR #100386** feat(ui): make the sidebar session-first and minimal.
-- **PR #99593** fix(skills): apply command description limits per channel. Thanks @Pick-cat.
-- **PR #100517** test(macos): deflake browser proxy gate tests via injectable browser control.
-- **PR #100516** fix(slack): avoid repeated thread root media. Related #99886. Thanks @redasadki.
-- **PR #90450** fix(agents): preserve streamed assistant text when Claude CLI result event is empty. Thanks @totobusnello.
-- **PR #100467** fix(channels): normalize phone identities with stray plus signs. Thanks @morluto.
-- **PR #99961** fix(bedrock): bound Mantle model discovery fetches. Thanks @zhangguiping-xydt.
-- **PR #100454** fix(android): harden offline cache lifecycle.
-- **PR #100514** fix(ui): preserve autonomous tool failures. Related #97849. Thanks @qingminglong and @yetval.
-- **PR #100526** fix(ui): align Skills filters. Related #99990. Thanks @evan-YM.
-- **PR #99124** fix #98107: Gateway regenerates service-env file on every restart, wiping Telegram bot tokens. Thanks @mushuiyu886 and @1Wanker.
-- **PR #100528** fix(ui): remove redundant file-preview Escape hint. Related #99027. Thanks @xianshishan.
-- **PR #89416** fix(browser): downloads complete over CDP connections. Related #48045. Thanks @zhangguiping-xydt and @roinou532.
-- **PR #100532** docs(changelog): note browser attachment downloads. Related #48045. Thanks @roinou532.
-- **PR #100527** fix(ui): bind stale run state to run identity. Related #88033. Thanks @tiffanychum and @davidstoll.
-- **PR #94015** fix(voice-call): deliver early TTS via onEarlyText before compaction wait. Related #79521. Thanks @xialonglee and @donkeykong91.
-- **PR #99965** fix(telegram): show typing for accepted topic messages. Thanks @moeedahmed.
-- **PR #100533** docs(changelog): credit Control UI fixes.
-- **PR #100490** fix(agents): preserve media side merges during prompt release.
-- **PR #98868** feat(ios): refresh onboarding setup flow. Thanks @thats2easyyy.
-- **PR #96917** fix(anthropic): keep OAuth callback on loopback. Related #96485. Thanks @xialonglee and @riazrahaman.
-- **PR #100489** fix(macos): orphaned SSH tunnels from crashed app instances keep running and squat the preferred local port. Related #100477.
-- **PR #100479** fix(control-ui): keep the dashboard mounted with a reconnect banner on gateway drops. Related #100475.
-- **PR #98262** [codex] Fail closed pair slash command routing. Related #98239. Thanks @brokemac79.
-- **PR #99564** fix(agents): prevent malformed HTML entities from breaking tool calls. Thanks @mikasa0818.
-- **PR #100536** fix(agents): skip tool prep for toolless models. Thanks @vincentkoc.
-- **PR #100545** docs(changelog): credit landed reliability fixes.
-- **PR #100505** fix(gateway): advertise exec approval node commands. Related #57775. Thanks @vincentkoc and @RTKOP.
-- **PR #100512** fix(ios): keep While Using selected after approval.
-- **PR #100434** feat(ui): preview GitHub issues and pull requests on hover. Related #100412.
-- **PR #97733** feat: add channel pairing request hook. Thanks @clawSean and @omarshahine.
-- **PR #100482** fix(ollama): fall back when native streams end early. Related #100460. Thanks @TurboTheTurtle and @8kfcf95jvp-oss.
-- **PR #100555** docs(changelog): add GitHub preview entry.
-- **PR #100376** fix(tlon): bound urbit scry JSON response reads. Thanks @hugenshen.
-- **PR #100561** docs(changelog): note Apple chat run recovery.
-- **PR #100363** fix(android): polish gateway settings layout. Thanks @IWhatsskill.
-- **PR #100562** docs(changelog): credit recent contributor fixes.
-- **PR #100480** feat(cron): declarative jobs with owner attribution and richer status.
-- **PR #100551** fix(android): preserve chat sends across reconnect recovery. Related #100197.
-- **PR #100366** improve(auto-reply): render chat history since last reply as per-message prose. Thanks @gorkem2020.
-- **PR #93307** fix(browser): notify agent when click triggers download. Related #93250. Thanks @sunlit-deng and @scorpiord.
-- **PR #100560** fix(agents): run bootstrap ritual on Claude CLI. Thanks @bill-starfoundry and @kruegerb and @vincentkoc.
-- **PR #100575** docs(changelog): note browser action downloads.
-- **PR #100478** feat(gateway): add system.info RPC and Gateway Host card in Settings. Related #100465.
-- **PR #100374** fix(tlon): bound external image upload reads. Thanks @hugenshen.
-- **PR #100520** feat: show auto-detected provider plans and billing. Related #100494.
-- **PR #100442** feat(commands): add /learn to draft skills from recent work. Related #100408.
-- **PR #100481** perf(agents): slim Skill Workshop prompt section to its routing contract. Related #100449.
-- **PR #100498** fix(skills): make Skill Workshop lifecycle approvals decidable and non-wedging. Related #91266, #93173, #94249. Thanks @EmpireCreator and @mmhzlrj and @mdpoirier-abbey.
-- **PR #100586** fix(gateway): commit runtime snapshot on noop config reloads. Thanks @obviyus.
-- **PR #100468** feat(goals): keep active session goals in per-turn context + continuance QA scenarios. Related #100409.
-- **PR #99992** fix(signal): bound receive websocket payloads. Thanks @sunlit-deng.
-- **PR #100567** fix(gateway): format usage dates in range timezone. Thanks @NianJiuZst and @vincentkoc.
-- **PR #100593** chore(maint): make the PR merge drift guard advisory by default.
-- **PR #100531** feat(ios): richer Settings About screen with mascot hero and project links.
-- **PR #100331** feat(ios): durable offline command outbox for chat sends.
-- **PR #100535** feat: automatic managed git worktrees for agent tasks (create, snapshot, restore, GC). Related #100534.
-- **PR #93082** fix(ui): show coalesced update restarts. Related #78481. Thanks @goutamadwant and @motacola.
-- **PR #54758** fix(ui): propagate connect errors to pending requests. Thanks @ruanrrn.
-- **PR #100554** fix(cli): reduce plugin hook fallback noise. Thanks @vincentkoc.
-- **PR #99111** fix: recover Control UI bundle loading after gateway restart. Related #99092. Thanks @ZengWen-DT and @ITOrity.
-- **PR #93999** fix(tui): show busy startup loader during post-connect initialization [AI-assisted]. Related #74385. Thanks @ml12580 and @sanjarcode.
-- **PR #73338** fix(tui): follow active gateway port. Related #42461. Thanks @haishmg and @vincentkoc and @jackm1688.
-- **PR #99076** feat(tencent): add Tencent Hy3 provider (TokenHub and TokenPlan). Related #99069. Thanks @MonCac and @hxy91819.
-- **PR #100569** fix(config): dedupe repeated validation warnings. Related #25574. Thanks @vincentkoc and @mcaxtr.
-- **PR #100599** docs(changelog): credit five Control UI and TUI fixes. Related #78481. Thanks @motacola.
-- **PR #90552** fix(sessions): persist sender metadata in user turn transcript JSONL. Related #90531. Thanks @Pick-cat and @Haderach-Ram.
-- **PR #100591** fix(config): compare size guard against canonical input. Related #71865. Thanks @vincentkoc and @balric-seo.
-- **PR #100603** docs: refresh generated docs map.
-- **PR #100609** docs(changelog): credit Vincent replay fixes.
-- **PR #100275** feat(macos): adopt the shared read-only chat transcript cache.
-- **PR #100611** test(plugins): register Workboard typed hook contract.
-- **PR #95107** feat(android): show cron job details. Thanks @Tosko4.
-- **PR #100582** fix(clickclack): reply to a top-level message in-channel, not as a new thread. Thanks @Marvinthebored and @vincentkoc.
-- **PR #100492** fix(anthropic): normalize tuple tool schemas for Opus 4.8. Related #98588. Thanks @lin-hongkuan and @vincentkoc and @brandencho.
-- **PR #100612** refactor(ui): consolidate sidebar navigation contract.
-- **PR #100342** fix(gmail-watcher): catch renewal interval errors. Thanks @cxbAsDev and @vincentkoc.
-- **PR #100522** fix(agents): suppress unhandled stdout/stderr stream errors in waitForChildProcess. Thanks @cxbAsDev and @vincentkoc.
-- **PR #98669** fix(sessions): log warning when parseJsonlEntries skips malformed JSONL lines. Thanks @cxbAsDev.
-- **PR #99539** fix(discord): prevent approval command previews from splitting emoji when truncated. Thanks @zhangguiping-xydt.
-- **PR #99340** fix(infra): enforce maxBytes in body-less HTTP error snippet path. Thanks @Pick-cat.
-- **PR #99606** improve(doctor): warn when cron jobs keep failing consecutive runs. Thanks @masatohoshino.
-- **PR #99067** fix: strengthen macOS SQLite WAL checkpoint durability. Related #99066. Thanks @ooiuuii.
-- **PR #99420** fix(infra): add NaN guard for unparseable timestamp in cost usage. Related #99413. Thanks @krissding and @sheyanmin.
-- **PR #100618** fix: replies fail when memory flush is exhausted. Related #85645. Thanks @Jerry-Xin and @rhclaw.
-- **PR #99379** fix: keep heredoc bodies out of exec summaries. Related #99367. Thanks @ZengWen-DT and @JoeArmani.
-- **PR #100491** fix(android): tighten Voice tab box sizing. Thanks @IWhatsskill.
-- **PR #93184** fix(ui): preserve live tool stream order. Related #92122. Thanks @Pick-cat and @lileilei-camera.
-- **PR #100338** fix(update-check): wrap malformed npm view JSON parse in try/catch. Thanks @cxbAsDev.
-- **PR #95341** fix(ui): show cron job model selection. Thanks @ly85206559.
-- **PR #89772** fix(webchat): keep context indicator visible with stale token data. Related #89662. Thanks @bladin and @snsczssl.
-- **PR #99399** fix(pdf): reject fractional page selections. Related #99393. Thanks @qingminglong.
-- **PR #100621** fix(agents): cap effective compaction reserve. Thanks @vincentkoc.
-- **PR #100552** fix(android): keep stale PTT from restarting capture. Thanks @xialonglee.
-- **PR #100606** fix(ui): stop repeating tool names in expanded activity.
-- **PR #76386** fix(install): trap SIGINT so Ctrl+C exits cleanly during upgrade doctor. Related #82304, #90011. Thanks @SebTardif.
-- **PR #100347** feat(android): reconnect gateway when validated network returns. Thanks @ly85206559 and @cursoragent.
-- **PR #100654** feat(skills): diagnose skill_workshop hidden by tool policy. Related #87570. Thanks @wangwllu.
-- **PR #100120** fix(agents): detect bundled and legacy providers in model-not-found hint. Related #100066. Thanks @SunnyShu0925 and @vincentkoc and @Jason-Vaughan.
-- **PR #99484** fix: remove Android camera clip release logs. Thanks @NianJiuZst.
-- **PR #100646** improve(ui): declutter the Cron Jobs page into compact scannable rows. Related #100633.
-- **PR #100670** fix(cli): align root command descriptions. Related #98978. Thanks @vincentkoc and @AmirF194.
-- **PR #100667** fix(gateway): avoid default provider auth startup prewarm. Related #86512, #86752. Thanks @vincentkoc and @mmhzlrj and @balaji1968-kingler.
-- **PR #98840** fix(voyage): close response body stream when batch output JSONL parsing throws. Thanks @solodmd.
-- **PR #99089** fix(message): thread --limit through to CLI formatter and surface provider pagination hints. Thanks @wm0018.
-- **PR #98705** fix(feishu): strip internal tool-trace banners from outbound text. Thanks @ZengWen-DT and @cursoragent.
-- **PR #99136** fix #97625: Qwen3:14b compaction fails with Already compacted. Thanks @mushuiyu886 and @pkoserowski.
-- **PR #100502** fix(ios): chat snaps back to bottom when scrolling to top via status-bar tap.
-- **PR #100590** fix(browser): diagnose empty WSL2 Chrome replies. Related #54669. Thanks @ZengWen-DT and @Owlock.
-- **PR #100665** fix(ui): reopen closed web terminals with a fresh screen.
-- **PR #100663** fix(maint): reuse recent hosted gates after rebase.
-- **PR #98414** fix: stop reconnecting on protocol mismatch. Related #98413. Thanks @haruaiclone-droid.
-- **PR #100601** refactor(macos): lock and unify PortGuardian tunnel record persistence so concurrent app instances cannot lose orphan records.
-- **PR #100515** fix(ios): unify Talk and Settings row typography on one branded detail row.
-- **PR #100540** feat(telegram): offer BotFather web app flow next to the chat flow in onboarding. Related #100538.
-- **PR #100692** feat(skills): suggest saving detected reusable workflows by default. Related #95477. Thanks @WangXuexin24.
-- **PR #91262** fix(build): fall back to tsx for build TypeScript scripts. Thanks @smoe-bot and @vincentkoc and @smoe.
-- **PR #98381** fix(memory-core): guard qmd mcporter JSON.parse against non-JSON stdout. Thanks @miorbnli.
-- **PR #98073** fix(signal): guard containerRestRequest JSON.parse against malformed responses. Thanks @lsr911.
-- **PR #100519** fix(hooks): suppress unhandled stdout/stderr stream errors in gmail watcher. Thanks @cxbAsDev.
-- **PR #99874** fix(android): block loopback canvas navigation. Thanks @ly85206559.
-- **PR #100702** docs(android): credit landed app improvements.
-- **PR #100671** Reuse Codex OAuth for OpenAI Realtime voice. Thanks @steipete-oai.
-- **PR #100703** fix(ci): restore gateway architecture and lint gates.
-- **PR #97170** Fix voice-call streaming provider resolution. Related #97738. Thanks @solavrc.
-- **PR #100715** fix(openai): route MP3 TTS through voice delivery. Related #80317. Thanks @HemantSudarshan and @vokasug.
-- **PR #98721** fix(agents): keep bounded exec output UTF-16 safe. Thanks @ZengWen-DT and @cursoragent.
-- **PR #100655** fix(agents): preserve completed post-tool replies. Related #80918. Thanks @LiuwqGit and @erkanisotec.
-- **PR #100687** refactor(infra): canonicalize session usage timestamps. Thanks @sheyanmin.
-- **PR #99695** fix(infra): include update timeout in managed-service handoff parent exit wait. Related #99666. Thanks @ZOOWH and @damienviaud14-sketch.
-- **PR #98988** fix(tools-manager): replace spawnSync extraction with safe extractArchive API. Thanks @LeonidasLux and @vincentkoc.
-- **PR #100543** fix(telegram): add missing "edit" retry context for editMessageTelegram. Thanks @lzw112.
-- **PR #100697** fix(tui): preserve balanced parentheses in markdown link URL extraction (#100661). Thanks @ZOOWH and @aniruddhaadak80.
-- **PR #100521** fix(secrets): suppress unhandled stdout/stderr stream errors in exec resolver. Thanks @cxbAsDev.
-- **PR #100723** test(release): match pinned Claude CLI setup. Thanks @vincentkoc.
-- **PR #100579** fix(openai): show current default model in missing-auth hint. Thanks @zhangguiping-xydt.
-- **PR #100688** fix(mistral): correct model id typo in usesReasoningEffort helper. Related #100664. Thanks @wm0018 and @aniruddhaadak80.
-- **PR #99907** fix: notify requester when sessions_send delivery later fails. Related #98415. Thanks @849261680 and @Alex-HeYuQing.
-- **PR #98098** fix(providers): bound successful OAuth and webhook responses. Thanks @lwy-2.
-- **PR #100713** fix(codex): return JSON-RPC codes for handler errors. Related #100693. Thanks @lin-hongkuan and @Encash7.
-- **PR #99151** fix(qa-lab): bound Telegram live transport JSON response reads. Thanks @hugenshen.
-- **PR #99917** fix(commands): guard shortenText against non-positive maxLen. Thanks @Super-Cabbage.
-- **PR #100728** fix(control-ui): preserve assistant download filenames. Related #96545. Thanks @umasik75-source.
-- **PR #100737** fix(channels): resolve source-only bundled entries. Thanks @steipete-oai.
-- **PR #97782** fix(feishu): bound Feishu API JSON response reads to prevent OOM. Thanks @Alix-007.
-- **PR #100524** fix(transcripts): handle read stream errors gracefully in TranscriptsStore. Thanks @cxbAsDev.
-- **PR #98336** fix(agents): include sender in duplicate-user-message dedup key. Related #98310. Thanks @SunnyShu0925 and @yetval.
-- **PR #100573** fix(telegram): dedupe visible assistant prompt context. Related #99117. Thanks @momothemage and @mooresoftware.
-- **PR #84792** Run memory flush before preflight compaction. Related #84695. Thanks @TurboTheTurtle and @bizzle12368239.
-- **PR #100605** fix(google): resolve thought_signature gate for Gemini latest aliases. Related #100566. Thanks @chenxiaoyu209 and @guarismo.
-- **PR #100732** fix(ios): harden Apple Watch pairing activation.
-- **PR #98990** fix(usage-bar): bound template file cache to prevent unbounded watche…. Related #98960. Thanks @chenyangjun-xy and @vincentkoc and @zhangLei99586.
-- **PR #99842** improve(health): surface dead-lettered delivery queue entries. Thanks @masatohoshino.
-- **PR #99845** fix: reject Telegram topic sessions_send targets before dispatch. Related #99835. Thanks @NianJiuZst and @qingminglong.
-- **PR #99598** improve(status): show why plugins are disabled in /status plugins. Thanks @masatohoshino.
-- **PR #99577** fix(discord): preserve text after oversized uploads. Related #99021. Thanks @lin-hongkuan and @NOVA-Openclaw.
-- **PR #100731** fix(link-understanding): honor global or largest model timeout for link fetches. Related #100660. Thanks @cxbAsDev and @aniruddhaadak80.
-- **PR #99456** fix(hooks): flag hook event names that no core trigger emits. Thanks @masatohoshino.
-- **PR #99986** fix(android): serialize PTT microphone ownership. Thanks @NianJiuZst.
-- **PR #100758** fix(channels): canonicalize bundled module boundaries. Thanks @steipete-oai.
-- **PR #99488** fix(mcp-grant): guard sessionKey.trim() against undefined input. Thanks @zhangLei99586.
-- **PR #99873** fix(android): accept boolean flag aliases in node invoke params. Thanks @ly85206559 and @cursoragent.
-- **PR #100719** fix(ui): show selected agent default model. Related #77440. Thanks @hyspacex and @jwong-art.
-- **PR #100341** fix(crestodian): catch rejection from async respond in sendChat. Thanks @cxbAsDev and @vincentkoc.
-- **PR #100736** feat(ui): redesign session goal into interactive composer pill with elapsed time and /goal edit. Related #100714.
-- **PR #99602** improve(cron): show consecutive failure count and last error in cron CLI output. Thanks @masatohoshino.
-- **PR #99213** fix #99163: harden large chat attachment parsing. Thanks @jincheng-xydt and @vincentkoc and @Taurus52.
-- **PR #99267** Surface config hot-reload watcher status in health. Thanks @masatohoshino and @vincentkoc.
-- **PR #100576** improve: skill auto-capture catches reactive corrections and routes them to existing skills. Thanks @vincentkoc.
-- **PR #100725** fix(ui): proxy canonical inbound media previews. Related #89591. Thanks @sweetcornna and @vergissberlin.
-- **PR #98095** fix(memory-wiki): strip fenced code and inline code before wikilink extraction. Related #97945. Thanks @zhangqueping and @vincentkoc and @Durambar.
-- **PR #100727** fix(ui): open embedded terminal before login gate.
-- **PR #99196** fix(plugins): discover config load.paths plugins when index has entries. Related #99185. Thanks @LeonidasLux and @vincentkoc and @OrcasClaw.
-- **PR #100523** fix(agents): suppress unhandled stdout/stderr stream errors in execDockerRaw. Thanks @cxbAsDev and @vincentkoc.
-- **PR #100572** fix(anthropic): Fable 5 skips context1m setup when enabled. Thanks @zhangguiping-xydt.
-- **PR #100743** fix(control-ui): restore staged media filenames.
-- **PR #100619** feat(browser): restore driver "extension" via a loopback Chrome extension relay (no remote-debugging prompt).
-- **PR #100742** improve(ui): pin sidebar nav above a scrollable session list.
-- **PR #100740** docs(changelog): credit Control UI fixes.
-- **PR #100617** fix(agents): keep missing error details out of auth health. Thanks @fengjikui.
-- **PR #100755** fix(errors): classify rate-limit errors before timeout in detectErrorKind. Thanks @Pick-cat.
-- **PR #100570** fix(telegram): extract canonical rich block text. Thanks @wangwllu.
-- **PR #100781** docs(changelog): add landed PR closeout entries.
-- **PR #100607** Record stale foreground final suppression in transcripts. Related #95490. Thanks @bek91.
-- **PR #100788** feat: start a new chat session in a managed worktree (web, iOS, Android).
-- **PR #100650** refactor: remove dead code and consolidate repeated paths. Thanks @vincentkoc.
-- **PR #100684** fix(compaction): annotate partial summaries with chunk order and source time range. Related #100636. Thanks @zw-xysk and @vincentkoc and @aniruddhaadak80.
-- **PR #100780** fix(tui): harden OSC8 URL boundaries.
-- **PR #100757** fix(update): guard Windows task autostart during package updates. Related #87993. Thanks @vincentkoc and @Ccccc-del.
-- **PR #100762** fix(telegram): add missing 'action' retry context for sendChatAction. Thanks @lzw112 and @vincentkoc.
-- **PR #90063** fix(channels): clarify message receipt delivery evidence. Thanks @pdurlej.
-- **PR #99045** fix(config): return empty string for undefined in safeStringify. Thanks @lzyyzznl.
-- **PR #100779** fix(google): image generation unavailable when google provider set via config apiKey + custom baseUrl. Thanks @amknight.
-- **PR #100745** fix(openai): image generation unavailable when openai provider set via config apiKey + custom baseUrl. Thanks @amknight.
-- **PR #100805** fix(android): add missing new_chat_in_worktree locale strings. Thanks @amknight.
-- **PR #94732** fix(memory): add batch completed log after embedding batch finishes. Thanks @xydt-tanshanshan and @vincentkoc.
-- **PR #100793** fix(ci): repair managed worktree follow-up gates.
-- **PR #100804** fix(protocol): export managed worktree session result types.
-- **PR #100823** refactor: remove proven dead code across runtime surfaces. Thanks @vincentkoc.
-- **PR #100774** feat(ios): model picker favorites and recents with working iOS model switching.
-- **PR #100735** fix: silence heartbeat notify=false fallback replies. Related #80569. Thanks @Hackerismydream and @vincentkoc and @BrianInAz.
-- **PR #100792** fix(browser): close peer-owned tabs on session reset. Thanks @FMLS.
-- **PR #99091** fix: unblock replies after multi-agent room reset. Related #99082. Thanks @ZengWen-DT and @gorkem2020.
-- **PR #100686** fix(agents): Anthropic-compatible streams hang on oversized partial responses. Thanks @zhangguiping-xydt.
-- **PR #100017** fix: normalise wiki lint targets. Related #73574. Thanks @ishangodawatta and @K-Kerrigan.
-- **PR #100694** fix(agents): MiniMax VLM can consume oversized success responses. Thanks @zhangguiping-xydt.
-- **PR #100672** feat: add Anthropic and OpenAI cost history. Related #100608.
-- **PR #100829** feat(ios): render LaTeX display math in chat via SwiftMath.
-- **PR #100786** fix(android): finish PTT relay handoff safely.
-- **PR #98704** feat: correlate native search outcomes in audit history. Related #98521.
-- **PR #100810** feat(ui): add configurable chat send shortcut. Related #8147. Thanks @vincentkoc and @moomx.
-- **PR #100826** fix(android): hide internal chat history rows. Related #87918. Thanks @Iman-Sharif.
-- **PR #100856** refactor(core): remove stale internal exports. Related #100854. Thanks @vincentkoc.
-- **PR #100857** fix(browser): foreground tabs before screenshots. Thanks @spencer2211.
-- **PR #100867** fix(macos): preserve launchd Node gateway in PortGuardian. Related #94476. Thanks @vincentkoc and @lsr911 and @alexph-dev.
-- **PR #100842** fix(macos): keep node invokes responsive during system.run. Related #89423. Thanks @vincentkoc and @Lvan185.
-- **PR #99335** improve: reduce repeated session startup scans. Thanks @momothemage.
-- **PR #100834** fix(heartbeat): catch delivery errors in maybeSendHeartbeatOk to prevent side-effect replays. Thanks @machine3at and @vincentkoc.
-- **PR #90867** fix(auto-reply): warn when /export-session only contains user messages (backend-delegated). Related #90844. Thanks @xydigit-sj and @vincentkoc and @Tank-x3.
-- **PR #100879** feat(android): add chat message actions. Related #57754. Thanks @bdhwan.
-- **PR #100616** fix(diagnostics-otel): route OTLP exports through env proxy. Thanks @jesse-merhi.
-- **PR #100882** refactor: remove unused internal exports. Related #100880. Thanks @vincentkoc.
-- **PR #100799** fix(irc): monitor stays disconnected after IRC socket closes. Thanks @zhangguiping-xydt.
-- **PR #100888** fix(android): open system notifications on tap. Related #96350. Thanks @edwardrmiller.
-- **PR #77904** fix(cli): exit after model inspection output. Thanks @dorukardahan and @vincentkoc.
-- **PR #100828** fix(reply): dedupe duplicate non-streaming final replies. Related #84623. Thanks @vincentkoc and @zhangxiaojiujiayi.
-- **PR #100883** fix(feishu): send card JSON message params as cards. Related #53486. Thanks @vincentkoc and @martingarramon and @ZenoRewn.
-- **PR #100887** chore(cli): cover HF local app flow. Thanks @osolmaz.
-- **PR #100814** feat(sessions): grouping, unread state, and full session controls on web, iOS, and Android. Related #100739.
-- **PR #100789** feat(ui): show background tasks live in the web Control UI. Related #100706.
-- **PR #100832** fix(agents): preserve blank lines in multi-question user input fallback parsing. Thanks @machine3at.
-- **PR #100909** refactor(agents): localize internal-only symbols. Thanks @vincentkoc.
-- **PR #100801** fix(cron): accept null fallbacks in update patch payload (#100707). Thanks @SunnyShu0925 and @yoyo837.
-- **PR #100903** fix(tests): restore shared-kit test module compilation after NSNull coalesce.
-- **PR #100836** fix(cron): use direct lookup instead of paginated search in cron edit. Thanks @machine3at and @vincentkoc.
-- **PR #100898** feat(android): tap-to-expand link previews in chat transcript.
-- **PR #100904** fix(memory): fall back to wiki for missing all-corpus reads. Thanks @mushuiyu886 and @vincentkoc.
-- **PR #100897** test: align shifted main assertions. Thanks @vincentkoc.
-- **PR #100931** refactor(ui): localize internal-only symbols. Related #100930. Thanks @vincentkoc.
-- **PR #100950** fix(test): preflight targeted UI e2e. Thanks @vincentkoc.
-- **PR #62682** fix(agents): distinguish terminal aborts from retryable failures (#60388). Thanks @simonusa and @altaywtf and @cinapbot.
-- **PR #87085** fix(gateway): stop chat timeout fallback cascade. Related #83962. Thanks @BunsDev and @altaywtf and @castorle7-rgb.
-- **PR #100884** feat(ios): word-paced fade-in for streaming assistant prose.
-- **PR #100798** feat(android): in-chat model picker with favorites and recents.
-- **PR #89086** fix(browser): preserve HTTP status in node-proxied browser errors. Thanks @rhclaw.
-- **PR #100961** chore(swabble): stop tracking Package.resolved clobbered by Xcode resolution.
-- **PR #100875** feat(ios): hide the thinking-level control for models without reasoning support.
-- **PR #100744** fix(agents): avoid shell snapshot stdout pipe failures. Thanks @lsr911 and @vincentkoc.
-- **PR #100754** feat(control-ui): multi-pane split view for chat. Related #100690.
-- **PR #100952** refactor(ui): trim unused type surface. Related #100951. Thanks @vincentkoc.
-- **PR #100927** fix(ui): keep sidebar session order stable. Thanks @vyctorbrzezowski.
-- **PR #100959** fix(android): finish onboarding after permission reapproval. Related #100949.
-- **PR #99607** fix: keep Bedrock live smoke on Bedrock runtime. Related #87876. Thanks @brian-bell and @Haderach-Ram.
-- **PR #76922** fix(cli): exit after hooks inspection output. Thanks @dorukardahan.
-- **PR #90038** fix(discord): surface failed bulk reaction removals instead of false success. Thanks @masatohoshino.
-- **PR #100850** fix(cli): handle stdout/stderr stream errors in execFileUtf8Tail. Thanks @cxbAsDev and @vincentkoc.
-- **PR #98821** fix(gateway): dedupe MCP schema conflict warnings. Thanks @harjothkhara.
-- **PR #100967** feat(android): support opt-in background location. Related #68581. Thanks @ioridev and @jkobject.
-- **PR #100975** refactor(telegram): localize private implementation types. Thanks @vincentkoc.
-- **PR #100648** feat(ui): stable session order, palette-only search, and macOS titlebar brand for the sidebar.
-- **PR #100738** feat(gateway): read-only agents.workspace list/get browsing RPCs.
-- **PR #93827** fix(gateway): hot-reload browser profile config. Related #43803. Thanks @goutamadwant and @piston4711.
-- **PR #100558** fix(acp): catch unhandled rejection from handleGatewayEvent in event callback. Thanks @ajwan8998.
-- **PR #100981** fix: keep newly created sidebar sessions visible after switching chats. Thanks @shakkernerd.
-- **PR #100803** fix: keep /steer working for active runs. Related #100796. Thanks @Hackerismydream and @najef1979-code.
-- **PR #96401** fix(discord): keep default account online when adding named accounts. Related #92985. Thanks @849261680 and @tinny-w.
-- **PR #100753** feat(diffs): changed-files summary nav for multi-file patch diffs. Related #100673.
-- **PR #100989** refactor(workboard): localize private store types. Thanks @vincentkoc.
-- **PR #100656** feat(crestodian): AI-only conversation with model-judged approvals. Related #100604.
-- **PR #100855** fix(ssh-tunnel): ignore stderr stream errors during teardown. Thanks @cxbAsDev and @vincentkoc.
-- **PR #100846** fix(cron): do not set delivery mode to announce when disabling best-effort on payload edits. Thanks @machine3at.
-- **PR #100849** fix(node-host): handle stdout/stderr stream errors in runCommand. Thanks @cxbAsDev.
-- **PR #100985** fix(android): keep chat model selection synchronized.
-- **PR #100868** fix(telegram): pass proxy and apiRoot config when resolving runtime target usernames. Thanks @machine3at.
-- **PR #97803** fix(runtime): throw typed ExitError instead of generic Error for simulated exit (#97796). Thanks @maweibin and @aniruddhaadak80.
-- **PR #100831** fix(openai): strip status from replayed input items for custom openai-responses endpoints. Related #100657. Thanks @chenxiaoyu209 and @zpvel.
-- **PR #100861** fix(auto-reply): handle stderr stream errors in sandbox media scpFile. Thanks @cxbAsDev.
-- **PR #100863** fix(telegram): stop local listener and bot on retry loop non-recoverable error. Thanks @machine3at.
-- **PR #99998** fix(discord): bound gateway websocket payloads. Thanks @sunlit-deng.
-- **PR #99985** fix(sessions): exclude done sessions from transcript freshness rollover guard. Related #99964. Thanks @SunnyShu0925 and @5R7W9.
-- **PR #100910** fix(agents): retry transient filesystem races when reading workspace bootstrap files. Thanks @masatohoshino and @vincentkoc.
-- **PR #100900** fix(memory-wiki): bridge status crashes on malformed memory-plugin artifacts and ignores readMemoryArtifacts=false. Related #100899. Thanks @huveewomg.
-- **PR #100776** feat(android): read-only workspace Files browser with preview and share.
-- **PR #100995** fix(ui): move Worktrees page from the sidebar into Settings navigation.
-- **PR #100768** feat(ios): per-gateway custom headers for gateways behind authenticating proxies.
-- **PR #90503** fix(sessions): sweep orphan store temp files. Related #89520. Thanks @sahibzada-allahyar and @gideonblaauw-creator.
-- **PR #100976** fix: device pairing floods stacked approval alerts for a retrying device and stale approvals no-op. Related #100974.
-- **PR #100902** fix(memory-wiki): shared search crashes with "search is not a function" when the memory plugin lacks a full search manager. Related #100901. Thanks @huveewomg.
-- **PR #99707** refactor(qa): add canonical live channel adapters. Related #99699. Thanks @RomneyDa.
-- **PR #99768** refactor: consolidate byte-size formatting. Thanks @RomneyDa.
-- **PR #98184** feat(doctor): warn when cron delivery targets inactive channel. Thanks @masatohoshino and @vincentkoc.
-- **PR #100679** feat(ui): clickable file links in chat with a workspace file viewer sidebar. Related #100615.
-- **PR #100767** feat(ios): read-only workspace Files browser on the Agents surface.
-- **PR #92167** fix(media): recognize .m2a files as audio. Related #23014. Thanks @llljjjwww333 and @mayonaissse.
-- **PR #100765** feat(android): per-gateway custom headers for gateways behind authenticating proxies.
-- **PR #101013** refactor(ui): localize view prop types. Related #101011. Thanks @vincentkoc.
-- **PR #87937** fix(browser): read Windows Chrome version from build dir in doctor. Related #87312. Thanks @MukundaKatta and @gaodaabao.
-- **PR #97665** fix(control-ui): WebSocket connects to wrong gateway when two share an origin. Related #97636. Thanks @Alix-007 and @fernandol-nvidia.
-- **PR #100722** fix(codex): honor timeoutSeconds for dynamic tool calls when timeoutMs is absent. Related #98864. Thanks @cxbAsDev and @carterstebbins23-spec.
-- **PR #100942** fix(ios): keep offline chat sends on their original route.
-- **PR #100784** fix(discord): limit implicit reply fanout. Related #99068. Thanks @qingminglong and @revision-co-ltd.
-- **PR #99700** policy: repair required deny tool findings. Thanks @giodl73-repo.
-- **PR #100691** fix(acp): close shared state database on gateway shutdown (#100637). Thanks @LZY3538 and @amknight and @aniruddhaadak80.
-- **PR #97587** fix(google): bound OAuth project and token JSON response reads. Thanks @hugenshen.
-- **PR #99169** fix(qa-channel): bound QA bus JSON response reads. Thanks @hugenshen.
-- **PR #100501** feat(providers): add LongCat API support. Related #100485. Thanks @vincentkoc.
-- **PR #97579** fix(plugin-sdk): bound Copilot token exchange JSON response reads. Thanks @hugenshen.
-- **PR #100994** feat(android): richer Settings About screen with mascot hero and project links.
-- **PR #101027** fix(cron): keep implicit announcements when disabling best-effort.
-- **PR #101043** fix: carry 2026.7.1 stability repairs into main. Thanks @vincentkoc.
-- **PR #100770** feat(gateway): add tts.speak method returning synthesized audio inline.
-- **PR #100990** refactor(plugins): require initialized registry collections. Thanks @RomneyDa.
-- **PR #100304** style(android): apply ktlint to landed changes.
-- **PR #100992** refactor(test): consolidate script declaration contracts. Thanks @RomneyDa.
-- **PR #100750** fix(lmstudio): respect embedding preload context limits. Related #97016. Thanks @zak-li and @ZOOWH and @hxz398.
-- **PR #101041** refactor(packages): localize internal helper types. Related #101040. Thanks @vincentkoc.
-- **PR #100966** fix(android): stabilize chat refresh loading. Thanks @Solvely-Colin.
-- **PR #100943** improve(ui): sessions page fits on one screen with per-session overrides in a row drawer.
-- **PR #100993** fix(android): clarify SMS command authorization. Related #91781. Thanks @narcissus0702.
-- **PR #101038** fix(ui): move sidebar collapse toggle from the topbar into the sidebar footer.
-- **PR #100741** fix(crestodian): suppress unhandled stdout/stderr stream errors in probeLocalCommand. Thanks @lsr911.
-- **PR #96503** fix(openai): stop double-prefixing SSE bodies mislabeled as JSON. Related #96497. Thanks @ZengWen-DT and @54meteor.
-- **PR #100833** fix(auth): preserve copied auth profile order. Thanks @machine3at.
-- **PR #100891** fix(feishu): avoid mention forwarding when bot open id is unavailable. Thanks @zhangguiping-xydt.
-- **PR #98165** fix(agents): preserve overload wording for rate-limited responses. Thanks @SunnyShu0925.
-- **PR #91907** fix(test): skip live auth browser caches. Related #91893. Thanks @BryanTegomoh and @pikaqqqqqq.
-- **PR #99125** fix(msteams): bound Bot Framework attachmentInfo JSON response reads. Thanks @ly85206559.
-- **PR #99711** fix(discord): send fresh final messages after previews. Related #99662. Thanks @davelutztx and @xena68.
-- **PR #96557** fix(cli): explain inherited config defaults cannot be unset. Thanks @moeghashim.
-- **PR #93389** fix(memory-core): keep daily ingestion outside session repair. Thanks @Alix-007 and @vincentkoc.
-- **PR #100996** fix(line): surface partial delivery when rich or media send fails alongside text. Thanks @masatohoshino.
-- **PR #100771** feat(ios): add Listen action speaking assistant messages via gateway TTS.
-- **PR #101007** fix(agents): bound tool_search_code stderr accumulation. Thanks @hugenshen and @vincentkoc.
-- **PR #101100** feat(ui): select microphones from the Talk control. Related #101046.
-- **PR #101088** fix(discord): handle ffmpeg stderr stream errors in voice playback. Thanks @masatohoshino.
-- **PR #101029** fix(cli): keep UTF-8 log tails valid. Thanks @ly85206559.
-- **PR #101063** refactor(qa): move restart and policy scenarios to YAML. Thanks @RomneyDa.
-- **PR #101081** fix(android): restore lint validation. Thanks @vincentkoc.
-- **PR #101109** fix(gateway): keep N-1 nodes manageable during upgrades. Related #83736. Thanks @jtczville.
-- **PR #101085** fix(infra): wrap sha256File stream errors with context instead of leaking raw rejects. Thanks @cxbAsDev and @vincentkoc.
-- **PR #100986** fix(browser): navigate works with CDP hostname allowlist. Related #100819. Thanks @NianJiuZst and @SarinV.
-- **PR #98922** [codex] Allow reply_payload_sending to add portable buttons. Thanks @goldmar.
-- **PR #101080** refactor(qa): canonicalize channel command scenarios. Related #101015. Thanks @RomneyDa.
-- **PR #94736** fix(discord): use configured statusReactions.timing instead of DEFAULT_TIMING. Related #78431. Thanks @LiuwqGit and @cedricjanssens.
-- **PR #101128** docs(changelog): credit small bugfix batch.
-- **PR #100948** feat(ios): pair multiple gateways and switch between them without re-pairing.
-- **PR #100772** feat(android): add Listen action speaking assistant messages via gateway TTS.
-- **PR #100973** Let owner-operated Codex agents use connected account apps. Thanks @pash-openai.
-- **PR #101123** improve(ui): sidebar rail polish; hide Workboard nav while the plugin is disabled.
-- **PR #99791** fix(media-understanding): video auto-selection runs without a model. Thanks @zhangguiping-xydt and @vincentkoc.
-- **PR #101135** refactor(ui): localize internal type exports. Thanks @vincentkoc.
-- **PR #100889** fix(browser): bound client fetch success JSON reads. Thanks @mushuiyu886.
-- **PR #90365** test(browser): replace broad win32 skip with dynamic directory symlink check. Thanks @aniruddhaadak80.
-- **PR #101158** fix(agents): handle find subprocess stream failures. Thanks @cxbAsDev.
-- **PR #101132** feat(macos): load provider catalog during AI onboarding. Related #101019.
-- **PR #101051** chore: add provider and scheduler runtime evidence. Related #101010. Thanks @RomneyDa.
-- **PR #101045** chore(docker): execute Compose and package artifact proofs. Related #101039. Thanks @RomneyDa.
-- **PR #100964** feat(gateway): let write-scope operators manage chat session organization.
-- **PR #101170** fix(android): prevent native notification cross-session replies. Related #48516. Thanks @dyoung522.
-- **PR #101184** Revert "fix(qa): keep smoke profile on one channel". Thanks @RomneyDa.
-- **PR #101185** ci: temporarily disable QA smoke. Thanks @RomneyDa.
-- **PR #101178** chore(scripts): add debt ratchet to the session-accessor boundary guard. Thanks @jalehman.
-- **PR #101008** fix(device-pair): mobile pairing rejects local IPv6 cleartext URLs. Thanks @zhangguiping-xydt.
-- **PR #101160** fix(infra): contain SSH config probe stream failures. Thanks @cxbAsDev.
-- **PR #101124** fix(discord): terminate ffmpeg on stream errors.
-- **PR #101032** fix(agents): handle stdin stream errors in docker sandbox execution. Thanks @cxbAsDev.
-- **PR #101014** fix(agents): handle ripgrep stdout/stderr stream errors in grep tool. Thanks @cxbAsDev.
-- **PR #101044** fix(acp): preserve runtime option clears. Thanks @mushuiyu886.
-- **PR #98861** fix(browser): guard readFields JSON.parse against malformed CLI input. Thanks @lsr911.
-- **PR #101196** ci: keep native landing validation off queued Blacksmith capacity.
-- **PR #101171** fix(browser): keep CDP discovery on the configured host.
-- **PR #100461** feat(ui): redesign chat composer controls. Thanks @fuller-stack-dev.
-- **PR #97038** fix(edit): show candidate lines with similarity scores on oldText match failure. Related #97032. Thanks @ZOOWH and @vincentkoc and @aocogoal-gethub.
-- **PR #98617** fix(device-pair): remove INADDR_ANY and IPv6 unspecified from isLoopbackHost. Thanks @crh-code.
-- **PR #101192** fix: prevent context-engine wedges after session rotation.
-- **PR #101115** fix(tlon): bound Memex upload JSON response read. Thanks @cxbAsDev.
-- **PR #101079** fix(extensions/huggingface): bound model discovery JSON response read to prevent OOM. Thanks @cxbAsDev.
-- **PR #101176** fix(clawhub): bound archive download bodies.
-- **PR #90749** Fix realtime voice-call barge-in cancellation. Thanks @moellenbeck.
-- **PR #100947** feat(android): pair multiple gateways and switch between them without re-pairing.
-- **PR #98682** fix(discord): bound gateway metadata response body reads to prevent OOM. Thanks @wings1029.
-- **PR #101036** fix: sanitize streamed assistant payload text. Thanks @velanir-ai-manager.
-- **PR #101183** feat(ios): context-window usage indicator in the chat composer.
-- **PR #96183** fix(discord): download attachments at receipt time, not after the run queue. Related #96165. Thanks @ZacharyYW and @judsonnudson.
-- **PR #101198** feat(ios): tap-to-expand link previews in chat transcript.
-- **PR #101193** feat(android): record and send voice notes from the chat composer.
-- **PR #100896** fix(discord): messages sent during gateway reconnect are silently dropped. Related #56610. Thanks @tiffanychum and @Godecule.
-- **PR #101181** fix(agents): preserve preflight overflow token counts into recovery budgeting. Thanks @jalehman.
-- **PR #101102** feat(android): server-backed session search with offline fallback.
-- **PR #98254** feat(models): add Claude Sonnet 5 support. Thanks @vortexopenclaw.
-- **PR #101206** fix: npm upgrade install fails with InstalledDistScanLimitError as packaged dist grows.
-- **PR #101213** fix(windows): repair legacy gateway fallback updates. Related #87156. Thanks @vincentkoc and @igormf.
-- **PR #100946** feat(ios): record and send voice notes from the chat composer.
-- **PR #101092** feat(provider): add Featherless AI integration. Related #101065. Thanks @vincentkoc.
-- **PR #99479** fix(openai): bound Codex OAuth token response body reads with readResponseWithLimit. Thanks @Pandah97.
-- **PR #99884** fix(web-shared): bound response.text() fallback to honor maxBytes. Thanks @zenglingbiao.
-- **PR #101091** test: execute media and Talk runtime boundaries. Related #101074. Thanks @RomneyDa.
-- **PR #101169** fix(control-ui): make long /btw side results scrollable. Thanks @SnoutFirst.
-- **PR #101053** feat(apple): session search, archived browsing, and sheet management actions.
-- **PR #101218** fix(macos): keep onboarding green across gateway plugin restart.
-- **PR #101223** fix(ci): stabilize Windows startup fallback tests.
-- **PR #101212** feat(android): publish signed APKs with stable releases. Related #9443. Thanks @AstridQing-AI.
-- **PR #101219** fix(gateway): don't over-claim a crash on a 1006 abnormal close. Thanks @Darren2030 and @vincentkoc.
-- **PR #96157** fix(memory-core): clamp widen-fallback kNN k to sqlite-vec 4096 limit. Thanks @itsuzef and @vincentkoc.
-- **PR #101117** feat(ui): rename, delete, and toggle sidebar session groups. Related #101116.
-- **PR #101232** chore(i18n): refresh native source inventory.
-- **PR #101233** chore(i18n): refresh native inventory line anchors. Thanks @vincentkoc.
-- **PR #101186** fix(qa): restore automatic smoke coverage across channels. Thanks @vincentkoc and @RomneyDa.
-- **PR #101234** feat(mobile): rename, delete, and create session groups on iOS and Android. Related #101231.
-- **PR #101072** improve(android): align command palette row affordances. Thanks @IWhatsskill.
-- **PR #101082** fix(msteams): bound Graph attachment JSON responses. Thanks @cxbAsDev.
-- **PR #101238** feat(models): add Claude Mythos 5 support. Related #101215. Thanks @vincentkoc.
-- **PR #101236** fix(ios): persist voice notes through offline delivery.
-- **PR #98940** fix(browser): bound response text decoding. Thanks @Pandah97.
-- **PR #101165** refactor(ui): localize internal type exports. Thanks @vincentkoc.
-- **PR #101242** docs: refresh generated map for Mythos heading.
-- **PR #101112** test(qa): migrate channel thread and DM isolation scenarios. Related #101111. Thanks @RomneyDa.
-- **PR #89997** fix(cli): protect protocol stdout during startup. Thanks @kenners22 and @vincentkoc.
-- **PR #101243** refactor(deadcode): localize internal type aliases. Thanks @vincentkoc.
-- **PR #100895** fix(android): tune screenshot mode visual sizing. Thanks @IWhatsskill.
-- **PR #99720** policy: repair channel ingress findings. Thanks @giodl73-repo.
-- **PR #101179** refactor(sessions): route new session store bypasses through the accessor. Thanks @jalehman.
-- **PR #101103** feat(macos): redesign chat window as native shell with sessions sidebar, toolbar pickers, slash commands, and context usage. Related #101086.
-- **PR #101180** refactor(sessions): move inbound meta, goals, and delivery reads behind the session accessor. Thanks @jalehman.
-- **PR #101161** fix(android): stabilize recent sessions overview. Thanks @Solvely-Colin.
-- **PR #97732** fix(security): align browser audit with plugin policy. Thanks @amtellezfernandez.
-- **PR #101076** test(qa): use qa flow for channel routing scenarios. Related #101073. Thanks @RomneyDa.
-- **PR #101106** [codex] retry whatsapp session init conflicts. Thanks @andersonjeccel.
-- **PR #98639** fix(auto-reply): stop treating wait as abort trigger. Thanks @ianchen08.
-- **PR #101210** refactor(codex): store app-server thread bindings in SQLite plugin state.
-- **PR #101222** fix(chat.abort): pass stored sessionId to match active embedded runs. Thanks @ZOOWH.
-- **PR #101009** fix(agents): normalize surrogate cache fingerprints. Related #100957. Thanks @qingminglong and @aniruddhaadak80.
-- **PR #98312** fix(agent-model): omit synthesized maxTokens fallback when nothing was configured. Related #98295. Thanks @Sanjays2402 and @Peole.
-- **PR #101084** fix(imessage): handle stdout/stderr stream errors in the RPC client child. Thanks @masatohoshino.
-- **PR #100807** fix: code-block copy jumps chat to message top. Thanks @Jvlegod.
-- **PR #101002** feat(android): hide thinking control and gate sends for models without reasoning support.
-- **PR #101214** feat(skills): background lifecycle curator for workshop-created skills.
-- **PR #101191** feat(control-ui): drag sessions into split view with animated drop preview. Related #101034.
-- **PR #101245** fix(acp): record cancelled background turns as cancelled, not succeeded. Thanks @masatohoshino and @vincentkoc.
-- **PR #101220** fix(codex): project guardianWarning circuit-breaker notification. Related #101207. Thanks @Darren2030 and @vincentkoc and @kevinlin-openai.
-- **PR #101235** fix ios qr scanner lifecycle. Thanks @Solvely-Colin and @joshavant.
-- **PR #100438** feat(update): notify extended-stable availability. Thanks @kevinslin.
-- **PR #101292** fix(discord): prioritize eligible default account. Related #77429. Thanks @TurboTheTurtle and @ramitrkar-hash.
-- **PR #100632** fix(onboard): keep the wizard alive through provider auth failures and polish standalone install UX.
-- **PR #80422** feat(android): add chat agent selector. Thanks @bcperry.
-- **PR #101262** refactor(ui): remove unused module exports. Thanks @vincentkoc.
-- **PR #101031** fix(agents): handle stdout/stderr stream errors in ssh sandbox commands. Thanks @cxbAsDev.
-- **PR #101315** fix(proxy): handle aborted upstream responses. Thanks @SebTardif.
-- **PR #101295** fix(agents): harden tool search child streams. Thanks @cxbAsDev.
-- **PR #101244** fix(diagnostics-otel): surface error message on run/harness error spans. Thanks @amknight.
-- **PR #101127** feat(browser): pair the Chrome extension directly to a remote gateway.
-- **PR #100233** fix(agents): send session_id affinity header to ChatGPT Responses backend. Related #100232. Thanks @Marvinthebored.
-- **PR #100272** fix(agents): carry current-turn inbound metadata in a tail runtime-context message for byte-stable prompt caching. Related #100271. Thanks @Marvinthebored.
-- **PR #101321** fix(android): send chat with hardware Enter. Related #101239. Thanks @3ninyt3nin-creator.
-- **PR #95718** Add native Signal reply quotes. Thanks @jesse-merhi.
-- **PR #101105** fix(macos): preserve device identity storage. Related #99283. Thanks @yetval and @iamyhzhao.
-- **PR #101322** fix(memory): preserve archived sessions with cron-shaped user text. Related #98241. Thanks @ly-wang19 and @yetval.
-- **PR #101331** test(gateway): isolate reload handler plugin records. Thanks @obviyus.
-- **PR #101264** fix: block WhatsApp direct sends during reachout timelock. Thanks @mcaxtr.
-- **PR #101131** QA-lab credentials-admin response bound. Thanks @cxbAsDev.
-- **PR #101275** ci: fail Android PRs on ktlint formatting drift.
-- **PR #101281** fix(codex): crestodian ring-zero tool hidden behind tool search when the dead per-run plugin config override is ignored.
-- **PR #95596** fix: preserve steered audio for inbound TTS. Related #76831. Thanks @mcaxtr and @aleps001.
-- **PR #101339** refactor(ui): localize unused module exports. Thanks @vincentkoc.
-- **PR #101256** fix(models): refresh provider auth after CLI login. Related #101254. Thanks @fuller-stack-dev.
-- **PR #101228** fix(update): keep self-updates on the running install's global root. Thanks @buddyh.
-- **PR #101062** fix(infra): swallow mid-stream read errors in session-cost readJsonlRecords. Thanks @cxbAsDev and @vincentkoc.
-- **PR #101258** fix(telegram): add UND_ERR_CONNECT_TIMEOUT to PRE_CONNECT_ERROR_CODES. Thanks @lzw112.
-- **PR #101355** fix(text): keep bounded outputs UTF-16 safe. Thanks @vincentkoc and @Alix-007.
-- **PR #101230** fix(markdown-core): CJK-friendly emphasis flanking so **标签:**正文 renders bold (#101120). Thanks @nicknmorty and @j08577600-jpg.
-- **PR #101357** fix: route Anthropic SDK clients through guarded transport. Thanks @wangmiao0668000666.
-- **PR #98693** fix(mattermost): strip internal tool-trace banners from outbound text. Thanks @ZengWen-DT and @cursoragent.
-- **PR #101221** refactor(codex): raise app-server floor to 0.142, drop range compat, fix deferred spawn_agent steering.
-- **PR #86526** fix(openai): allow RFC 2544 fake-IP range for Realtime session requests. Thanks @shushushv.
-- **PR #101359** fix(minimax): clarify TTS volume boundary. Thanks @Quratulain-bilal.
-- **PR #101362** refactor(memory): remove unused host SDK exports. Thanks @vincentkoc.
-- **PR #101364** fix(feishu): keep operator logs UTF-16 safe. Thanks @ZengWen-DT.
-- **PR #101118** fix: pace delivery recovery after startup outages. Related #101058. Thanks @ZengWen-DT and @aniruddhaadak80.
-- **PR #101174** improve(ci): raise Node shard parallelism to 28. Thanks @vincentkoc.
-- **PR #95832** feat(voice-call): support Twilio calls in IE1 and AU1. Related #95828. Thanks @jodok.
-- **PR #96980** fix(tui): deduplicate assistant messages across sessions.changed reload. Related #96967. Thanks @xialonglee and @daemonegpt.
-- **PR #101182** feat(context-engine): report compaction successors as typed session targets. Thanks @jalehman.
-- **PR #101373** fix: prevent Copilot Claude sessions failing after empty tool errors. Related #97292. Thanks @galiniliev.
-- **PR #101369** feat(browser): expose agent download actions. Thanks @GRD-Chang.
-- **PR #95902** fix(gateway): show last error when status probe fails. Thanks @wAngByg and @vincentkoc.
-- **PR #101177** fix(usage): preserve provider-billed zero totals. Thanks @snowzlmbot.
-- **PR #101372** fix(tests): reorder initializer arguments so the shared-kit test module compiles.
-- **PR #101360** fix(android): handle hardware Enter without breaking IME input. Related #101239. Thanks @joshavant and @3ninyt3nin-creator.
-- **PR #101246** fix(security): route temp workspaces through private OpenClaw temp root (#101224). Thanks @yangxiansheng and @ch3ch2cho2021.
-- **PR #99888** fix(ios): full-row Settings toggles on iOS 26. Thanks @ly85206559 and @cursoragent.
-- **PR #101366** fix(windows): remove findstr from restart probe. Related #84600. Thanks @deepujain and @13884379776l.
-- **PR #93862** fix: avoid reminder-guard false positives for plain memory promises (#47586). Thanks @arkyu2077 and @moltpill.
-- **PR #101379** refactor(copilot): localize internal runtime types. Thanks @vincentkoc.
-- **PR #85238** fix: include pnpm 11 bins in gateway PATH. Related #80206. Thanks @shbernal and @vincentkoc and @AdoShan.
-- **PR #83630** fix(doctor): preview missing transcript cleanup. Related #54877. Thanks @YuanHanzhong and @Suidge.
-- **PR #93335** fix(thinking): clamp below-range requests down to the cheapest level,…. Thanks @obuchowski.
-- **PR #101378** fix: Windows CLI backends fail through npm shims. Related #91489, #92054, #98573. Thanks @wendy-chsy and @Vilard7 and @arturomagdiel and @studiodevlabs.
-- **PR #101393** refactor(github-copilot): localize internal helpers. Thanks @vincentkoc.
-- **PR #101055** refactor(qa): drive Matrix lifecycle through channel drivers. Related #101054. Thanks @RomneyDa.
-- **PR #101390** feat(openai): support gpt-realtime-2.1. Thanks @vincentkoc.
-- **PR #101024** fix(outbound): retry proven pre-connect failures. Related #100979. Thanks @SunnyShu0925 and @tiffanychum.
-- **PR #101376** refactor(codex): keyed turn routing, client-scoped rate limits, and resume subscription safety. Related #101338.
-- **PR #101406** refactor(plugins): localize private declarations. Thanks @vincentkoc.
-- **PR #101042** fix(agents): avoid repeated item progress snapshots. Thanks @mushuiyu886.
-- **PR #101311** fix(agents): keep structured prompt summaries UTF-16 safe. Thanks @Alix-007.
-- **PR #101370** fix(agent-core): handle stdout/stderr stream errors in harness exec. Thanks @wings1029.
-- **PR #72092** fix(media): allow Bedrock SDK auth for image and PDF tools. Related #72031. Thanks @truffle-dev and @GunnarHelliesen.
-- **PR #89899** fix(plugin-sdk): align speech runtime packaging. Related #89425. Thanks @zhangguiping-xydt and @ant1b0t.
-- **PR #98505** fix(ports): ignore malformed lsof listener pids. Thanks @QiuYuang and @vincentkoc.
-- **PR #101425** refactor(plugins): localize provider internals. Thanks @vincentkoc.
-- **PR #101352** fix(ui): preserve login across same-origin gateways. Related #101351. Thanks @fuller-stack-dev.
-- **PR #101271** fix: keep owner tools available in WebChat. Thanks @fuller-stack-dev.
-- **PR #101356** chore(android): update dependencies and compile with API 37.
-- **PR #101293** fix(ui): clear stale sidebar run state after chat final. Thanks @fuller-stack-dev.
-- **PR #101392** fix(process): fall back when Windows taskkill cannot spawn. Related #101381. Thanks @ZengWen-DT and @aniruddhaadak80.
-- **PR #101377** fix(ui): keep microphone input settings usable on narrow screens. Thanks @fuller-stack-dev.
-- **PR #100236** feat(cli): add openclaw promos to discover and claim ClawHub promotional model offers. Related #100234. Thanks @fuller-stack-dev.
-- **PR #101443** fix(llm): preserve schema tools across OpenAI failover. Related #97020. Thanks @chrisbaker2000.
-- **PR #101371** fix: show exported tool results in trace viewers. Thanks @amknight.
-- **PR #101440** refactor(opencode-go): localize stream internals. Thanks @vincentkoc.
-- **PR #101401** fix(imessage): handle CLI child stdout/stderr stream errors. Thanks @cxbAsDev.
-- **PR #101421** fix(qqbot): use UTF-16-safe truncation for messaging reply and approval previews. Thanks @wangmiao0668000666.
-- **PR #96147** fix(doctor): surface multi-account default routing warnings in preview and lint. Thanks @Pick-cat and @vincentkoc.
-- **PR #101394** fix(voice-call): handle tunnel child stream errors and stop-after-exit hang. Thanks @cxbAsDev.
-- **PR #101452** refactor(plugins): localize private config types. Thanks @vincentkoc.
-- **PR #101402** fix(memory-host-sdk): handle stdout/stderr stream errors in runCliCommand. Thanks @wings1029.
-- **PR #101415** fix(anthropic): resolve thinking as disabled when legacy budget is below 1024. Thanks @Pick-cat.
-- **PR #101388** feat(ios): render inline LaTeX math in completed chat prose.
-- **PR #86936** fix(gateway): persist media metadata in agent.request transcripts. Related #60339. Thanks @peterdsp and @Syysean.
-- **PR #101391** fix(signal): bound outbound container attachment file reads. Thanks @cxbAsDev.
-- **PR #101337** fix(status): surface auto-fallback model in status and session_status (#96126). Thanks @LZY3538 and @nblue1-ui.
-- **PR #101470** refactor(android): remove obsolete global cache cleanup. Thanks @vincentkoc.
-- **PR #101449** fix(backup): isolate retry temp archives. Related #101382. Thanks @LiLan0125 and @vincentkoc and @aniruddhaadak80.
-- **PR #101481** fix(ios): skip onboarding for configured gateways. Related #98570. Thanks @siebej.
-- **PR #99366** fix(mattermost): reject oversized websocket events. Thanks @sunlit-deng.
-- **PR #99745** fix(telegram): harden rich send fallback and typing breaker. Related #99471. Thanks @snowzlmbot and @Veda-openclaw.
-- **PR #94431** fix(cli): accept parent options placed after lazy subcommands (#55563 regression 1) [AI-assisted]. Thanks @ml12580 and @Owlock.
-- **PR #101508** refactor(memory): localize unused host SDK exports. Thanks @vincentkoc.
-- **PR #101464** fix(backup): close archive stream before retry cleanup. Related #101382. Thanks @ZOOWH and @aniruddhaadak80.
-- **PR #101507** fix(agent): preserve explicit recipient sessions. Related #41483. Thanks @vincentkoc and @pingfanfan and @limpicompany-maker.
-- **PR #101413** fix(gateway): reset channel restart counter after a stable run. Thanks @clintoncodewell.
-- **PR #101516** fix(qqbot): keep bounded previews UTF-16 safe. Thanks @vincentkoc and @wangmiao0668000666.
-- **PR #101273** fix(android): auto-detect the Android SDK when fresh worktrees lack local.properties.
-- **PR #101387** feat(ios): og:image thumbnails on link preview cards.
-- **PR #101523** refactor(agent-core): localize exec timeout helper. Thanks @vincentkoc.
-- **PR #101519** fix(android): stop saved gateway reconnect CI flake.
-- **PR #97784** fix(msteams): bound Microsoft Graph API response reads in graph-upload to prevent OOM. Thanks @Alix-007.
-- **PR #101396** feat(android): og:image thumbnails on link preview cards.
-- **PR #101298** fix(media): keep audit context truncation UTF-16 safe. Thanks @Alix-007.
-- **PR #101303** fix(agents): keep prompt data truncation UTF-16 safe. Thanks @Alix-007.
-- **PR #101549** refactor(ui): remove stale helper exports. Thanks @vincentkoc.
-- **PR #101350** fix: block mixed-case cron shell jobs from agent tool [AI]. Thanks @pgondhi987.
-- **PR #101522** feat(gateway): archive-gated session deletes give Android delete parity.
-- **PR #100472** ci(mantis): add web UI chat proof lane. Thanks @brokemac79.
-- **PR #101312** fix(web-fetch): keep spill content truncation UTF-16 safe. Thanks @Alix-007.
-- **PR #101497** feat(ui): redesign dashboard chrome with tiny top bar and sidebar search.
-- **PR #101548** fix(zalo): accept opaque string chat IDs. Related #57594. Thanks @goutamadwant and @malayvuong.
-- **PR #101532** fix(ui): send approvals past busy chat queue. Thanks @vincentkoc.
-- **PR #101304** fix(voice-call): keep realtime context truncation UTF-16 safe. Thanks @Alix-007.
-- **PR #100835** fix(ssrf): block loopback addresses for trusted hostname origins. Thanks @machine3at.
-- **PR #89367** fix: forward pending timeout snapshot in waitForAgentJob fallback timer. Related #89095. Thanks @Pick-cat and @sunnydongbo.
-- **PR #101550** fix(ios): serialize screen recording finalization. Related #99056. Thanks @Tony-ooo.
-- **PR #101484** fix(codex): Pro model first turns fail when reasoning defaults to minimal. Thanks @zhangguiping-xydt and @vincentkoc.
-- **PR #101551** fix(discord): keep thread title prompts UTF-16 safe. Thanks @Alix-007.
-- **PR #101560** fix(android): bound link preview image cache.
-- **PR #101566** docs(changelog): credit Discord thread title fix.
-- **PR #99180** fix(mcp): reject tools/call requests with non-object arguments. Thanks @VectorPeak.
-- **PR #101568** refactor(memory): localize host SDK helpers. Thanks @vincentkoc.
-- **PR #101561** fix(exec): keep pending approval warnings truthful. Thanks @vincentkoc.
-- **PR #101505** fix(codex): handle app-server stdio stream errors. Thanks @mushuiyu886 and @vincentkoc.
-- **PR #101503** fix(status): keep issue message truncation UTF-16 safe. Thanks @wm0018.
-- **PR #99950** fix: route direct outbound polls through channel adapters. Thanks @NianJiuZst.
-- **PR #100177** fix(codex): use UTF-16-safe truncation for approval display paths. Thanks @xialonglee.
-- **PR #101572** fix(feishu): support drive folder pagination. Thanks @zhangguiping-xydt.
-- **PR #101489** fix(infra): handle detached respawn child errors. Related #101458. Thanks @momothemage and @aniruddhaadak80.
-- **PR #101434** fix(browser): keep screenshots private by default. Related #44759. Thanks @sunshineo.
-- **PR #101435** feat(android): render LaTeX display math in chat via bundled KaTeX.
-- **PR #101583** refactor(memory): remove unused runtime facade exports. Thanks @vincentkoc.
-- **PR #101534** fix(codex): use truncateUtf16Safe for attempt notification text truncation. Thanks @lsr911.
-- **PR #101574** fix(memory): preserve UTF-16 chunk boundaries. Related #65782. Thanks @jensenwang560-blip.
-- **PR #101527** fix(channels): use truncateUtf16Safe for thread binding name truncation. Thanks @lsr911.
-- **PR #101513** fix(agents): keep exec auto-reviewer rationale truncation UTF-16 safe. Thanks @wm0018.
-- **PR #101517** fix(session-cost-usage): keep emoji / surrogate pairs intact during content truncation. Thanks @maweibin.
-- **PR #101580** fix(gateway): preserve UTF-16 plugin approval fields. Thanks @wm0018.
-- **PR #101576** fix: preserve session labels across rollover. Related #101451. Thanks @ZengWen-DT and @Merlin-zhou.
-- **PR #101577** fix(session-memory): preserve sibling paths in logs. Thanks @cxbAsDev.
-- **PR #101573** fix(auth): clean OAuth contention diagnostics. Thanks @vincentkoc.
-- **PR #101579** fix(gateway): keep plugin approval text UTF-16 safe. Thanks @wm0018.
-- **PR #101535** fix(acp): use truncateUtf16Safe for event mapper error text truncation. Thanks @lsr911.
-- **PR #101588** fix(agents): clean up ls cancellation listeners. Thanks @lzw112.
-- **PR #101594** refactor(memory): trim unused Windows spawn exports. Thanks @vincentkoc.
-- **PR #101454** fix(browser): cancel Chrome MCP requests on crash. Related #101070. Thanks @aniruddhaadak80.
-- **PR #101575** fix(auto-reply): keep suppressed reply text preview truncation UTF-16 safe. Thanks @wm0018.
-- **PR #101590** fix(file-transfer): handle child output stream errors. Thanks @sunlit-deng.
-- **PR #101591** fix(control-ui-assets): keep emoji / surrogate pairs intact during last-line truncation. Thanks @maweibin.
-- **PR #101604** refactor(memory): trim unused host SDK exports. Thanks @vincentkoc.
-- **PR #101465** fix(browser): keep upload errors specific. Related #38844. Thanks @tigicion.
-- **PR #101607** fix(agents): keep exec visible for lean local models. Thanks @vincentkoc.
-- **PR #101571** fix: prevent session history stream errors from crashing gateway. Related #101539. Thanks @ZengWen-DT and @aniruddhaadak80.
-- **PR #101600** fix(tasks): keep emoji / surrogate pairs intact during terminal output truncation. Thanks @maweibin.
-- **PR #101632** refactor(ui): trim unused control UI helpers. Thanks @vincentkoc.
-- **PR #101647** refactor(ui): remove duplicate helper paths. Thanks @vincentkoc.
-- **PR #101654** fix: keep bounded text truncation UTF-16 safe. Thanks @wm0018 and @lsr911 and @maweibin.
-- **PR #101666** refactor: localize internal reply and plugin types. Thanks @vincentkoc.
-- **PR #101562** fix(slack): conversation lookups no longer grow cache without bound. Thanks @zhangguiping-xydt.
-- **PR #101680** refactor(android): remove superseded app surfaces. Thanks @vincentkoc.
-- **PR #101682** refactor: remove obsolete chat display mocks. Thanks @shakkernerd.
-- **PR #84161** fix(voice-call): persist complete Google Live transcripts. Thanks @happydog-bot.
-- **PR #101689** test: remove stale native i18n sentinel.
-- **PR #101650** fix(channels): prevent metadata caches from growing without bound. Thanks @Alix-007 and @vincentkoc.
-- **PR #101685** fix: prevent garbled emoji at remaining text limits. Thanks @maweibin and @ly85206559 and @lsr911 and @wings1029.
-- **PR #101669** fix(gateway): support native Windows exec approvals. Thanks @vincentkoc.
-- **PR #101701** refactor: localize file-private exports. Thanks @vincentkoc.
-- **PR #101731** refactor: localize internal implementation types. Thanks @vincentkoc.
-- **PR #101466** fix(release): allow SHA-only extended-stable preflight. Thanks @kevinslin.
-- **PR #101726** fix(codex): keep app-server requests aligned with pinned protocol. Thanks @vincentkoc.
-- **PR #101711** fix: preserve emoji at remaining bounded-text edges. Thanks @ly85206559 and @lzw112 and @Alix-007.
-- **PR #101728** fix(http-error-body): keep emoji / surrogate pairs intact during error body truncation. Thanks @wings1029.
-- **PR #101758** refactor: localize internal implementation constants. Thanks @vincentkoc.
-- **PR #100928** improve(ui): nest Settings pages under /settings routes. Thanks @vyctorbrzezowski.
-- **PR #101688** refactor(gateway): route chat transcript injection through the session accessor. Thanks @jalehman.
-- **PR #101450** fix(sessions): bound trajectory snapshot and pointer reads. Thanks @cxbAsDev and @vincentkoc.
-- **PR #97669** fix(claude-cli): surface re-auth hint when subprocess OAuth token expires. Related #97553. Thanks @Alix-007 and @riazrahaman.
-- **PR #101831** refactor: localize internal implementation symbols. Thanks @vincentkoc.
-- **PR #101319** perf(ui): add virtual scrolling to file preview modal code viewer. Related #99062. Thanks @xianshishan.
-- **PR #101699** refactor(sessions): move parent-session forking behind the accessor boundary. Thanks @jalehman.
-- **PR #101589** fix(gateway): bound all-agent usage cache concurrency. Related #101552. Thanks @zw-xysk and @vincentkoc and @aniruddhaadak80.
-- **PR #101779** fix(shared): skip app-group identity migration when OPENCLAW_STATE_DIR is overridden.
-- **PR #101799** fix(android): keep cold-start gateway auto-connect from overriding explicit intents.
-- **PR #101812** feat(ui): redesign gateway connection-lost banner as floating pill.
-- **PR #101195** feat(cron): event triggers — polled condition-watcher scripts via code mode. Related #101194.
-- **PR #101843** improve: soften the idle voice button ring in the chat composer.
-- **PR #101844** improve(ui): restyle connection-lost pill as neutral status surface.
-- **PR #99731** policy: repair denied gateway http endpoints. Thanks @giodl73-repo.
-- **PR #101849** fix(ui): stop flashing the login gate on dashboard load when credentials are stored. Related #101847.
-- **PR #101795** fix: require full frontmatter delimiter lines. Related #101769. Thanks @NianJiuZst and @qingminglong.
-- **PR #101858** refactor(deadcode): localize UI and script symbols. Thanks @vincentkoc.
-- **PR #101860** refactor(deadcode): localize extension helpers. Thanks @vincentkoc.
-- **PR #101325** fix(mobile): clarify gateway connection security setup. Thanks @joshavant.
-- **PR #101869** refactor(deadcode): localize core helpers. Thanks @vincentkoc.
-- **PR #101875** refactor(deadcode): localize test and tooling helpers. Thanks @vincentkoc.
-- **PR #101407** improve(imessage): manage imsg setup and plugin skill ownership. Thanks @omarshahine.
-- **PR #101886** refactor(deadcode): trim private helper exports. Thanks @vincentkoc.
-- **PR #101807** fix(agents): avoid false unscheduled note after shell cron add. Related #52972. Thanks @BryanTegomoh and @vincentkoc and @vitobotta.
-- **PR #101889** refactor(deadcode): localize Parallels helpers. Thanks @vincentkoc.
-- **PR #101834** improve(google): identify OpenClaw Gemini API traffic. Thanks @vishal-dharm.
-- **PR #101888** fix(slack): unbounded thread pagination, process-wide write serialization, serialized inbound lookups. Thanks @obviyus.
-- **PR #101892** refactor(deadcode): localize script constants. Thanks @vincentkoc.
-- **PR #101894** refactor(deadcode): localize control ui declarations. Thanks @vincentkoc.
-- **PR #101898** refactor(deadcode): localize browser plugin declarations. Thanks @vincentkoc.
-- **PR #101896** fix: plugin tests fail on hosts with a usable /tmp/openclaw or a source checkout. Related #101876.
-- **PR #101903** refactor(deadcode): localize msteams declarations. Thanks @vincentkoc.
-- **PR #101904** refactor(deadcode): localize release tooling declarations. Thanks @vincentkoc.
-- **PR #101907** refactor(deadcode): localize AI provider declarations. Thanks @vincentkoc.
-- **PR #101703** fix: lower successful agent stop completion logs. Related #101678. Thanks @ZengWen-DT and @tford-ui.
-- **PR #101915** refactor(deadcode): localize canvas declarations. Thanks @vincentkoc.
-- **PR #101917** refactor(deadcode): localize script helper types. Thanks @vincentkoc.
-- **PR #101922** refactor(plugins): localize internal helper types. Thanks @vincentkoc.
-- **PR #101925** refactor(oc-path): localize internal result types. Thanks @vincentkoc.
-- **PR #101901** fix(installer): complete first-run onboarding. Thanks @fuller-stack-dev.
-- **PR #101902** fix(memory-core): guard supplement lookup in resolveMemoryReadFailureResult with try-catch (fixes #101809). Thanks @zw-xysk and @vincentkoc and @aniruddhaadak80.
-- **PR #101931** refactor(memory-wiki): localize internal helper types. Thanks @vincentkoc.
-- **PR #101936** refactor(imessage): localize internal helper symbols. Thanks @vincentkoc.
-- **PR #101941** refactor(gateway): localize terminal helper types. Thanks @vincentkoc.
-- **PR #101887** feat(crestodian): guide providerless model setup. Thanks @fuller-stack-dev.
-- **PR #101945** refactor(discord): localize internal declarations. Thanks @vincentkoc.
-- **PR #101596** fix(google-meet): handle stdout/stderr stream errors in local audio bridge. Thanks @Alix-007.
-- **PR #101949** refactor(feishu): localize internal declarations. Thanks @vincentkoc.
-- **PR #101954** refactor(matrix): localize internal types. Thanks @vincentkoc.
-- **PR #101926** fix(channels): keep native /think menus responsive. Thanks @vincentkoc.
-- **PR #101959** refactor(whatsapp): localize internal types. Thanks @vincentkoc.
-- **PR #96592** improve(diagnostics-otel): make agent-duration histograms usable beyond 10s. Thanks @hcnode and @vincentkoc and @zhiling-chen-20230331.
-- **PR #101963** refactor(policy): localize internal declarations. Thanks @vincentkoc.
-- **PR #101658** fix(ui): keep Workboard detail drawer actions in parity. Related #99957. Thanks @momothemage and @princebansal.
-- **PR #101969** refactor(memory-core): localize internal declarations. Thanks @vincentkoc.
-- **PR #101974** refactor(qa-matrix): localize internal declarations. Thanks @vincentkoc.
-- **PR #101980** refactor(qa-lab): localize confidence report types. Thanks @vincentkoc.
-- **PR #101761** fix(browser): keep Playwright truncation UTF-16 safe. Thanks @mushuiyu886.
-- **PR #101987** refactor(qa-lab): localize evidence summary schemas. Thanks @vincentkoc.
-- **PR #101990** refactor(qa-lab): localize utility types. Thanks @vincentkoc.
-- **PR #93402** fix(gateway): log websocket handshake phase. Related #79603. Thanks @849261680 and @bzelones.
-- **PR #102005** refactor(qa-lab): localize orchestration declarations. Thanks @vincentkoc.
-- **PR #102010** refactor(google-meet): localize internal declarations. Thanks @vincentkoc.
-- **PR #84424** fix(doctor): honor per-agent bootstrap profile in size check. Thanks @kasangyong and @vincentkoc.
-- **PR #102021** refactor(plugins): localize internal declarations. Thanks @vincentkoc.
-- **PR #102029** refactor(googlechat): localize internal declarations. Thanks @vincentkoc.
-- **PR #101597** fix(matrix): handle stdout/stderr stream errors in dependency commands. Thanks @Alix-007.
-- **PR #102037** refactor(line): localize internal declarations. Thanks @vincentkoc.
-- **PR #102040** refactor(mattermost): localize internal declarations. Thanks @vincentkoc.
-- **PR #102042** refactor(signal): localize internal declarations. Thanks @vincentkoc.
-- **PR #102044** refactor(slack): localize internal declarations. Thanks @vincentkoc.
-- **PR #101771** fix(ui): sync native approvals i18n baseline.
-- **PR #102048** refactor(qqbot): localize internal declarations. Thanks @vincentkoc.
-- **PR #102036** fix(lobster): keep ordinary run/resume on default flow fields. Related #102011. Thanks @LiLan0125 and @vincentkoc and @ArthurNie.
-- **PR #77763** fix(voice-call): preserve per-call agent routing. Related #77753. Thanks @quangtran88.
-- **PR #102059** refactor(voice-call): localize internal declarations. Thanks @vincentkoc.
-- **PR #102065** refactor(zalo): localize internal declarations. Thanks @vincentkoc.
-- **PR #102032** Harden jq safe-bin semantics. Thanks @pgondhi987.
-- **PR #101353** fix: detect joined inline eval flags [AI]. Thanks @pgondhi987.
-- **PR #100827** fix(state): close agent-db and proxy-capture SQLite handles on exit; rebind stale proxy stores after shared-state close. Thanks @amknight.
-- **PR #102159** fix(crabbox): retry cold metadata probes so a slow run --help does not block validation.
-- **PR #102009** feat(secrets): egress-time credential injection with process-local sentinels. Related #102008.
-- **PR #102030** fix: restrict non-owner gateway tool inventory [AI]. Thanks @pgondhi987.
-- **PR #102031** fix: gate Gateway message action requester provenance [AI]. Thanks @pgondhi987.
-- **PR #102033** fix: harden web fetch HTML conversion [AI]. Thanks @pgondhi987.
-- **PR #101017** improve(ui): bring back openclaw brand, remove desktop topbar + breadcrumbs. Thanks @vyctorbrzezowski.
-- **PR #102210** fix: focus chat composer when typing. Thanks @shakkernerd.
-- **PR #101757** feat(release): preflight all extended-stable npm packages. Thanks @kevinslin.
-- **PR #102158** fix(skills): correct invalid install kinds in xurl and github [AI]. Thanks @not-stbenjam.
-- **PR #102035** fix: bind package-manager exec approvals to inner commands [AI]. Thanks @pgondhi987.
-- **PR #101012** refactor(gateway): consolidate client contracts. Thanks @RomneyDa.
-- **PR #102256** ci: temporarily disable QA smoke again. Thanks @RomneyDa.
-- **PR #99776** policy: preview review-required gateway repairs. Thanks @giodl73-repo.
-- **PR #101881** Fix container image upgrade migrations before gateway readiness. Related #98565. Thanks @sallyom and @jacobtomlinson.
-- **PR #102444** fix(codex): support app-server 0.143.0. Thanks @vincentkoc.
-- **PR #102600** fix(release): accept tool-only completion signal.
-- **PR #102732** test(qa): assert Telegram command denial.
-- **PR #103244** ci: pin docs i18n Go toolchain. Related #103240.
-- **PR #102873** feat(providers): add Meta Model API - muse-spark-1.1. Thanks @HamidShojanazeri and @davemorin and @Solvely-Colin and @jalehman.
-- **PR #103070** fix(providers): publish Meta under canonical package name. Thanks @vincentkoc.
-- **PR #103163** fix(meta): live validation targets deployed Muse Spark 1.1.
-- **PR #102858** ci: make release child dispatch idempotent.
-- **PR #102896** ci: retry transient release workflow reads.
-- **PR #103564** fix(release): restore bundled AI runtime in update smoke.
-- **PR #103467** fix(ci): read Codex bindings from SQLite in live harness. Related #103451. Thanks @vincentkoc.
-- **PR #103556** fix(release): bundle AI runtime in installer smoke. Related #103552. Thanks @vincentkoc.
-- **PR #103635** fix(qa): keep retry passes terminally successful. Related #103631.
-- **PR #103650** fix(qa): keep non-assistant fixtures out of token usage gate. Related #103641.
-- **PR #103654** fix(ci): run live suites from manual dispatches. Related #103652.
-- **PR #103608** fix(release): contain installer artifact restores.
-- **PR #103681** fix(qa): accept structured gateway restart outcomes. Related #103676.
-- **PR #103685** fix(qa): require web fetch after tool discovery. Related #103678.
-- **PR #103718** test(qa): wait for durable webchat transcript. Related #103701.
-- **PR #103906** fix(release): keep validation evidence immutable across reruns.
-- **PR #103923** fix(i18n): recognize Meta docs glossary terms.
-- **PR #103095** fix(ci): isolate OpenWebUI release smoke.
-- **PR #103549** fix(telegram): complete spooled updates at turn adoption instead of turn settle. Related #102468. Thanks @obviyus.
-- **PR #103695** fix(telegram): harden spooled turn adoption. Thanks @vincentkoc.
-- **PR #103664** fix(telegram): scope reply-fence abort authority to pre-adoption dispatch. Thanks @obviyus.
-- **PR #103680** fix(providers): align Meta Model API contract. Related #103667. Thanks @vincentkoc.
-- **PR #104032** fix(release): harden and accelerate 2026.7.1 handoff. Thanks @vincentkoc.
-- **PR #103861** fix(logging): redact Telegram tokens across chunk boundaries. Thanks @vincentkoc.
-- **PR #104000** improve(release): make preparation atomic and bounded. Thanks @vincentkoc.
-- **PR #103952** fix(telegram): detach adopted turns from reply fence. Thanks @vincentkoc.
-- **PR #103965** fix(telegram): suppress replies superseded during adoption.
-- **PR #103946** fix(tasks): repair legacy delivery statuses. Related #103168. Thanks @bek91 and @theo674.
-- **PR #104162** improve(release): reuse exact-SHA validation evidence. Related #104161. Thanks @vincentkoc.
-- **PR #103222** fix(release): validate GitHub notes before publish.
-- **PR #104186** fix: current-tree package checks support unreleased versions.
-- **PR #103581** feat(openai): default new setups to GPT-5.6. Related #103234. Thanks @bdjben and @obviyus and @sallyom.
-- **PR #103281** fix(codex): prevent startup hangs after binding migration. Thanks @bdjben and @obviyus and @sallyom.
-- **PR #104529** fix: startup migrations block on recoverable legacy state. Thanks @sallyom and @bdjben and @obviyus.
-- **PR #103760** fix(ci): align OpenAI auth contract with provider default. Related #103750. Thanks @bdjben and @obviyus and @sallyom.
-- **PR #104555** fix: clear remaining release validation blockers. Thanks @bdjben and @obviyus and @sallyom.
-- **PR #102780** fix(infra): converge legacy state migrations on archive collisions. Related #102749. Thanks @obviyus and @bdjben and @sallyom.
-- **PR #104491** fix(node-pairing): require operator.admin to approve browser.proxy nodes. Thanks @yetval.
-- **PR #104441** fix(agents): preserve UTF-16 boundaries in block chunks. Thanks @mushuiyu886.
-- **PR #102948** fix(feishu): add 30 s request timeout to streaming-card API calls. Thanks @hugenshen and @sallyom.
-- **PR #104433** fix(openrouter): Fusion prompt corrupts boundary emoji in model IDs. Thanks @zhangguiping-xydt and @vincentkoc.
-- **PR #104230** fix(discord): keep voice diagnostics bounded when ffmpeg errors are multibyte. Thanks @qingminglong.
-- **PR #102087** fix(agents): keep tool-result truncation UTF-16 safe. Thanks @chengzhichao-xydt.
-- **PR #102610** fix(agents): keep prompt history append-only mid-session for prompt-cache stability. Related #99495. Thanks @ugiezzz.
-- **PR #99756** fix: preserve tool-result text across media fallback and context pressure. Thanks @AcosX and @Solvely-Colin.
-- **PR #104714** fix(providers): complete repaired tool call streams.
-- **PR #103916** fix: preserve messages when Codex steering lacks transcript acknowledgement. Thanks @jalehman.
-- **PR #104722** test(qa): follow canonical frontier defaults.
-- **PR #102289** fix(gateway): refresh model availability after OAuth renewal. Thanks @fuller-stack-dev.
-- **PR #104750** test(live): align July GPT-5.6 defaults.
-- **PR #102344** fix: surface OpenAI chat-completions refusal as assistant text. Related #102321. Thanks @wuqxuan and @yetval.
-- **PR #103132** fix(cli): reduce plugins list startup memory. Related #103131.
-- **PR #103157** fix: release startup migration lease before exit. Related #103145.
-- **PR #103596** fix(discord): recover from failed gateway resumes. Related #99681. Thanks @meepbot-oss.
-- **PR #104706** fix(telegram): preserve Codex login profile identity. Related #104704. Thanks @100yenadmin.
-- **PR #104504** fix(codex): bound app-server binding fingerprints. Related #104503. Thanks @100yenadmin.
-- **PR #104778** fix(zai): honor max thinking through gateway. Related #104716. Thanks @vincentkoc and @100yenadmin.
-- **PR #104848** fix(codex): preserve MCP bindings after beta5 upgrades. Thanks @vincentkoc.
-- **PR #98021** feat: support GPT-5.6 Ultra across OpenClaw and Codex runtimes. Thanks @anyech.
-- **PR #102980** fix(ci): retry known live tool nonce misses.
-- **PR #104905** test(live): retry GPT-5.6 nonce mismatches.
-- **PR #104956** ci: harden current and frozen release checks.
-- **PR #104892** fix(release): preserve original PRs for named backports. Thanks @vincentkoc.
-- **PR #104975** fix(release): restore pnpm package artifacts.
-- **PR #104957** fix(release): verify named backport provenance. Thanks @vincentkoc.
-- **PR #103775** fix: Codex runtime rejected for Codex provider. Related #103762.
-- **PR #105133** test(ui): bound chat hover browser wait.
-- **PR #105055** fix(release): support explicit provenance overrides. Thanks @vincentkoc.
-- **PR #105405** fix(update): preserve ClawHub plugins after cutover. Thanks @vincentkoc.
-- **PR #105401** fix(qa): align mock catalog with selected models.
-- **PR #105444** fix(qa): preserve Codex mock routing.
-- **PR #105518** fix(openai): preserve image routing before catalog load. Thanks @vincentkoc.
-- **PR #105488** fix(qa): keep mock memory embeddings offline.
-- **PR #105493** test(qa): model Codex compaction in parity mock.
-- **PR #105500** fix(qa): repair agentic runtime parity mocks.
-- **PR #106065** fix(sqlite): reject runtimes vulnerable to WAL corruption. Thanks @vincentkoc.
-- **PR #103725** fix(install-cli): track mktemp paths and clean up on EXIT. Thanks @SebTardif.
+- `openclaw doctor` and updates now refuse to replace an unreadable `openclaw.json`, preserving existing Gateway, agent, channel, and plugin settings instead of breaking the installation. [#96469](https://github.com/openclaw/openclaw/pull/96469) Thanks @obviyus, @yetval.
+- `openclaw doctor --fix` now preserves aliases, parameters, streaming choices, runtime settings, and other model tuning when several retired model names merge into one current model, and reports any merge conflicts accurately. [#96544](https://github.com/openclaw/openclaw/pull/96544) Thanks @vincentkoc, @yetval.
+- Owners and admins can now restore an expired Codex or OpenAI login from a browser through private Telegram, Web UI, Discord, or Slack commands without SSH access. [#98006](https://github.com/openclaw/openclaw/pull/98006) Thanks @100yenadmin, @jalehman, @obviyus.
+- The CLI now guides fresh installs through setup, opens configured installs directly in the TUI, preserves existing choices on reruns, and finishes onboarding in a usable terminal chat. [#98218](https://github.com/openclaw/openclaw/pull/98218) Thanks @fuller-stack-dev.
+- Package installs can now select and retain `openclaw update --channel extended-stable`, inspect its availability, and fail safely if its npm metadata is incomplete. [#99811](https://github.com/openclaw/openclaw/pull/99811) Thanks @kevinslin.
+- Fresh installs can now complete conversational Crestodian setup, approve the proposed plan once, connect channels, and continue into the normal agent while classic and scripted onboarding remain available. [#99935](https://github.com/openclaw/openclaw/pull/99935)
+- First-time onboarding now preserves earlier choices after authentication or pairing trouble and gives users an actionable model-configuration next step instead of opening an unusable first chat. [#100632](https://github.com/openclaw/openclaw/pull/100632)
+- Container upgrades now finish required migrations and plugin repairs before reporting the Gateway ready, and failed repairs stop with actionable guidance instead of leaving a false-green service. [#101881](https://github.com/openclaw/openclaw/pull/101881) Thanks @sallyom.
+- Crestodian setup now guides users who lack a usable model provider through masked credential entry and model selection, while deterministic setup and repair commands remain available until inference is configured. [#101887](https://github.com/openclaw/openclaw/pull/101887) Thanks @fuller-stack-dev.
+- OpenClaw now blocks unsafe runtimes before they can open SQLite-backed state, guides legacy Bun services to Node, and selects a WAL-safe Node runtime during setup and repair. [#106065](https://github.com/openclaw/openclaw/pull/106065) Thanks @vincentkoc.
+
+#### Official apps
+
+The official [iOS](https://docs.openclaw.ai/platforms/ios), [Android](https://docs.openclaw.ai/platforms/android), and [macOS](https://docs.openclaw.ai/platforms/macos) apps received substantial updates across setup, navigation, chat, voice, permissions, localization, files, scheduled work, native session controls, and Gateway recovery. Recent conversations remain useful through temporary disconnects: cached sessions and transcripts stay available for reading, supported text sends can wait for reconnection in the correct chat, and long conversations are easier to resume without losing the current place or mistaking an offline view for live history.
+
+These improvements also bring the native clients closer together. Mobile queues survive app restarts, the [macOS](https://docs.openclaw.ai/platforms/macos) app gains fuller session and transcript tools, and each client refreshes the same conversation when the Gateway returns.
+
+##### iOS and Android
+
+- iOS and Android chats now preserve the reader's scroll position as new messages and tool activity arrive, with a clear way to return to the latest reply. [#98258](https://github.com/openclaw/openclaw/pull/98258) Related [#98255](https://github.com/openclaw/openclaw/issues/98255). Thanks @christopheraaronhogg.
+
+##### iOS and iPadOS
+
+- iPhone and iPad chat now opens with the last known conversation and lets users browse recent cached sessions while the Gateway is unavailable. [#100219](https://github.com/openclaw/openclaw/pull/100219)
+- iOS users can queue chat messages while disconnected, keep them through app restarts, and send them in order after reconnection with clear retry and delete controls. [#100331](https://github.com/openclaw/openclaw/pull/100331)
+
+##### Android
+
+- Android chat now shows the last known transcript immediately and keeps recent cached conversations readable during a Gateway outage, then refreshes them after reconnection. [#100227](https://github.com/openclaw/openclaw/pull/100227)
+- Android users can queue text while the Gateway is offline, keep it through an app restart, and send it in order after reconnection with Retry and Delete controls for failures. [#100290](https://github.com/openclaw/openclaw/pull/100290)
+
+##### macOS
+
+- Mac chat now restores recent sessions and transcripts immediately, remains browsable while disconnected, and queues offline sends for the correct Gateway identity. [#100275](https://github.com/openclaw/openclaw/pull/100275)
+- The native macOS chat window now provides a full session sidebar, real new-session creation, slash-command completion, context and cost visibility, message copying, transcript export, and compact or clear-history actions. [#101103](https://github.com/openclaw/openclaw/pull/101103)
+
+#### Models and providers
+
+OpenClaw [model selection](https://docs.openclaw.ai/concepts/models) expands across major hosted, managed, and local choices. Each supported [provider route](https://docs.openclaw.ai/concepts/model-providers) retains its own authentication, model limits, reasoning controls, tool behavior, image support, and usage reporting.
+
+##### GPT-5.6 and Codex
+
+Organizations with GPT-5.6 preview access can select Sol, Terra, or Luna through supported OpenAI and Codex routes with the expected context metadata, text and image input, reasoning levels, and cache-write accounting when OpenAI supplies it. Fresh OpenAI API-key and ChatGPT/Codex setups choose their intended GPT-5.6 defaults without replacing an explicit model choice. Supported Ultra choices remain aligned across OpenClaw and native Codex, and [Codex supervision](https://docs.openclaw.ai/plugins/codex-supervision) records native Codex child agents as tasks and returns their results to the parent.
+
+- GPT-5.6 users can now select supported Ultra modes consistently, keep model and thinking choices aligned across OpenClaw surfaces, and receive native Codex child-agent results as tracked tasks. [#98021](https://github.com/openclaw/openclaw/pull/98021) Thanks @anyech.
+- Organizations with GPT-5.6 preview access can select Sol, Terra, or Luna across supported OpenAI and Codex paths with correct reasoning controls, context metadata, and cache-write accounting. [#98333](https://github.com/openclaw/openclaw/pull/98333) Related [#98296](https://github.com/openclaw/openclaw/issues/98296). Thanks @steipete-oai.
+- Legacy-state upgrades no longer stall repeatedly, while fresh OpenAI and ChatGPT/Codex setups select the intended GPT-5.6 defaults and use supported temperature and tool-call behavior. [#104656](https://github.com/openclaw/openclaw/pull/104656) Thanks @bdjben, @obviyus, @sallyom.
+
+##### Tencent Hy3
+
+Tencent Hunyuan Hy3 now has a complete setup path through TokenHub or TokenPlan, including first-class authentication choices, CLI onboarding, model discovery, and configuration validation. Existing TokenHub configurations retain access to `hy3-preview` alongside the stable `hy3` model.
+
+- Tencent Hunyuan Hy3 now has a complete supported OpenClaw setup path through TokenHub or TokenPlan, including first-class authentication, model discovery, configuration validation, CLI onboarding, and compatibility for existing `hy3-preview` setups. [#99076](https://github.com/openclaw/openclaw/pull/99076) Thanks @moncac.
+
+##### Meta Model API and Muse Spark 1.1
+
+Operators can configure Meta Model API with `MODEL_API_KEY` or the onboarding authentication choice, select `meta-model-api/muse-spark-1.1`, and use supported streaming, tool calling, image input, and reasoning-effort controls.
+
+- OpenClaw now supports Meta Model API setup and the Muse Spark 1.1 model, including streaming, tool calling, image input, and supported reasoning controls. [#102873](https://github.com/openclaw/openclaw/pull/102873) Thanks @davemorin, @hamidshojanazeri, @jalehman, @solvely-colin.
+
+##### Claude models
+
+Claude Sonnet 5 is selectable through direct Anthropic, Claude CLI, supported Vertex regions, Bedrock inference profiles, and Bedrock Mantle with its documented context, output, image, thinking, and pricing behavior. Users with Claude Mythos 5 access can select it through supported Anthropic-family routes with its required context, output, adaptive-thinking, caching, and replay behavior.
+
+- Claude Sonnet 5 is now selectable across Anthropic, Claude CLI, supported Vertex regions, Bedrock inference profiles, and Bedrock Mantle with its documented context, output, image, thinking, and pricing behavior. [#98254](https://github.com/openclaw/openclaw/pull/98254) Thanks @vortexopenclaw.
+- Users with Claude Mythos 5 access can select it through Anthropic, Anthropic Vertex, Amazon Bedrock, or Bedrock Mantle with its required context, output, thinking, caching, and replay behavior. [#101238](https://github.com/openclaw/openclaw/pull/101238) Thanks @vincentkoc.
+
+##### More provider options
+
+Copilot sessions can explicitly use supported custom OpenAI, Azure OpenAI, Ollama-compatible, or Anthropic providers and start a compatible session when connection or credential settings change. Paired computers can run short tasks on eligible local Ollama models, while ClawRouter can expose the models granted to one managed key and report their usage and budget. Users can also claim active promotional models without replacing existing defaults, install LongCat-2.0 through its official provider, and continue Gemini latest tool-calling conversations across both supported Google transports.
+
+- Copilot sessions can now use explicitly selected custom OpenAI, Azure OpenAI, Ollama-compatible, or Anthropic providers and restart cleanly when model, endpoint, credentials, headers, or token limits change. [#96345](https://github.com/openclaw/openclaw/pull/96345) Thanks @vincentkoc.
+- OpenClaw agents can now run short tasks on chat-capable Ollama models installed on paired macOS, Linux, or Windows nodes, with a separate control for disabling node inference. [#99234](https://github.com/openclaw/openclaw/pull/99234) Related [#99228](https://github.com/openclaw/openclaw/issues/99228).
+- A single `CLAWROUTER_API_KEY` can now expose only its granted models across supported transports and show managed requests, tokens, spend, and monthly budget in normal status views. [#99658](https://github.com/openclaw/openclaw/pull/99658) Related [#99657](https://github.com/openclaw/openclaw/issues/99657).
+- Users can discover active promotional models and claim them with `openclaw promos claim <slug>` without rerunning onboarding or unexpectedly replacing existing defaults and credentials. [#100236](https://github.com/openclaw/openclaw/pull/100236) Thanks @fuller-stack-dev.
+- Hosted LongCat-2.0 can now be installed through the official LongCat plugin, configured with `LONGCAT_API_KEY` during onboarding, and selected as `longcat/LongCat-2.0` for multi-turn tool use. [#100501](https://github.com/openclaw/openclaw/pull/100501) Thanks @vincentkoc.
+- Gemini latest aliases now continue tool-calling conversations across both supported Google transports instead of stopping with a missing-thought-signature HTTP 400. [#100605](https://github.com/openclaw/openclaw/pull/100605) Thanks @chenxiaoyu209, @guarismo.
+
+#### Coding agents
+
+OpenClaw now works more cleanly with coding agents that live outside the current chat. `openclaw attach` can open Claude Code against the main or a selected Gateway session with temporary, revocable access instead of process-wide credentials. Codex app-server sessions can resume, delegate to native subagents, and return their results as tracked work, while Copilot sessions can use explicitly selected custom providers and restart when their connection settings change.
+
+The surrounding session workflow is more durable too. Important conversations can be pinned, renamed, archived, restored, and monitored as ongoing work, while active goals remain part of working memory across later turns, compaction, queues, and interruptions.
+
+- External tools can now receive session-scoped Gateway access without process-wide credentials or permission to impersonate another session, forming the secure base for `openclaw attach`. [#96351](https://github.com/openclaw/openclaw/pull/96351) Thanks @anagnorisis2peripeteia, @obviyus.
+- `openclaw attach` now launches Claude Code with temporary access to the main or selected Gateway session, keeps credentials out of arguments, and revokes the grant when the session ends. [#96454](https://github.com/openclaw/openclaw/pull/96454) Thanks @anagnorisis2peripeteia, @obviyus.
+- GPT-5.6 users can now select supported Ultra modes consistently, keep model and thinking choices aligned across OpenClaw surfaces, and receive native Codex child-agent results as tracked tasks. [#98021](https://github.com/openclaw/openclaw/pull/98021) Thanks @anyech.
+- Codex app-server agents can again list allowed agents, spawn OpenClaw or connected subagents, and yield during delegated work without resumed heartbeats hitting incompatible tool definitions. [#99561](https://github.com/openclaw/openclaw/pull/99561) Related [#99464](https://github.com/openclaw/openclaw/issues/99464). Thanks @100yenadmin, @joshavant.
+- Codex-native delegation from OpenClaw threads now creates native task records again, while unsupported custom Codex app-server versions fail startup with a clear minimum-version error. [#101221](https://github.com/openclaw/openclaw/pull/101221)
+- Copilot sessions can now use explicitly selected custom OpenAI, Azure OpenAI, Ollama-compatible, or Anthropic providers and restart cleanly when model, endpoint, credentials, headers, or token limits change. [#96345](https://github.com/openclaw/openclaw/pull/96345) Thanks @vincentkoc.
+- Sessions can now be pinned, archived without losing transcripts, restored, renamed from chat surfaces, and monitored for active runs as durable conversation threads. [#98510](https://github.com/openclaw/openclaw/pull/98510) Thanks @maziyang2.
+- An active `/goal` now keeps guiding later turns and survives compaction, queues, and interruptions until the goal is paused, completed, blocked, or limited. [#100468](https://github.com/openclaw/openclaw/pull/100468)
+
+#### Telegram
+
+[Telegram](https://docs.openclaw.ai/channels/telegram) received broad work across live progress, media, documents, topics, commands, retries, account routing, setup, and delivery. Albums reach the model with every available image, long replies remain easier to follow while they run, and temporary conflicts or network failures are less likely to block later messages or create duplicates.
+
+Messages and actions also stay with the intended bot, topic, and conversation more consistently, while setup and account-health problems provide clearer ways to recover.
+
+- Telegram photo albums now give the model every successfully downloaded image in order instead of only one photo and unusable file references, while failed items are omitted. [#97045](https://github.com/openclaw/openclaw/pull/97045) Thanks @nianjiuzst, @obviyus.
+- Telegram's live progress view now keeps reasoning, commentary, formatting, and tool activity readable and stable, then leaves a concise completion summary instead of disappearing. [#98907](https://github.com/openclaw/openclaw/pull/98907) Thanks @marvinthebored, @peetiegonzalez.
+- Telegram users should see fewer failed final replies or bot delivery sends during flaky network handshakes, without increasing duplicate-message risk for failures that may have happened after a request was sent. [#101258](https://github.com/openclaw/openclaw/pull/101258) Thanks @lzw112.
+
+- Telegram PDFs and other documents now provide agents with a usable local path so normal runner tools can open the attachment. [#97647](https://github.com/openclaw/openclaw/pull/97647) Thanks @gallup007, @joshavant.
+- Telegram timeout logs now hide bot tokens embedded in Bot API paths, including custom and proxy roots, while retaining useful endpoint context. [#99428](https://github.com/openclaw/openclaw/pull/99428) Related [#96982](https://github.com/openclaw/openclaw/issues/96982). Thanks @liuhaiyang14, @xialonglee.
+- Telegram bot tokens now remain masked even when they cross internal boundaries inside very large logs or tool-error messages. [#103861](https://github.com/openclaw/openclaw/pull/103861) Thanks @vincentkoc.
+- When a Telegram plugin approval cannot be routed, operators now receive practical Web UI, terminal UI, and configuration guidance instead of a generic failure or timeout. [#95973](https://github.com/openclaw/openclaw/pull/95973) Related [#95800](https://github.com/openclaw/openclaw/issues/95800). Thanks @chrisbot2026, @monkeyleet.
+- Scheduled deliveries to numeric threads such as Telegram forum topics now return to the configured thread after Gateway restarts instead of falling back to the general chat. [#98699](https://github.com/openclaw/openclaw/pull/98699) Thanks @yetval.
+
+#### Slack
+
+[Slack](https://docs.openclaw.ai/channels/slack) threads retain their conversation history more consistently, interactive cards and progress stay in the right place, and accepted replies are less likely to be repeated after an uncertain confirmation. Long-running conversations also avoid more unnecessary waits before reaching the agent.
+
+- Slack replies stay attached to the root thread's session history instead of accumulating separate, nearly empty child sessions. [#97168](https://github.com/openclaw/openclaw/pull/97168) Related [#96535](https://github.com/openclaw/openclaw/issues/96535). Thanks @gorkem2020, @liuwqgit.
+- When Slack accepts a reply but the confirmation is lost, OpenClaw can verify the existing post and avoid sending a duplicate. [#97480](https://github.com/openclaw/openclaw/pull/97480) Thanks @joeyfrasier.
+
+- Slack and similar channel turns with context-injecting plugins now send each inbound system label to the model once instead of duplicating it. [#95349](https://github.com/openclaw/openclaw/pull/95349) Thanks @gorkem2020, @openperf, @vincentkoc.
+- Slack rooms that require a mention no longer wake OpenClaw for ordinary messages when the bot identity is missing or untrusted, and setup warnings point operators to a Bot User OAuth Token when needed. [#91584](https://github.com/openclaw/openclaw/pull/91584) Thanks @hiragram.
+
+#### Discord
+
+[Discord](https://docs.openclaw.ai/channels/discord) improves reply visibility, attachments, voice sessions, progress, reconnects, and multi-account behavior. Completed replies produce more useful unread cues, brief Gateway reconnects are less likely to lose outbound messages, and repeated session-resume failures can recover without taking the whole Gateway down.
+
+- Completed partial-stream Discord replies now arrive as fresh messages that can trigger normal unread cues after a user leaves the channel. [#99711](https://github.com/openclaw/openclaw/pull/99711) Thanks @davelutztx.
+- Discord replies, cron reports, and other outbound messages are less likely to disappear during a brief Gateway reconnect, without replaying chunks or media Discord already accepted. [#100896](https://github.com/openclaw/openclaw/pull/100896) Thanks @tiffanychum.
+- Discord bots can now recover in place after repeated session-resume rejection, reducing prolonged outages, lost replies, and full Gateway restarts. [#103596](https://github.com/openclaw/openclaw/pull/103596)
+
+- Discord Code Mode progress no longer fills with repetitive Wait rows from background polling, while ordinary custom and plugin tools remain visible. [#100164](https://github.com/openclaw/openclaw/pull/100164)
+- Long Discord approval previews now preserve complete emoji and flags when shortened, avoiding broken replacement characters. [#99539](https://github.com/openclaw/openclaw/pull/99539) Thanks @zhangguiping-xydt.
+- Discord read allowlists now block guild metadata, channel details, and thread listings before any provider request when those resources are outside the configured scope. [#98966](https://github.com/openclaw/openclaw/pull/98966) Thanks @pgondhi987.
+- Discord users can complete approved Codex Computer Use actions such as `get_app_state` and receive the native tool result instead of getting a false timeout while the tool is still running. [#96818](https://github.com/openclaw/openclaw/pull/96818) Thanks @pollybot13, @zhangguiping-xydt.
+
+#### Apple Messages
+
+[Apple Messages](https://docs.openclaw.ai/channels/imessage) receives broader improvements to replies, typing, media, routing, setup guidance, and chat continuity. Remote Mac attachments can reach the active conversation through a usable local path, replies work in more bridge setups, and ordinary message text is less likely to be mistaken for internal role markers.
+
+- Photos bridged from a remote iMessage Mac to a separate Gateway host now arrive in Codex conversations through a readable local path rather than a Mac-only filename. [#91803](https://github.com/openclaw/openclaw/pull/91803) Thanks @turbotheturtle.
+- AppleScript-only and bot-user or SSH iMessage setups now deliver replies even when threading is unavailable, and database changes no longer leave inbound messages hidden behind stale recovery state. [#100446](https://github.com/openclaw/openclaw/pull/100446) Thanks @omarshahine.
+- Direct iMessage chats using the `imsg` private API bridge now show typing as soon as a slow turn is accepted, without waiting for a read receipt. [#95621](https://github.com/openclaw/openclaw/pull/95621) Thanks @omarshahine.
+- iMessage replies no longer lose ordinary sentence text that happens to end with `user:`, `system:`, or `assistant:`. [#96392](https://github.com/openclaw/openclaw/pull/96392) Thanks @ly-wang19.
+
+- Hidden MiniMax reasoning no longer appears as a new iMessage or feeds back into the conversation as an echo-triggering inbound message. [#93820](https://github.com/openclaw/openclaw/pull/93820) Thanks @alix-007.
+- Renaming iMessage groups, changing icons or membership, and leaving groups now require verified owner or administrator authority. [#97961](https://github.com/openclaw/openclaw/pull/97961) Thanks @eleqtrizit.
+- Mac users setting up iMessage can install or update `imsg` from the setup flow, receive clearer probe guidance, and recover sessions that still reference the old skill location. [#101407](https://github.com/openclaw/openclaw/pull/101407) Thanks @omarshahine.
+
+#### Gateway restart recovery
+
+A supervised Gateway that repeatedly fails during startup now leaves operators a stable [restart and recovery](https://docs.openclaw.ai/gateway/restart-recovery) process to inspect and repair. Instead of relaunching forever, the control path remains available while automatic channel and provider restarts pause until the underlying problem is fixed.
+
+- A repeatedly crashing supervised Gateway now leaves a stable control process available for inspection and repair instead of trapping operators in a restart loop. [a18708c](https://github.com/openclaw/openclaw/commit/a18708c5c12d93f14eb753b543a6747e8baa8c47) Thanks @obviyus.
+
+#### Automation, browser control, and terminals
+
+Scheduled work can wake when a command finishes or a watched condition changes, remote browser control can pair selected signed-in tabs and save completed downloads safely, and guarded workspace terminals are available across web and mobile.
+
+##### Scheduled work
+
+[Scheduled jobs](https://docs.openclaw.ai/automation/cron-jobs) can react when an external command finishes or a watched condition changes, so the full agent runs only when there is something new to handle. Reapplying the same declaration updates the intended job in place, preserving identity and history instead of creating duplicate schedules.
+
+- A cron job can now watch a build, deploy, script, or other command and resume the originating workflow with its exit code and recent output when it finishes. [#92037](https://github.com/openclaw/openclaw/pull/92037) Thanks @anagnorisis2peripeteia.
+- Cron declarations can now be safely reapplied without duplicate jobs or lost history, while ownership, next run, latest result, delivery, and failure notifications are easier to inspect. [#100480](https://github.com/openclaw/openclaw/pull/100480)
+- Cron jobs can now watch an outside condition and run their real payload only when that state changes, avoiding full agent wakeups on unchanged polls. [#101195](https://github.com/openclaw/openclaw/pull/101195)
+
+##### Remote browser control
+
+[Browser control](https://docs.openclaw.ai/tools/browser-control) is easier to use across machines: operators can pair the bundled Chrome extension with a remote Gateway, share only selected signed-in tabs, diagnose Windows and WSL2 connection details, and revoke access by removing a tab from the OpenClaw group. Agents can also wait for delayed downloads and save the finished file to a guarded local path with its final URL and suggested name.
+
+- Windows and WSL2 users now get IPv4 and IPv6 checks plus the matching portproxy guidance needed to restore Chrome browser control without broadening CDP exposure. [#100590](https://github.com/openclaw/openclaw/pull/100590) Thanks @owlock, @zengwen-dt.
+- The bundled Chrome extension now lets users control selected signed-in tabs from a phone or another channel without someone approving remote debugging at the desktop, and removing a tab revokes access. [#100619](https://github.com/openclaw/openclaw/pull/100619)
+- Remote Gateway users can pair the bundled Chrome extension from another browser machine with `openclaw browser extension pair --gateway-url wss://...`, without installing OpenClaw or Node.js there or opening an inbound port. [#101127](https://github.com/openclaw/openclaw/pull/101127)
+- Agents can now save a browser download to a chosen guarded path or wait for a delayed export, receiving the final URL, filename, and local path. [#101369](https://github.com/openclaw/openclaw/pull/101369) Thanks @grd-chang.
+
+##### Workspace terminals
+
+Authenticated operators can open a guarded workspace terminal from the [Control UI](https://docs.openclaw.ai/web/control-ui), iOS, or Android without leaving the current workspace. Sessions use the selected agent's workspace and configured shell, can be disabled by policy, and follow the [Gateway protocol](https://docs.openclaw.ai/gateway/protocol) controls for ownership and connection state. Browser terminals can dock, resize, and run side by side, while iOS and Android provide focused entry points with clear connection guidance.
+
+Same-release browser hardening completes the capability: terminals can reattach after reloads, sleep, or brief network drops and replay recent output; newly enabled support appears without a manual refresh; and closing, reopening, theming, cursor focus, prompt glyphs, and new-tab controls remain usable through repeated sessions.
+
+- Authenticated admins can open an interactive terminal in an agent workspace from Gateway-backed controls, while fully sandboxed agents remain blocked and the feature can be disabled with `gateway.terminal.enabled`. [f083f35](https://github.com/openclaw/openclaw/commit/f083f35ddb467fa5ed7077244525913673bc7aa0)
+- Control UI admins can now keep chat, session controls, and live shells together by opening multiple dockable, resizable terminal tabs inside the browser workspace. [ec72de4](https://github.com/openclaw/openclaw/commit/ec72de41faa71b71d0e479eaa31d791e3b6afe58)
+- Opt-in Control UI terminal sessions can now survive page reloads, sleep, and brief network drops, letting operators reattach and replay recent output instead of losing running commands. [#100089](https://github.com/openclaw/openclaw/pull/100089)
+- Opening a new Control UI terminal after closing the final tab now starts with a blank fresh shell instead of restoring the closed terminal output. [#100665](https://github.com/openclaw/openclaw/pull/100665)
+- Control UI terminal tabs now close cleanly while opening, follow theme changes, and reopen at a usable size instead of leaving hidden sessions, stale colors, or unreachable controls. [2399ce7](https://github.com/openclaw/openclaw/commit/2399ce7c854d278276e65c9ed75f273a3c972e39)
+- An already-open Control UI page now notices when terminal support is enabled and makes the terminal available without requiring a manual refresh. [3f976f9](https://github.com/openclaw/openclaw/commit/3f976f9f8624ded5af6fc48abf43c25a79661a32)
+- Opening a new Control UI terminal tab after closing another no longer inherits an old exited state. [3c03389](https://github.com/openclaw/openclaw/commit/3c033899257210cb46d3c87468bb1a613e4fc831)
+- The Control UI terminal no longer crashes when its web component is loaded more than once in a shared browser registry. [f2e5159](https://github.com/openclaw/openclaw/commit/f2e5159f53248800416c15cc3aef50e505968317)
+- Control UI terminals now use installed Nerd Font fallbacks so supported prompt and listing icons render as glyphs instead of placeholder boxes. [#100128](https://github.com/openclaw/openclaw/pull/100128)
+- The Control UI integrated terminal now shows one cursor instead of overlapping Chrome and terminal carets, making focus and typing state clearer. [#100240](https://github.com/openclaw/openclaw/pull/100240)
+- The Control UI terminal's new-session button now aligns with the surrounding tabs for a cleaner, easier-to-scan tab bar. [#100256](https://github.com/openclaw/openclaw/pull/100256)
+
+### Channels and Messaging
+
+Replies and media now stay attached to the intended conversation more consistently across workspace, mobile, and community channels. [Signal](https://docs.openclaw.ai/channels/signal) can quote the triggering message and use friendly destination aliases, while [Telegram](https://docs.openclaw.ai/channels/telegram) handles albums, progress, retries, topics, routing, and delivery with fewer dropped, duplicated, stale, or hard-to-read results.
+
+Discord, Slack, WhatsApp, Apple Messages, and other supported channels also receive clearer command, thread, attachment, proxy, and recovery behavior. The [Apple Messages](https://docs.openclaw.ai/channels/imessage) setup and delivery paths in this group preserve the chat context readers expect rather than exposing the routing work underneath.
+
+#### Telegram
+
+- Telegram automations can now tell from platform metadata whether a sender is a bot, making routing and classification less dependent on usernames or naming conventions. [#96810](https://github.com/openclaw/openclaw/pull/96810) Thanks @lin-hongkuan, @ohyeah521.
+- Telegram sends and message actions that omit an account now consistently use the configured default bot instead of a stale identity that can misroute or reject the action. [#98789](https://github.com/openclaw/openclaw/pull/98789) Thanks @yetval.
+- Telegram destinations genuinely named `current`, `self`, `this`, or `me` can now be reached through configured entries, while accidental bare session words fail closed. [#94107](https://github.com/openclaw/openclaw/pull/94107) Thanks @obviyus, @silver-state, @zhangguiping-xydt.
+- Telegram sends to an `username` now use the account's configured proxy or custom Bot API endpoint for both target resolution and message delivery. [#100868](https://github.com/openclaw/openclaw/pull/100868) Thanks @machine3at.
+- Telegram webhook startup now releases its listener, bot, and network resources after a fatal registration error such as invalid or revoked credentials. [#100863](https://github.com/openclaw/openclaw/pull/100863) Thanks @machine3at.
+- Telegram photo albums now give the model every successfully downloaded image in order instead of only one photo and unusable file references, while failed items are omitted. [#97045](https://github.com/openclaw/openclaw/pull/97045) Thanks @nianjiuzst, @obviyus.
+- Telegram replies now omit internal tool-execution failure lines and deliver only the intended assistant answer. [#95774](https://github.com/openclaw/openclaw/pull/95774) Thanks @mushuiyu886.
+- Telegram replies retain literal wording such as `<think>` when it is part of the answer, while genuinely marked reasoning remains hidden. [#97286](https://github.com/openclaw/openclaw/pull/97286) Thanks @drickon, @obviyus.
+- Telegram heartbeat fallbacks now hide the `notify=false` control marker and deliver silently as requested, including suppressing marker-only replies. [#100735](https://github.com/openclaw/openclaw/pull/100735) Thanks @hackerismydream, @vincentkoc.
+- Telegram stickers and other plugin message actions now stay in the active forum topic or thread when sent to the matching conversation, including through Gateway dispatch. [#80293](https://github.com/openclaw/openclaw/pull/80293) Thanks @artdaal.
+- Telegram messages can now be sent proactively through the `message` tool or `openclaw message send` instead of failing as an unsupported channel. [#92107](https://github.com/openclaw/openclaw/pull/92107) Thanks @bladin, @obviyus.
+- `sessions_send` now rejects Telegram topic child sessions before dispatch and directs callers to the parent group, reducing misrouted agent work. [#99845](https://github.com/openclaw/openclaw/pull/99845) Thanks @nianjiuzst, @qingminglong.
+- Polls now follow the selected direct or hybrid channel instead of being misrouted through the Gateway, with clear errors for unsupported duration or anonymity options. [#99950](https://github.com/openclaw/openclaw/pull/99950) Thanks @nianjiuzst.
+- Established Telegram direct-message sessions now avoid resending recent messages already stored in the transcript, reducing token use and repetitive or confused replies. [#89855](https://github.com/openclaw/openclaw/pull/89855) Thanks @sweetcornna.
+- Telegram direct-message follow-ups now include one copy of the previous assistant reply in recent context instead of duplicating it and wasting tokens. [#98769](https://github.com/openclaw/openclaw/pull/98769) Related [#98767](https://github.com/openclaw/openclaw/issues/98767). Thanks @rabsef-bicrym.
+- Telegram bots in ambient group mode now see recent room context before deciding whether to speak, reducing replies to isolated fragments that were not directed at the bot. [#99143](https://github.com/openclaw/openclaw/pull/99143) Related [#99142](https://github.com/openclaw/openclaw/issues/99142). Thanks @obviyus.
+- Telegram group agents now receive one chronological copy of recent messages instead of duplicated history and repeated delivery details consuming context. [#99256](https://github.com/openclaw/openclaw/pull/99256) Related [#99218](https://github.com/openclaw/openclaw/issues/99218). Thanks @obviyus.
+- Telegram ambient group conversations can now retain unmentioned room context across later turns, restarts, and compaction without repeatedly replaying the same window. [#99306](https://github.com/openclaw/openclaw/pull/99306) Related [#99257](https://github.com/openclaw/openclaw/issues/99257). Thanks @obviyus.
+- Telegram ambient group sessions now restore the relevant older chat context after a reset instead of silently treating archived messages as already visible. [#99385](https://github.com/openclaw/openclaw/pull/99385) Related [#99373](https://github.com/openclaw/openclaw/issues/99373). Thanks @obviyus.
+- Telegram group agents now post visible replies when directly mentioned or replied to, while continuing to ignore unaddressed background chatter. [#99866](https://github.com/openclaw/openclaw/pull/99866) Related [#99854](https://github.com/openclaw/openclaw/issues/99854). Thanks @obviyus.
+- Telegram direct-message follow-ups now include one accurate copy of each earlier assistant reply instead of duplicating a hidden-instruction version. [#100573](https://github.com/openclaw/openclaw/pull/100573) Thanks @momothemage, @mooresoftware.
+- Telegram's live progress view now keeps reasoning, commentary, formatting, and tool activity readable and stable, then leaves a concise completion summary instead of disappearing. [#98907](https://github.com/openclaw/openclaw/pull/98907) Thanks @marvinthebored, @peetiegonzalez.
+- Telegram rich replies and progress messages containing OAuth email addresses now arrive instead of being rejected by Telegram validation. [#95900](https://github.com/openclaw/openclaw/pull/95900) Thanks @obviyus.
+- Telegram progress updates now truncate safely around emoji and other multi-unit characters, preventing broken glyphs and rejected Bot API payloads. [#96456](https://github.com/openclaw/openclaw/pull/96456) Thanks @he-yufeng.
+- Telegram streaming draft previews no longer break or show garbled text when an emoji falls at the size boundary, so long previews can keep updating normally. [#96504](https://github.com/openclaw/openclaw/pull/96504) Thanks @mushuiyu886, @obviyus.
+- Telegram replies now keep typing visible through more temporary API failures and fall back to plain text when valid rich content cannot be delivered. [#99745](https://github.com/openclaw/openclaw/pull/99745) Thanks @obviyus, @veda-openclaw.
+- Telegram typing indicators now retry after transient network failures, restoring status feedback without adding duplicate-message risk to normal sends. [#100762](https://github.com/openclaw/openclaw/pull/100762) Thanks @lzw112, @vincentkoc.
+- Telegram's final collapsed progress summary now includes Claude CLI thinking activity that was shown during the run instead of making that work appear to vanish. [4212de9](https://github.com/openclaw/openclaw/commit/4212de9e08d6e69357d937e399db3df63c1b66d7) Thanks @vincentkoc.
+- Telegram users with `/reasoning on` now receive the model's saved reasoning messages alongside the final answer. [#97875](https://github.com/openclaw/openclaw/pull/97875) Thanks @fuller-stack-dev, @marvinthebored.
+- Telegram groups and forum topics now show a typing indicator as soon as an addressed message is accepted, without signaling activity for ignored chatter. [#99965](https://github.com/openclaw/openclaw/pull/99965) Thanks @moeedahmed.
+- Telegram configurations with legacy `capabilities: []` now inherit the normal inline-button policy, restoring clickable buttons without overriding intentional opt-outs. [#96468](https://github.com/openclaw/openclaw/pull/96468) Thanks @vincentkoc, @zhangguiping-xydt.
+- Telegram users still receive a plain-text reply when rich formatting for an email, URL, mention, hashtag, command, phone number, bank card, or similar entity is rejected, instead of the bot going silent. [#96642](https://github.com/openclaw/openclaw/pull/96642) Thanks @moguangyu5-design.
+- Telegram inline buttons supplied by plugins now run their intended actions and cleanup instead of posting raw callback data into chat. [#97174](https://github.com/openclaw/openclaw/pull/97174) Thanks @goldmar.
+- Telegram rich-text replies now render math formulas more reliably instead of exposing raw LaTeX-style markers. [#97197](https://github.com/openclaw/openclaw/pull/97197) Thanks @vincentkoc, @wangwllu.
+- Telegram final replies and media sends now fall back to readable plain text when formatting, captions, or quotes are rejected, and routine flood waits up to 60 seconds are honored instead of dropping the message. [#98786](https://github.com/openclaw/openclaw/pull/98786) Related [#98778](https://github.com/openclaw/openclaw/issues/98778). Thanks @obviyus.
+- Telegram plugins can now turn a button tap into a normal user reply to the agent, while failed or skipped submissions leave the button available for another attempt. [#98922](https://github.com/openclaw/openclaw/pull/98922) Thanks @goldmar.
+- Telegram tables, rankings, and literal line breaks now remain readable, with explicit logs when rich content must fall back to plain text. [#99861](https://github.com/openclaw/openclaw/pull/99861) Related [#99833](https://github.com/openclaw/openclaw/issues/99833). Thanks @obviyus.
+- Telegram rich messages using `richMessages: true` and Markdown table mode `block` now display bordered, striped tables with the source column alignment. [#95822](https://github.com/openclaw/openclaw/pull/95822) Thanks @obviyus, @zhangguiping-xydt.
+- Telegram fallback messages now replace invalid numeric Unicode surrogate entities safely instead of emitting malformed text, while valid numeric emoji entities still render. [#96581](https://github.com/openclaw/openclaw/pull/96581) Thanks @llagy007, @weeli-009.
+- Telegram documents received through a containerized local Bot API now arrive with their actual contents when its mounted data path differs between containers. [#91984](https://github.com/openclaw/openclaw/pull/91984) Thanks @ailucasdz, @dizesales.
+- Telegram documents sent near a Gateway restart now retry after recovery instead of disappearing silently, while permanent failures still request a resend. [#98102](https://github.com/openclaw/openclaw/pull/98102) Related [#98076](https://github.com/openclaw/openclaw/issues/98076). Thanks @davearcher18, @luoyanglang, @obviyus.
+- Telegram rich messages and text-bearing forwards without a normal caption now reach the agent as readable conversation content instead of an unsupported-message placeholder. [#98735](https://github.com/openclaw/openclaw/pull/98735) Thanks @obviyus.
+- Telegram now tells users when an attachment cannot be downloaded, reports the actual size limit for oversized files, and still retries transient failures such as rate limits. [#100051](https://github.com/openclaw/openclaw/pull/100051) Thanks @batyaro777.
+- Telegram replies and forwards now preserve visible text from rich details, lists, math, captions, and credits so the agent receives the context users actually saw. [#100570](https://github.com/openclaw/openclaw/pull/100570) Thanks @veda-openclaw, @wangwllu.
+- MP3 speech from Piper, Kokoro, and other OpenAI-compatible TTS endpoints now arrives in Telegram as a native voice note rather than a filename-style audio attachment. [#100715](https://github.com/openclaw/openclaw/pull/100715) Thanks @hemantsudarshan.
+- Telegram no longer follows a successfully delivered final answer with a contradictory generic error when a later dispatch step fails, while partial-only failures still receive the existing fallback. [#90152](https://github.com/openclaw/openclaw/pull/90152) Thanks @zhangguiping-xydt.
+- A temporary Telegram reply-session conflict no longer traps a DM or forum topic in constant retries that block later messages; retries are paced, conversation order is retained, and unrelated chats continue processing. [#96550](https://github.com/openclaw/openclaw/pull/96550) Thanks @cnbarrier404, @vacinc.
+- Telegram reactions and message deletions now retry brief socket or Undici network failures, reducing unnecessary action failures without adding duplicate risk to ordinary message sends. [#96612](https://github.com/openclaw/openclaw/pull/96612) Thanks @miorbnli.
+- Telegram messages entering through isolated ingress now proceed to the agent reply instead of replaying the same message in a loop. [#96847](https://github.com/openclaw/openclaw/pull/96847) Thanks @obviyus.
+- Long-running Telegram turns can finish without being reclaimed and processed again midway, reducing stalled or duplicate delivery while giving operators a clearer unhealthy status when the backlog stops draining. [#96962](https://github.com/openclaw/openclaw/pull/96962) Thanks @joshavant.
+- Telegram bots using isolated polling can resume ordered message processing after a stalled drain or Gateway restart without manual database repair. [#97118](https://github.com/openclaw/openclaw/pull/97118) Thanks @romneyda, @vincentkoc.
+- Long non-streamed Telegram group replies now keep every chunk visible, including the beginning, while delivery receipts cover all generated text chunks. [#97304](https://github.com/openclaw/openclaw/pull/97304) Thanks @aliseturtle-lu, @obviyus.
+- Long streamed Telegram replies now deliver their middle sections under the default configuration instead of silently omitting part of the answer. [#97312](https://github.com/openclaw/openclaw/pull/97312) Thanks @brycemurray, @obviyus.
+- Telegram polling now recovers from temporary rate limits, server failures, and malformed error responses without disabling the account, while busy bots avoid cache writes that could trigger false stall restarts. [#98775](https://github.com/openclaw/openclaw/pull/98775) Related [#98772](https://github.com/openclaw/openclaw/issues/98772), [#98773](https://github.com/openclaw/openclaw/issues/98773). Thanks @obviyus.
+- A repeatedly failing Telegram update no longer blocks later messages in the same chat or topic, and replayed updates are retried safely without duplicate commands or apology spam. [#98776](https://github.com/openclaw/openclaw/pull/98776) Related [#98774](https://github.com/openclaw/openclaw/issues/98774). Thanks @obviyus.
+- Telegram webhook messages now survive Gateway restarts and temporary processing failures, while accounts recover from brief startup errors and repeated restarts stop leaking network connections. [#98806](https://github.com/openclaw/openclaw/pull/98806) Related [#98777](https://github.com/openclaw/openclaw/issues/98777). Thanks @obviyus.
+- Queued Telegram updates now remain replayable until restart recovery is safely recorded, reducing message loss during a crash at processing startup. [#104032](https://github.com/openclaw/openclaw/pull/104032) Thanks @obviyus, @vincentkoc.
+- Telegram sends now retry a safe TCP or TLS connection timeout, reducing lost final replies during flaky handshakes without retrying failures that may already have reached Telegram. [#101258](https://github.com/openclaw/openclaw/pull/101258) Thanks @lzw112.
+- Telegram startup logs now show local socket failures such as `EADDRNOTAVAIL` instead of incorrectly steering operators toward DNS troubleshooting. [#97130](https://github.com/openclaw/openclaw/pull/97130) Thanks @zhangguiping-xydt.
+- Telegram bot probes, webhook checks, membership audits, and polling now reject oversized Bot API success bodies before they can exhaust Gateway memory. [#97271](https://github.com/openclaw/openclaw/pull/97271) Thanks @hugenshen.
+- Telegram chat-ID lookup now fails safely on oversized `getChat` responses instead of risking excessive Gateway memory use during onboarding or routing. [#97274](https://github.com/openclaw/openclaw/pull/97274) Thanks @hugenshen.
+- Telegram onboarding now offers both the classic BotFather chat flow and the official web interface for creating a bot and copying its token into OpenClaw. [#100540](https://github.com/openclaw/openclaw/pull/100540)
+- After `/login codex` succeeds in Telegram, retrying the request now uses the newly authenticated OpenAI profile instead of the previous account. [fca0c81](https://github.com/openclaw/openclaw/commit/fca0c81791a5040536d4907913ed975bfcde1642) Thanks @100yenadmin.
+- Telegram `/steer` and `/tell` commands can redirect an active Codex task during streaming or tool work instead of arriving late or becoming follow-up messages. [#98126](https://github.com/openclaw/openclaw/pull/98126) Related [#81594](https://github.com/openclaw/openclaw/issues/81594). Thanks @100yenadmin, @kyzcreig.
+- Saying `wait` in a Telegram group conversation no longer cancels active OpenClaw work, while explicit stop commands still take effect immediately. [#98639](https://github.com/openclaw/openclaw/pull/98639) Thanks @ianchen08.
+- Telegram messages that cannot be steered into an active Codex turn are now retained for handling afterward instead of disappearing without a reply. [#103916](https://github.com/openclaw/openclaw/pull/103916) Thanks @jalehman.
+- When Telegram requests overlap, the newest authorized message now wins without an outdated reply being sent or replaced queued work being started. [#103965](https://github.com/openclaw/openclaw/pull/103965)
+- A Telegram reply that has already started is no longer unexpectedly cancelled when another authorized command arrives. [52a3314](https://github.com/openclaw/openclaw/commit/52a331466882ca0b6befa56c883355c758305813) Thanks @vincentkoc.
+
+#### Signal
+
+- Signal auto-replies now quote the message that triggered them, making responses easier to follow in groups and busy conversations. [#95718](https://github.com/openclaw/openclaw/pull/95718) Thanks @jesse-merhi.
+- Signal reaction shortcuts now apply only to the intended structured exec or plugin approval, including forwarded monitor and chunked prompts, while ordinary messages that merely quote approval commands no longer gain controls; older delivered prompts may still require `/approve` once after upgrade. [#96880](https://github.com/openclaw/openclaw/pull/96880) Thanks @joshavant.
+- Signal users who enable status reactions can now see when OpenClaw accepts a message, works, uses tools, compacts, stalls, or finishes in direct and group chats. [#98791](https://github.com/openclaw/openclaw/pull/98791) Thanks @jesse-merhi.
+- Signal QuickStart now shows one clear `signal-cli` installation failure and proceeds directly to the custom-path prompt instead of repeating the missing-binary message. [#96932](https://github.com/openclaw/openclaw/pull/96932) Thanks @romneyda.
+- Signal plugin setup now handles slow, malformed, or oversized GitHub release metadata without risking process memory exhaustion. [#97536](https://github.com/openclaw/openclaw/pull/97536) Thanks @hugenshen.
+- Signal container mode now stops oversized or runaway `signal-cli-rest-api` responses from threatening the entire OpenClaw process. [#97539](https://github.com/openclaw/openclaw/pull/97539) Thanks @alix-007.
+- Invalid JSON from the Signal REST container now produces a clear Signal-specific failure instead of exposing a raw parser error. [#98073](https://github.com/openclaw/openclaw/pull/98073) Thanks @lsr911, @vincentkoc.
+- Signal QuickStart on macOS now installs `signal-cli` through Homebrew instead of downloading an incompatible Linux package, and gives platform-specific guidance when Homebrew is unavailable. [#96909](https://github.com/openclaw/openclaw/pull/96909) Thanks @romneyda.
+- Signal container receives now reject oversized JSON frames before buffering them, limiting memory pressure without affecting normal messages or separately fetched attachments. [#99992](https://github.com/openclaw/openclaw/pull/99992) Thanks @sunlit-deng.
+- Signal users can assign stable names such as `signal:me` or `signal:ops` to repeat contacts and groups instead of reusing raw phone numbers, UUIDs, or IDs. [#95738](https://github.com/openclaw/openclaw/pull/95738) Thanks @jesse-merhi.
+- Signal users now receive clean assistant replies without internal tool status, reasoning tags, or tool-call markup. [#97360](https://github.com/openclaw/openclaw/pull/97360) Thanks @masatohoshino.
+
+- Signal local-file attachments that are oversized or use suspicious paths now fail quickly with a clear error before consuming excessive Gateway memory. [#101391](https://github.com/openclaw/openclaw/pull/101391) Thanks @cxbasdev.
+
+#### Slack
+
+- Slack channels can keep ambient OpenClaw participation while the opt-in `ignoreOtherMentions` setting prevents replies to conversations aimed at another person or group and retains that conversation as context for a later bot mention. [#53467](https://github.com/openclaw/openclaw/pull/53467) Thanks @hanamizuki.
+- Slack operators can now choose `off`, `first`, `all`, or `batched` reply threading per channel, with automatic replies and message tools following the same effective choice. [#82253](https://github.com/openclaw/openclaw/pull/82253)
+- Slack button and select interactions now remain in the correct assistant thread and show a working status there until the follow-up turn finishes. [#82895](https://github.com/openclaw/openclaw/pull/82895) Thanks @wukongai-cmu.
+- The first Slack reply after a daily or idle reset can reuse recent thread history, so the conversation does not suddenly start from scratch. [#97100](https://github.com/openclaw/openclaw/pull/97100) Thanks @bek91.
+- Slack replies stay attached to the root thread's session history instead of accumulating separate, nearly empty child sessions. [#97168](https://github.com/openclaw/openclaw/pull/97168) Related [#96535](https://github.com/openclaw/openclaw/issues/96535). Thanks @gorkem2020, @liuwqgit.
+- Ordinary Slack thread replies no longer download and process the opening message attachments again, while new or reset sessions still receive those files once. [#100516](https://github.com/openclaw/openclaw/pull/100516)
+- Session history now identifies Slack replies that were generated but intentionally superseded before delivery, so operators do not mistake them for messages the user received. [#100607](https://github.com/openclaw/openclaw/pull/100607) Thanks @bek91.
+- Slack replies in very long threads and on busy Gateways now avoid several unnecessary waits, reducing stalls before thread and direct-message events reach the agent. [#101888](https://github.com/openclaw/openclaw/pull/101888) Thanks @obviyus.
+- Slack agents can now read thread messages whose visible content exists only in attachments or blocks, including alerts with empty top-level text. [#97727](https://github.com/openclaw/openclaw/pull/97727) Thanks @chthtlo.
+- Slack Codex conversations now retain one final assistant reply in history instead of duplicating it through both the app-server transcript and delivery fallback. [#100160](https://github.com/openclaw/openclaw/pull/100160) Thanks @steipete-oai.
+- Scheduled and heartbeat-driven Slack messages now use the configured agent name and icon, with graceful fallback to the app identity when Slack rejects customization. [#84335](https://github.com/openclaw/openclaw/pull/84335) Thanks @rohang2005.
+- Longer Slack assistant-thread replies now show changing progress notes so users can tell OpenClaw is still working. [#85507](https://github.com/openclaw/openclaw/pull/85507) Thanks @emergentash.
+- Slack presentation messages now arrive as native Block Kit cards with working headers, controls, and receipts instead of flattened plain text. [#95463](https://github.com/openclaw/openclaw/pull/95463) Thanks @zoowh.
+- Slack rich-text block actions can now include emoji near the preview limit without producing malformed interaction text or downstream encoding failures. [#96577](https://github.com/openclaw/openclaw/pull/96577) Thanks @llagy007, @weeli-009.
+- Slack buttons and menus now preserve time labels such as `9:00` and return the intended action value when selected. [#99877](https://github.com/openclaw/openclaw/pull/99877) Thanks @qingminglong, @rodja.
+- Slack message reactions now accept common emoji or shortcode names, can target the current message without repeating its ID, and provide clearer member-lookup guidance. [#100375](https://github.com/openclaw/openclaw/pull/100375) Thanks @gorkem2020.
+- Slack now uses one static acknowledgement reaction alongside its native assistant loading status by default, avoiding two competing progress displays for the same reply. [#100462](https://github.com/openclaw/openclaw/pull/100462) Thanks @steipete-oai.
+- Slack messages and Block Kit labels now truncate without splitting emoji into broken replacement characters or invalid payload text. [#96382](https://github.com/openclaw/openclaw/pull/96382) Thanks @ly-wang19.
+- Long Slack command and plugin approval previews now keep emoji intact at the length boundary, avoiding malformed approval text or payloads. [#96576](https://github.com/openclaw/openclaw/pull/96576) Thanks @llagy007, @weeli-009.
+- Slack slash-command choice menus now shorten long labels without splitting emoji at the 75-character limit. [#97923](https://github.com/openclaw/openclaw/pull/97923) Thanks @lexes7.
+- Slack replies now keep each agent's custom name and avatar through streaming or fallback delivery instead of reverting to the app identity. [#100084](https://github.com/openclaw/openclaw/pull/100084) Thanks @moerai.
+- Slack operators running multiple Gateways through one Socket Mode app now receive a startup warning explaining why events may reach another connection and how to choose a safer deployment setup. [#79938](https://github.com/openclaw/openclaw/pull/79938) Thanks @jeffvsutherland.
+- Slack replies no longer expose internal tool-failure banners, reasoning scaffolding, or tool-call markup to users. [#97367](https://github.com/openclaw/openclaw/pull/97367) Thanks @masatohoshino.
+- When Slack accepts a reply but the confirmation is lost, OpenClaw can verify the existing post and avoid sending a duplicate. [#97480](https://github.com/openclaw/openclaw/pull/97480) Thanks @joeyfrasier.
+- Slack replies now retry after a temporary session-start conflict instead of stopping before the expected message is delivered. [#99647](https://github.com/openclaw/openclaw/pull/99647) Thanks @steipete-oai.
+- Slack read actions can again access intentionally allowlisted channel names when Slack supplies an ID and `dangerouslyAllowNameMatching` is enabled. [#95313](https://github.com/openclaw/openclaw/pull/95313) Thanks @jontsai.
+- Slack message and attachment text is no longer copied into verbose or debug logs during inbound processing. [#96312](https://github.com/openclaw/openclaw/pull/96312) Thanks @steipete-oai.
+- OpenClaw can use a trusted override for a compatible Slack API endpoint, while normal workspaces continue using Slack's public API and untrusted project .env files cannot redirect bearer-token requests. [#97154](https://github.com/openclaw/openclaw/pull/97154) Thanks @romneyda.
+- Slack agents can now identify admitted bot-authored messages through `is_bot: true`, making it easier to prevent unwanted bot-to-bot replies. [#97822](https://github.com/openclaw/openclaw/pull/97822) Thanks @masatohoshino, @vincentkoc.
+- Slack Socket Mode relay diagnostics now distinguish malformed WebSocket frames from transport failures, making channel problems easier to identify. [#98587](https://github.com/openclaw/openclaw/pull/98587) Thanks @lsr911, @vincentkoc.
+- Slack startup and account checks now warn when a user OAuth credential is configured as the bot token, before identity confusion affects mentions or replies. [#99931](https://github.com/openclaw/openclaw/pull/99931) Thanks @ooiuuii.
+- Long-running Slack integrations now keep conversation metadata caching within a fixed limit, preventing memory use from growing indefinitely as more channels and workspaces are encountered. [#101562](https://github.com/openclaw/openclaw/pull/101562) Thanks @vincentkoc, @zhangguiping-xydt.
+
+#### Discord
+
+- Discord tool-only replies no longer leave overlapping typing refreshes that suggest another answer is still coming, while explicitly configured typing behavior remains intact. [#84288](https://github.com/openclaw/openclaw/pull/84288) Thanks @dr00-eth.
+- When a Discord voice-note reply fails, users now receive the assistant's answer as a threaded text fallback without duplicating text that was already delivered. [#89962](https://github.com/openclaw/openclaw/pull/89962) Thanks @danhayman.
+- Discord's clear-all reactions action now returns a real error if any bot reaction remains instead of claiming complete success. [#90038](https://github.com/openclaw/openclaw/pull/90038) Thanks @masatohoshino.
+- Discord now shows enabled Anthropic reasoning, notes, and tool activity in the right order with accurate counters and nonblank summaries. [#96106](https://github.com/openclaw/openclaw/pull/96106) Thanks @marvinthebored, @obviyus, @peetiegonzalez.
+- Discord users now receive the reply text and a clear notice when an attachment is too large instead of seeing the completed response disappear. [#99577](https://github.com/openclaw/openclaw/pull/99577) Thanks @lin-hongkuan.
+- Completed partial-stream Discord replies now arrive as fresh messages that can trigger normal unread cues after a user leaves the channel. [#99711](https://github.com/openclaw/openclaw/pull/99711) Thanks @davelutztx.
+- Discord completion and error reactions now remain visible for the configured `doneHoldMs` and `errorHoldMs` durations instead of fixed default delays. [#94736](https://github.com/openclaw/openclaw/pull/94736) Thanks @liuwqgit.
+- Discord voice replies now keep their accompanying text and extra media attached to the original message even when single-use reply mode is enabled. [#95978](https://github.com/openclaw/openclaw/pull/95978) Thanks @nxmxbbd.
+- Discord attachments queued while OpenClaw is busy now remain available when the message finally runs instead of disappearing after temporary download links expire. [#96183](https://github.com/openclaw/openclaw/pull/96183) Thanks @judsonnudson, @zacharyyw.
+- Generated Discord thread names now preserve multiple Markdown emphasis spans without dropping or stranding formatting markers. [#96394](https://github.com/openclaw/openclaw/pull/96394) Thanks @ly-wang19.
+- Discord's recent-model buttons now shorten long names without breaking emoji or producing invalid picker payloads. [#97600](https://github.com/openclaw/openclaw/pull/97600) Thanks @llagy007, @weeli-009.
+- Long or media-rich implicit Discord replies now quote and notify the referenced user once in `first` or `batched` mode, while explicit and `all` replies retain every intended reference. [#100784](https://github.com/openclaw/openclaw/pull/100784) Thanks @qingminglong, @revision-co-ltd.
+- Discord replies, cron reports, and other outbound messages are less likely to disappear during a brief Gateway reconnect, without replaying chunks or media Discord already accepted. [#100896](https://github.com/openclaw/openclaw/pull/100896) Thanks @tiffanychum.
+- Discord automatic thread titles now handle long messages and channel details containing emoji without building malformed prompt text. [#101551](https://github.com/openclaw/openclaw/pull/101551) Thanks @alix-007.
+- Discord voice playback failures now produce a readable error within the 8,192-byte limit, including when ffmpeg output contains non-English text or emoji. [#104230](https://github.com/openclaw/openclaw/pull/104230) Thanks @qingminglong.
+- Multiple Discord bot accounts in one server now keep independent voice sessions, and configured voice auto-join works even when Discord becomes ready before voice startup completes. [#87530](https://github.com/openclaw/openclaw/pull/87530) Thanks @geekhuashan.
+- Checking a Discord member who is not in voice now reports them as disconnected instead of raising a misleading command or gateway failure. [#90969](https://github.com/openclaw/openclaw/pull/90969) Thanks @asock.
+- Adding a named Discord account no longer knocks a SecretRef-backed default account offline or into a restart loop. [#96401](https://github.com/openclaw/openclaw/pull/96401) Thanks @849261680.
+- Discord voice conversations in `stt-tts` mode now retain earlier spoken context across turns instead of starting over after each reply. [#97746](https://github.com/openclaw/openclaw/pull/97746) Thanks @karabaralex, @sanjays2402.
+- Discord voice playback now turns broken ffmpeg output pipes into a normal playback error instead of an uncaught Gateway-level exception. [#101088](https://github.com/openclaw/openclaw/pull/101088) Thanks @masatohoshino.
+- Discord bots can now recover in place after repeated session-resume rejection, reducing prolonged outages, lost replies, and full Gateway restarts. [#103596](https://github.com/openclaw/openclaw/pull/103596)
+- Discord voice playback now cleans up ffmpeg after output-pipe failures, reducing both Gateway crashes and leftover transcoder processes. [#101124](https://github.com/openclaw/openclaw/pull/101124)
+- The configured primary Discord account now starts first in multi-account setups, so the main bot is not delayed behind secondary or invalid entries after a restart. [#101292](https://github.com/openclaw/openclaw/pull/101292) Thanks @turbotheturtle.
+- Discord message reads and searches now decode raw compressed responses correctly and return clear errors for unexpected data instead of garbled output or opaque failures. [#80788](https://github.com/openclaw/openclaw/pull/80788) Thanks @jbetala7.
+- Discord REST calls now fail with a clear error when a response is oversized or stalls instead of risking unbounded memory use and process instability. [#95412](https://github.com/openclaw/openclaw/pull/95412) Thanks @alix-007.
+- Discord account health checks now fail safely on oversized identity responses instead of risking a Gateway crash or out-of-memory failure. [#97278](https://github.com/openclaw/openclaw/pull/97278) Thanks @hugenshen.
+- Discord message, thread-history, and attachment requests now reject oversized successful responses before they can drive excessive Gateway memory growth. [#97693](https://github.com/openclaw/openclaw/pull/97693) Thanks @alix-007.
+- Discord PluralKit lookups and voice-upload setup now stop unexpectedly large JSON responses before they can exhaust memory. [#97706](https://github.com/openclaw/openclaw/pull/97706) Thanks @cxbasdev.
+- Malformed successful Discord responses now fail with endpoint-specific context instead of surfacing a raw parser error or crashing OpenClaw. [#97889](https://github.com/openclaw/openclaw/pull/97889) Thanks @lsr911.
+- An oversized Discord gateway metadata response now logs a bounded error and falls back to Discord's default gateway URL instead of risking a Gateway crash. [#98682](https://github.com/openclaw/openclaw/pull/98682) Thanks @wings1029.
+- Discord deployments in restricted networks can now route Gateway and REST traffic through an explicitly configured DNS or private HTTP(S) proxy without opening broad direct HTTPS egress. [#99126](https://github.com/openclaw/openclaw/pull/99126) Related [#98266](https://github.com/openclaw/openclaw/issues/98266). Thanks @joshavant, @sallyom, @svuppala2006.
+- Discord Gateway connections now cap incoming frames at 16 MiB, preserving tested large member events while rejecting extreme traffic before it pressures memory. [#99998](https://github.com/openclaw/openclaw/pull/99998) Thanks @sunlit-deng.
+- Discord agents now receive `is_bot: true` for admitted bot messages while human and PluralKit sender behavior stays unchanged. [#97824](https://github.com/openclaw/openclaw/pull/97824) Thanks @masatohoshino, @vincentkoc.
+
+#### WhatsApp
+
+- Logged-out or replaced WhatsApp accounts now stay stopped until reconnection instead of entering repeated restart loops that can consume resources and slow other accounts. [#78511](https://github.com/openclaw/openclaw/pull/78511) Thanks @openperf.
+- Eligible WhatsApp messages received during a brief reconnect now reach OpenClaw for an automatic reply instead of being marked read and silently skipped. [#80642](https://github.com/openclaw/openclaw/pull/80642) Thanks @vishalj99.
+- Concurrent WhatsApp Web replies, media, reactions, and queued messages now send one at a time per account, reducing interference and unpredictable delivery order. [#99050](https://github.com/openclaw/openclaw/pull/99050) Thanks @ooiuuii.
+- Completed WhatsApp replies now continue delivering when another message arrives mid-delivery, so overlapping conversations are less likely to go unexpectedly silent. [#100205](https://github.com/openclaw/openclaw/pull/100205)
+- Invalid `OPENCLAW_WHATSAPP_WEB_SOCKET_URL` values now fail immediately with a clear configuration error instead of breaking later during socket startup. [#97697](https://github.com/openclaw/openclaw/pull/97697) Thanks @romneyda.
+- WhatsApp can now restore a saved linked-device session from a valid credential backup when the primary file is interrupted or corrupted, avoiding an unnecessary QR re-pair. [#99070](https://github.com/openclaw/openclaw/pull/99070) Thanks @leonidaslux.
+- `openclaw channels login --channel whatsapp` now replaces expired QR codes in place so interactive terminals show one current, scannable code. [#100159](https://github.com/openclaw/openclaw/pull/100159)
+- A WhatsApp message interrupted by a temporary reply-session conflict can now be retried instead of being marked delivered and silently ignored on redelivery. [#101106](https://github.com/openclaw/openclaw/pull/101106) Thanks @andersonjeccel.
+- OpenClaw can use a trusted override to point the normal Baileys socket at a compatible local WebSocket endpoint, while normal WhatsApp connections continue using the default path unless explicitly overridden. [#97155](https://github.com/openclaw/openclaw/pull/97155) Thanks @romneyda.
+- WhatsApp group owners can reliably use `/new`, `/stop`, `/status`, and similar commands even when their sender identity arrives as an internal LID. [#93379](https://github.com/openclaw/openclaw/pull/93379) Related [#77755](https://github.com/openclaw/openclaw/issues/77755). Thanks @jiveshkalra, @xialonglee.
+- Direct WhatsApp polls now honor the same outreach timelock as other sends instead of reaching recipients during a blocked window. [1d128b4](https://github.com/openclaw/openclaw/commit/1d128b4dd23297ee3553142954e4ce0542ba83e6) Thanks @vincentkoc.
+- Replies to OpenClaw-authored WhatsApp group messages now remain visible on WhatsApp Desktop and other multi-device clients with their quote context intact. [#94879](https://github.com/openclaw/openclaw/pull/94879) Thanks @bartok9.
+- WhatsApp direct sends and automatic replies now render combined bold-and-italic Markdown without stray asterisks, including when the formatted text contains emoji. [#96570](https://github.com/openclaw/openclaw/pull/96570) Thanks @llagy007, @weeli-009.
+- Long WhatsApp auto-reply and inbound-message previews now preserve emoji and report the truncated character count accurately, making affected diagnostics readable without changing delivery. [#96580](https://github.com/openclaw/openclaw/pull/96580) Thanks @llagy007, @weeli-009.
+- WhatsApp direct messages blocked by a reachout timelock now fail immediately with an explicit explanation instead of appearing accepted before a later delivery error. [#101264](https://github.com/openclaw/openclaw/pull/101264) Thanks @mcaxtr.
+
+- With `channels.whatsapp.actions.calls`, MeowCaller, and telephony TTS configured, a WhatsApp agent can now call the requester and speak a short task-completion or urgent message. [#99635](https://github.com/openclaw/openclaw/pull/99635)
+
+#### Weixin
+
+- Configured Weixin accounts with opaque IDs containing characters such as an at sign or `.` now start normally and preserve their account-specific routing. [#93686](https://github.com/openclaw/openclaw/pull/93686) Related [#93556](https://github.com/openclaw/openclaw/issues/93556). Thanks @htkillermax-gif, @zhangguiping-xydt.
+- Official Weixin installs and core-upgrade reconciliation now target plugin version 2.4.6 with its correct compatibility requirement instead of unexpectedly returning users to 2.4.3. [#96801](https://github.com/openclaw/openclaw/pull/96801) Thanks @lin-hongkuan.
+
+#### Apple Messages
+
+- Compatible iMessage bridge users can create, read, and vote on native Apple Messages polls, with upgrade guidance for unsupported `imsg` installations. [#98421](https://github.com/openclaw/openclaw/pull/98421) Thanks @lobster, @omarshahine.
+- Photos bridged from a remote iMessage Mac to a separate Gateway host now arrive in Codex conversations through a readable local path rather than a Mac-only filename. [#91803](https://github.com/openclaw/openclaw/pull/91803) Thanks @turbotheturtle.
+- Voting for an emoji-labeled iMessage poll option no longer sends an extra one-word message that repeats the selected answer. [#98691](https://github.com/openclaw/openclaw/pull/98691) Thanks @omarshahine.
+- Agents now answer iMessage polls, including polls with comments, with one native vote instead of an ordinary text answer, a repeated selection, or a separate reply to the comment. [#98781](https://github.com/openclaw/openclaw/pull/98781) Thanks @omarshahine.
+- AppleScript-only and bot-user or SSH iMessage setups now deliver replies even when threading is unavailable, and database changes no longer leave inbound messages hidden behind stale recovery state. [#100446](https://github.com/openclaw/openclaw/pull/100446) Thanks @omarshahine.
+- Direct iMessage chats using the `imsg` private API bridge now show typing as soon as a slow turn is accepted, without waiting for a read receipt. [#95621](https://github.com/openclaw/openclaw/pull/95621) Thanks @omarshahine.
+- iMessage replies no longer lose ordinary sentence text that happens to end with `user:`, `system:`, or `assistant:`. [#96392](https://github.com/openclaw/openclaw/pull/96392) Thanks @ly-wang19.
+- Bursts of long iMessage messages can now be combined without cutting an emoji in half and sending broken text to the agent. [#97598](https://github.com/openclaw/openclaw/pull/97598) Thanks @weeli-009.
+- iMessage startup warnings now distinguish working sender-allowlisted group setups from truly blocked configurations and point blocked operators to the correct fix. [#100046](https://github.com/openclaw/openclaw/pull/100046)
+- Bare 32-character iMessage group IDs from `imsg` now route scheduled and direct sends to the intended conversation instead of a nonexistent phone number. [#99525](https://github.com/openclaw/openclaw/pull/99525) Related [#89235](https://github.com/openclaw/openclaw/issues/89235). Thanks @matthewdelprado.
+- An iMessage helper pipe failure now ends pending work predictably and lets the monitor recover or stop cleanly instead of crashing the Gateway or hanging requests. [#101084](https://github.com/openclaw/openclaw/pull/101084) Thanks @masatohoshino.
+- iMessage CLI send and action failures caused by broken output pipes now return a controlled error instead of risking a Gateway worker crash. [#101401](https://github.com/openclaw/openclaw/pull/101401) Thanks @cxbasdev.
+
+#### LINE
+
+- Default and named LINE bots configured under `channels.line.accounts` now receive working webhook routes unless explicitly disabled, preventing valid inbound messages from ending in 404 responses. [#81471](https://github.com/openclaw/openclaw/pull/81471) Thanks @edenfunf, @honorlin.
+- LINE file uploads now retain recognizable audio extensions such as `.m4a`, allowing valid recordings to reach transcription instead of being treated as unknown files. [#96403](https://github.com/openclaw/openclaw/pull/96403) Thanks @tancolo, @zaidazmi.
+- LINE template titles, fallback text, and alt text now keep emoji intact at field limits, preventing broken previews and rejected payloads. [#97428](https://github.com/openclaw/openclaw/pull/97428) Thanks @ly-wang19, @vincentkoc.
+- Long LINE button labels, quick replies, postback data, and media controls now preserve emoji at field limits instead of producing malformed text. [#97470](https://github.com/openclaw/openclaw/pull/97470) Thanks @ly-wang19, @vincentkoc.
+- LINE messages, cards, menus, locations, and code blocks now preserve emoji and other multi-unit characters at field limits instead of producing broken text or rejected payloads. [#98994](https://github.com/openclaw/openclaw/pull/98994) Thanks @lexes7, @vincentkoc.
+- LINE replies that combine text with an image, card, or location now report a failed rich-media portion accurately while delivering the text once and avoiding duplicate retries. [#100996](https://github.com/openclaw/openclaw/pull/100996) Thanks @masatohoshino.
+
+#### Feishu
+
+- Feishu replies now arrive as completed blocks when block streaming is enabled without streaming cards, rather than disappearing entirely. [#94250](https://github.com/openclaw/openclaw/pull/94250) Related [#55027](https://github.com/openclaw/openclaw/issues/55027). Thanks @vincentkoc, @xialonglee, @zichaolong.
+- When an interactive command button falls back to text, users now receive the command they can copy, with Feishu document comments explaining the manual step. [#94385](https://github.com/openclaw/openclaw/pull/94385) Related [#69754](https://github.com/openclaw/openclaw/issues/69754). Thanks @1yihui, @xialonglee.
+- `openclaw channels login --channel feishu` now prints a compact QR code that stays scannable in a normal terminal window. [#97087](https://github.com/openclaw/openclaw/pull/97087) Thanks @nianjiuzst.
+- Long Feishu streaming-card summaries now keep emoji and other non-BMP characters intact at the truncation boundary. [#97462](https://github.com/openclaw/openclaw/pull/97462) Thanks @ly-wang19.
+- Long Feishu comments containing emoji at the cutoff now reach the agent as valid text instead of being split into malformed characters. [#97595](https://github.com/openclaw/openclaw/pull/97595) Thanks @llagy007, @weeli-009.
+- Feishu and Lark registration and streaming-card requests now reject oversized provider JSON before it can place unbounded pressure on memory. [#97782](https://github.com/openclaw/openclaw/pull/97782) Thanks @alix-007.
+- Supported interactive-card JSON sent through Feishu messages, thread replies, or text payloads now renders as a card instead of appearing as raw JSON. [#100883](https://github.com/openclaw/openclaw/pull/100883) Thanks @martingarramon, @vincentkoc, @zenorewn.
+- Stalled Feishu tenant-token or streaming-card requests now time out with a clear error and release the processing lane so other Gateway messages can continue. [#102948](https://github.com/openclaw/openclaw/pull/102948) Thanks @hugenshen, @sallyom.
+- Feishu setups that could send bot pushes but silently lost user replies now pass incoming messages into OpenClaw instead of failing during monitor startup. [#94013](https://github.com/openclaw/openclaw/pull/94013) Thanks @xydt-tanshanshan.
+- Feishu one-to-one chats can receive text, media, card, and fallback replies again instead of losing the response after the incoming message was processed. [#94760](https://github.com/openclaw/openclaw/pull/94760) Thanks @obviyus, @xydigit-zt.
+- Feishu card headers now show a clean agent emoji and name instead of descriptive text from `identity.emoji`, while flags, skin-tone variants, family emoji, and other valid sequences remain intact. [#96587](https://github.com/openclaw/openclaw/pull/96587) Thanks @harjothkhara, @leedongyu1128.
+- Feishu video messages now show the duration of local and remotely loaded MP4 clips when duration detection is available. [#98235](https://github.com/openclaw/openclaw/pull/98235) Thanks @areslp.
+- Temporary Feishu streaming-card refresh failures are now contained and logged for diagnosis instead of surfacing as unhandled errors. [#99301](https://github.com/openclaw/openclaw/pull/99301) Thanks @lwy-2.
+- Feishu direct messages received while the bot identity is temporarily unavailable no longer turn ordinary user mentions into accidental forwarding targets. [#100891](https://github.com/openclaw/openclaw/pull/100891) Thanks @zhangguiping-xydt.
+- Feishu error logs now shorten emoji-containing text at a valid character boundary, making card-action and WebSocket cleanup failures easier to read. [#101364](https://github.com/openclaw/openclaw/pull/101364) Thanks @zengwen-dt.
+- Feishu Drive can now list files beyond the first page of a large shared folder by accepting its returned `next_page_token`, with invalid page sizes rejected clearly before the request. [#101572](https://github.com/openclaw/openclaw/pull/101572) Thanks @zhangguiping-xydt.
+- A Feishu connection that stops receiving messages is less likely to remain falsely marked healthy because transport activity now updates channel health. [#90966](https://github.com/openclaw/openclaw/pull/90966) Thanks @acache, @richardataxai-lab, @vincentkoc.
+- Canceling a Feishu reconnect, startup, or bot-identity retry wait now ends cleanly instead of risking a `ReferenceError` during cleanup. [#98137](https://github.com/openclaw/openclaw/pull/98137) Thanks @zhanglei99586.
+- Feishu bot replies no longer expose internal tool or runtime failure banners alongside the intended response. [#98705](https://github.com/openclaw/openclaw/pull/98705) Thanks @zengwen-dt.
+
+- Multi-account Feishu setups can now start the default channel with an environment-backed top-level SecretRef and separate inline secrets for named accounts, without replacing the protected secret with plaintext. [#96965](https://github.com/openclaw/openclaw/pull/96965) Thanks @zw-xysk.
+
+#### Google Chat
+
+- Google Chat sends and request verification now bound oversized API, certificate, and error responses, allowing normal traffic through while broken or hostile bodies fail or truncate without exhausting memory. [#96772](https://github.com/openclaw/openclaw/pull/96772) Thanks @vincentkoc, @wangmiao0668000666.
+- Google Chat agents can now distinguish allowed bot messages through `is_bot: true` and handle automated senders differently from people. [#97825](https://github.com/openclaw/openclaw/pull/97825) Thanks @masatohoshino, @vincentkoc.
+- Long Google Chat approval cards now preserve emoji at the text limit, preventing corrupted approval text or malformed card payloads. [#96573](https://github.com/openclaw/openclaw/pull/96573) Thanks @llagy007, @weeli-009.
+
+#### Google Meet
+
+- Google Meet join, creation, talk-back, transcription, and related automation now work across browser and account languages by using English in OpenClaw-controlled Meet tabs. [#89671](https://github.com/openclaw/openclaw/pull/89671) Thanks @unayung.
+- Google Meet sessions launched through a paired macOS Chrome node now open the intended URL with the configured Chrome profile and audio tools, while unsupported actions and executable overrides are rejected before reaching the node. [#96908](https://github.com/openclaw/openclaw/pull/96908) Thanks @joshavant.
+- When Google Meet's local OAuth callback port is occupied, `openclaw meet auth login` now offers the manual redirect-paste flow instead of stopping sign-in. [#96492](https://github.com/openclaw/openclaw/pull/96492) Thanks @jinduwang1001-max, @yetval.
+
+#### Microsoft Teams
+
+- Microsoft Teams replies to long parent messages now keep emoji and similar characters intact in the agent's parent-message context instead of inserting malformed text. [#96569](https://github.com/openclaw/openclaw/pull/96569) Thanks @llagy007, @weeli-009.
+- Microsoft Teams Adaptive Card button clicks now deliver the submitted value to the agent instead of arriving as empty messages. [#97546](https://github.com/openclaw/openclaw/pull/97546) Thanks @jimmypuckett.
+- Microsoft Teams file delivery and chat lookup now cap large Microsoft Graph responses and return a labeled error instead of risking a process crash. [#97784](https://github.com/openclaw/openclaw/pull/97784) Thanks @alix-007.
+- Microsoft Teams attachment recovery now declines oversized Graph metadata with diagnostics instead of buffering it into Gateway memory, while normal hosted media still downloads within configured limits. [#101082](https://github.com/openclaw/openclaw/pull/101082) Thanks @cxbasdev.
+- The Microsoft Teams personal-chat welcome card now displays its greeting with the intended bold, medium emphasis. [#96290](https://github.com/openclaw/openclaw/pull/96290) Thanks @ly-wang19, @vincentkoc.
+- Microsoft Teams thread history now preserves literal entity text such as `<APIKEY>` instead of turning it into different markup before the agent sees it. [#96342](https://github.com/openclaw/openclaw/pull/96342) Thanks @ly-wang19.
+- Microsoft Teams feedback on long responses now carries intact emoji into reflection processing, preventing a cutoff from corrupting prompts, logs, or encoding. [#96578](https://github.com/openclaw/openclaw/pull/96578) Thanks @llagy007, @weeli-009.
+
+- Oversized or malformed Microsoft Teams personal-chat attachment metadata now fails safely with a warning instead of consuming unbounded Gateway memory. [#99125](https://github.com/openclaw/openclaw/pull/99125) Thanks @ly85206559.
+
+#### Matrix
+
+- Long Matrix thread starters keep emoji and other special characters intact when OpenClaw shortens them for agent context. [#97121](https://github.com/openclaw/openclaw/pull/97121) Thanks @bartok9, @ly-wang19.
+- Matrix operators now receive a structured warning when token rotations leave multiple populated storage roots, with details for identifying and carefully archiving stale folders. [#97353](https://github.com/openclaw/openclaw/pull/97353) Thanks @eldron81-r2d2, @outdog-hwh.
+- Long Matrix reply quotes sent to agents now truncate emoji and other multi-unit characters without leaving broken text. [#97471](https://github.com/openclaw/openclaw/pull/97471) Thanks @ly-wang19.
+- Matrix media downloads now enforce size and idle-timeout limits before buffering, including for encrypted media. [#97662](https://github.com/openclaw/openclaw/pull/97662) Thanks @alix-007.
+- Malformed successful Matrix responses now produce a controlled homeserver error instead of an opaque unhandled JSON parsing failure. [#97973](https://github.com/openclaw/openclaw/pull/97973) Thanks @lsr911.
+- Matrix dependency setup now stops its child process predictably and reports the failure when a local command's output pipe breaks. [#101597](https://github.com/openclaw/openclaw/pull/101597) Thanks @alix-007.
+- Matrix replies now deliver the intended answer without leaking internal tool diagnostics, reasoning tags, or assistant-only scaffolding. [#97372](https://github.com/openclaw/openclaw/pull/97372) Thanks @masatohoshino.
+
+#### Mattermost
+
+- Mattermost streaming draft previews now shorten long text containing emoji without showing a malformed replacement character. [#97472](https://github.com/openclaw/openclaw/pull/97472) Thanks @ly-wang19.
+- Mattermost channel monitoring now rejects inbound events above 16 MiB and reconnects, limiting memory exposure while continuing to accept normal large messages. [#99366](https://github.com/openclaw/openclaw/pull/99366) Thanks @sunlit-deng.
+- Mattermost API calls now stop oversized or endless successful responses before they can consume unbounded memory, while normal requests and uploads continue unchanged. [#96033](https://github.com/openclaw/openclaw/pull/96033) Thanks @alix-007.
+- Mattermost API failures with an empty JSON body now produce a clear status-based error instead of an `Unexpected end of JSON input` crash. [#97851](https://github.com/openclaw/openclaw/pull/97851) Thanks @pick-cat.
+- Mattermost installations repaired after an upgrade now load and reconnect on Gateway restart without requiring a manual plugin-enable setting, including restrictive allowlist setups. [#98608](https://github.com/openclaw/openclaw/pull/98608) Related [#98564](https://github.com/openclaw/openclaw/issues/98564). Thanks @jacobtomlinson, @shakkernerd.
+- Mattermost teams with more than 200 members can now discover and address valid peers beyond the first page of the team directory. [#98877](https://github.com/openclaw/openclaw/pull/98877) Related [#98871](https://github.com/openclaw/openclaw/issues/98871). Thanks @qingminglong.
+- Mattermost replies now show the intended assistant response without exposing internal tool-failure diagnostics. [#98693](https://github.com/openclaw/openclaw/pull/98693) Thanks @zengwen-dt.
+
+- Native `/oc_*` Mattermost commands work again in packaged installs using `openclaw/mattermost`, without allowing disabled or denied plugins to bypass Gateway checks. [#98819](https://github.com/openclaw/openclaw/pull/98819) Related [#98740](https://github.com/openclaw/openclaw/issues/98740). Thanks @amknight, @keltech-services.
+
+#### Nextcloud
+
+- Nextcloud Talk sends and reactions now bound server response sizes, protecting OpenClaw from hangs or runaway memory use while preserving normal delivery. [#96031](https://github.com/openclaw/openclaw/pull/96031) Thanks @alix-007.
+- Nextcloud Talk startup checks now show a concise bot-admin API failure without buffering an arbitrarily large error body. [#97811](https://github.com/openclaw/openclaw/pull/97811) Thanks @pick-cat.
+
+#### IRC
+
+- Long IRC messages now keep emoji and other supplementary characters intact when split into delivery chunks, including with unusually small configured chunk limits. [#96572](https://github.com/openclaw/openclaw/pull/96572) Thanks @llagy007, @weeli-009.
+- IRC reconnects now rotate fallback nicknames after a 433 conflict instead of repeatedly retrying the same occupied name. [#96108](https://github.com/openclaw/openclaw/pull/96108) Thanks @wendy-chsy.
+- IRC outbound text now preserves escaped emoji and keeps invalid surrogate escapes literal instead of silently replacing them with corrupted characters. [#97683](https://github.com/openclaw/openclaw/pull/97683) Thanks @llagy007, @weeli-009.
+- Long IRC replies now arrive complete when they contain Chinese, Cyrillic, emoji, or other non-ASCII text, while respecting `messageChunkMaxChars`. [#99138](https://github.com/openclaw/openclaw/pull/99138) Thanks @yetval.
+- IRC bots now reconnect and rejoin configured channels after a temporary server or network disconnect instead of staying silent until OpenClaw is restarted. [#100799](https://github.com/openclaw/openclaw/pull/100799) Thanks @zhangguiping-xydt.
+- IRC users now receive the intended answer without internal tool-failure banners or assistant-only scaffolding appearing in channel messages. [#97214](https://github.com/openclaw/openclaw/pull/97214) Thanks @masatohoshino, @studentzhou-svg, @vincentkoc.
+
+- IRC allowlists now reject host-less `nick!user` entries by default and guide operators toward verified full host masks, reducing impersonation risk. [#98339](https://github.com/openclaw/openclaw/pull/98339) Thanks @yetval.
+
+#### SMS
+
+- Twilio SMS account checks now handle malformed successful JSON with safe phone-number listing or a clear Messaging Service error. [#97999](https://github.com/openclaw/openclaw/pull/97999) Thanks @lsr911.
+- SMS replies now hide internal tool-trace failure banners and show only the intended assistant response. [#97989](https://github.com/openclaw/openclaw/pull/97989) Thanks @zengwen-dt.
+
+#### Synology
+
+- Long Synology Chat messages and diagnostic previews now truncate without cutting an emoji or other supplementary character in half, keeping downstream text valid. [#96574](https://github.com/openclaw/openclaw/pull/96574) Thanks @weeli-009.
+
+#### Zalo
+
+- Zalo setup, polling, sending, and health checks now reject abnormally large successful replies before they can push the Gateway into severe memory pressure. [#97277](https://github.com/openclaw/openclaw/pull/97277) Thanks @hugenshen.
+- Zalo operators can point Bot API calls at a compatible alternate endpoint without patching code, while ordinary workspace environment files cannot silently redirect traffic and millisecond message times remain accurate. [#98768](https://github.com/openclaw/openclaw/pull/98768) Thanks @romneyda.
+- Zalo gateway startup output now shows the connected bot account name when the Bot Platform supplies it. [#99274](https://github.com/openclaw/openclaw/pull/99274) Thanks @romneyda.
+- Zalo operators can send proactive CLI or scripted messages to valid nonnumeric `chat_id` values without an `Unknown target` rejection. [#101548](https://github.com/openclaw/openclaw/pull/101548) Thanks @goutamadwant.
+
+#### QQBot
+
+- QQBot upgrades now migrate recoverable credential backups into SQLite without deleting source files when import fails, while disposable caches rebuild separately. [#89597](https://github.com/openclaw/openclaw/pull/89597)
+- QQBot can now deliver documents and media created by sandboxed agents from authorized workspace paths while continuing to block path escapes. [#92872](https://github.com/openclaw/openclaw/pull/92872) Thanks @sliverp, @zhangguiping-xydt.
+- QQBot speech-to-text now returns an early, labelled error when an OpenAI-compatible transcription endpoint sends an oversized response instead of buffering the full body in memory. [#96968](https://github.com/openclaw/openclaw/pull/96968) Thanks @mushuiyu886.
+- QQBot Markdown tables now keep escaped pipe characters inside their cells, so commands and expressions do not shift into the wrong columns. [#97429](https://github.com/openclaw/openclaw/pull/97429) Thanks @ly-wang19.
+- QQBot reminders created from long text now receive readable job names even when an emoji falls at the cutoff, rather than storing a broken character. [#96575](https://github.com/openclaw/openclaw/pull/96575) Thanks @llagy007, @weeli-009.
+- QQBot status now reports disconnections and fatal close reasons accurately, then returns to connected only after a READY or RESUMED event. [#100127](https://github.com/openclaw/openclaw/pull/100127) Thanks @masatohoshino, @vincentkoc.
+- QQBot approval cards, message previews, logs, media paths, and retry warnings now shorten emoji-containing text without broken replacement characters. [#101421](https://github.com/openclaw/openclaw/pull/101421) Thanks @wangmiao0668000666.
+- QQBot previews, errors, commands, speech-to-text messages, media diagnostics, and logs now remain valid when emoji-containing text reaches a length limit. [#101516](https://github.com/openclaw/openclaw/pull/101516) Thanks @vincentkoc, @wangmiao0668000666.
+
+- QQBot now avoids accidental reminders, limits exposure of private media details, and requires explicit confirmation before destructive channel or announcement actions. [#98032](https://github.com/openclaw/openclaw/pull/98032) Thanks @patrick-erichsen.
+
+#### Tlon and Urbit
+
+- Tlon and Urbit channel failures now bound oversized or malformed error responses before they can cause memory spikes, while retaining useful short messages. [#98496](https://github.com/openclaw/openclaw/pull/98496) Thanks @pandah97.
+- Tlon now stops oversized or stalled external image downloads before they consume unbounded memory and can continue the message with the original URL. [#100374](https://github.com/openclaw/openclaw/pull/100374) Thanks @hugenshen.
+- Oversized Tlon scry responses now fail with a clear path-specific error instead of risking a Gateway out-of-memory crash. [#100376](https://github.com/openclaw/openclaw/pull/100376) Thanks @hugenshen.
+- Tlon approval notifications now keep emoji intact at the preview limit, preventing malformed message previews. [#97599](https://github.com/openclaw/openclaw/pull/97599) Thanks @llagy007, @weeli-009.
+- Tlon media uploads now stop safely when Memex returns an oversized or malformed response instead of allowing the upload attempt to consume excessive memory. [#101115](https://github.com/openclaw/openclaw/pull/101115) Thanks @cxbasdev.
+
+#### Nostr
+
+- Repeated Nostr profile publishing now clears relay timeout timers after success, reducing stale resource buildup in long-running agents. [#98720](https://github.com/openclaw/openclaw/pull/98720) Related [#98463](https://github.com/openclaw/openclaw/issues/98463). Thanks @wangmiao0668000666, @zhanglei99586.
+
+#### Voice Calls
+
+- Google Meet and direct Voice Call sessions now keep the identity, workspace, routing, and transcript attribution of the agent that started the call instead of silently switching to the default agent. [#77763](https://github.com/openclaw/openclaw/pull/77763) Thanks @quangtran88.
+- Google Live call history now keeps both sides of the conversation, while reconnects avoid submitting unfinished speech or combining unrelated utterances. [#84161](https://github.com/openclaw/openclaw/pull/84161)
+- OpenAI Realtime outbound calls now play one opening greeting even when the recipient speaks immediately after answering, while later interruptions continue to stop active speech. [#86285](https://github.com/openclaw/openclaw/pull/86285) Thanks @giodl73-repo, @jnikolaidis.
+- Callers using realtime OpenAI or Google voice calls can now interrupt assistant speech and have buffered phone audio stop promptly, while other providers keep the existing local fallback. [#90749](https://github.com/openclaw/openclaw/pull/90749) Thanks @moellenbeck.
+- Voice callers now hear a completed answer without waiting for post-turn compaction, and a successful early playback is no longer repeated. [#94015](https://github.com/openclaw/openclaw/pull/94015) Thanks @xialonglee.
+- Twilio voice-call operators can select US1, IE1, or AU1 so call control and records use the intended Region, with US1 remaining the default. [#95832](https://github.com/openclaw/openclaw/pull/95832) Thanks @jodok.
+- Inbound Telnyx-style and Plivo voice conversations can now continue after the caller's first response instead of falling silent before OpenClaw speaks again. [#100255](https://github.com/openclaw/openclaw/pull/100255) Thanks @dvy.
+- Valid Twilio and Plivo callbacks now pass signature checks behind trusted IPv4 reverse proxies even when Node reports the proxy as an IPv4-mapped IPv6 address. [#100261](https://github.com/openclaw/openclaw/pull/100261) Thanks @rohitjavvadi.
+- Repeated voice-call webhook deliveries are now acknowledged without repeating call or transcript side effects within the replay window. [#100263](https://github.com/openclaw/openclaw/pull/100263) Thanks @xialonglee.
+- The Twilio voice-call provider now rejects unsupported API hostnames before sending a request and accepts only OpenClaw's supported Twilio regional hosts. [094c0d4](https://github.com/openclaw/openclaw/commit/094c0d421faff7691d259a26af9cb135f00c6ebc) Thanks @vincentkoc.
+- An accepted voice message that arrives while OpenClaw is already replying can still receive a voice response when `tts.auto: "inbound"` is configured. [#95596](https://github.com/openclaw/openclaw/pull/95596) Thanks @mcaxtr.
+- Realtime voice prompts now remain readable when long agent names or injected context containing emoji must be shortened. [#101304](https://github.com/openclaw/openclaw/pull/101304) Thanks @alix-007.
+- Google Meet local audio bridges now shut down cleanly and log a warning when a capture or playback command pipe fails, rather than crashing on an unhandled stream error. [#101596](https://github.com/openclaw/openclaw/pull/101596) Thanks @alix-007.
+
+- Voice Call history now stays with the correct configured agent across Gateway restarts and upgrades, while ambiguous legacy state is left untouched with actionable warnings. [#89884](https://github.com/openclaw/openclaw/pull/89884) Thanks @mushuiyu886.
+- Completed Voice Call status remains available through the Gateway, tool, and CLI after restart or eviction instead of incorrectly appearing missing. [#99797](https://github.com/openclaw/openclaw/pull/99797) Thanks @darren2030.
+
+#### ClickClack
+
+- ClickClack agent replies to top-level messages now stay in the active channel or direct message, while replies inside real threads remain threaded. [#100582](https://github.com/openclaw/openclaw/pull/100582) Thanks @marvinthebored, @vincentkoc.
+- ClickClack can now show opt-in, durable commentary and tool activity during a run so users are not left with an empty channel until the final reply. [#99954](https://github.com/openclaw/openclaw/pull/99954) Thanks @obviyus, @ragesaq.
+
+- ClickClack now stops oversized REST success responses at the provider limit, giving users and operators a predictable failure instead of continued streaming and memory growth. [#96970](https://github.com/openclaw/openclaw/pull/96970) Thanks @mushuiyu886, @vincentkoc.
+
+#### Shared channel improvements
+
+- Messages that fail before reaching Discord, Slack, Matrix, or another channel can now be replayed after connectivity returns, while uncertain post-send outcomes still avoid blind duplicates. [#101024](https://github.com/openclaw/openclaw/pull/101024) Thanks @sunnyshu0925.
+- Messages sent through OpenClaw's message tool now retain configured static or identity response prefixes, keeping routed and broadcast messages consistently labeled. [#93639](https://github.com/openclaw/openclaw/pull/93639) Thanks @zengwen-dt.
+- Completions from subagents, scheduled tasks, media jobs, and agent harnesses now return through the same configured account, destination, and thread that requested them. [#98240](https://github.com/openclaw/openclaw/pull/98240) Thanks @yetval.
+- Replies and attachments already accepted by a channel are no longer resent after a restart or recovery failure, while genuinely unsent items remain retryable. [#99600](https://github.com/openclaw/openclaw/pull/99600) Thanks @zhangguiping-xydt.
+- Outbound sends now report failed and partially delivered messages with useful per-part outcomes instead of presenting every attempt as a success. [#99928](https://github.com/openclaw/openclaw/pull/99928) Thanks @masatohoshino.
+- Non-streaming channels no longer send the same final text or media twice for one message, while genuinely separate replies with different routing or thread identities still go through. [#100828](https://github.com/openclaw/openclaw/pull/100828) Thanks @vincentkoc, @zhangxiaojiujiayi.
+- Cron and outbound channel sends no longer report success without a usable platform receipt, making missing notifications show as not delivered or suppressed instead of falsely delivered. [#79811](https://github.com/openclaw/openclaw/pull/79811) Thanks @indulgeback.
+- Queued messages now resume at a gentler pace after an outage, restart, or reconnect, reducing avoidable channel and provider rate-limit bursts while keeping recovery bounded. [#101118](https://github.com/openclaw/openclaw/pull/101118) Thanks @zengwen-dt.
+- Noisy phone numbers with extra plus signs now match the intended Signal, iMessage, or WhatsApp contact, while identities with no digits are rejected safely. [#100467](https://github.com/openclaw/openclaw/pull/100467) Thanks @morluto.
+- Reply directives containing hidden unsafe characters now produce stable, display-safe reply IDs before chat routing uses them. [#96446](https://github.com/openclaw/openclaw/pull/96446) Thanks @lin-hongkuan.
+- Ambient agents now stay quieter in observed group conversations and honor operator instructions such as replying only when spoken to. [#99144](https://github.com/openclaw/openclaw/pull/99144) Thanks @obviyus.
+- Ambient group chats now remain silent unless the agent deliberately sends a message, without stray status lines, tool summaries, compaction notices, delivery warnings, or overflow follow-ups. [#99145](https://github.com/openclaw/openclaw/pull/99145) Thanks @obviyus.
+- Always-on group agents can now receive and answer valid unmentioned messages after a plugin fallback instead of silently dropping them. [#99506](https://github.com/openclaw/openclaw/pull/99506) Related [#99457](https://github.com/openclaw/openclaw/issues/99457). Thanks @lzy3538, @zqchris.
+- Agents catching up in busy group chats now receive clearer sender-by-sender history, making multi-person conversations easier to follow without exposing local paths or URLs. [#100366](https://github.com/openclaw/openclaw/pull/100366) Thanks @gorkem2020.
+- Telegram and Discord plugin commands that send their own response can return `{ suppressReply: true }`, preventing a second misleading empty-response warning or failure. [#80928](https://github.com/openclaw/openclaw/pull/80928) Related [#80756](https://github.com/openclaw/openclaw/issues/80756). Thanks @alexuser, @unclouded77.
+- With `messages.ackReactionScope: "all"`, ambient room messages now receive the configured acknowledgement reaction across Discord, Slack, and Telegram. [#87433](https://github.com/openclaw/openclaw/pull/87433) Thanks @paul-phan, @scoootscooob.
+- Channel plugins can resume automatic recovery after a long healthy run, so an occasional later disconnect is not blocked by an old restart budget while true rapid crash loops remain capped. [#101413](https://github.com/openclaw/openclaw/pull/101413) Thanks @clintoncodewell.
+- Telegram and other channels can recover automatically after certain API outages and timed-out shutdowns instead of remaining silent until a Gateway restart. [#94016](https://github.com/openclaw/openclaw/pull/94016) Thanks @sheyanmin.
+- A partially delivered queued send is no longer blindly replayed after reconnect, reducing duplicate Telegram and other channel messages. [#96247](https://github.com/openclaw/openclaw/pull/96247) Thanks @obviyus, @rosenlo.
+- Discord and other progress views now hide repetitive internal Code Mode polling while continuing to show meaningful tool activity. [#99893](https://github.com/openclaw/openclaw/pull/99893)
+- Long-running Discord and Nextcloud Talk integrations now bound their channel metadata caches instead of letting each newly encountered room increase memory use forever. [#101650](https://github.com/openclaw/openclaw/pull/101650) Thanks @alix-007, @vincentkoc.
+- A transient Gmail watch-renewal failure now produces an error without crashing a long-running foreground `openclaw webhooks gmail run` process. [#100342](https://github.com/openclaw/openclaw/pull/100342) Thanks @cxbasdev, @vincentkoc.
+- Channel previews, thread names, snippets, and shortened errors across browser and messaging integrations now preserve whole emoji and other Unicode characters. [c16bb87](https://github.com/openclaw/openclaw/commit/c16bb8725a8a04d5de92855769cf87e13574384f) Thanks @vincentkoc.
+- Long Slack context labels, Zalo messages and captions, and extension command output now truncate without breaking emoji or other non-BMP characters. [7e03242](https://github.com/openclaw/openclaw/commit/7e0324263b867d3d47138d1d2b1e9afd1dd2016f) Thanks @hugenshen, @mushuiyu886, @vincentkoc.
+- Fenced code blocks that contain example lines resembling Markdown fence markers are now kept together instead of being split mid-block and becoming confusing or misread. [#96745](https://github.com/openclaw/openclaw/pull/96745) Thanks @ly-wang19, @vincentkoc.
+- Long unbroken messages now keep emoji intact when split into delivery-sized chunks, preventing garbled replacement characters for users and channel plugins. [#96951](https://github.com/openclaw/openclaw/pull/96951) Thanks @bartok9, @ly-wang19.
+- Skill command descriptions now remain fuller where supported and stay valid in Discord and Mattermost when emoji appears near a platform limit. [#99593](https://github.com/openclaw/openclaw/pull/99593) Thanks @pick-cat.
+- Long emoji-containing agent labels now produce clean native channel thread names and introductions instead of broken characters. [#101527](https://github.com/openclaw/openclaw/pull/101527) Thanks @lsr911.
+- Chinese, Japanese, and Korean bold labels followed immediately by text now render as bold instead of exposing literal `**` markers in Telegram and other shared-Markdown channels. [#101230](https://github.com/openclaw/openclaw/pull/101230) Thanks @nicknmorty.
+- Attachment download failures across WhatsApp, LINE, Signal, iMessage, Teams, Feishu, Mattermost, and Zalo now remain visible and actionable instead of disappearing or masquerading as successful media. [#100119](https://github.com/openclaw/openclaw/pull/100119)
+- OpenClaw now recognizes `.m2a` recordings as audio, allowing them to move through attachment, transcription, memory, and chat display workflows without conversion. [#92167](https://github.com/openclaw/openclaw/pull/92167) Thanks @llljjjwww333.
+- Files sent through Telegram and other supported chat channels now keep clean names such as `report.png` instead of exposing an internal cache identifier in the attachment filename. [#96565](https://github.com/openclaw/openclaw/pull/96565) Thanks @narahariraghava, @obviyus.
+- Cron summaries, Teams and Slack replies, and other embedded assistant responses no longer expose provider reasoning markers such as `</mm:think>`. [#101036](https://github.com/openclaw/openclaw/pull/101036) Thanks @velanir-ai-manager.
+- Punctuation around a model's `NO_REPLY` token no longer turns it into a visible chat message, while legitimate messages containing the token still arrive. [#98224](https://github.com/openclaw/openclaw/pull/98224) Thanks @sunnyshu0925.
+- Slack, Discord, Telegram, WhatsApp, and Microsoft Teams users now receive a clear retry and re-authentication message when a model provider returns a recognized HTTP 401 error instead of seeing only a reaction or no useful reply. [#96599](https://github.com/openclaw/openclaw/pull/96599) Thanks @sjf-oa.
+- Text commands such as `/model fable` now reliably display their confirmation even in flows that suppress ordinary source replies. [#100151](https://github.com/openclaw/openclaw/pull/100151)
+- The bare `/think` command now shows available thinking levels promptly in Telegram, Slack, and Discord without waiting on slow model discovery. [#101926](https://github.com/openclaw/openclaw/pull/101926) Thanks @vincentkoc.
+- Direct mentions to Telegram and Discord group bots using `message_tool_only` now produce visible channel replies on both new and resumed sessions. [#99389](https://github.com/openclaw/openclaw/pull/99389) Related [#99371](https://github.com/openclaw/openclaw/issues/99371). Thanks @obviyus.
+
+- The `/usage full` footer is shorter and easier to read on Telegram and other narrow displays, with detailed token information still available through dedicated views. [#92877](https://github.com/openclaw/openclaw/pull/92877) Thanks @marvinthebored.
+- Custom usage footers now render alias and map fallbacks correctly even when model or mode names collide with properties such as `toString` or `constructor`. [#98503](https://github.com/openclaw/openclaw/pull/98503) Related [#98466](https://github.com/openclaw/openclaw/issues/98466). Thanks @chenyangjun-xy, @zhanglei99586.
+- Transient stdout or stderr read errors from `gog gmail watch serve` no longer crash OpenClaw while Gmail watch mode is running. [#100519](https://github.com/openclaw/openclaw/pull/100519) Thanks @cxbasdev.
+
+### Providers and Models
+
+Across Anthropic and Claude, Gemini, OpenAI and Codex, local models, and other supported routes, [providers](https://docs.openclaw.ai/concepts/model-providers) now handle credentials, catalogs, limits, fallbacks, streaming, and tool calls more consistently. Readers should see fewer requests fail because the selected route used the wrong model metadata, replayed incompatible reasoning, lost authentication state, or interpreted a provider response incorrectly.
+
+The [model catalog](https://docs.openclaw.ai/concepts/models) also reports availability and capability more accurately, while [Codex supervision](https://docs.openclaw.ai/plugins/codex-supervision) keeps connected model choices and session behavior aligned with the backend that was actually selected.
+
+#### Provider setup and model selection
+
+##### New providers and integrations
+
+- OpenCode Zen users can browse and run its supported Claude, GPT, Gemini, GLM, DeepSeek, MiniMax, Qwen, and other models without manually defining each route. [#92495](https://github.com/openclaw/openclaw/pull/92495) Thanks @mushuiyu886, @sallyom.
+- Library and integration developers can now install a version-matched package, create independent AI runtimes, and reuse OpenClaw's supported model transports without embedding the full application. [#99059](https://github.com/openclaw/openclaw/pull/99059)
+- Featherless AI now has an official provider install and onboarding path, including `FEATHERLESS_API_KEY`, a curated `featherless/Qwen/Qwen3-32B` default, and support for exact Featherless model IDs. [#101092](https://github.com/openclaw/openclaw/pull/101092) Thanks @vincentkoc.
+- Meta Model API is now exposed through the public `meta` provider, with `meta/muse-spark-1.1`, canonical provider docs, and standalone npm or ClawHub installation paths. [#103070](https://github.com/openclaw/openclaw/pull/103070) Thanks @vincentkoc.
+- The bundled Meta provider now uses `https://api.meta.ai/v1`, advertises Muse Spark 1.1's documented 131,072-token output limit, and applies official-host request protections. [#103680](https://github.com/openclaw/openclaw/pull/103680) Thanks @vincentkoc.
+
+##### Anthropic, Google, and OpenAI setup
+
+- Claude Fable 5 now works through Anthropic Vertex for simple-completion tasks such as generated conversation labels instead of failing before the request reaches Vertex. [#98932](https://github.com/openclaw/openclaw/pull/98932)
+- Claude CLI users can combine multiple `--mcp-config` files without losing servers or corrupting the prompt, and concurrent Gemini CLI runs are less likely to interfere with shared credential files. [#98983](https://github.com/openclaw/openclaw/pull/98983) Related [#98944](https://github.com/openclaw/openclaw/issues/98944), [#98945](https://github.com/openclaw/openclaw/issues/98945). Thanks @obviyus.
+- Google image generation can now use `models.providers.google.apiKey` and an optional custom `baseUrl` without separate environment credentials or an auth profile. [#100779](https://github.com/openclaw/openclaw/pull/100779) Thanks @amknight.
+- OpenAI image generation can now be enabled from `models.providers.openai` with a usable API key and custom base URL, without also requiring `OPENAI_API_KEY` or an auth profile. [#100745](https://github.com/openclaw/openclaw/pull/100745) Thanks @amknight.
+- Configurations using the retired `openai-codex-responses` API ID now receive a validation message naming the supported replacement instead of a generic failure. [#96257](https://github.com/openclaw/openclaw/pull/96257) Thanks @james-16, @yetval.
+- Legacy `openai-codex` references now direct operators to `openclaw doctor --fix` and `openclaw models status` instead of suggesting configuration that fails validation. [#100120](https://github.com/openclaw/openclaw/pull/100120) Thanks @jason-vaughan, @sunnyshu0925, @vincentkoc.
+
+##### Local and self-hosted models
+
+- Ollama model discovery now stops oversized or never-ending endpoint responses before they can exhaust memory or leave setup hanging. [#96027](https://github.com/openclaw/openclaw/pull/96027) Thanks @alix-007.
+- LM Studio model discovery and startup now stop pathological server responses at a fixed size and report a clear error instead of buffering them indefinitely. [#96042](https://github.com/openclaw/openclaw/pull/96042) Thanks @alix-007.
+- `openclaw models list` now reports configured local Ollama models as available when they are running and usable. [#97491](https://github.com/openclaw/openclaw/pull/97491) Thanks @lingfeizi, @qingminglong.
+- Custom Xiaomi MiMo and other OpenAI-compatible models without a known output limit can now complete chats instead of failing with an invented oversized cap. [#98312](https://github.com/openclaw/openclaw/pull/98312) Thanks @peole, @sanjays2402.
+
+##### Shared provider configuration
+
+- Provider setup now stops reading runaway model-discovery responses before they can stall or exhaust memory, while normal self-hosted server responses continue to work. [#95244](https://github.com/openclaw/openclaw/pull/95244) Thanks @alix-007, @sallyom.
+- Rerunning provider onboarding or refreshing models now preserves operator-owned timeouts, transport settings, MiniMax models, and SecretRef credentials instead of silently erasing them. [#100107](https://github.com/openclaw/openclaw/pull/100107) Thanks @frank-beans.
+- With `models.mode` set to `replace`, agent startup now uses only explicitly configured providers and skips the slow implicit provider scan. [#82638](https://github.com/openclaw/openclaw/pull/82638) Related [#66957](https://github.com/openclaw/openclaw/issues/66957). Thanks @eldar702, @wangzhengshu.
+- Bundled provider aliases now accept supported overlay settings such as request timeouts without demanding custom-provider fields like `baseUrl` and `models`. [#88400](https://github.com/openclaw/openclaw/pull/88400) Thanks @pluviobyte.
+- Isolated cron jobs can now use models supplied by enabled bundled plugins without failing as unknown or silently resolving to the wrong provider. [#96070](https://github.com/openclaw/openclaw/pull/96070) Thanks @sallyom, @sunnyshu0925.
+- Z.AI endpoint and model detection now fails gracefully on oversized or endless error responses instead of exhausting host memory. [#97540](https://github.com/openclaw/openclaw/pull/97540) Thanks @alix-007.
+- Microsoft Foundry connection tests now stop oversized or continuously streamed error responses while preserving concise setup diagnostics. [#97812](https://github.com/openclaw/openclaw/pull/97812) Thanks @pick-cat.
+- Generic provider configurations for official DashScope/Qwen, Moonshot, Z.AI, DeepSeek, Groq, Cerebras, and Chutes endpoints now retain the compatibility behavior those services require even without optional plugins. [#100125](https://github.com/openclaw/openclaw/pull/100125)
+- Provider onboarding no longer writes an empty `request` block when no request overrides were supplied. [3a0a736](https://github.com/openclaw/openclaw/commit/3a0a736843af2877d66f5b8b8bcc78786d8f04a0) Thanks @vincentkoc.
+
+##### Model catalogs and selection
+
+- Switching a live Control UI or TUI session through a provider-qualified model alias now saves the canonical provider and model, preventing the next request from being rejected. [#100209](https://github.com/openclaw/openclaw/pull/100209) Thanks @sahilsatralkar.
+- Bedrock Mantle model discovery now times out and caps oversized catalog responses instead of hanging or consuming excessive memory, while cached models remain available. [#99961](https://github.com/openclaw/openclaw/pull/99961) Thanks @zhangguiping-xydt.
+- OpenRouter video model discovery now stops oversized or runaway catalog responses promptly instead of letting them consume memory without limit, while normal discovery behavior is preserved. [#96505](https://github.com/openclaw/openclaw/pull/96505) Thanks @mushuiyu886.
+- Model aliases and partial names such as `opus` now resolve to the newest matching version even when catalogs reach double-digit versions, preventing silent routing to an older model. [#96609](https://github.com/openclaw/openclaw/pull/96609) Thanks @yetval, @zw-xysk.
+- Paginated provider catalogs now expose models beyond the first page, while malformed, endless, or redirected catalogs fail safely instead of caching an incomplete list or forwarding sensitive headers across origins. [#97012](https://github.com/openclaw/openclaw/pull/97012) Thanks @zhangguiping-xydt.
+- Hugging Face model discovery now falls back to the bundled catalog when a provider response is malformed or oversized instead of risking excessive memory use. [#101079](https://github.com/openclaw/openclaw/pull/101079) Thanks @cxbasdev.
+- Trusted official external providers can now show model-specific thinking choices before full runtime activation, including off, low, high, and max for Z.AI GLM 5.2. [b4fce16](https://github.com/openclaw/openclaw/commit/b4fce16971995438ee416eee90569a37d6a592dc) Thanks @vincentkoc.
+- Status summaries now respect provider-local model aliases, showing the selected alias without a false pinned-model mismatch warning. [1d4e789](https://github.com/openclaw/openclaw/commit/1d4e7899a47f4483d29848eac02e1fb89de2a2ee)
+- OpenRouter scans now interpret model names such as `8b-70b` by their larger parameter size, improving minimum-size filters and small-model security warnings. [#96288](https://github.com/openclaw/openclaw/pull/96288) Thanks @ly-wang19.
+- Media-generation catalogs now keep the correct default model marker even when provider metadata includes harmless surrounding whitespace. [#96430](https://github.com/openclaw/openclaw/pull/96430) Thanks @lin-hongkuan.
+- Very long OpenRouter Fusion model IDs now remain valid Unicode in the agent prompt instead of showing a corrupted character when an emoji reaches the display limit. [#104433](https://github.com/openclaw/openclaw/pull/104433) Thanks @zhangguiping-xydt.
+
+#### Sign-in and credentials
+
+##### Anthropic and Claude
+
+- Anthropic OAuth token exchange and refresh now reject oversized endpoint responses early instead of reading an unbounded body into memory. [#96644](https://github.com/openclaw/openclaw/pull/96644) Thanks @solodmd.
+- Anthropic sign-in now rejects unsupported callback-host overrides, keeps authorization on standard local loopback addresses, and avoids callback failures or exposure through a non-local listener. [#96917](https://github.com/openclaw/openclaw/pull/96917) Thanks @xialonglee.
+- Expired Claude CLI authentication now shows the exact recovery command `claude auth login && openclaw models auth login --provider anthropic --method cli` instead of a generic failure. [#97669](https://github.com/openclaw/openclaw/pull/97669) Thanks @alix-007.
+- Anthropic OAuth subscription requests now carry the Claude Code-style billing identity, helping them use the intended subscription route instead of failing or being treated as the wrong request type. [709be93](https://github.com/openclaw/openclaw/commit/709be93ca8987009540eb56ed1b6bfda136427de) Thanks @vincentkoc.
+
+##### OpenAI, ChatGPT, and Codex
+
+- ChatGPT OAuth sign-in and refresh now reject unexpectedly large token responses cleanly instead of risking Gateway memory exhaustion. [#99479](https://github.com/openclaw/openclaw/pull/99479) Thanks @pandah97.
+- Cloudflare 403 challenges on OpenAI or Codex OAuth requests now produce gateway-block guidance instead of incorrectly telling users their authentication failed. [#94440](https://github.com/openclaw/openclaw/pull/94440) Related [#94432](https://github.com/openclaw/openclaw/issues/94432). Thanks @lzyyzznl, @pbm9z95m6z-hue.
+- OpenAI authentication errors now point ChatGPT/Codex OAuth users to a model compatible with their existing sign-in instead of recommending an outdated default. [#100579](https://github.com/openclaw/openclaw/pull/100579) Thanks @zhangguiping-xydt.
+- For Codex-backed OpenAI models, `/status` now identifies ChatGPT login authentication as `oauth (codex-cli)` instead of incorrectly labeling it as an environment API key. [#91240](https://github.com/openclaw/openclaw/pull/91240) Related [#91099](https://github.com/openclaw/openclaw/issues/91099). Thanks @849261680, @ukstem.
+- OpenAI Realtime voice in Talk, Voice Call, and Discord can now use an existing Codex/OpenAI OAuth login when no explicit API key is configured. [#100671](https://github.com/openclaw/openclaw/pull/100671) Thanks @steipete-oai.
+
+##### Google and Gemini
+
+- Google Gemini CLI sign-in now rejects oversized OAuth, profile, project, and onboarding responses with labeled errors instead of risking excessive memory use. [#97587](https://github.com/openclaw/openclaw/pull/97587) Thanks @hugenshen.
+- Google Gemini CLI OAuth failures now keep oversized or malformed provider responses bounded while preserving useful error details. [#99605](https://github.com/openclaw/openclaw/pull/99605) Thanks @mushuiyu886.
+- Google OAuth sign-in, token exchange, and project discovery now return a bounded error for oversized responses instead of risking a process crash. [#97628](https://github.com/openclaw/openclaw/pull/97628) Thanks @vincentkoc, @wangmiao0668000666.
+
+##### GitHub Copilot
+
+- GitHub Copilot sign-in, refresh, and model-list checks now fail with labeled size limits when GitHub or a proxy returns an oversized response. [#97499](https://github.com/openclaw/openclaw/pull/97499) Thanks @wangmiao0668000666.
+- GitHub Copilot sign-in and token refresh now reject oversized service responses with a clear error before they can exhaust OpenClaw's memory. [#97579](https://github.com/openclaw/openclaw/pull/97579) Thanks @hugenshen.
+- GitHub Copilot device login now fails cleanly on an oversized successful response instead of risking an out-of-memory crash. [#97583](https://github.com/openclaw/openclaw/pull/97583) Thanks @hugenshen.
+- OpenAI-compatible providers routed through the GitHub Copilot BYOK harness now retain bearer authentication, reducing false 401 errors for valid credentials. [#99955](https://github.com/openclaw/openclaw/pull/99955) Thanks @hxy91819.
+
+##### xAI and Grok
+
+- xAI and Grok OAuth sign-in now works on SSH hosts, containers, VPS systems, and other headless environments without forwarding a localhost callback port. [#97249](https://github.com/openclaw/openclaw/pull/97249) Thanks @fuller-stack-dev, @jaaneek.
+- xAI sign-in, token refresh, and device approval now stop oversized OAuth responses before they can consume unbounded memory. [#97615](https://github.com/openclaw/openclaw/pull/97615) Thanks @cxbasdev.
+- Existing xAI and Grok OAuth sessions using the retired token endpoint can renew after expiry without forcing another browser or SSH-tunneled login. [#96146](https://github.com/openclaw/openclaw/pull/96146) Thanks @fuller-stack-dev, @jaaneek.
+
+##### Ollama, MiniMax, Chutes, Z.AI, OpenRouter, and ClawRouter
+
+- Ollama Cloud setup now stops oversized or malicious authentication responses before they can consume excessive memory, while normal sign-in remains unchanged. [#97581](https://github.com/openclaw/openclaw/pull/97581) Thanks @hugenshen.
+- MiniMax OAuth device setup now limits authorization response size so a faulty proxied or self-hosted endpoint cannot exhaust Gateway memory. [#96322](https://github.com/openclaw/openclaw/pull/96322) Thanks @lsr911.
+- Chutes login, user lookup, and token refresh now stop unexpectedly large OAuth responses with a bounded error instead of buffering them without limit. [#96777](https://github.com/openclaw/openclaw/pull/96777) Thanks @wangmiao0668000666.
+- Chutes onboarding now fails clearly when token-exchange or user-info responses are oversized, preventing abnormal authentication traffic from causing unbounded memory growth. [#96779](https://github.com/openclaw/openclaw/pull/96779) Thanks @wangmiao0668000666.
+- Z.AI users can recover a profile that accidentally stored an onboarding command as the API key without wiping all authentication state. [#97520](https://github.com/openclaw/openclaw/pull/97520) Thanks @zhangguiping-xydt.
+- Chutes sign-in and token refresh errors now include a useful bounded snippet without allowing an endpoint to stream an unlimited response into memory. [#97808](https://github.com/openclaw/openclaw/pull/97808) Thanks @pick-cat.
+- OpenRouter sign-in now fails safely on oversized replies, and Discord webhook sends remain successful when their optional response body is absent, malformed, or too large. [#98098](https://github.com/openclaw/openclaw/pull/98098) Thanks @lwy-2.
+- OpenRouter model probes and agent requests now use discovered environment or profile API keys correctly instead of failing with a missing-authentication-header error. [#98187](https://github.com/openclaw/openclaw/pull/98187) Related [#97934](https://github.com/openclaw/openclaw/issues/97934). Thanks @laurencebrown, @sunlit-deng.
+- ClawRouter models selected in agent defaults now resolve at runtime when the credential is stored in an auth profile instead of the environment. [#99759](https://github.com/openclaw/openclaw/pull/99759)
+
+##### Amazon Bedrock
+
+- Amazon Bedrock users can now analyze images and PDFs with the same AWS profile, role, SSO, environment, or instance credentials already used for chat. [#72092](https://github.com/openclaw/openclaw/pull/72092) Thanks @truffle-dev.
+
+##### Shared sign-in and credential behavior
+
+- OpenAI/Codex and Anthropic OAuth result pages now show OpenClaw branding instead of the legacy Pi logo. [1834592](https://github.com/openclaw/openclaw/commit/1834592be17668cbfc9ea834c57df73e05b71f14)
+- Agents created by copying credentials now preserve the source agent's portable provider-profile priority instead of unexpectedly choosing a different credential. [#100833](https://github.com/openclaw/openclaw/pull/100833) Thanks @machine3at.
+- New or updated provider credentials entered through the CLI now appear in the running Gateway and Control UI model picker without a manual secrets reload or restart. [#101256](https://github.com/openclaw/openclaw/pull/101256) Thanks @fuller-stack-dev.
+- OAuth-backed models now become available in Gateway model browsing after credentials are renewed from another CLI process, without requiring a Gateway restart. [#104732](https://github.com/openclaw/openclaw/pull/104732) Thanks @fuller-stack-dev.
+
+#### Fallbacks and model switching
+
+##### Anthropic and Claude
+
+- Anthropic conversations rejected for a missing tool result now tell users to retry or start a fresh session with `/new` instead of showing only a generic provider failure. [#98163](https://github.com/openclaw/openclaw/pull/98163) Thanks @masatohoshino.
+- Claude native-thinking sessions can now recover automatically after Anthropic rejects a replayed thinking block, without manual compaction or transcript loss. [#98411](https://github.com/openclaw/openclaw/pull/98411) Related [#98308](https://github.com/openclaw/openclaw/issues/98308). Thanks @clearhorizoninvestments, @sunlit-deng.
+- Claude CLI agent runs now fail over instead of presenting provider errors or raw stream data as answers, preserve multilingual and emoji output, and stop runaway one-shot output before it exhausts Gateway memory. [#98942](https://github.com/openclaw/openclaw/pull/98942) Related [#98896](https://github.com/openclaw/openclaw/issues/98896). Thanks @obviyus.
+- Eligible direct API-key requests to Claude Fable 5 now return an Opus 4.8 answer when Anthropic's safety classifier declines Fable, with diagnostics and Opus billing made clear. [#99906](https://github.com/openclaw/openclaw/pull/99906)
+
+##### Google and Gemini
+
+- Gemini streaming can retry with another configured API key after a retryable quota or rate-limit response instead of failing on the first key. [#97328](https://github.com/openclaw/openclaw/pull/97328) Thanks @monkeyleet.
+
+##### Ollama, OpenAI-compatible providers, and Z.AI
+
+- Ollama requests whose native response stream ends early can now continue to a configured fallback model instead of stopping with `LLM request failed`. [#100482](https://github.com/openclaw/openclaw/pull/100482) Thanks @turbotheturtle.
+- A detail-less failure from an OpenAI-compatible provider no longer puts a valid API-key profile into cooldown or forces avoidable fallback traffic. [#100617](https://github.com/openclaw/openclaw/pull/100617) Thanks @fengjikui.
+- Z.AI and similar HTTP 429 responses now distinguish temporary service overload from ordinary rate limiting and preserve provider-supplied retry timing. [#98165](https://github.com/openclaw/openclaw/pull/98165) Thanks @sunnyshu0925.
+- Continued conversations with strict custom OpenAI Responses-compatible endpoints no longer fail on an unsupported `input[n].status` field and needlessly switch to a fallback model. [#100831](https://github.com/openclaw/openclaw/pull/100831) Thanks @chenxiaoyu209.
+
+##### Shared fallback and model-selection behavior
+
+- Replay-safe model timeouts can now advance to the next configured provider, letting agent, chat, and cron runs recover without repeating work that may have side effects. [#96142](https://github.com/openclaw/openclaw/pull/96142) Thanks @brokemac79, @riazrahaman.
+- Agent runs can move to the next configured model after a provider drops a stream, while genuine cancellations still stop promptly. [#90908](https://github.com/openclaw/openclaw/pull/90908) Thanks @shengting.
+- Embedded-agent runs can now try the next configured fallback model after a temporary upstream `LLM request failed` error. [#95542](https://github.com/openclaw/openclaw/pull/95542) Thanks @altaywtf, @mikasa0818.
+- Configured fallback chains now try an alternate model when the primary provider reports `model_not_found`, reducing failures after model availability changes. [#97571](https://github.com/openclaw/openclaw/pull/97571) Thanks @liuhao1024.
+- When a configured runtime model is no longer available, chat now explains that a new session will not help and directs operators to choose an available model. [#97611](https://github.com/openclaw/openclaw/pull/97611) Thanks @romneyda.
+- Provider failures now keep fallback error text within the configured size limit, preventing oversized responses from overwhelming logs or visible diagnostics. [#99340](https://github.com/openclaw/openclaw/pull/99340) Thanks @pick-cat.
+- `/model default` now actually returns an active session to its configured model after steering, fallback, or a previous manual selection. [#96318](https://github.com/openclaw/openclaw/pull/96318) Thanks @marsman-lab, @sunnyshu0925.
+- Gateway chat now classifies mixed provider messages as rate limits when throttling is the real failure, giving users recovery guidance that matches the problem. [#100755](https://github.com/openclaw/openclaw/pull/100755) Thanks @pick-cat.
+- `openclaw status` and `session_status` now identify when a session is using a fallback model and show the configured primary model beside it. [#101337](https://github.com/openclaw/openclaw/pull/101337) Thanks @lzy3538.
+
+#### Replies, reasoning, and tool calls
+
+##### Anthropic and Claude
+
+- Claude CLI replies that streamed successfully are now retained when the final success envelope contains no text, preventing the completed answer from disappearing or triggering an empty-response fallback. [#90450](https://github.com/openclaw/openclaw/pull/90450) Thanks @totobusnello.
+- Claude Code 2.1 users can again approve and run Bash, WebFetch, Grep, Glob, AskUserQuestion, and other native tools in claude-cli sessions. [#98665](https://github.com/openclaw/openclaw/pull/98665) Related [#95171](https://github.com/openclaw/openclaw/issues/95171). Thanks @carterdawson, @yetval.
+- Claude CLI-backed agents now show native reasoning in `/reasoning stream` or `/reasoning on`, while `/reasoning off` consistently suppresses it for queued follow-ups too. [#99401](https://github.com/openclaw/openclaw/pull/99401) Thanks @marvinthebored.
+- Anthropic Opus 4.8 can now run with `tools.profile=coding` without every turn failing with an HTTP 400 schema error before the assistant replies. [#100492](https://github.com/openclaw/openclaw/pull/100492) Thanks @lin-hongkuan, @vincentkoc.
+- Anthropic Messages-compatible proxy users no longer see raw antml tool-call XML or arguments leak into visible Claude replies. [b2787a1](https://github.com/openclaw/openclaw/commit/b2787a1c7a7ae1a20d05411bba1dbf9091490c23) Thanks @jerry-xin.
+- Anthropic agents routed through AWS Bedrock can keep Feishu Bitable write tools enabled without the tool definitions blocking every conversation. [#94990](https://github.com/openclaw/openclaw/pull/94990) Thanks @twinslee, @vincentkoc.
+- Claude Fable 5 now uses the expected Anthropic `context1m` stream setup when 1M context is enabled, without affecting similar model IDs. [#100572](https://github.com/openclaw/openclaw/pull/100572) Thanks @zhangguiping-xydt.
+- Claude conversations through GitHub Copilot can continue after a tool failure with no visible output instead of entering repeated provider-schema failures. [#101373](https://github.com/openclaw/openclaw/pull/101373) Thanks @galiniliev.
+- Anthropic-compatible calls with token caps too small for manual thinking now run normally without thinking instead of failing provider validation. [#101415](https://github.com/openclaw/openclaw/pull/101415) Thanks @pick-cat.
+
+##### OpenAI-compatible and local models
+
+- Ollama Cloud and other OpenAI-compatible Ollama chats can now continue after a tool call instead of failing the next turn with a provider 400 error. [#96474](https://github.com/openclaw/openclaw/pull/96474) Thanks @849261680.
+- vLLM, Ollama proxies, and other OpenAI-compatible gateways can deliver streamed replies even when they incorrectly label an event stream as JSON, avoiding an early parsing failure that previously ended the agent run. [#96503](https://github.com/openclaw/openclaw/pull/96503) Thanks @zengwen-dt.
+- GPT-5.5 and other models can send valid streaming events larger than 64 KiB through ChatGPT Responses without failing the request, while malformed unbounded streams remain limited. [#98198](https://github.com/openclaw/openclaw/pull/98198) Thanks @marvinthebored, @obviyus, @peetiegonzalez.
+- `openclaw agent --local` now reports a clear first-event timeout when a provider opens a stream but never sends usable output instead of appearing to hang indefinitely. [#98525](https://github.com/openclaw/openclaw/pull/98525) Thanks @osolmaz.
+- MCP tools that expect arrays or objects can now accept those values when Xiaomi MiMo, Ollama, or another affected provider returns them as JSON strings, avoiding a pre-execution validation failure. [#96922](https://github.com/openclaw/openclaw/pull/96922) Thanks @liuhao1024.
+- Repaired plain-text tool calls from LM Studio, xAI, and Ollama now emit a final completion event so plugins and other streaming consumers can finish them reliably. [#104714](https://github.com/openclaw/openclaw/pull/104714)
+
+##### Google and Gemini
+
+- Google Live voice sessions can now register and call OpenClaw tools instead of rejecting their declarations before a tool-backed turn begins. [#100260](https://github.com/openclaw/openclaw/pull/100260)
+
+##### MiniMax, OpenRouter, Mistral, and opencode-go
+
+- MiniMax M3 replies, including those routed through Fireworks, no longer expose hidden `mm:` reasoning in visible chat or progress output. [#93767](https://github.com/openclaw/openclaw/pull/93767) Thanks @drhack1, @vincentkoc.
+- Long opencode-go model runs are less likely to be falsely stopped as stalled while valid provider events are still arriving. [#97128](https://github.com/openclaw/openclaw/pull/97128) Thanks @liuwqgit, @vincentkoc, @yetval.
+- OpenRouter's DeepSeek V4 Flash and Pro models can answer with thinking enabled without failing with an HTTP 400. [#97208](https://github.com/openclaw/openclaw/pull/97208) Related [#97196](https://github.com/openclaw/openclaw/issues/97196). Thanks @nianjiuzst, @patelmm79.
+- Direct `mistral-medium-3-5` requests now send the user-selected adjustable reasoning level to Mistral as `reasoningEffort`. [#100688](https://github.com/openclaw/openclaw/pull/100688) Thanks @aniruddhaadak80, @wm0018.
+
+##### Shared reasoning and tool behavior
+
+- Realtime voice sessions now omit an individual custom tool with an invalid provider-specific name and warn about it instead of letting that tool break the entire OpenAI, Azure, or Google session. [#89175](https://github.com/openclaw/openclaw/pull/89175) Thanks @vincentkoc.
+- Switching from thinking-off mode to a reasoning-required model now selects its lowest supported effort rather than silently choosing the most expensive level. [#93335](https://github.com/openclaw/openclaw/pull/93335) Thanks @obuchowski.
+
+#### Voice, transcription, images, and video
+
+##### OpenAI and Azure voice and images
+
+- OpenAI Realtime voice and transcription sessions now start behind Clash, Surge, sing-box, and similar TUN proxy setups that resolve `api.openai.com` into fake-IP ranges. [#86526](https://github.com/openclaw/openclaw/pull/86526) Thanks @shushushv.
+- OpenAI and Azure realtime voice connections now close inbound messages above 16 MiB, limiting avoidable gateway memory pressure. [#99450](https://github.com/openclaw/openclaw/pull/99450) Thanks @sunlit-deng.
+- OpenAI realtime voice sessions now default to `gpt-realtime-2.1` when no model is specified, while explicit model pins continue to work. [#101390](https://github.com/openclaw/openclaw/pull/101390) Thanks @vincentkoc.
+- OpenAI image generation and reference-image editing no longer crash when credentials or a custom base URL are ready before the provider model catalog finishes loading. [#105518](https://github.com/openclaw/openclaw/pull/105518) Thanks @vincentkoc.
+- OpenAI video generation now stops oversized or endless submission responses with a bounded provider error before they can hang the request or exhaust memory. [#96905](https://github.com/openclaw/openclaw/pull/96905) Thanks @alix-007.
+
+##### Google and Gemini media
+
+- Gemini CLI media analysis now returns its description even when the valid response also contains nested usage or other metadata. [#96432](https://github.com/openclaw/openclaw/pull/96432) Thanks @lin-hongkuan.
+- Google Veo video generation now ends oversized create or status responses early with a clear bounded error, preventing a broken endpoint from hanging OpenClaw or consuming memory indefinitely. [#96605](https://github.com/openclaw/openclaw/pull/96605) Thanks @alix-007.
+
+##### MiniMax, xAI, and Fal-hosted media
+
+- Reference-image edits through Fal-hosted Grok Imagine and Nano Banana 2 Lite now reach the correct service, while mixed-model fallbacks honor each candidate's supported resolution and reference limits. [#98688](https://github.com/openclaw/openclaw/pull/98688) Thanks @davenicoll, @vincentkoc.
+- MiniMax TTS now accurately explains that volume must be greater than 0 and may be as high as 10 when a directive is invalid. [#101359](https://github.com/openclaw/openclaw/pull/101359) Thanks @quratulain-bilal.
+- MiniMax VLM and native PDF provider errors now remain readable when emoji or other supplementary characters land at the diagnostic snippet limit. [#101728](https://github.com/openclaw/openclaw/pull/101728) Thanks @wings1029.
+- MiniMax video generation now rejects oversized task, status, or file-metadata responses before unbounded memory use or binary download begins, while normal responses continue to work. [#96889](https://github.com/openclaw/openclaw/pull/96889) Thanks @alix-007.
+- xAI video generation now stops oversized create or status responses with a clear size-limit error instead of buffering until OpenClaw hangs or consumes excessive memory. [#96903](https://github.com/openclaw/openclaw/pull/96903) Thanks @alix-007, @vincentkoc.
+- MiniMax image understanding now stops oversized or malformed successful responses at a bounded limit, protecting memory while returning a useful diagnostic. [#100694](https://github.com/openclaw/openclaw/pull/100694) Thanks @zhangguiping-xydt.
+
+##### Video providers and generation services
+
+- Moonshot video understanding now returns a predictable error for oversized or malformed responses instead of hanging or consuming memory indefinitely, including with custom base URLs. [#96502](https://github.com/openclaw/openclaw/pull/96502) Thanks @hugenshen.
+- Qwen video understanding now stops oversized or malformed endpoint responses with a clear error instead of hanging or reading without limit, while normal descriptions continue unchanged. [#96604](https://github.com/openclaw/openclaw/pull/96604) Thanks @alix-007.
+- BytePlus video generation now stops oversized task-submission or status responses with a clear error before they can stall OpenClaw or exhaust memory, while normal responses continue unchanged. [#96606](https://github.com/openclaw/openclaw/pull/96606) Thanks @alix-007.
+- DashScope-compatible video submission and polling now reject oversized JSON responses with a bounded error instead of risking memory pressure or process instability, while ordinary responses continue normally. [#96782](https://github.com/openclaw/openclaw/pull/96782) Thanks @wangmiao0668000666.
+- OpenRouter video generation now rejects oversized submit and polling responses before they can hang OpenClaw or consume runaway memory, while normal-sized malformed responses retain their established error handling. [#96873](https://github.com/openclaw/openclaw/pull/96873) Thanks @alix-007.
+- Vydra image, video, and speech generation now fails with a bounded error on oversized or endless control responses instead of hanging or exhausting memory, while valid responses continue normally. [#96875](https://github.com/openclaw/openclaw/pull/96875) Thanks @alix-007.
+- fal music and video generation now stops oversized successful responses with a clear size-limit error before they can hang or exhaust memory, while normal generation continues as before. [#96886](https://github.com/openclaw/openclaw/pull/96886) Thanks @alix-007.
+- Together and PixVerse video generation now returns a provider-labelled size error for oversized successful responses instead of continuing until severe memory pressure or process failure. [#96904](https://github.com/openclaw/openclaw/pull/96904) Thanks @alix-007.
+- Runway video generation now stops oversized create and status responses instead of continuing to consume memory or stall, while normal polling and provider-specific errors remain intact. [#96907](https://github.com/openclaw/openclaw/pull/96907) Thanks @alix-007.
+- Comfy image-generation workflows now stop oversized ComfyUI responses with the actual size-limit error instead of risking memory exhaustion or misreporting the response as malformed JSON. [#96927](https://github.com/openclaw/openclaw/pull/96927) Thanks @wangmiao0668000666.
+- DeepInfra video generation now rejects oversized successful responses with a bounded error instead of risking an out-of-memory crash. [#97486](https://github.com/openclaw/openclaw/pull/97486) Thanks @hugenshen.
+
+##### Voice and transcription across providers
+
+- Configured Voice Call transcription providers such as xAI remain selectable when another provider registry is active, allowing Talk sessions to start normally. [#97170](https://github.com/openclaw/openclaw/pull/97170) Thanks @solavrc.
+- Missing official media providers now produce errors with the exact recovery commands needed to restore transcription and other media workflows. [#97484](https://github.com/openclaw/openclaw/pull/97484) Thanks @wangmiao0668000666.
+- A malformed Inworld voices response now produces a clear provider-specific error instead of an unhelpful parsing exception or process crash. [#98660](https://github.com/openclaw/openclaw/pull/98660) Thanks @solodmd.
+- Short non-English audio now keeps the configured language hint without an unrelated English prompt, reducing accidental translation when users expect a transcript in the spoken language. [#99023](https://github.com/openclaw/openclaw/pull/99023) Thanks @flyveryhigh, @nianjiuzst.
+
+##### Shared media selection and response safety
+
+- Image and video tools can now automatically select configured provider-plugin models authenticated through environment variables. [#98623](https://github.com/openclaw/openclaw/pull/98623) Thanks @medns.
+- Automatically configured video understanding now uses provider defaults such as Moonshot's intended video model unless the user selected a model explicitly. [#99791](https://github.com/openclaw/openclaw/pull/99791) Thanks @vincentkoc, @zhangguiping-xydt.
+- Image generation now stops with a clear size-limit error when a provider or custom endpoint sends an oversized or endless response, preventing hangs and runaway memory use while valid images and edits continue normally. [#96495](https://github.com/openclaw/openclaw/pull/96495) Thanks @hugenshen, @sallyom.
+
+#### Speech, search, embeddings, and documents
+
+##### Speech and transcription
+
+- Google Gemini TTS now rejects oversized responses before buffering them into memory, while normal speech results continue through the existing audio workflow. [#96984](https://github.com/openclaw/openclaw/pull/96984) Thanks @mushuiyu886.
+- Inworld text-to-speech and voice-list requests now fail safely on oversized, malformed, or never-ending responses instead of hanging or consuming unbounded Gateway memory. [#95416](https://github.com/openclaw/openclaw/pull/95416) Thanks @alix-007, @vincentkoc.
+- Azure Speech, Microsoft Speech, ElevenLabs, MiniMax TTS, OpenRouter transcription, and xAI transcription now stop oversized or endless responses before they can stall speech work or strain Gateway memory, while ordinary responses remain unchanged. [#96496](https://github.com/openclaw/openclaw/pull/96496) Thanks @hugenshen.
+- Volcengine, BytePlus Seed Speech, and Xiaomi TTS now stop oversized provider responses before one speech request can stall or destabilize OpenClaw. [#96874](https://github.com/openclaw/openclaw/pull/96874) Thanks @alix-007.
+- Google audio and video understanding now stops oversized provider responses at the shared 16 MiB limit with a clear error instead of allowing them to consume excessive memory. [#96920](https://github.com/openclaw/openclaw/pull/96920) Thanks @mushuiyu886, @vincentkoc.
+
+##### Embeddings and memory search
+
+- Gemini memory-embedding batch uploads, creation, and status checks now fail safely when a compatible endpoint returns an oversized control response. [#97535](https://github.com/openclaw/openclaw/pull/97535) Thanks @hugenshen.
+- OpenAI-compatible embedding requests now close oversized responses early with a clear provider error instead of buffering until OpenClaw stalls or runs out of memory, while normal embeddings continue working. [#96868](https://github.com/openclaw/openclaw/pull/96868) Thanks @alix-007.
+- OpenAI embedding batch polling and Realtime setup now cancel oversized successful responses early and return a bounded error instead of growing memory without limit. [#97533](https://github.com/openclaw/openclaw/pull/97533) Thanks @hugenshen.
+- OpenAI-compatible embedding batch downloads now process valid large outputs while stopping oversized files or JSONL records before they can exhaust memory. [#98554](https://github.com/openclaw/openclaw/pull/98554) Thanks @sunlit-deng, @vincentkoc.
+- GitHub Copilot model discovery and memory search now reject oversized or malformed responses instead of buffering them without limit, while valid catalog and embedding results continue normally. [#96499](https://github.com/openclaw/openclaw/pull/96499) Thanks @hugenshen, @sallyom.
+- Voyage embedding batch jobs now stop oversized status, failure, and error-file responses before they can hang or exhaust worker memory, while oversized diagnostics degrade safely and ordinary responses remain unchanged. [#96608](https://github.com/openclaw/openclaw/pull/96608) Thanks @alix-007.
+- LM Studio embedding preload now respects the configured context limit, reducing GPU out-of-memory failures during memory search on constrained hardware. [#100750](https://github.com/openclaw/openclaw/pull/100750) Thanks @hxz398, @zak-li, @zoowh.
+- Malformed Voyage embedding batches now close their download connections after parsing fails, reducing resource buildup during repeated or large workloads. [#98840](https://github.com/openclaw/openclaw/pull/98840) Thanks @solodmd.
+
+##### Search and document processing
+
+- Google Meet document processing now rejects oversized Google Drive exports before they can destabilize OpenClaw, while ordinary documents still export as text. [#97620](https://github.com/openclaw/openclaw/pull/97620) Thanks @alix-007, @vincentkoc.
+- Parallel web search now returns a bounded error when an upstream response is malformed, oversized, or never-ending instead of risking a hang or out-of-memory crash. [#96035](https://github.com/openclaw/openclaw/pull/96035) Thanks @alix-007.
+- Exa searches now reject responses above the supported limit, preventing excessive provider output from hanging OpenClaw or creating memory pressure. [#96038](https://github.com/openclaw/openclaw/pull/96038) Thanks @alix-007.
+
+#### Provider response safety and clearer errors
+
+##### Anthropic and OpenAI-compatible streams
+
+- Anthropic-compatible requests now fail promptly with a bounded transport error when an upstream stream sends an oversized partial event instead of hanging and consuming memory. [#100686](https://github.com/openclaw/openclaw/pull/100686) Thanks @zhangguiping-xydt.
+- OpenAI ChatGPT Responses streaming now cancels oversized or endless provider bodies with a clear error before they can consume excessive process memory, while normal responses keep using the existing parser. [#96762](https://github.com/openclaw/openclaw/pull/96762) Thanks @vincentkoc, @wangmiao0668000666.
+- OpenAI-compatible provider and proxy streams now stop oversized malformed or never-ending bodies at the affected request instead of letting them destabilize or crash the OpenClaw process. [#96989](https://github.com/openclaw/openclaw/pull/96989) Thanks @vincentkoc, @wangmiao0668000666.
+- OpenAI-compatible Chat Completions now use OpenClaw's guarded network path, adding the same response safety controls used by other protected model calls. [#97228](https://github.com/openclaw/openclaw/pull/97228) Thanks @vincentkoc, @wangmiao0668000666.
+- Azure OpenAI Responses now bound oversized streaming and error bodies, protecting memory while preserving normal errors and cancellation. [#97349](https://github.com/openclaw/openclaw/pull/97349) Thanks @wangmiao0668000666.
+- Anthropic-compatible model requests now consistently use OpenClaw's guarded transport, response normalization, and managed stream cleanup rather than bypassing them through the SDK. [#101357](https://github.com/openclaw/openclaw/pull/101357) Thanks @wangmiao0668000666.
+- When an OpenAI or OpenAI-compatible chat-completions model refuses a request, users now see the provider's explanation instead of a blank assistant reply. [#102344](https://github.com/openclaw/openclaw/pull/102344) Thanks @wuqxuan, @yetval.
+
+##### Proxies and other provider endpoints
+
+- Proxy-backed model streams now fail with bounded, clearer errors when responses are oversized, malformed, incomplete, or idle instead of hanging or consuming unbounded data. [#97235](https://github.com/openclaw/openclaw/pull/97235) Thanks @vincentkoc, @zhangguiping-xydt.
+- Mistral-compatible endpoints now stop oversized streaming responses with a labeled error before OpenClaw can run out of memory. [#97648](https://github.com/openclaw/openclaw/pull/97648) Thanks @wangmiao0668000666.
+- Abnormally large Google Meet, Calendar, or OAuth responses now stop with an error before they can consume uncontrolled Gateway memory. [#98850](https://github.com/openclaw/openclaw/pull/98850) Thanks @pandah97.
+
+##### Shared provider diagnostics
+
+- Request-format and schema failures now show the relevant diagnostic without sending users through unnecessary provider login or reconfiguration steps. [#95779](https://github.com/openclaw/openclaw/pull/95779) Thanks @pick-cat.
+
+#### Codex app-server and supervised sessions
+
+##### Runtime and model compatibility
+
+- Codex users can route both `codex/*` and `openai/*` models through the bundled runtime, and older conversations resume without unnecessary context reprojection. [#105034](https://github.com/openclaw/openclaw/pull/105034)
+- The bundled Codex plugin can complete backend requests again after updating its managed app-server runtime, with no model-picker or configuration migration required. [#106098](https://github.com/openclaw/openclaw/pull/106098)
+- OpenClaw's managed Codex workflow now uses app-server 0.143.0, and self-managed installations must use 0.143.0 or newer for protocol compatibility. [366258d](https://github.com/openclaw/openclaw/commit/366258dee6e4a3ea0bb04b1316e5a0c419c60188) Thanks @vincentkoc.
+- The managed Codex harness now surfaces supported GPT-5.6 Sol, Terra, and Luna models returned by the account catalog and gives self-managed users current version guidance. [f80ce21](https://github.com/openclaw/openclaw/commit/f80ce219fcf0c5cbe9871b9ad05b7570fbfeba6e) Thanks @vincentkoc.
+- Managed Codex users on macOS, Linux, and Windows now receive app-server 0.144.1 instead of 0.144.0. [5dcba9f](https://github.com/openclaw/openclaw/commit/5dcba9fae725c080b62c4b4e19533f5fcd59b964) Thanks @vincentkoc.
+- Codex-native delegation from OpenClaw threads now creates native task records again, while unsupported custom Codex app-server versions fail startup with a clear minimum-version error. [#101221](https://github.com/openclaw/openclaw/pull/101221)
+- Codex sessions using `gpt-5.5-pro` or `gpt-5.4-pro` now clamp unsupported reasoning levels before the first turn, avoiding an immediate request rejection when live metadata is unavailable. [#101484](https://github.com/openclaw/openclaw/pull/101484) Thanks @zhangguiping-xydt.
+
+##### Session reliability and diagnostics
+
+- Scheduled and CLI Codex runs with an explicit timeout longer than 30 minutes can now use that full budget instead of being stopped by the terminal-idle guard. [#85296](https://github.com/openclaw/openclaw/pull/85296) Thanks @alkor2000, @vincentkoc.
+- A missing or hung local Codex tool result no longer switches the active session to another provider that cannot resolve the local failure. [#95543](https://github.com/openclaw/openclaw/pull/95543) Thanks @mikasa0818.
+- Codex app-server runs with an invalid ChatGPT OAuth session now surface the real sign-in error promptly instead of waiting for a misleading ten-second authentication timeout. [#100713](https://github.com/openclaw/openclaw/pull/100713) Thanks @lin-hongkuan.
+- Codex runs stopped by the guardian rejection limit now say why they ended, so operators do not have to mistake the result for a crash, cancellation, or generic interruption. [#101220](https://github.com/openclaw/openclaw/pull/101220) Thanks @darren2030.
+- Crestodian setup and repair chats on Codex-backed runs can now access the status and repair tool they need instead of stopping with a missing-tool response. [#101281](https://github.com/openclaw/openclaw/pull/101281)
+- Shared Codex app-server clients now keep usage limits, auth cooldowns, thread subscriptions, and resumed connections tied to the account and conversation that actually owns them. [#101376](https://github.com/openclaw/openclaw/pull/101376)
+- Codex app-server stdout failures now end affected requests cleanly, while a diagnostics-only stderr failure no longer interrupts an otherwise healthy turn. [#101505](https://github.com/openclaw/openclaw/pull/101505) Thanks @mushuiyu886, @vincentkoc.
+
+#### Usage, context, cost, and diagnostics
+
+##### Usage and quota reporting
+
+- Anthropic usage checks now cap unusually large error responses so a CDN, firewall, or proxy page cannot exhaust OpenClaw's memory. [#97614](https://github.com/openclaw/openclaw/pull/97614) Thanks @cxbasdev.
+- OpenAI and Codex users authenticated through the app server can again see their five-hour and weekly quota windows in chat, CLI, and JSON status output. [#92520](https://github.com/openclaw/openclaw/pull/92520) Thanks @brokemac79.
+- OpenAI OAuth usage checks now cap oversized WHAM rate-limit responses before they can destabilize the process. [#97702](https://github.com/openclaw/openclaw/pull/97702) Thanks @cxbasdev.
+- GitHub Copilot usage checks now contain oversized or endless endpoint responses as a usage error instead of buffering them indefinitely, while normal usage data still loads. [#96607](https://github.com/openclaw/openclaw/pull/96607) Thanks @alix-007.
+- OpenRouter cost tracking now caps unexpectedly large metadata responses and keeps the original streamed estimate instead of disrupting the agent turn. [#97490](https://github.com/openclaw/openclaw/pull/97490) Thanks @hugenshen.
+- MiniMax and other shared provider usage checks now fail safely on oversized or malformed replies instead of buffering them without limit. [#97659](https://github.com/openclaw/openclaw/pull/97659) Thanks @cxbasdev, @vincentkoc.
+- OpenRouter completions that the provider bills at $0 now stay recorded as free in transcripts, summaries, logs, and usage totals instead of being replaced with estimated catalog pricing. [#101177](https://github.com/openclaw/openclaw/pull/101177)
+
+##### Context limits and prompt efficiency
+
+- Amazon Bedrock adaptive-thinking Claude and Fable runs now honor configured high output-token limits for longer answers, reasoning, and tool calls. [#97343](https://github.com/openclaw/openclaw/pull/97343) Thanks @lilan0125, @prasithg.
+- Long, tool-heavy or media-heavy embedded-agent conversations now retain more prompt-cache reuse between turns, reducing repeated token processing, latency, and cost on prefix-cached providers. [#102610](https://github.com/openclaw/openclaw/pull/102610) Thanks @ugiezzz.
+- Nemotron 3 Super now exposes its full 1,048,576-token context budget in OpenClaw's bundled NVIDIA fallback catalog instead of compacting at the stale 262,144-token limit. [#98726](https://github.com/openclaw/openclaw/pull/98726) Thanks @eleqtrizit.
+- ChatGPT OAuth-backed Responses sessions now retain backend affinity across turns, improving prompt-cache reuse and reducing repeated processing of the same conversation context. [#100233](https://github.com/openclaw/openclaw/pull/100233) Thanks @marvinthebored, @obviyus, @peetiegonzalez.
+
+##### Session and model diagnostics
+
+- After `/model` changes a session's provider, `/status` and `session_status` now report that provider's usage, authentication, runtime, and context details rather than stale defaults. [#93384](https://github.com/openclaw/openclaw/pull/93384) Thanks @obviyus, @osolmaz, @rollingshmily, @samiralibabic, @zhangguiping-xydt.
+- Model-call traces now include prompt-size and per-call token usage details, helping operators investigate cost and prompt growth without capturing raw content. [#95770](https://github.com/openclaw/openclaw/pull/95770) Thanks @amknight.
+- The diagnostics timeline now shows when provider model calls ran, how long they took, and whether they succeeded without recording prompt or response content. [7253552](https://github.com/openclaw/openclaw/commit/7253552c68d0ac8c6098126d373f185bb6df22a2) Thanks @vincentkoc.
+
+### Memory and Sessions
+
+[Memory](https://docs.openclaw.ai/concepts/memory) indexing, recall, wiki synchronization, and search recover from more malformed pages, stale status, large indexes, transient reads, and provider mismatches without hiding useful stored context or overwriting user notes. When a result is incomplete or a configured memory provider is unavailable, the failure is clearer instead of looking like a complete answer.
+
+[Sessions](https://docs.openclaw.ai/cli/sessions), transcripts, compaction, goals, and routing also retain the intended conversation more consistently through restarts, resets, delayed follow-ups, tool-heavy runs, and client changes. The practical result is less missing history, fewer replies stored against the wrong session, and more dependable continuation of long-running work.
+
+#### Memory search and recall
+
+- QMD `search` and `vsearch` modes now skip the LLM reranker, reducing latency and avoiding unnecessary GPU failures while full `query` mode keeps reranking. [#88887](https://github.com/openclaw/openclaw/pull/88887) Thanks @potterdigital.
+- Memory-wiki pages titled `Index` now remain stored, searchable, and retrievable instead of being hidden or overwritten by generated directory pages. [#94326](https://github.com/openclaw/openclaw/pull/94326) Thanks @vincentkoc, @yetval.
+- Active Memory now warns when recalled operational details may be outdated and clearly marks clipped summaries, so old or incomplete status is less likely to look current. [#95888](https://github.com/openclaw/openclaw/pull/95888) Thanks @spencer2211.
+- Memory-wiki pages in subfolders now appear in search, lookup, compiled indexes, digests, and vault counts just like pages at the top level. [#96022](https://github.com/openclaw/openclaw/pull/96022) Thanks @machine3at, @vincentkoc.
+- Large memory indexes can now return filtered matches beyond sqlite-vec's first 4,096 candidates without failing or silently missing valid results. [#96157](https://github.com/openclaw/openclaw/pull/96157) Thanks @itsuzef, @vincentkoc.
+- Repeated QMD-backed `memory_search` and `openclaw memory search` requests can return faster after the first lookup, while diagnostics separate setup time from search time and missing collections still trigger repair. [#96655](https://github.com/openclaw/openclaw/pull/96655) Thanks @bek91.
+- Memory search now works with installed generic embedding plugins such as local llama.cpp, including their default model and connection details. [#97095](https://github.com/openclaw/openclaw/pull/97095) Thanks @849261680.
+- One memory-wiki page with broken YAML no longer blocks healthy pages from being searched, compiled, linted, counted, or updated. [#97177](https://github.com/openclaw/openclaw/pull/97177) Related [#96125](https://github.com/openclaw/openclaw/issues/96125). Thanks @cow11023, @sunnyshu0925.
+- Memory Wiki now marks claims with malformed explicit freshness timestamps as unknown instead of masking the bad metadata with the page date. [#97465](https://github.com/openclaw/openclaw/pull/97465) Thanks @ly-wang19.
+- Detailed `/status plugins` now warns when a configured memory embedding provider is unavailable and semantic recall has fallen back to keyword search. [#97968](https://github.com/openclaw/openclaw/pull/97968) Thanks @masatohoshino.
+- QMD memory recall now turns malformed or warning-filled mcporter output into a clear, filtered error instead of exposing raw subprocess text. [#98381](https://github.com/openclaw/openclaw/pull/98381) Thanks @miorbnli.
+- `memory_get` with `corpus=all` can now return an available wiki supplement when the requested memory file is missing instead of stopping with an empty result. [#100904](https://github.com/openclaw/openclaw/pull/100904) Thanks @mushuiyu886, @vincentkoc.
+- With `memorySearch.provider: none`, OpenClaw now starts FTS-only memory without an unnecessary plugin capability scan. [fbf574a](https://github.com/openclaw/openclaw/commit/fbf574ad9db2658652e442aab4be3d597e1a9c14)
+- Interactive QMD memory searches with no matches now return an empty result promptly instead of appearing stuck during unnecessary index maintenance. [#90030](https://github.com/openclaw/openclaw/pull/90030) Related [#90023](https://github.com/openclaw/openclaw/issues/90023). Thanks @ruben2000de, @sahibzada-allahyar.
+- `openclaw doctor --fix` can now carry legacy Memory Core indexes from 2026.6.9 upgrades into the current store without forcing a full re-embed. [#95631](https://github.com/openclaw/openclaw/pull/95631) Thanks @mushuiyu886, @vincentkoc.
+- `openclaw memory status` now warns when session transcripts still need indexing instead of incorrectly reporting memory as current. [#97857](https://github.com/openclaw/openclaw/pull/97857) Related [#97814](https://github.com/openclaw/openclaw/issues/97814). Thanks @che10x, @zw-xysk.
+- Memory Core now preserves short standalone concepts such as `kv` and `s3` in tags, improving recall without matching them inside unrelated words. [#96304](https://github.com/openclaw/openclaw/pull/96304) Thanks @ly-wang19.
+- Memory-wiki bridge status now returns a usable warning instead of crashing on malformed plugin artifacts, and `readMemoryArtifacts: false` now reliably prevents those reads. [#100900](https://github.com/openclaw/openclaw/pull/100900) Thanks @huveewomg.
+- Wiki search and retrieval now explain when an older or partial memory plugin lacks shared-search support and offer a practical workaround instead of exposing a raw TypeError. [#100902](https://github.com/openclaw/openclaw/pull/100902) Thanks @huveewomg, @vincentkoc, @xuanmingguo.
+- Memories containing emoji or supplementary CJK characters can now be indexed without malformed text stalling the operation. [#101574](https://github.com/openclaw/openclaw/pull/101574) Thanks @jensenwang560-blip.
+- When both a primary memory read and its wiki supplement fail, `memory_get corpus=all` now returns the original structured read error instead of crashing the tool call. [#101902](https://github.com/openclaw/openclaw/pull/101902) Thanks @aniruddhaadak80, @vincentkoc, @zw-xysk.
+- Memory-index debug logs now show whether an embedding batch completed or failed, making indexing problems easier to trace. [#94732](https://github.com/openclaw/openclaw/pull/94732) Thanks @doubleji817-lang, @xydt-tanshanshan.
+- `openclaw memory status --fix` now repairs session-corpus state without mistaking healthy daily-memory records for stale data. [#93389](https://github.com/openclaw/openclaw/pull/93389) Thanks @alix-007, @vincentkoc.
+- `openclaw memory status` no longer shows impossible session indexing totals where the indexed file count exceeds the total file count. [#95452](https://github.com/openclaw/openclaw/pull/95452) Thanks @buyitsydney, @liuhao1024.
+
+#### Memory Wiki and long-term memory
+
+- Durable memory promotion now keeps OpenClaw's managed dreaming markers and adjacent managed content out of `MEMORY.md` when a recalled range touches a block boundary. [#83718](https://github.com/openclaw/openclaw/pull/83718) Thanks @grifjef.
+- Inferred follow-up commitments now return to the queue after temporary model or network extraction failures, reducing missed reminders without duplicate processing. [#89817](https://github.com/openclaw/openclaw/pull/89817) Thanks @masatohoshino.
+- Memory-core light dreaming no longer repeats an unchanged work-summary block in `DREAMS.md`, while genuine daily-note updates can still appear later. [#97446](https://github.com/openclaw/openclaw/pull/97446) Thanks @aaajiao, @qingminglong.
+- Memory Wiki lint now ignores link-looking text inside inline and fenced code while continuing to report genuine broken links in prose. [#98095](https://github.com/openclaw/openclaw/pull/98095) Thanks @durambar, @vincentkoc, @zhangqueping.
+- Memory-wiki source updates now preserve hand-written Notes when a temporary read failure prevents OpenClaw from safely loading the existing page. [#98360](https://github.com/openclaw/openclaw/pull/98360) Related [#98345](https://github.com/openclaw/openclaw/issues/98345). Thanks @qingminglong, @vincentkoc, @yetval.
+- Memory-wiki source sync can now recover when a page is missing or collides with a non-file, while preserving existing content when a retry remains unsafe. [#99276](https://github.com/openclaw/openclaw/pull/99276) Thanks @obviyus.
+- Memory Wiki imports now continue when a source page collides with a protected vault entry instead of stopping the whole import. [76db9a3](https://github.com/openclaw/openclaw/commit/76db9a3376228db6a6f58cd705fc236aa697446c) Thanks @vincentkoc.
+- Newly promoted long-term memories now omit raw transcript, summary, session-header, flush-prompt, and scoring clutter so useful notes are easier to find. [#94636](https://github.com/openclaw/openclaw/pull/94636) Thanks @josephur, @pinghe-learn, @tayoun.
+- Dreaming now keeps deleted or reset transcript archives and cron-created child conversations out of its learned session set, reducing duplicate history and automation noise without removing retained archives from historical search. [#96517](https://github.com/openclaw/openclaw/pull/96517) Thanks @adam-researchh, @jalehman, @xialonglee.
+- Memory Wiki import summaries now shorten ChatGPT text containing emoji without leaving corrupted replacement characters. [#97362](https://github.com/openclaw/openclaw/pull/97362) Thanks @mushuiyu886.
+- Rerunning memory-wiki synthesis or ChatGPT imports no longer risks erasing handwritten notes, frontmatter, or import state when an existing page cannot be read briefly. [#98787](https://github.com/openclaw/openclaw/pull/98787) Thanks @vincentkoc, @yetval.
+- Memory dreaming now records structured success or failure outcomes for light, REM, and deep phases so dashboards and health checks can monitor them reliably. [#97723](https://github.com/openclaw/openclaw/pull/97723) Thanks @lg320531124, @momothemage.
+- `openclaw wiki lint` now ignores wikilink-like patterns inside code examples so real broken Memory Wiki links are easier to spot. [#97954](https://github.com/openclaw/openclaw/pull/97954) Thanks @durambar, @liuhao1024, @vincentkoc.
+- `openclaw wiki lint` now recognizes valid imported Obsidian links by title, slug, fragment-free path, or source-path suffix, reducing false broken-link warnings. [#100017](https://github.com/openclaw/openclaw/pull/100017) Thanks @ishangodawatta, @k-kerrigan, @vincentkoc.
+- Archived memories around user messages that begin with `[cron:]` remain searchable after a session reset or deletion, while genuine cron-generated archives stay hidden. [#101322](https://github.com/openclaw/openclaw/pull/101322) Thanks @ly-wang19.
+
+#### Session continuity
+
+- After `/new` or `/reset`, the previous conversation remains available for daily memory summaries and full-history searches through the session-logs skill. [#71537](https://github.com/openclaw/openclaw/pull/71537) Thanks @injinj.
+- A group chat or Gateway session can now resume on the next visible request after a failed, timed-out, or killed turn without requiring `/new` or manual session-file edits. [#89045](https://github.com/openclaw/openclaw/pull/89045) Thanks @jerry-xin.
+- Aborted or timed-out embedded runs now release their session write lock, so the next message can proceed without minutes of waiting or manual file cleanup. [#96100](https://github.com/openclaw/openclaw/pull/96100) Thanks @richwilson-bloom, @sallyom, @xialonglee.
+- Replies that span an automatic daily or idle reset now remain together in one accessible transcript instead of losing later output. [#97164](https://github.com/openclaw/openclaw/pull/97164) Thanks @joshavant, @yetval.
+- Resuming work from a project now opens only that project's saved agent session, preventing unrelated transcripts from being mixed together. [#97785](https://github.com/openclaw/openclaw/pull/97785) Related [#96542](https://github.com/openclaw/openclaw/issues/96542). Thanks @qingminglong, @yetval.
+- Recurring provider-CLI cron jobs and local `openclaw agent` runs now keep their existing provider conversation across the daily reset boundary instead of silently losing context. [#98356](https://github.com/openclaw/openclaw/pull/98356) Thanks @yetval.
+- Discord, WebChat, and other ongoing conversations can keep receiving replies when background activity touches the same session during reply startup, without a false initialization conflict or dropped message. [#98835](https://github.com/openclaw/openclaw/pull/98835) Related [#98672](https://github.com/openclaw/openclaw/issues/98672). Thanks @aaronfaby, @jalehman, @moguangyu5-design.
+- Resetting a multi-agent room now restores message delivery promptly instead of blocking most agents' acknowledgement and queued replies for several minutes. [#99091](https://github.com/openclaw/openclaw/pull/99091) Thanks @gorkem2020, @zengwen-dt.
+- Rapid follow-ups in the same chat no longer freeze both messages while the first automatic reply is finishing. [#99549](https://github.com/openclaw/openclaw/pull/99549) Thanks @shagrat2.
+- Claude CLI-backed interactive replies now keep their saved session more consistently, preserving continuity and reducing repeated full-history replay. [#99595](https://github.com/openclaw/openclaw/pull/99595) Related [#99372](https://github.com/openclaw/openclaw/issues/99372). Thanks @obviyus.
+- CLI-backed agents in multi-person group chats now retain conversational context when participants alternate, without expanding non-owner tool permissions. [#99640](https://github.com/openclaw/openclaw/pull/99640) Related [#99633](https://github.com/openclaw/openclaw/issues/99633). Thanks @obviyus.
+- CLI-backed group agents now keep one warm conversation across mentioned and unmentioned follow-ups instead of resetting and losing context. [#99722](https://github.com/openclaw/openclaw/pull/99722) Related [#99696](https://github.com/openclaw/openclaw/issues/99696). Thanks @obviyus.
+- CLI-backed agents now keep conversation continuity across prompt-only changes, avoiding needless cold starts while still resetting when security or runtime conditions require it. [#99822](https://github.com/openclaw/openclaw/pull/99822) Related [#99729](https://github.com/openclaw/openclaw/issues/99729). Thanks @obviyus.
+- Temporary memory-maintenance failures no longer replace the agent reply, and persistently oversized sessions can recover in a fresh session while preserving the previous transcript. [#100618](https://github.com/openclaw/openclaw/pull/100618) Thanks @jerry-xin, @rhclaw.
+- A first command-only interaction in an auto-reply flow now keeps its session update even when no session row existed beforehand. [76d686c](https://github.com/openclaw/openclaw/commit/76d686cf61f29b4b26ef67066d0b88f405ddfe5c)
+- Sessions renamed with `/name` now keep that custom name in session lists instead of reverting to an automatic title or UUID-like label. [#98841](https://github.com/openclaw/openclaw/pull/98841) Related [#98742](https://github.com/openclaw/openclaw/issues/98742). Thanks @bsg2000, @sunnyshu0925.
+- A successfully completed main-agent conversation now continues in the same session on the next message instead of unexpectedly resetting and archiving its transcript. [#99985](https://github.com/openclaw/openclaw/pull/99985) Thanks @sunnyshu0925.
+- Dashboard session labels and display names now remain attached when a session rolls over after a day or idle period. [#101576](https://github.com/openclaw/openclaw/pull/101576) Thanks @merlin-zhou, @zengwen-dt.
+
+#### CLI and Codex sessions
+
+- Claude CLI conversations that exhaust their context now recover into a fresh reseeded session automatically, and timeout retries retain the temporary files they need to complete. [#98934](https://github.com/openclaw/openclaw/pull/98934) Related [#98897](https://github.com/openclaw/openclaw/issues/98897). Thanks @obviyus.
+- Local Ollama-backed CLI agent turns can now continue when the context engine reports an already-compacted transcript, allowing the assistant or MCP tool result to reach the user. [#99136](https://github.com/openclaw/openclaw/pull/99136) Thanks @mushuiyu886, @peterskwang, @pkoserowski, @psedd.
+- Existing Codex sessions can resume their bound threads more reliably after upgrades, resets, and compaction without depending on leftover transcript-side JSON files. [#101210](https://github.com/openclaw/openclaw/pull/101210)
+- A Codex reply delivered through `sourceReplyDeliveryMode: "message_tool_only"` now completes its turn promptly instead of later ending as an incomplete reply. [#95942](https://github.com/openclaw/openclaw/pull/95942) Thanks @omarshahine.
+- Codex app-server installations using the retired `on-failure` approval policy now upgrade to the supported `on-request` behavior without losing saved bindings. [70153f7](https://github.com/openclaw/openclaw/commit/70153f7f9c12be2ff025802c019e428047d1f579) Thanks @vincentkoc.
+- Existing Codex app-server conversations with dynamic tools can resume through the tool-fingerprint format upgrade instead of starting an avoidable replacement thread. [3051748](https://github.com/openclaw/openclaw/commit/305174845f38f075bfd5096a0a4912b8d7d2559a) Thanks @vincentkoc.
+- Legacy Codex bindings with large tool or MCP configurations can now migrate without overflowing plugin-state records or copying raw configuration secrets. [23228b6](https://github.com/openclaw/openclaw/commit/23228b67a47bf32fc9b662d13037757f51d329b8) Thanks @vincentkoc.
+- Upgraded Codex installations can now finish legacy binding migration and archive old sidecars instead of repeatedly retaining them after an earlier partial import. [39fac06](https://github.com/openclaw/openclaw/commit/39fac06f48745dcd4d7a840f8261631614bb1926) Thanks @vincentkoc.
+- Codex sessions created in beta 5 can keep their existing conversation after upgrade when the user MCP configuration is unchanged, without retaining its authorization token. [272750d](https://github.com/openclaw/openclaw/commit/272750daed354029c1968dce7cd6747163e0957a) Thanks @vincentkoc.
+- Provider-owned CLI conversations now keep the same session and transcript across the daily default reset boundary unless an explicit reset policy or `/reset` applies. [#97931](https://github.com/openclaw/openclaw/pull/97931) Thanks @yetval.
+- New Codex-backed threads now preserve configured plugin apps, can activate remote curated plugins, and run Guardian on the first eligible native OpenAI turn. [#98042](https://github.com/openclaw/openclaw/pull/98042) Thanks @kevinslin.
+- A stuck Claude CLI startup now fails only the affected turn instead of exiting the Gateway, and heartbeat activity no longer causes the next user turn to lose its CLI conversation history. [#98933](https://github.com/openclaw/openclaw/pull/98933) Related [#98894](https://github.com/openclaw/openclaw/issues/98894), [#98895](https://github.com/openclaw/openclaw/issues/98895). Thanks @obviyus.
+- Claude CLI agent runs now fail clearly when messaging tools are unavailable, recover when Claude exits without a result, retain more long-session continuity, and clean up prompt images and failed preparation files. [#99159](https://github.com/openclaw/openclaw/pull/99159) Related [#98946](https://github.com/openclaw/openclaw/issues/98946). Thanks @obviyus.
+- The same-release Codex session-continuity work now covers app-server thread start and resume, with binding fingerprints kept bounded throughout. [78edf1c](https://github.com/openclaw/openclaw/commit/78edf1cec15c4a45881386b94e06c71c64f90fa4) Thanks @vincentkoc.
+
+#### Transcripts and exports
+
+- Shared group and channel transcripts now retain the sender ID, display name, and username for each durable user turn, making later history and memory processing correctly attribute participants. [#90552](https://github.com/openclaw/openclaw/pull/90552) Thanks @pick-cat.
+- `/export-session` now warns when a CLI- or ACP-backed export contains only user messages and points users to the backend transcript for missing assistant, tool, usage, and cost details. [#90867](https://github.com/openclaw/openclaw/pull/90867) Thanks @tank-x3, @vincentkoc, @xydigit-sj.
+- `openclaw export-trajectory` and `/export-trajectory` now include redacted messages from older version 1 sessions instead of producing a successful but empty transcript. [#93814](https://github.com/openclaw/openclaw/pull/93814) Thanks @yetval.
+- Session-memory files created around `/new` and `/reset` now keep one copy of each assistant reply instead of duplicating reasoning-model responses. [#94401](https://github.com/openclaw/openclaw/pull/94401) Thanks @sallyom, @sunnyshu0925.
+- Compacted agent history now lists genuine tool failures instead of repeatedly mislabeling successful subagent launches, including when older transcript records contain the incorrect error flag. [#96842](https://github.com/openclaw/openclaw/pull/96842) Thanks @nxmxbbd.
+- Invalid transcript entries now raise a visible write error instead of becoming `undefined` JSONL lines that silently vanish after reload. [#97356](https://github.com/openclaw/openclaw/pull/97356) Thanks @miorbnli.
+- `openclaw sessions cleanup --fix-missing` now preserves fresh cron sessions with valid transcripts and clearly reports repaired entries. [#97495](https://github.com/openclaw/openclaw/pull/97495) Thanks @qingminglong.
+- Automatic recovery from provider role-ordering conflicts now archives the complete prior transcript as a timestamped JSONL file before replaying a shorter tail. [#97544](https://github.com/openclaw/openclaw/pull/97544) Thanks @yungchentang.
+- Compacted group conversations now retain identical long messages from different participants while still removing accidental duplicate retries from the same sender. [#98336](https://github.com/openclaw/openclaw/pull/98336) Thanks @sunnyshu0925, @yetval.
+- Transcript summary and import reads now close files reliably after malformed data, preventing long-running processes from gradually exhausting file handles. [#98493](https://github.com/openclaw/openclaw/pull/98493) Related [#98467](https://github.com/openclaw/openclaw/issues/98467). Thanks @wangmiao0668000666, @zhanglei99586.
+- Older or imported sessions with plain-string assistant messages now replay correctly across provider and streaming paths instead of sending malformed conversation history. [#98908](https://github.com/openclaw/openclaw/pull/98908) Thanks @obviyus.
+- Claude CLI chat history reloads no longer display OpenClaw's internal reseed wrapper as if it were a message the user typed. [#99653](https://github.com/openclaw/openclaw/pull/99653) Related [#99646](https://github.com/openclaw/openclaw/issues/99646). Thanks @harjothkhara, @jeehut, @vincentkoc, @zoowh.
+- Transcript-backed history now treats a missing file as empty while reporting real access, directory, or stream failures cleanly instead of leaving partial or unhandled results. [#100524](https://github.com/openclaw/openclaw/pull/100524) Thanks @cxbasdev, @zhanglei99586.
+- Transient transcript read failures no longer destabilize session-log diagnostics or let an incomplete usage scan overwrite the last complete cost cache as though it were current. [#101062](https://github.com/openclaw/openclaw/pull/101062) Thanks @cxbasdev, @vincentkoc.
+- Malformed transcript rows now produce an aggregate warning with skipped and loaded counts while the remaining usable session history continues to load. [#98669](https://github.com/openclaw/openclaw/pull/98669) Thanks @cxbasdev.
+- Transcript tools can now identify channel delivery mirrors as OpenClaw bookkeeping rather than mistaking them for OpenAI Responses output. [#99855](https://github.com/openclaw/openclaw/pull/99855) Thanks @vincentkoc.
+- Debug-proxy ACP runs now shut down cleanly, mark capture sessions finished, and close their capture databases without reporting a spurious database error. [#100827](https://github.com/openclaw/openclaw/pull/100827) Thanks @amknight.
+- `openclaw sessions tail` now rejects oversized trajectory snapshots and updates with a clear limit error before they can exhaust memory. [#101450](https://github.com/openclaw/openclaw/pull/101450) Thanks @cxbasdev, @vincentkoc.
+- Long usage and session log messages now truncate emoji cleanly instead of displaying malformed character artifacts. [#101517](https://github.com/openclaw/openclaw/pull/101517) Thanks @maweibin.
+
+#### Tool results, files, and media
+
+- Reopened sessions can now replay older string or single-object tool results correctly instead of treating successful output as empty or failing on its stored shape. [#98891](https://github.com/openclaw/openclaw/pull/98891) Related [#98825](https://github.com/openclaw/openclaw/issues/98825). Thanks @obviyus.
+- Agents in long-running WebChat, Discord, and other direct sessions can keep reading fresh command, file, browser, and status output instead of seeing it disappear or turn into an image placeholder. [#98955](https://github.com/openclaw/openclaw/pull/98955) Related [#98874](https://github.com/openclaw/openclaw/issues/98874). Thanks @lamkan0210, @momothemage.
+- Imported Claude CLI history now keeps image-only and attachment-bearing turns visible when removing empty legacy reseed text. [#99839](https://github.com/openclaw/openclaw/pull/99839) Thanks @vincentkoc.
+- Claude CLI model fallback now carries the prior tool-call trail alongside tool results, giving the replacement model enough context to continue coherently. [#99851](https://github.com/openclaw/openclaw/pull/99851) Thanks @vincentkoc.
+- Long-running agents can now recover full command output and truncated `web_fetch` content after history cleanup, reducing repeated expensive work and lost page context. [#100135](https://github.com/openclaw/openclaw/pull/100135) Thanks @obviyus.
+- Embedded agents now receive well-formed summaries of long media or JSON values instead of broken characters at Unicode truncation boundaries. [#101311](https://github.com/openclaw/openclaw/pull/101311) Thanks @alix-007.
+- Media-provider audit details containing emoji now remain valid and readable when shortened, instead of ending with malformed characters. [#101298](https://github.com/openclaw/openclaw/pull/101298) Thanks @alix-007.
+- Long agent prompt data containing emoji or other paired Unicode characters now stays well-formed when capped, avoiding broken text in agent and automation context. [#101303](https://github.com/openclaw/openclaw/pull/101303) Thanks @alix-007.
+
+#### Long conversations and compaction
+
+- Embedded agents now retain configured compaction reserve limits when runtime safeguards save settings, reducing unexpected context-budget shrinkage during long work. [#92237](https://github.com/openclaw/openclaw/pull/92237) Thanks @sercada.
+- Telling an agent to remember a preference no longer triggers the unrelated warning used for promises to schedule an automatic reminder. [#93862](https://github.com/openclaw/openclaw/pull/93862) Thanks @arkyu2077.
+- Sessions with large command output or summaries now compact before exceeding the model context, avoiding failed provider requests and misleading token budgets. [#97861](https://github.com/openclaw/openclaw/pull/97861) Thanks @yetval.
+- Long tool-heavy or compacted sessions now budget the real size of command output and summaries before sending a prompt, reducing context overflow failures. [#97928](https://github.com/openclaw/openclaw/pull/97928) Related [#97927](https://github.com/openclaw/openclaw/issues/97927). Thanks @liuhao1024, @yetval.
+- Edge-case fixes now preserve literal memory text and valid Unicode, improve voice-call cleanup and port checks, report Claude models and context limits accurately, and retain useful ClickClack connection errors. [#100204](https://github.com/openclaw/openclaw/pull/100204) Thanks @cxbasdev, @harjothkhara, @lilan0125, @lin-hongkuan, @liuhao1024, @mikasa0818, @pandah97, @sunlit-deng, @zoowh.
+- Fresh Claude CLI workspaces now run a pending `BOOTSTRAP.md` on the first reply so required identity, memory, and setup steps are completed before normal conversation. [#100560](https://github.com/openclaw/openclaw/pull/100560) Thanks @bill-starfoundry, @kruegerb, @vincentkoc.
+- Long-running agents are less likely to lose workspace instructions such as `AGENTS.md`, `SOUL.md`, or `MEMORY.md` for a turn during a temporary filesystem error. [#100910](https://github.com/openclaw/openclaw/pull/100910) Thanks @masatohoshino.
+- Embedded agent runs that omit a session key now retain the intended fallback session context more reliably. [31a65e0](https://github.com/openclaw/openclaw/commit/31a65e0647ae85eb4c9048051145f07003722caf) Thanks @vincentkoc.
+- A malformed custom tool in realtime Talk no longer removes the built-in consult tool or other valid custom tools from the session. [170150a](https://github.com/openclaw/openclaw/commit/170150a306e39204ebe1ab7be47450b73005de1f) Thanks @vincentkoc.
+- Local-model conversations now retain reusable prompt work when switching between interactive chats and background jobs, avoiding repeated multi-minute warm-up delays. [#98267](https://github.com/openclaw/openclaw/pull/98267) Related [#98261](https://github.com/openclaw/openclaw/issues/98261). Thanks @headbouyjb.
+- A response interrupted mid-tool-call no longer runs or saves that incomplete action, preventing accidental child sessions and other unintended side effects. [#97140](https://github.com/openclaw/openclaw/pull/97140) Thanks @galiniliev.
+- Agents running on macOS 26 now receive the macOS product version in their runtime prompt instead of the Darwin kernel version. [#95225](https://github.com/openclaw/openclaw/pull/95225) Thanks @sunlit-deng.
+- Level directives such as `/verbose` and `/think` no longer remove the first word of the user's message when both are sent together. [#97929](https://github.com/openclaw/openclaw/pull/97929) Thanks @yetval.
+- Malformed surrogate HTML entities in provider output no longer corrupt agent tool arguments, transcripts, or URLs, while legitimate entities and emoji still decode normally. [#99564](https://github.com/openclaw/openclaw/pull/99564) Thanks @mikasa0818.
+- Leaving one answer blank in a multi-question prompt no longer shifts the remaining typed answers onto the wrong questions. [#100832](https://github.com/openclaw/openclaw/pull/100832) Thanks @machine3at.
+- ACP runtime controls can now truly clear saved model, thinking, working-directory, permission, timeout, mode, and backend-extra settings so later turns do not reuse stale values. [#101044](https://github.com/openclaw/openclaw/pull/101044) Thanks @mushuiyu886.
+- Skill Workshop sessions now carry a clearer prompt with about 1.8KB less repeated prompt and schema overhead while retaining the same reviewable proposal flow. [#100481](https://github.com/openclaw/openclaw/pull/100481)
+- Prompt caching and cache traces now fingerprint malformed incoming text consistently with the cleaned text providers receive, avoiding needless cache misses and misleading diagnostics. [#101009](https://github.com/openclaw/openclaw/pull/101009) Thanks @qingminglong.
+- Operators now receive `payload.large` or `truncated` diagnostics and an accurate count whenever `chat.history` omits older messages, making hidden history trimming visible without changing client responses. [#96788](https://github.com/openclaw/openclaw/pull/96788) Thanks @zengwen-dt.
+
+- With memory flush enabled, important conversation context now gets a chance to reach durable memory before automatic compaction, reducing silent gaps in saved notes. [#84792](https://github.com/openclaw/openclaw/pull/84792) Thanks @turbotheturtle.
+- Long CJK-heavy sessions using a context engine such as lossless-claw no longer stop on a false `prompt too large` precheck after the engine has already managed the prompt. [#95342](https://github.com/openclaw/openclaw/pull/95342) Thanks @jalehman, @mpz4life.
+- Large Chinese, Japanese, and Korean tool results are now estimated more accurately, reducing false context-overflow interruptions and premature compaction. [#95447](https://github.com/openclaw/openclaw/pull/95447) Thanks @moguangyu5-design, @vincentkoc.
+- Prompts containing fullwidth East Asian characters now receive more accurate size estimates, allowing context management to start before an oversized request reaches the model. [#96442](https://github.com/openclaw/openclaw/pull/96442) Thanks @lin-hongkuan.
+- Long conversations now recover compaction after transient provider disconnects instead of replacing useful history with a degraded placeholder summary. [#97504](https://github.com/openclaw/openclaw/pull/97504) Thanks @hugenshen.
+- Long conversations using `historyLimit` or `dmHistoryLimit` now retain their saved earlier summary after compaction, helping the assistant remember prior context. [#97591](https://github.com/openclaw/openclaw/pull/97591) Thanks @liuhao1024, @yetval.
+- Long Codex conversations with heavy tool use can now compact at a real history boundary and continue with relevant tool results summarized instead of retaining the full transcript. [#99391](https://github.com/openclaw/openclaw/pull/99391) Related [#99375](https://github.com/openclaw/openclaw/issues/99375). Thanks @imchloe92, @lzy3538.
+- Local-model sessions now retain auto-compaction bookkeeping, reducing repeated context refills and the unresponsive behavior they could cause. [#99678](https://github.com/openclaw/openclaw/pull/99678) Related [#99677](https://github.com/openclaw/openclaw/issues/99677). Thanks @headbouyjb, @vincentkoc.
+- Long, tool-heavy agent sessions now preserve the newest command, file, or browser result for the model while shortening older history first. [#99756](https://github.com/openclaw/openclaw/pull/99756) Thanks @acosx.
+- Long cached Anthropic tool sessions now compact near the configured context threshold instead of interrupting work early because cumulative cache tokens looked like live context. [#99864](https://github.com/openclaw/openclaw/pull/99864) Thanks @jrex-jooni, @lzy3538, @vincentkoc.
+- Long-lived agents with large context windows now retain fresh tool output, compact under aggregate pressure, and warn users to run `/compact` or `/new` if pressure persists. [#100077](https://github.com/openclaw/openclaw/pull/100077) Thanks @obviyus.
+- Small-context local models can now begin and continue conversations without immediately entering an overflow-compaction loop before useful prompt space is available. [#100621](https://github.com/openclaw/openclaw/pull/100621) Thanks @vincentkoc.
+- Long sessions that compact in stages now preserve clearer older-to-newer ordering when summaries are combined, reducing the chance that stale context appears equally recent. [#100684](https://github.com/openclaw/openclaw/pull/100684) Thanks @vincentkoc, @zw-xysk.
+- Context-engine plugins can now identify the exact session that continues after compaction while older integrations using `sessionFile` remain compatible. [#101182](https://github.com/openclaw/openclaw/pull/101182) Thanks @jalehman.
+- Preparing a reset for a long-running session now avoids scanning the entire transcript, reducing startup file activity and memory use as history grows. [#99335](https://github.com/openclaw/openclaw/pull/99335) Thanks @gmschasiepen, @momothemage.
+
+#### Session storage and cleanup
+
+- Gateway and embedded TUI startup now reclaim old session temporary files left by hard shutdowns, reducing hidden disk growth while preserving fresh or potentially recoverable state. [#90503](https://github.com/openclaw/openclaw/pull/90503) Thanks @sahibzada-allahyar.
+- Long-running gateways can clear stale one-shot model-check sessions before they crowd out real conversation history, with dedicated CLI reporting for review. [#91057](https://github.com/openclaw/openclaw/pull/91057) Thanks @jalehman, @wangwllu.
+- Mac users now get stronger protection for local OpenClaw SQLite data after abrupt power loss or an operating-system crash, with no configuration change. [#99067](https://github.com/openclaw/openclaw/pull/99067) Thanks @ooiuuii.
+- Session-memory diagnostics now show the correct workspace and memory-file paths for sibling directories whose names merely resemble the user's home path. [#101577](https://github.com/openclaw/openclaw/pull/101577) Thanks @cxbasdev.
+
+### Gateway and Agent Reliability
+
+The [Gateway](https://docs.openclaw.ai/gateway) now starts, connects, reloads, and reports health with clearer behavior across configuration, networking, task routing, and result delivery. Agents are less likely to lose their selected workspace or conversation, background work reaches the right destination more consistently, and tool failures can stay out of chat progress when a useful final reply is still available.
+
+The [Gateway protocol](https://docs.openclaw.ai/gateway/protocol) and [restart recovery](https://docs.openclaw.ai/gateway/restart-recovery) paths also reject invalid state more clearly and keep inspection available during common lifecycle failures. Skill loading and prompt overhead are steadier as well, with [skill controls](https://docs.openclaw.ai/cli/skills) avoiding unnecessary work and preserving cache fingerprints for the text providers actually receive.
+
+#### Run completion and replies
+
+- Timed-out cron jobs, expired agent requests, and disconnected HTTP clients now stop promptly instead of spending more time and provider calls on model fallback. [#62682](https://github.com/openclaw/openclaw/pull/62682) Thanks @altaywtf, @cinapbot, @simonusa.
+- Channel replies can now continue as soon as an embedded-agent turn finishes instead of waiting roughly 50 seconds for post-run authentication bookkeeping. [#85829](https://github.com/openclaw/openclaw/pull/85829) Thanks @turbotheturtle.
+- Anthropic sessions stuck on a thinking-signature replay error can now retry once without invalid thinking blocks and continue without `/new` or transcript repair. [#95430](https://github.com/openclaw/openclaw/pull/95430) Related [#95429](https://github.com/openclaw/openclaw/issues/95429). Thanks @alexelgier, @lzyyzznl, @vincentkoc.
+- Codex-backed runs can now deliver a completed final answer instead of timing out or appearing aborted when the final completion event is missing. [#99217](https://github.com/openclaw/openclaw/pull/99217) Thanks @100yenadmin, @fuller-stack-dev, @sedrak-hovhannisyan.
+- Interactive chat requests that end in a terminal failure now receive one visible error response instead of appearing to be ignored. [#99304](https://github.com/openclaw/openclaw/pull/99304) Thanks @grox2012, @moeedahmed.
+- Agent sessions are less likely to lose output, alter unrelated formatting, stall after temporary provider errors, reject BMP images, or drop longer ChatGPT connections. [#99949](https://github.com/openclaw/openclaw/pull/99949)
+- Long Claude CLI-backed runs now show honest `Thinking... (~N tokens)` activity for direct and queued work instead of appearing stalled when readable reasoning text is unavailable. [#100148](https://github.com/openclaw/openclaw/pull/100148) Thanks @obviyus.
+- Interactive turns that truly end without visible output now send a clear failure reply, while intentional silence and already-completed actions remain quiet. [#100474](https://github.com/openclaw/openclaw/pull/100474)
+- Completed answers from tool-using tasks now reach the user instead of being replaced by an incomplete-turn error, with run metadata attached to the same final response. [#100655](https://github.com/openclaw/openclaw/pull/100655) Thanks @liuwqgit.
+- Using `/stop` during a late-aborting prompt no longer leaves a stale session lock that blocks the next turn in the same conversation. [f8016c4](https://github.com/openclaw/openclaw/commit/f8016c44a4ba44ba2865938bcb4f7248a91d76fe)
+- Long agent runs can now resume from a valid conversation boundary after compaction recovery instead of wedging or incorrectly demoting the selected model. [486033b](https://github.com/openclaw/openclaw/commit/486033b18344d134d089e654ab0dbb278ce69008) Thanks @mettlyz11, @neltomw, @obviyus.
+- Embedded agent jobs with an explicitly longer timeout now keep their lane until that requested deadline instead of being recovered at the default limit. [1437512](https://github.com/openclaw/openclaw/commit/143751282c60a34a6e2ad6c5629f421441929993) Thanks @vincentkoc.
+- Mobile, WebChat, consult, and other `chat.send` clients can apply a one-time thinking level without losing the assistant reply or having the message mistaken for a text command. [#98855](https://github.com/openclaw/openclaw/pull/98855) Thanks @jesse-merhi.
+- A wedged provider call now releases its embedded agent lane on a bounded watchdog instead of indefinitely blocking queued work when run timeouts are disabled. [ec28935](https://github.com/openclaw/openclaw/commit/ec289357a450f50491723a86a8a771f5d512541c) Thanks @arismontclair, @obviyus, @patelmm79.
+- Gateway conversations with an orphaned active task can now recover through diagnostics instead of leaving later turns blocked until restart. [b1da734](https://github.com/openclaw/openclaw/commit/b1da734a1e7d5b608d6fccc4b2c0b3f2c9dc9347) Thanks @arismontclair, @obviyus, @ralf003.
+- An agent no longer stays silent after compaction when a plugin's final-answer hook hangs; OpenClaw times out the hook and still delivers the response. [b2baf79](https://github.com/openclaw/openclaw/commit/b2baf799b41edce512b1945b6dec3ad637b9c814) Thanks @dserious, @obviyus, @villa-feng.
+- Very long agent conversations are less likely to loop through failed overflow recovery because compaction now reflects the prompt OpenClaw actually prepared. [#101181](https://github.com/openclaw/openclaw/pull/101181) Thanks @jalehman.
+- With `messages.suppressToolErrors` enabled, tool failures no longer leak into chat as progress updates while normal progress and final replies continue. [#98063](https://github.com/openclaw/openclaw/pull/98063) Thanks @amittell, @moeedahmed.
+- Interactive and queued turns that finish without a visible answer now return a clear, sanitized failure message instead of leaving the chat looking stuck. [#100456](https://github.com/openclaw/openclaw/pull/100456) Thanks @mushuiyu886.
+
+#### Delegated agents and shared work
+
+- Legacy subagent sessions now follow their actual nesting level, so nested-agent limits and controls no longer fall back to top-level behavior. [#54593](https://github.com/openclaw/openclaw/pull/54593) Thanks @ruanrrn.
+- Subagent completion notices now arrive once instead of being repeated when the requesting session changes during delivery. [#92274](https://github.com/openclaw/openclaw/pull/92274) Related [#91527](https://github.com/openclaw/openclaw/issues/91527). Thanks @fsdwen, @obviyus, @zackchiutw.
+- Successful embedded-agent subagent launches now remain successful in transcripts and later compaction summaries instead of being recorded as tool failures, while real launch failures stay visible. [#96851](https://github.com/openclaw/openclaw/pull/96851) Thanks @neomail2, @parveshsaini.
+- Codex-runtime transcripts and compaction summaries now keep successful subagent launches and goal operations out of failure records, while genuine failures remain visible and accepted-launch hooks can run. [#96856](https://github.com/openclaw/openclaw/pull/96856) Thanks @nxmxbbd.
+- Successfully started subagents now remain visible in `/subagents list` and `subagents(action="list")`, including when different sessions own control and completion. [#99410](https://github.com/openclaw/openclaw/pull/99410) Related [#75593](https://github.com/openclaw/openclaw/issues/75593). Thanks @aaajiao, @sheyanmin.
+- Codex app-server agents can again list allowed agents, spawn OpenClaw or ACP subagents, and yield during delegated work without resumed heartbeats hitting incompatible tool definitions. [#99561](https://github.com/openclaw/openclaw/pull/99561) Related [#99464](https://github.com/openclaw/openclaw/issues/99464). Thanks @100yenadmin, @joshavant.
+- Requester agents now receive a follow-up when an accepted `sessions_send` delivery later fails because the target session is locked, so they can retry or choose another route. [#99907](https://github.com/openclaw/openclaw/pull/99907) Thanks @849261680, @alex-heyuqing.
+- Sub-agents and other HTTP loopback MCP clients can again receive browser screenshots and valid image or embedded-resource results without schema failures. [#100336](https://github.com/openclaw/openclaw/pull/100336) Thanks @tzy-17.
+- A yielded Codex native subagent's completion now reaches its parent run before the shared app-server connection is cleaned up. [2f89de8](https://github.com/openclaw/openclaw/commit/2f89de81655accf71f5fac5cdabcdf0c3488eab7) Thanks @vincentkoc.
+- Large agent and subagent workloads now place less memory pressure on the Gateway because completed run snapshots are bounded while results still remain available to active waiters. [#77973](https://github.com/openclaw/openclaw/pull/77973) Related [#77976](https://github.com/openclaw/openclaw/issues/77976). Thanks @fede-kamel, @vincentkoc.
+- Parent sessions waiting on a subagent now receive the subagent's actual hard-timeout phase and timestamps instead of a generic timeout. [#89367](https://github.com/openclaw/openclaw/pull/89367) Thanks @pick-cat.
+- Malformed cyclic attachments can no longer crash subagent delivery-evidence collection, so the reply handoff completes and still returns reachable media URLs. [#97041](https://github.com/openclaw/openclaw/pull/97041) Thanks @pick-cat.
+- A parent session waiting on several subagents now resumes and returns their combined results when the last outstanding work finishes, without requiring the user to send another message. [#97090](https://github.com/openclaw/openclaw/pull/97090) Thanks @galiniliev.
+- Manually spawned ACP child runs now appear once in the task ledger instead of creating duplicate requester-visible rows. [#97131](https://github.com/openclaw/openclaw/pull/97131) Thanks @moeedahmed.
+- Cancelling an ACP task from the CLI now reaches the live Gateway-owned run, reports real failures, and avoids duplicate active task rows. [#97352](https://github.com/openclaw/openclaw/pull/97352) Thanks @aliahnaf2013-max.
+- Stopping a subagent now clears its running task reliably and prevents late completion races from reviving or overwriting the canceled state. [#99806](https://github.com/openclaw/openclaw/pull/99806) Thanks @masatohoshino, @timofa.
+- After a Gateway restart, a redirected subagent now continues the user's newest instruction instead of returning to stale work. [7b5d86e](https://github.com/openclaw/openclaw/commit/7b5d86e89a5f74bd4c9bac1453d045e4c415a367) Thanks @amittell.
+- ACP run-to-session lookups now return the current active run instead of a stale association from an older run. [#96427](https://github.com/openclaw/openclaw/pull/96427) Thanks @lin-hongkuan.
+- Parent sessions no longer repeat an earlier child-agent progress message when the child later reports completion. [#101042](https://github.com/openclaw/openclaw/pull/101042) Thanks @mushuiyu886.
+
+#### Files, images, and result delivery
+
+- Isolated cron jobs can announce a cross-session result without feeding the recipient's reply back into the cron run and creating duplicate message loops. [#92283](https://github.com/openclaw/openclaw/pull/92283) Related [#92257](https://github.com/openclaw/openclaw/issues/92257). Thanks @harjothkhara, @nailujac, @vincentkoc.
+- Agents can now read structured JSON and resource tool results during provider replay instead of receiving an empty result or generic media placeholder. [#97742](https://github.com/openclaw/openclaw/pull/97742) Thanks @obviyus.
+- Images attached to a CLI-backed prompt now survive embedded-model fallback, preserving the visual context needed to answer. [#99891](https://github.com/openclaw/openclaw/pull/99891) Thanks @vincentkoc.
+- Messages mixing inline and offloaded images now preserve every attachment position so model instructions that depend on sequence remain accurate. [#99902](https://github.com/openclaw/openclaw/pull/99902) Thanks @vincentkoc.
+- Images from the current prompt now reach CLI fallback attempts in the right order, without pulling stale image references from earlier retries or history. [#100035](https://github.com/openclaw/openclaw/pull/100035) Thanks @vincentkoc.
+- Batched media replies can now finish successfully after delivery without a misleading session-change failure, while active conversation ownership checks remain enforced. [#100490](https://github.com/openclaw/openclaw/pull/100490) Thanks @scotthuang.
+- Sandboxed auto-replies now wait for remote media copied over SCP to finish and report transfer failures without crashing or cleaning up too early. [#100861](https://github.com/openclaw/openclaw/pull/100861) Thanks @cxbasdev.
+- Useful JSON, resource data, and CLI tool results now remain visible in transcripts instead of disappearing behind an attachment placeholder. [#97268](https://github.com/openclaw/openclaw/pull/97268)
+- An empty non-image tool result no longer becomes `(see attached image)` in OpenAI-compatible agent context, avoiding misleading follow-up behavior. [#97423](https://github.com/openclaw/openclaw/pull/97423) Thanks @scribe-dandelion-cult.
+- Gateway event-delivery failures now produce actionable warnings instead of unexplained process-level promise rejections, while unrelated subscriptions keep running. [#100401](https://github.com/openclaw/openclaw/pull/100401) Thanks @cxbasdev.
+- Discord now presents commentary, reasoning, and tool activity in a clearer sequence across queued turns, while loopback MCP clients can attach to one Gateway session with an expiring, revocable token. [35af831](https://github.com/openclaw/openclaw/commit/35af831fd0bc549d9333a197a90abbecbc55ff35) Thanks @dwc1997, @lsr911, @ooiuuii, @romneyda, @solodmd, @vincentkoc, @wendy-chsy, @yeager, @zenglingbiao.
+- Successful agent tools that return safe plain text now show that output instead of leaving users with an apparently empty result. [#99526](https://github.com/openclaw/openclaw/pull/99526) Related [#99523](https://github.com/openclaw/openclaw/issues/99523). Thanks @snowzlm.
+
+#### Gateway restarts and queued work
+
+- A successfully delivered heartbeat notification no longer leaves stale recovery state that can block later heartbeat alerts or check-ins. [#83187](https://github.com/openclaw/openclaw/pull/83187) Thanks @agocs.
+- Restarting the Gateway during a deferred channel reload no longer starts the same channel twice, avoiding webhook port conflicts and repeated restart failures. [#94964](https://github.com/openclaw/openclaw/pull/94964) Related [#79487](https://github.com/openclaw/openclaw/issues/79487). Thanks @lzyyzznl, @tseller.
+- A damaged SQLite delivery-queue entry no longer blocks recovery of every other valid queued session or outbound delivery after restart. [#98354](https://github.com/openclaw/openclaw/pull/98354) Thanks @pick-cat.
+- Gateway startup lock failures now clean up partial files and open handles, allowing a later startup to acquire the lock normally. [#99291](https://github.com/openclaw/openclaw/pull/99291) Related [#98958](https://github.com/openclaw/openclaw/issues/98958). Thanks @chenyangjun-xy, @zhanglei99586.
+- Gateway status now reports unavailable SSH cleanly and promptly instead of crashing or waiting indefinitely when tunnel startup fails. [#99800](https://github.com/openclaw/openclaw/pull/99800) Thanks @cxbasdev, @vincentkoc.
+- Heartbeat and cron work on macOS and Linux is less likely to fail with `Unknown system error -11` when reconnects overlap session or workspace updates. [#100389](https://github.com/openclaw/openclaw/pull/100389) Thanks @ogarciarevett.
+- Gateway startup no longer performs unsolicited provider-auth discovery across every configured agent, helping channels and local commands remain responsive while authentication loads on demand. [#100667](https://github.com/openclaw/openclaw/pull/100667) Thanks @vincentkoc.
+- Unexpected SSH tunnel diagnostic-stream closure no longer crashes the Gateway during tunnel checks or shutdown. [#100855](https://github.com/openclaw/openclaw/pull/100855) Thanks @cxbasdev, @vincentkoc.
+- A disconnected or failing session-history stream no longer crashes the Gateway and interrupts service for everyone else. [#101571](https://github.com/openclaw/openclaw/pull/101571) Thanks @vincentkoc, @zengwen-dt.
+- Gateway startup can now be retried immediately after a configuration-change rejection instead of being blocked for up to five minutes by a stale migration lease. [#103157](https://github.com/openclaw/openclaw/pull/103157)
+- Gateway startup channel warnings now use the same plugin manifests as the running startup process, reducing inconsistent warnings and repeated discovery. [10ca94e](https://github.com/openclaw/openclaw/commit/10ca94ef1a6a98a0033574ba537492453b6b3c4f) Thanks @vincentkoc.
+- Gateway startup now skips unnecessary provider thinking-policy work when an explicit setting or model catalog already determines the banner result. [b18af41](https://github.com/openclaw/openclaw/commit/b18af41f52d401223cad5913ed06650828aacdd6)
+- Gateway connection failures now identify the last completed handshake phase, helping operators distinguish upgrade, credential, authentication, session, and ready-state stalls. [#93402](https://github.com/openclaw/openclaw/pull/93402) Thanks @849261680, @bzelones, @vincentkoc, @youngting520.
+- Control UI and other Gateway clients now show the correct pairing or protocol-version guidance even when detail codes contain extra whitespace. [#99555](https://github.com/openclaw/openclaw/pull/99555) Thanks @ly85206559.
+- Gateway override authentication errors now tell CLI and TUI users whether to add a token or password, remove `--url`, or pair the relevant environment variables. [#100418](https://github.com/openclaw/openclaw/pull/100418) Thanks @gmays.
+- Standalone ACP clients now close the shared SQLite state database during shutdown so hot reloads and immediate restarts can reopen it without stale locks or callbacks. [#100691](https://github.com/openclaw/openclaw/pull/100691) Thanks @lzy3538.
+- Voice-call webhook setup through ngrok or Tailscale now fails cleanly on tunnel stream errors instead of crashing the Gateway, and shutdown avoids waiting on an already-ended tunnel. [#101394](https://github.com/openclaw/openclaw/pull/101394) Thanks @cxbasdev.
+
+#### Crashes and connection failures
+
+- Provider failures that contain BigInt, circular objects, or other unusual values now produce the intended structured transport error instead of crashing the error-reporting path. [#88401](https://github.com/openclaw/openclaw/pull/88401) Thanks @pluviobyte.
+- OpenClaw no longer crashes when a supervised child output stream fails immediately after launch. [#99802](https://github.com/openclaw/openclaw/pull/99802) Thanks @cxbasdev, @vincentkoc.
+- MCP stdio sessions now report stderr pipe failures as transport errors without taking down OpenClaw or losing available diagnostics. [#99803](https://github.com/openclaw/openclaw/pull/99803) Thanks @cxbasdev, @vincentkoc.
+- ACPX MCP proxies now turn closed input or output pipes into a clear proxy failure instead of an uncaught Node stream crash. [#99852](https://github.com/openclaw/openclaw/pull/99852) Thanks @sunlit-deng, @vincentkoc.
+- Shell snapshot capture and validation no longer crash OpenClaw when an unused helper-process output pipe reports a stream error. [#100744](https://github.com/openclaw/openclaw/pull/100744) Thanks @lsr911, @vincentkoc.
+- A node-host `system.run` stream failure now returns a clear failed result instead of crashing the node host, and a child that will not stop is terminated after one second. [#100849](https://github.com/openclaw/openclaw/pull/100849) Thanks @cxbasdev.
+- Docker-backed sandbox file and shell commands now fail promptly with the original input-stream error instead of crashing, hanging, or remaining pending. [#101032](https://github.com/openclaw/openclaw/pull/101032) Thanks @cxbasdev.
+- APNs relay pushes now reject oversized response bodies as `RelayResponseTooLarge` instead of exhausting Gateway memory or reporting false delivery. [#97550](https://github.com/openclaw/openclaw/pull/97550) Thanks @alix-007.
+- An ACP Gateway event-handler failure now produces a concise diagnostic instead of terminating the ACP process or corrupting protocol output. [#100558](https://github.com/openclaw/openclaw/pull/100558) Thanks @ajwan8998.
+- A runaway `tool_search_code` subprocess can no longer grow Gateway memory without limit through stderr, while failure reports retain the latest useful diagnostic detail. [#101007](https://github.com/openclaw/openclaw/pull/101007) Thanks @hugenshen, @vincentkoc.
+- Built-in grep stream failures now become ordinary tool errors instead of crashing the agent runtime, hanging the search, or leaving incomplete results unexplained. [#101014](https://github.com/openclaw/openclaw/pull/101014) Thanks @cxbasdev.
+- SSH-backed sandbox commands and uploads now stop cleanly, clean up child processes, and preserve the useful error when an input or output stream fails. [#101031](https://github.com/openclaw/openclaw/pull/101031) Thanks @cxbasdev.
+
+#### Gateway controls and settings
+
+- Experimental local-model lean mode now offers a smaller default tool menu for constrained models, while operators can explicitly retain media, voice, or PDF tools through allowlists. [#88881](https://github.com/openclaw/openclaw/pull/88881) Thanks @vincentkoc.
+- Operators can now set `OPENCLAW_SANDBOX_IMAGE` to build revision-specific sandbox image tags for controlled rollout and rollback. [#99915](https://github.com/openclaw/openclaw/pull/99915)
+- Lean local-model agents can now choose the familiar `exec` tool directly when policy permits it, while existing allowlists, sandboxing, approvals, and hooks still govern command execution. [#101607](https://github.com/openclaw/openclaw/pull/101607) Thanks @vincentkoc.
+- Busy or slower hosts now give Codex native permission checks and pre-tool hooks more time to finish, reducing dropped policy decisions. [123ec16](https://github.com/openclaw/openclaw/commit/123ec165bb5638ea9587c9e72566c081159bce5c) Thanks @vincentkoc.
+- Completed or expired exec approvals no longer add misleading follow-up warnings, making the remaining dispatch warnings more useful for spotting real delivery failures. [#66685](https://github.com/openclaw/openclaw/pull/66685) Thanks @pfrederiksen.
+- Local Gateway approval read or write failures now return a consistent `UNAVAILABLE` response instead of a generic handler error. [#79861](https://github.com/openclaw/openclaw/pull/79861) Thanks @martins-oss.
+- Agent requests with several MCP servers now initialize those servers concurrently, shortening the wait before the model begins while isolating slow or failed servers. [#94230](https://github.com/openclaw/openclaw/pull/94230) Thanks @mmyzwl, @vincentkoc.
+- External tools can now receive session-scoped Gateway access without process-wide credentials or permission to impersonate another session, forming the secure base for `openclaw attach`. [#96351](https://github.com/openclaw/openclaw/pull/96351) Thanks @anagnorisis2peripeteia, @obviyus.
+- Operators can inspect the effective tools for global sessions assigned to any configured agent, not only the default one. [#97265](https://github.com/openclaw/openclaw/pull/97265) Thanks @pick-cat.
+- Agent runs, Doctor, and Gateway tool views now describe access using the same policy that actually governs the run, reducing confusing permission mismatches. [#99817](https://github.com/openclaw/openclaw/pull/99817)
+- Bounded write-scope clients can now rename, pin, archive, categorize, and mark sessions unread without admin access, while user labels and stable list ordering survive refreshes. [#100964](https://github.com/openclaw/openclaw/pull/100964)
+- Embedded terminals can now open, resize, stream output, and close consistently across the Gateway, Control UI, and native apps. [6601576](https://github.com/openclaw/openclaw/commit/66015762a39030584d6a7cc91fad09f4709f8d3f)
+- Developers can build against and consume managed-worktree session results from the Gateway protocol package without duplicate-name failures. [8ce620f](https://github.com/openclaw/openclaw/commit/8ce620f3e675b25111dcbed6d1e124fedd4756a3) Thanks @vincentkoc.
+
+#### Health, usage, and status
+
+- Embedded `openclaw agent --local` runs using OpenAI-compatible providers now report and save streamed token usage instead of showing zero, improving session, context, cost, and monitoring records. [#96523](https://github.com/openclaw/openclaw/pull/96523) Thanks @ly85206559, @vincentkoc.
+- Unusual ACP failure causes now produce stable, readable diagnostic details instead of a missing or invalid explanation. [#96270](https://github.com/openclaw/openclaw/pull/96270) Thanks @ly-wang19.
+- Normally completed agent and subagent runs no longer appear as error-level log entries, reducing false alarms while genuine failures remain elevated. [#101703](https://github.com/openclaw/openclaw/pull/101703) Thanks @zengwen-dt.
+- Gateway logs now reveal when OpenClaw cannot save a terminal session's final lifecycle state, making silent persistence failures diagnosable. [#97839](https://github.com/openclaw/openclaw/pull/97839) Related [#97795](https://github.com/openclaw/openclaw/issues/97795). Thanks @aniruddhaadak80, @lzy3538.
+- Gateway MCP logs are now quieter and identify the responsible tool when schema problems occur, while distinct conflicts remain visible. [#98821](https://github.com/openclaw/openclaw/pull/98821) Thanks @alvelda, @harjothkhara.
+- Malformed Gateway MCP `tools/call` arguments now return a clear invalid-parameters response before any hook or tool can process them. [#99180](https://github.com/openclaw/openclaw/pull/99180) Thanks @vectorpeak.
+- MCP attach requests without a valid session key now return the intended validation error instead of crashing the Gateway with a TypeError. [#99488](https://github.com/openclaw/openclaw/pull/99488) Thanks @zhanglei99586.
+- Starting a new Codex session no longer emits a false history warning before its transcript exists, while genuine history failures remain visible. [#100484](https://github.com/openclaw/openclaw/pull/100484) Thanks @litang9, @vincentkoc.
+- Gateway usage reports now label start and end dates in the requested timezone, including correct calendar-day handling across local daylight-saving transitions. [#100567](https://github.com/openclaw/openclaw/pull/100567) Thanks @nianjiuzst.
+- Session usage details now recover malformed transcript dates from available message timestamps and return finite, consistently ordered values instead of nulls. [#100687](https://github.com/openclaw/openclaw/pull/100687) Thanks @sheyanmin.
+
+#### Text, emoji, and translated output
+
+- Truncated agent logs and diagnostic previews now keep emoji and other extended Unicode characters intact at the cutoff. [#96296](https://github.com/openclaw/openclaw/pull/96296) Thanks @ly-wang19.
+- Long agent grep lines now truncate emoji and uncommon CJK characters cleanly instead of ending with corrupted replacement symbols. [#97559](https://github.com/openclaw/openclaw/pull/97559) Thanks @zenglingbiao.
+- Emoji and other supplementary characters now remain intact when long agent progress or active-memory recall text is shortened. [#100244](https://github.com/openclaw/openclaw/pull/100244) Thanks @vincentkoc, @xialonglee, @zengwen-dt.
+- Shortened text across CLI output, diagnostics, plugin messages, previews, errors, task summaries, and Zalo sends now preserves complete emoji and other supplementary characters. [#101654](https://github.com/openclaw/openclaw/pull/101654) Thanks @lsr911, @maweibin, @wm0018.
+- Long names, labels, summaries, previews, titles, and diagnostics across OpenClaw now truncate without splitting emoji or other supplementary Unicode characters. [#101685](https://github.com/openclaw/openclaw/pull/101685) Thanks @lsr911, @ly85206559, @maweibin, @wings1029.
+- Bounded text in Parallel searches, compaction, telemetry, presence, Workboard, badges, and Control UI metadata now keeps or omits whole Unicode characters instead of leaving malformed fragments. [#101711](https://github.com/openclaw/openclaw/pull/101711)
+- Long streamed replies now split only between complete Unicode characters, preserving emoji in plain text and fenced Markdown even at tight message limits. [#104441](https://github.com/openclaw/openclaw/pull/104441) Thanks @mushuiyu886.
+- Long status messages and command output now stay readable when shortened, without splitting emoji or non-English characters into corrupted text. [2e7ffca](https://github.com/openclaw/openclaw/commit/2e7ffca8fff001d1d962611a70d76640c920fc6f) Thanks @vincentkoc.
+- Codex usage-limit previews and plan status labels now truncate emoji and uncommon Unicode cleanly at their display boundaries. [#97299](https://github.com/openclaw/openclaw/pull/97299) Thanks @zenglingbiao.
+- `/subagents list` now shortens long names and task descriptions containing emoji or uncommon CJK characters without displaying broken glyphs. [#97557](https://github.com/openclaw/openclaw/pull/97557) Thanks @zenglingbiao.
+- Compact subagent lists now keep long labels and task text within their display budget without splitting emoji or breaking alignment. [#100013](https://github.com/openclaw/openclaw/pull/100013) Thanks @qingminglong.
+- Shortened web, media, TTS, status, transport, and voice-call text now preserves complete Unicode characters instead of producing replacement symbols or malformed downstream content. [#101355](https://github.com/openclaw/openclaw/pull/101355) Thanks @alix-007, @vincentkoc.
+- Codex desktop notifications now shorten long assistant previews containing emoji or CJK text without malformed characters. [#101534](https://github.com/openclaw/openclaw/pull/101534) Thanks @lsr911.
+- ACP tool titles, permission prompts, warnings, and errors now keep long emoji or CJK argument previews readable when shortened. [#101535](https://github.com/openclaw/openclaw/pull/101535) Thanks @lsr911.
+- Suppressed auto-reply previews in verbose logs now preserve complete emoji and other supplementary characters instead of showing corrupted text at the length limit. [#101575](https://github.com/openclaw/openclaw/pull/101575) Thanks @wm0018.
+- Oversized agent tool results now preserve complete emoji and similar Unicode characters when shortened before being sent to the model. [#102087](https://github.com/openclaw/openclaw/pull/102087) Thanks @chengzhichao-xydt.
+- Gateway WebSocket failures now keep non-ASCII close reasons readable and within the byte limit instead of cutting characters into garbled text. [#100047](https://github.com/openclaw/openclaw/pull/100047) Thanks @narahariraghava.
+
+### Accounts, Devices, and Data Protection
+
+Trust-sensitive actions stop earlier and explain more of what requires attention. The persistent [activity audit](https://docs.openclaw.ai/gateway/audit) can be filtered and exported after restarts, ClawHub installations distinguish blocked releases from releases that need deliberate acknowledgement, and guarded networking supports approved proxy-only paths without weakening destination checks.
+
+Credential resolution and redaction now cover more model and plugin paths, while [sandboxing and approvals](https://docs.openclaw.ai/gateway/sandboxing) enforce clearer device, permission, and workspace boundaries. The [secrets](https://docs.openclaw.ai/gateway/secrets) workflow also avoids exposing resolved model credentials in ordinary request and error paths.
+
+#### Credentials and private data
+
+- Model-provider keys stored with SecretRefs now receive additional protection against accidental exposure in logs, errors, proxy captures, SDK setup, and runtime inspection, with a compatibility switch for secret sentinels. [#102009](https://github.com/openclaw/openclaw/pull/102009)
+- Operators can use targeted Doctor lint to detect credential residue in historical `config-audit.jsonl` entries and preview redaction before running `openclaw doctor --fix`. [#84450](https://github.com/openclaw/openclaw/pull/84450) Thanks @giodl73-repo.
+- Gateway service regeneration now keeps environment-backed secrets out of Linux unit definitions and preserves resolved provider and channel credentials on macOS. [#96065](https://github.com/openclaw/openclaw/pull/96065) Thanks @darren2030, @obviyus.
+- `openclaw doctor --fix` now preserves separate OAuth accounts for the same provider, including each account reference and saved display name. [#97541](https://github.com/openclaw/openclaw/pull/97541) Thanks @liuhao1024, @yetval.
+- Bare Fireworks API keys are now masked in logs, provider errors, command details, tool output, and Control UI diagnostics even without a nearby sensitive-field label. [#98226](https://github.com/openclaw/openclaw/pull/98226) Related [#98225](https://github.com/openclaw/openclaw/issues/98225). Thanks @ooiuuii.
+- Failed OpenAI or Codex credential refreshes now report that reauthentication is required and privately identify the affected profile instead of appearing healthy until model turns fail. [#99134](https://github.com/openclaw/openclaw/pull/99134) Related [#99120](https://github.com/openclaw/openclaw/issues/99120). Thanks @100yenadmin, @fuller-stack-dev.
+- A temporary output-stream read failure from an exec-based SecretRef provider no longer crashes OpenClaw during credential resolution. [#100521](https://github.com/openclaw/openclaw/pull/100521) Thanks @cxbasdev.
+- Agent payload logs and cache traces now redact provider keys even when those credentials appear inside free-text diagnostic values. [d8ee630](https://github.com/openclaw/openclaw/commit/d8ee630b203c86fd5d91331156614a441ec9e52c) Thanks @joshavant.
+- Failed cron webhooks no longer forward raw command summaries or diagnostics that may contain setup prompts, codes, or secret-like output. [1d17263](https://github.com/openclaw/openclaw/commit/1d172637d6dda23a0b108c624239264eae0e5042) Thanks @joshavant.
+- Secret target discovery now works consistently for both scoped requests and the full compiled registry instead of failing when no allowed subset is supplied. [e490171](https://github.com/openclaw/openclaw/commit/e490171ff24b4165b68b9835e76c1baf8903a149)
+- `/login codex` now switches the active chat to the account just authenticated without overwriting a newer manual profile choice, and gives recovery guidance if the switch fails. [02c3de9](https://github.com/openclaw/openclaw/commit/02c3de947169acdafbf60dd5ce76f655c34e37c7) Thanks @vincentkoc.
+- Profile changes made through `/login` now use the standard session save path, preserving newer concurrent selections and existing recovery behavior. [f07c478](https://github.com/openclaw/openclaw/commit/f07c4782fa6a109df7f4345f51a88caa9d8439c9) Thanks @vincentkoc.
+- Codex session bindings now keep large MCP configurations and rotated Authorization credentials in bounded fingerprints without persisting readable bearer values. [491e42e](https://github.com/openclaw/openclaw/commit/491e42e6d5a334f850e2ad790a19c936c8daa07e) Thanks @100yenadmin.
+- Copied provider keys and tokens now have hidden terminal control characters removed before request headers are prepared, while intentional spaces remain intact. [#96444](https://github.com/openclaw/openclaw/pull/96444) Thanks @lin-hongkuan.
+- Masked malformed credentials now stay on one safe line in setup and authentication diagnostics even when the original input contains newlines or other control bytes. [#96445](https://github.com/openclaw/openclaw/pull/96445) Thanks @lin-hongkuan.
+- Security audits no longer mistake bundled placeholder keys for LM Studio, Ollama, and other keyless local providers as exposed plaintext credentials. [#97622](https://github.com/openclaw/openclaw/pull/97622) Thanks @xydigit-sj.
+- Control UI Activity previews now conceal API keys stored under dotted configuration names or returned in structured tool output. [#99460](https://github.com/openclaw/openclaw/pull/99460) Related [#99459](https://github.com/openclaw/openclaw/issues/99459). Thanks @ooiuuii.
+- Custom ACP error redactors now keep OpenClaw's built-in secret cleanup, preventing known tokens, credentials, and private-key material from leaking into formatted errors. [#100191](https://github.com/openclaw/openclaw/pull/100191) Thanks @lin-hongkuan.
+- When another OpenClaw process is refreshing OpenAI OAuth credentials, operators now see one useful contention error without duplicated wording or exposed local file paths. [#101573](https://github.com/openclaw/openclaw/pull/101573) Thanks @vincentkoc.
+
+#### Devices and pairing
+
+- Running a read-only local Gateway check no longer leaves stale pairing permissions that block a later agent, admin, write, or device-approval command. [#96002](https://github.com/openclaw/openclaw/pull/96002) Thanks @vincentkoc.
+- `/pair` now refuses setup codes that point to non-routable `0.0.0.0` or `::` addresses and gives operators secure Gateway URL guidance instead. [#98617](https://github.com/openclaw/openclaw/pull/98617) Thanks @crh-code.
+- Gateway authentication retries now send stored device tokens only to true loopback endpoints, not remote hostnames that merely resemble `127.*` addresses. [#99859](https://github.com/openclaw/openclaw/pull/99859) Thanks @ly85206559.
+- The `/pair` mobile setup flow now accepts local IPv6 ULA and link-local Gateway addresses without requiring TLS or a different advertised host, while public cleartext URLs remain blocked. [#101008](https://github.com/openclaw/openclaw/pull/101008) Thanks @zhangguiping-xydt.
+- Device owners can approve the request ID most recently shown by `openclaw devices list` after a reconnect, without weakening protection against newly expanded scopes. [#98145](https://github.com/openclaw/openclaw/pull/98145) Thanks @romneyda.
+- Swift native clients now support device-scoped skill approvals, with the reviewer-device field encoded in their generated Gateway models. [1403c64](https://github.com/openclaw/openclaw/commit/1403c64799ae62785e36327b6fc4c5235b10d8ba)
+- Gateway sign-in tracking now keeps bounded memory use during floods of failed attempts from many addresses while preserving existing lockouts. [#96224](https://github.com/openclaw/openclaw/pull/96224) Thanks @eleqtrizit.
+
+#### Permissions and approvals
+
+- Browser control now requires the same administrator permission through direct node invocation as through the standard browser request path, preventing write-only credentials or third-party plugins from gaining elevated access. [#85916](https://github.com/openclaw/openclaw/pull/85916) Thanks @eleqtrizit, @laphilosophie.
+- Only the configured owner can now change whether a group responds to mentions or every message through `/activation`. [#97838](https://github.com/openclaw/openclaw/pull/97838) Thanks @pgondhi987.
+- Starting or changing native Codex sessions now requires owner or `operator.admin` access, while other authorized senders retain read-only inspection. [#97952](https://github.com/openclaw/openclaw/pull/97952) Thanks @eleqtrizit.
+- ACP session lifecycle and runtime controls now require an owner or internal Gateway administrator instead of being available to any authorized channel user. [#97953](https://github.com/openclaw/openclaw/pull/97953) Thanks @eleqtrizit.
+- Approving a node that can handle sensitive browser traffic now requires administrator permission, matching the security level already required to use that capability. [#104491](https://github.com/openclaw/openclaw/pull/104491) Thanks @yetval.
+- Authorized non-owner chat participants can no longer inspect or change owner-controlled MCP server configuration through `/mcp`. [ad5a26c](https://github.com/openclaw/openclaw/commit/ad5a26cf699afd7a387a187aee77bbc7d04793df) Thanks @joshavant.
+- Auto-reply diagnostics now remain owner-only instead of allowing non-owner participants to run the command. [170bf72](https://github.com/openclaw/openclaw/commit/170bf72e64a9b85933e156244cccda7bd0270df4) Thanks @joshavant.
+- After an agent is removed, its leftover sessions can no longer start new model runs through the Gateway. [#97260](https://github.com/openclaw/openclaw/pull/97260) Thanks @obviyus, @pick-cat.
+- Non-owner Gateway chat users are no longer offered the protected `cron`, `gateway`, or `nodes` control tools, even when those tools are otherwise allowlisted. [#102030](https://github.com/openclaw/openclaw/pull/102030) Thanks @pgondhi987.
+- Trajectory exports from chat now require owner authority, preventing other command-authorized channel users from retrieving sensitive session artifacts. [#97840](https://github.com/openclaw/openclaw/pull/97840) Thanks @pgondhi987.
+- Gateway-wide Active Memory can now be changed only by owners or administrators, while other authorized users retain session-level controls. [#97841](https://github.com/openclaw/openclaw/pull/97841) Thanks @pgondhi987.
+- Only owners and administrative Gateway clients can now turn Memory Core dreaming on or off through `/dreaming`, while status and help remain available to others. [#97869](https://github.com/openclaw/openclaw/pull/97869) Thanks @eleqtrizit.
+- Non-admin Telegram and Discord users can no longer change the Gateway's Talk voice, though they can still view the current and available voices. [#97874](https://github.com/openclaw/openclaw/pull/97874) Thanks @eleqtrizit.
+- Installing or reconfiguring Codex Computer Use resources now requires owner or administrator access, while other authorized senders can still inspect status. [#97955](https://github.com/openclaw/openclaw/pull/97955) Thanks @eleqtrizit.
+- Authenticated owners can use their already-granted shell, file, process, Skill Workshop, and plugin tools in WebChat without extending those permissions to guests or external senders. [#101271](https://github.com/openclaw/openclaw/pull/101271) Thanks @fuller-stack-dev.
+
+- With `strictInlineEval` enabled, versioned Python and PyPy commands plus additional PHP and R inline forms now require fresh explicit approval rather than inheriting executable trust. [#96216](https://github.com/openclaw/openclaw/pull/96216) Thanks @eleqtrizit.
+- In shared channels, only the person who started a Claude Code command can approve or deny its tool permission requests. [#98256](https://github.com/openclaw/openclaw/pull/98256) Thanks @eleqtrizit.
+- Running `/prose` now shows operators the transitive remote imports and asks for consent before OpenProse fetches those code dependencies. [259877d](https://github.com/openclaw/openclaw/commit/259877dccf1c6e2e8abce5deb92450af1a8b53a6) Thanks @joshavant.
+- Codex plugin users can allow read-only app actions while requiring a fresh approval for every write or destructive action. [#97123](https://github.com/openclaw/openclaw/pull/97123) Thanks @kevinslin.
+- Codex plugin apps now avoid approval prompts for read-only actions, preserve per-app write policies across recovery, and refresh their app inventory after upgrades. [#97327](https://github.com/openclaw/openclaw/pull/97327) Thanks @kevinslin.
+- Windows exact-path execution approvals now launch the approved executable rather than a same-named program from the working directory. [#98260](https://github.com/openclaw/openclaw/pull/98260) Thanks @eleqtrizit.
+- The Codex plugin now names per-action destructive approval mode `ask`, making it clear that each write or destructive action remains available but requires confirmation. [#98501](https://github.com/openclaw/openclaw/pull/98501) Related [#98499](https://github.com/openclaw/openclaw/issues/98499). Thanks @kevinslin.
+- Exec approval prompts now display and transmit long command text containing emoji or malformed Unicode without broken characters or encoding failures. [#99566](https://github.com/openclaw/openclaw/pull/99566) Thanks @mikasa0818.
+- The Control UI terminal is now explicit opt-in, opens tabs under the selected agent's workspace and policy, and closes affected shells when accepted access restrictions tighten. [#100081](https://github.com/openclaw/openclaw/pull/100081) Thanks @rayncc.
+- Windows companion-node exec policies can now be viewed and updated through node-aware approvals commands and displayed correctly in Control UI. [#101669](https://github.com/openclaw/openclaw/pull/101669) Thanks @vincentkoc.
+- Using `jq` through exec now requires an explicit trusted allowlist entry or approval instead of being treated as a harmless stdin-only safe binary. [#102032](https://github.com/openclaw/openclaw/pull/102032) Thanks @pgondhi987.
+- Always-allow approvals for `npm exec`, `npx`, `pnpm`, and `yarn` wrappers now apply to the actual command rather than unintentionally trusting different future payloads. [#102035](https://github.com/openclaw/openclaw/pull/102035) Thanks @pgondhi987.
+- Skills created by agents now remain pending for Skill Workshop review and approval instead of becoming active immediately without the expected safeguards. [#98346](https://github.com/openclaw/openclaw/pull/98346) Related [#96054](https://github.com/openclaw/openclaw/issues/96054). Thanks @momothemage, @xianshishan.
+- Status and diagnostic tools can now identify stale exec approval follow-ups intentionally suppressed after `/new` or `/reset` instead of treating them as unexplained delivery failures. [#98293](https://github.com/openclaw/openclaw/pull/98293) Thanks @bsniznd.
+- Codex `/btw` side conversations now preserve an ask-mode plugin app's requirement to obtain approval before destructive actions. [#98812](https://github.com/openclaw/openclaw/pull/98812)
+- Long Codex app-server approval details and command previews now preserve emoji and extended Unicode characters instead of showing corrupted text. [#100177](https://github.com/openclaw/openclaw/pull/100177) Thanks @xialonglee.
+- Strict exec approval now keeps joined or clustered interpreter inline-code commands such as `python3 -xcprint` as one-time approvals rather than reusable allowlist entries. [#101353](https://github.com/openclaw/openclaw/pull/101353) Thanks @pgondhi987.
+- Long exec auto-review explanations containing emoji or supplementary CJK characters now shorten cleanly instead of showing a broken replacement symbol. [#101513](https://github.com/openclaw/openclaw/pull/101513) Thanks @wm0018.
+- Plugin approval titles and descriptions now remain readable when emoji or supplementary CJK characters fall at the Gateway's text limit. [#101580](https://github.com/openclaw/openclaw/pull/101580) Thanks @wm0018.
+
+#### Channels, users, and conversation separation
+
+- Agents using OpenClaw's cron tools are now limited to their own scheduled jobs and session targets, while operator-managed cron remains unchanged and mixed-version setups fail closed with an `openclaw gateway restart` instruction. [#96883](https://github.com/openclaw/openclaw/pull/96883) Thanks @joshavant.
+- Cron wake actions started by an agent now remain within that agent's own session lanes, reducing the chance of waking another agent's conversation. [#97949](https://github.com/openclaw/openclaw/pull/97949) Thanks @eleqtrizit.
+- Write-scoped Gateway clients can still perform supported message actions but can no longer supply identity fields that masquerade as a trusted requester or owner. [#102031](https://github.com/openclaw/openclaw/pull/102031) Thanks @pgondhi987.
+- Multi-user bridges using `openclaw agent --agent ... --channel ... --to ...` now keep recipients in separate sessions when per-recipient isolation is configured. [#101507](https://github.com/openclaw/openclaw/pull/101507) Thanks @pingfanfan, @vincentkoc.
+- Read-only voice-call status now omits phone numbers, transcripts, routing details, processed event IDs, and raw metadata. [#97870](https://github.com/openclaw/openclaw/pull/97870) Thanks @eleqtrizit.
+
+#### Plugin and skill download checks
+
+- ClawHub now checks community plugin and skill releases before download, blocking prohibited releases and requiring explicit acknowledgement for suspicious ones while leaving existing installs in place when an update is skipped. [#81364](https://github.com/openclaw/openclaw/pull/81364) Thanks @jesse-merhi.
+
+#### Activity history
+
+- Authorized operators now have a durable audit history for agent and tool activity, with filters, stable paging, bounded JSON export, configurable recording, and automatic retention limits. [#98704](https://github.com/openclaw/openclaw/pull/98704)
+
+#### Security checks and guided fixes
+
+- Operators using workspace repairs can now run `doctor --fix` to disable policy-denied Gateway HTTP endpoints without removing nested URL-fetch settings. [#99731](https://github.com/openclaw/openclaw/pull/99731) Thanks @giodl73-repo.
+- `openclaw security audit` now warns that per-agent skill allowlists do not prevent shell-capable agents from reaching globally configured MCP servers. [#98352](https://github.com/openclaw/openclaw/pull/98352) Thanks @momothemage.
+- Managed deployments can now require entries such as `system.run` in `gateway.nodes.denyCommands`, and Policy doctor warns when configuration drift leaves a privileged node command available. [#99121](https://github.com/openclaw/openclaw/pull/99121) Thanks @giodl73-repo.
+- `policy check --json` now tells administrators whether each finding is automatically repairable, needs review or manual work, is validation-only, or is unsupported. [#99686](https://github.com/openclaw/openclaw/pull/99686) Thanks @giodl73-repo.
+- Operators who explicitly enable Policy workspace repairs can now automatically narrow several unsafe settings, while OpenClaw remains read-only without that opt-in. [#99690](https://github.com/openclaw/openclaw/pull/99690) Thanks @giodl73-repo, @omarshahine.
+- Policy workspace repairs can now add required tools to the affected deny list while preserving existing entries and avoiding unintended root-policy widening. [#99700](https://github.com/openclaw/openclaw/pull/99700) Thanks @giodl73-repo.
+- Policy workspace repairs can now move reported open channel groups to allowlist mode and require mentions without changing inherited defaults. [#99720](https://github.com/openclaw/openclaw/pull/99720) Thanks @giodl73-repo, @omarshahine.
+- `doctor --fix` now shows the exact `gateway.bind=loopback` or `gateway.nodes.denyCommands` change needed for sensitive findings without applying it automatically. [#99776](https://github.com/openclaw/openclaw/pull/99776) Thanks @giodl73-repo.
+- `openclaw security audit` now reports Browser exposure only when plugin policy actually allows the Browser plugin to run. [#97732](https://github.com/openclaw/openclaw/pull/97732) Thanks @amtellezfernandez.
+
+#### Network request protections
+
+- Provider, channel, media, and web requests can now reach public destinations through a managed proxy even when local DNS is unavailable or differs from the proxy's DNS. [#98951](https://github.com/openclaw/openclaw/pull/98951) Related [#98925](https://github.com/openclaw/openclaw/issues/98925). Thanks @momothemage, @sandl99.
+- Malformed MCP OAuth failures now return a bounded HTTP-status diagnostic instead of allowing an unbounded error response to exhaust agent memory. [#98143](https://github.com/openclaw/openclaw/pull/98143) Thanks @pick-cat.
+- Under strict SSRF policy, remote-browser discovery can no longer redirect OpenClaw from the configured CDP endpoint to a different host, port, or security mode. [cbc833a](https://github.com/openclaw/openclaw/commit/cbc833a7f33804db11f11274678770a1b55be3ca) Thanks @vincentkoc.
+- Oversized or never-ending responses from supported external providers now stop at a fixed limit with a labeled error instead of consuming memory until the full body arrives. [0a14444](https://github.com/openclaw/openclaw/commit/0a14444924e34e031133c997b00d30573353c5a0) Thanks @joshavant.
+- Web fetch and provider integrations now enforce response-size caps without allocating an entire nonstandard response in memory. [#99884](https://github.com/openclaw/openclaw/pull/99884) Thanks @zenglingbiao.
+- Trusted custom provider hosts are now protected from DNS rebinding into local services; intentional loopback aliases must use an explicit local origin or enable `allowPrivateNetwork`. [#100835](https://github.com/openclaw/openclaw/pull/100835) Thanks @machine3at.
+- Browser-control requests now reject oversized successful JSON responses with a `BrowserServiceError` before they can consume excessive memory, while supported large browser results still work. [#100889](https://github.com/openclaw/openclaw/pull/100889) Thanks @mushuiyu886.
+- Browser automation now keeps Chrome control traffic tied to the configured or explicitly allowed CDP host, reducing the risk that a discovered debugger address redirects credentials or control elsewhere. [#101171](https://github.com/openclaw/openclaw/pull/101171)
+- Hidden control characters can no longer break terminal hyperlink boundaries or inject control behavior through documentation link text. [#96440](https://github.com/openclaw/openclaw/pull/96440) Thanks @lin-hongkuan.
+- MCP include and exclude filters with many wildcard segments now reject nonmatches quickly instead of stalling tool discovery for minutes. [#100330](https://github.com/openclaw/openclaw/pull/100330) Thanks @lsr911.
+- Anthropic and Gemini PDF analysis now blocks unsafe private-network redirects and oversized responses by default while still supporting configured local endpoints. [#97872](https://github.com/openclaw/openclaw/pull/97872) Thanks @eleqtrizit.
+- Anthropic requests through Cloudflare AI Gateway now receive OpenClaw's standard private-address blocking, timeouts, retry guidance, and managed response safeguards. [#98003](https://github.com/openclaw/openclaw/pull/98003) Thanks @wangmiao0668000666.
+
+#### File, path, and configuration protections
+
+- Sandboxed agents with host browser control disabled can no longer reach a signed-in host browser through a paired browser node. [#97958](https://github.com/openclaw/openclaw/pull/97958) Thanks @eleqtrizit.
+- Hooks and skills no longer activate from unsafe inherited configuration values, while ordinary configured paths and explicit defaults continue to work. [#59694](https://github.com/openclaw/openclaw/pull/59694) Thanks @yonganzhang.
+- Unsafe, malformed, or unexpectedly large fd and ripgrep helper archives now fail early and clean up after themselves instead of putting agent setup at risk. [#98988](https://github.com/openclaw/openclaw/pull/98988) Thanks @leonidaslux, @vincentkoc.
+- Config show, set, and unset now operate only on values truly stored in the user's configuration, preventing inherited object state from masquerading as saved settings. [#99846](https://github.com/openclaw/openclaw/pull/99846) Thanks @vincentkoc, @zenglingbiao.
+- Terminal requests with an unknown agent ID now fail clearly instead of falling back to global defaults and potentially opening a host shell outside the intended agent boundary. [3601dca](https://github.com/openclaw/openclaw/commit/3601dcad24fea8924c52d8abbafb85e50fc247ce)
+- The Windows installer now accepts patched SQLite runtimes, rejects unsafe or unreadable ones, and reports the detected version when another Node.js upgrade is required. [28db140](https://github.com/openclaw/openclaw/commit/28db14005a77ca146c1f10979501dcfd375e8d01) Thanks @vincentkoc.
+- Managed host tools no longer inherit the active Conda environment from the shell that launched OpenClaw, avoiding unintended Python and package-manager behavior. [#99425](https://github.com/openclaw/openclaw/pull/99425) Related [#99424](https://github.com/openclaw/openclaw/issues/99424). Thanks @krissding, @ooiuuii.
+- OpenShell workspace file operations now stay inside the validated local sandbox mirror, with unsafe symlink, hard-link, cross-root, and changing-directory cases failing cleanly. [c6f5725](https://github.com/openclaw/openclaw/commit/c6f5725906dcaaaeeb0b5942addc844ffc579caf) Thanks @joshavant.
+- Config recovery now warns when the file was repaired but its final permissions could not be hardened, preserving the recovery while exposing the security issue. [#95348](https://github.com/openclaw/openclaw/pull/95348) Thanks @hugenshen.
+- Installing or updating ClawHub skills, plugins, and packages on Linux no longer risks changing shared `/tmp` permissions and disrupting unrelated services. [#101246](https://github.com/openclaw/openclaw/pull/101246) Thanks @ch3ch2cho2021, @yangxiansheng.
+
+### Official App Updates
+
+Across first-party client surfaces, conversation lists, command palettes, notifications, media, connection state, and file or diff views behave more consistently. Shared keyboard, path, status, Talk, and voice behavior is less likely to drift between clients, and failures leave clearer recovery paths.
+The [Android](https://docs.openclaw.ai/platforms/android), [iOS](https://docs.openclaw.ai/platforms/ios), and [macOS](https://docs.openclaw.ai/platforms/macos) apps add refreshed navigation, voice-message and Watch reply workflows, multiple Gateway profiles, background location options, and many chat and connection fixes. Cached state, trust, push settings, and the selected Gateway remain better separated when people switch between installations.
+
+#### Shared app changes
+
+- The Diffs viewer now provides a multi-file overview and direct file navigation, while PNG and PDF exports omit controls that cannot be used. [#100753](https://github.com/openclaw/openclaw/pull/100753)
+- After the Diffs viewer is reopened or refreshed, its toolbar controls now act only on the currently displayed diff cards. [#96138](https://github.com/openclaw/openclaw/pull/96138) Thanks @brokemac79, @davinci282828.
+- Session tools now display the correct absolute path for projects beside the home directory instead of turning a shared text prefix into a misleading `~...` path. [#96562](https://github.com/openclaw/openclaw/pull/96562) Thanks @he-yufeng.
+- Realtime Talk consult calls acknowledge as soon as the embedded agent run is accepted, rather than waiting for it to finish. [#101091](https://github.com/openclaw/openclaw/pull/101091) Thanks @romneyda.
+- Authorized remote clients can now request playable speech for an individual assistant message using the existing Gateway TTS configuration without accessing server-local files. [#100770](https://github.com/openclaw/openclaw/pull/100770)
+
+##### Android and iOS
+
+- Trusted Gateway clients can now browse workspace directories and preview supported files, enabling the iOS and Android apps to inspect and share agent output without SSH. [#100738](https://github.com/openclaw/openclaw/pull/100738)
+- iOS and Android users can create empty session groups, rename them once across their sessions, and remove a group without deleting the conversations inside it. [#101234](https://github.com/openclaw/openclaw/pull/101234)
+- Android and iOS now explain which side needs an update when app and Gateway protocol versions differ and avoid offering reconnect attempts that cannot succeed. [#98385](https://github.com/openclaw/openclaw/pull/98385) Related [#98384](https://github.com/openclaw/openclaw/issues/98384). Thanks @joshavant.
+- Mobile camera clips and screen recordings longer than 30 seconds can now finish within the existing duration limit without the request expiring early. [#99455](https://github.com/openclaw/openclaw/pull/99455) Thanks @nianjiuzst.
+- The iOS and Android terminal pages now receive the operator credential from the connected device session, so authenticated users do not land on a terminal that cannot connect. [451190d](https://github.com/openclaw/openclaw/commit/451190d625693153dfdca800fdbb9a05b2c21b6a) Thanks @vincentkoc.
+- iOS and Android can now show the Gateway terminal as a focused full-screen view with stored credentials and a clear unavailable state instead of embedding the full desktop Control UI. [9c78489](https://github.com/openclaw/openclaw/commit/9c7848928f8b7f4104dd3eb4ddc9330d850d1886)
+- Android and iOS Gateway setup now clearly requires Secure TLS for remote hosts, warns before trusted LAN use without encryption, and offers actionable update guidance for protocol mismatches. [#101325](https://github.com/openclaw/openclaw/pull/101325) Thanks @joshavant.
+
+##### iOS and macOS
+
+- iOS and macOS chat now show a context-usage ring that changes warning color near the limit, helping users anticipate compaction or truncation in long conversations. [#101183](https://github.com/openclaw/openclaw/pull/101183)
+- Apple native app users across 21 supported non-English locales now see translated Listen and speech-playback status controls. [0146534](https://github.com/openclaw/openclaw/commit/01465340f6dfe6dd51671e3a0c3b33d23c1ff1d7)
+- Swift clients can now decode skill curator actions and status details such as pinned state, use counts, timestamps, archived reasons, and overlaps. [ad833d7](https://github.com/openclaw/openclaw/commit/ad833d788305faeb9c12f3f4c5068674d201ee68)
+- Apple chat now presents fenced code with theme-aware highlighting and GitHub-style tables as aligned native tables on iOS and macOS. [#100207](https://github.com/openclaw/openclaw/pull/100207)
+- Apple chat now restores the visible in-progress state after backgrounding or reconnecting, preventing overlapping sends and reconciling one correct final reply. [#100277](https://github.com/openclaw/openclaw/pull/100277)
+- iOS chat now shows and switches the active model, while iOS and macOS model pickers support pinned favorites and the five most recent choices. [#100774](https://github.com/openclaw/openclaw/pull/100774)
+- Display equations in iOS and macOS chats now appear as readable, accessible typeset math, with horizontal scrolling for wide formulas and raw text retained for malformed expressions. [#100829](https://github.com/openclaw/openclaw/pull/100829)
+- iOS and macOS hide the thinking-level control for models that cannot use it, avoid sending stale unsupported settings, and restore the previous level when a reasoning-capable model is selected again. [#100875](https://github.com/openclaw/openclaw/pull/100875)
+- Streaming replies in iOS and macOS chats now reveal text more smoothly word by word, while reduced-motion users still receive immediate text and completed messages remain unchanged. [#100884](https://github.com/openclaw/openclaw/pull/100884)
+- iOS and macOS users can preview a safe link's title and description inside chat before deciding whether to open it. [#101198](https://github.com/openclaw/openclaw/pull/101198)
+- Expanded link previews on iOS and macOS can now show a safe page thumbnail, with the existing text card retained when image loading fails. [#101387](https://github.com/openclaw/openclaw/pull/101387)
+- Finished iOS and macOS chat replies now typeset inline LaTeX formulas while streaming text, code, currency, and invalid math remain readable as plain text. [#101388](https://github.com/openclaw/openclaw/pull/101388)
+- iOS chat and macOS webchat users can search, pin, rename, archive, restore, and reopen sessions from the in-chat switcher instead of scrolling a simple recent list. [#101053](https://github.com/openclaw/openclaw/pull/101053)
+
+##### Native app localization and design
+
+- Transcript export controls, chat actions, and export failure messages are now translated across 21 supported native app locales. [45f561a](https://github.com/openclaw/openclaw/commit/45f561ab6c24de9848b70823c80b7ac770531c41)
+- Supported non-English native apps now translate newer app information, support links, and message retry, delete, and waiting-to-send states. [82f5ac1](https://github.com/openclaw/openclaw/commit/82f5ac150ffde0c847696cddcdcb2d300bb44294)
+- Broader native app setup, chat, Talk, permission, connection, session, provider, and status text now uses the selected language across the language packs updated in this release. Sources: [a39b07b](https://github.com/openclaw/openclaw/commit/a39b07bb15f280c6d83522f79b1397104e5e05c4), [f8e1e0c](https://github.com/openclaw/openclaw/commit/f8e1e0c5bfbc1b43339ffaaaddd3ee6e45083c2d), [db27d2e](https://github.com/openclaw/openclaw/commit/db27d2ecfa77666397f841d6c0d47153ff94d822), [28a8414](https://github.com/openclaw/openclaw/commit/28a841472684eed2d98a1a277fcefc30855b580b), [e8e96bf](https://github.com/openclaw/openclaw/commit/e8e96bf7ee03aa251fc196693deb70af81da3d63), [6ea407d](https://github.com/openclaw/openclaw/commit/6ea407d46223ad3336abfc93abfb0345b2a58e75), [0011a18](https://github.com/openclaw/openclaw/commit/0011a184786686e625268f55799bdfbb8c8c7fda), [8c5adbf](https://github.com/openclaw/openclaw/commit/8c5adbfe3ec4f68a49d41a3b313a3b6b059c81d3), [019603d](https://github.com/openclaw/openclaw/commit/019603d336028c31de7c49814b45bb29314174e8), [d3d7282](https://github.com/openclaw/openclaw/commit/d3d7282a8cf4c99a29efa8c58c1980557f1c1abc), [267898c](https://github.com/openclaw/openclaw/commit/267898cddb9804bc2f27f94350e0c2342b48bf4b), [55ed57a](https://github.com/openclaw/openclaw/commit/55ed57a4e39b8e40628b9fcbfc982e9ac5fd86b5), [c54dc67](https://github.com/openclaw/openclaw/commit/c54dc67381933fa6240fe617e414fd6f1933ea38), [fd0355d](https://github.com/openclaw/openclaw/commit/fd0355d5b1a12c263bbd87e01ee88f451d11514b), [49726a5](https://github.com/openclaw/openclaw/commit/49726a5f5cbc013d42d7bf64c3033bbce4af319c), [2ffeedf](https://github.com/openclaw/openclaw/commit/2ffeedf406e741e9f58858c83af06aa763ba1ab6), [#98043](https://github.com/openclaw/openclaw/pull/98043), [beca2b1](https://github.com/openclaw/openclaw/commit/beca2b1749733f4afccf47a780187859e7afce22), [4078dc7](https://github.com/openclaw/openclaw/commit/4078dc78cc79b6a9ab0564f065fe1871a9a0c499), [e7e98f6](https://github.com/openclaw/openclaw/commit/e7e98f6399cd7bffdd5598bb86a48066dd2ce3e3), [3020f78](https://github.com/openclaw/openclaw/commit/3020f7817eb3ecf54057ed2847a0d54d0801d348), [0c82908](https://github.com/openclaw/openclaw/commit/0c82908f78e9eb33a9ad13dd726fa92833a688d9), [8a3935f](https://github.com/openclaw/openclaw/commit/8a3935fe0ba7b06dd76203b4f20b11a74ecbc688), [3f289fd](https://github.com/openclaw/openclaw/commit/3f289fdb4042446042b6cd9a5261a17dc3edf6a0), [203a896](https://github.com/openclaw/openclaw/commit/203a896b27c5c5191823138a4365578e0e77352d), [6afef15](https://github.com/openclaw/openclaw/commit/6afef15100fb402fb747a3543822d33fb9086f68). Thanks @yeager.
+- New-chat and worktree-chat entry points now appear in the selected language across supported Android and Apple app locales. [24bca38](https://github.com/openclaw/openclaw/commit/24bca38cdaad4a304a5624ef8ddc6cdc9b7d4d5a)
+- Supported non-English native apps now cover more Gateway setup, session, provider, health, messaging, terminal, and device text without English gaps. [52f1e05](https://github.com/openclaw/openclaw/commit/52f1e056006dc3aeca574877d51b942c87fa7cb1)
+- Refreshed native language packs now cover workspace files, sharing actions, folder states, Android SMS guidance, message delivery states, and related branding. [a9b0a9a](https://github.com/openclaw/openclaw/commit/a9b0a9a12b07899d8a0c4638a8521f5865d75bc6)
+- Supported non-English native apps now translate the new Terminal destination, Gateway setup guidance, Back action, connection messages, and OpenClaw branding. [e069cb2](https://github.com/openclaw/openclaw/commit/e069cb26f72a2e6233df8e2bd18a4274e1d53722)
+- Native app onboarding and AI connection guidance now reflects Crestodian and the current setup flow across supported non-English locales. Sources: [ad4809f](https://github.com/openclaw/openclaw/commit/ad4809f677f531cb00085c1d006db3d46a529ed8), [f0ecc16](https://github.com/openclaw/openclaw/commit/f0ecc16629f018d157345f1c653011f3ec9c97d3).
+- Native app command search now translates loading, unavailable, retry, and no-result states across the languages updated in this release. Sources: [745d2d0](https://github.com/openclaw/openclaw/commit/745d2d09cdbc79a019d2f7491bf04959ead4e51b), [7f7bec7](https://github.com/openclaw/openclaw/commit/7f7bec78445d049ba1d1b7019b2085cc808beb5a), [35be1c8](https://github.com/openclaw/openclaw/commit/35be1c81439c8df99e4de7057344c5bf0d056f56), [7db67ab](https://github.com/openclaw/openclaw/commit/7db67abd9eb01c36c55f3621a1b3521b290131b3), [4bc5766](https://github.com/openclaw/openclaw/commit/4bc57666cd8b0924f5ab15d5d8cafc4ba9b0ddbb), [0672720](https://github.com/openclaw/openclaw/commit/06727207d66ec1aef814664cf1e88da82c100140), [2a8cd44](https://github.com/openclaw/openclaw/commit/2a8cd440d14ae66e41c63140ea0c0067ca033461), [fd648fb](https://github.com/openclaw/openclaw/commit/fd648fbb17575fec3780c7d8fddf13780b083df2), [00b0b40](https://github.com/openclaw/openclaw/commit/00b0b40e284f40c3c8906251bbb202b81caab656), [a67990a](https://github.com/openclaw/openclaw/commit/a67990a180d6915328165dd7dc9975395160a784), [7640f67](https://github.com/openclaw/openclaw/commit/7640f672b407cf28384cbf5396cdf5d20965da6b), [15f4819](https://github.com/openclaw/openclaw/commit/15f481920c079364513b06939edc06aba6caef04), [4d1d720](https://github.com/openclaw/openclaw/commit/4d1d720164dbf3eb46c4d3a4a98814c2a1d2bdc2), [d1d3a27](https://github.com/openclaw/openclaw/commit/d1d3a2724feeca65759f2658c4af6a8350c1f854), [c2737d5](https://github.com/openclaw/openclaw/commit/c2737d55a9ffea741e07687a6eb40eff61fd369d), [bd3263d](https://github.com/openclaw/openclaw/commit/bd3263d713a1dbb299c14392139bab3cc5aed428), [127ce63](https://github.com/openclaw/openclaw/commit/127ce639547ef0f6016c829c31b915d97d4a55df), [0c960cd](https://github.com/openclaw/openclaw/commit/0c960cd8ae6a1553bdef3820b8167376772e7e53), [e6c3ad9](https://github.com/openclaw/openclaw/commit/e6c3ad99637b4f6fba34d9f2d64f7ca5b2413e45), [84c86f7](https://github.com/openclaw/openclaw/commit/84c86f73eb99b716598d031e7dce58ed73fa5d28), [e7aea60](https://github.com/openclaw/openclaw/commit/e7aea605426cfe8e39287b1e07fa23436260c88b).
+- Native chat controls for jumping to the latest message or reply now use the selected language across the translations in this release. Sources: [e31fa36](https://github.com/openclaw/openclaw/commit/e31fa360d94a0efd6003079271986ad32f0c2f9c), [375def8](https://github.com/openclaw/openclaw/commit/375def86042a938141bed0c635c361df72cf0ab2), [aabe44f](https://github.com/openclaw/openclaw/commit/aabe44f6382206a49855e8b7c7f1848666790f61), [48c3f4b](https://github.com/openclaw/openclaw/commit/48c3f4b10326a890352ba5e7dd51fad897145c38), [3db6fb9](https://github.com/openclaw/openclaw/commit/3db6fb9972768d7b4979a2649f202d8851935dd8), [a4b51e5](https://github.com/openclaw/openclaw/commit/a4b51e58d3627ba4524a98d9aebe2c11115b284e), [a60686d](https://github.com/openclaw/openclaw/commit/a60686dbc376667625e1613aa131af5487e5d8fa), [12e17ec](https://github.com/openclaw/openclaw/commit/12e17ec052982a37c29245d738954488248ea8c7), [6c4ac0c](https://github.com/openclaw/openclaw/commit/6c4ac0c71da53cd99968a976894c7b8def078f67), [bdc6258](https://github.com/openclaw/openclaw/commit/bdc625866b942f8f8d82ecfb72427f7c90992e78), [a775f9f](https://github.com/openclaw/openclaw/commit/a775f9f78e80a76b49cdf259e71ee002ee1da101), [a1f6acc](https://github.com/openclaw/openclaw/commit/a1f6accef457ab9f48adff2975a853e28c291909), [ee9f61d](https://github.com/openclaw/openclaw/commit/ee9f61d724ff265017c93aef0b11c2d5f1a2401b), [f188c66](https://github.com/openclaw/openclaw/commit/f188c664c0e73d455f3bf6c5ac074a5432269c50), [2525078](https://github.com/openclaw/openclaw/commit/2525078b86544143634697a4f46aef850b783025), [ed5ccda](https://github.com/openclaw/openclaw/commit/ed5ccda79c8b0b96c59a6af880bf114997e85414), [a6a4792](https://github.com/openclaw/openclaw/commit/a6a4792098a88953f1be8a81035f06b9bd7ed83a), [0924bee](https://github.com/openclaw/openclaw/commit/0924bee96bcc86715942d11c31b878c323548e90), [0420aef](https://github.com/openclaw/openclaw/commit/0420aefb1d4eeab37bbcf7f50268c41cfb760b26), [d23c4fd](https://github.com/openclaw/openclaw/commit/d23c4fdbb55f06833b9e37675185c003f7b3ea81), [37f0067](https://github.com/openclaw/openclaw/commit/37f006725d3706cfa28922178e123d8ff192f352).
+- Native prompts for starting work, checking status, using phone and voice controls, pairing, and returning to Chat now use the selected language across the translations in this release. Sources: [dd050bc](https://github.com/openclaw/openclaw/commit/dd050bc5f8151488e080b117714ea9f5cad832b5), [db72ffd](https://github.com/openclaw/openclaw/commit/db72ffd5d47050acb2d4dd72de8087c162876523), [4997802](https://github.com/openclaw/openclaw/commit/4997802eb0051cc83b9da1a06c923f211ff12159), [2dc7bd1](https://github.com/openclaw/openclaw/commit/2dc7bd19cb67742a7908427d2512d7b816f4d96f), [4381c29](https://github.com/openclaw/openclaw/commit/4381c294942b342c0b7df82668fdae7883978ba8), [9eb1a05](https://github.com/openclaw/openclaw/commit/9eb1a05c49082f221547015ad7a69561d113964a), [7838bc8](https://github.com/openclaw/openclaw/commit/7838bc82b6df287946b9d45afd52f507c1e1463c), [4352eaf](https://github.com/openclaw/openclaw/commit/4352eaf6ade181654d5a729e5632a1681385b1e6), [43fe5cc](https://github.com/openclaw/openclaw/commit/43fe5cc890fc98a29af7aacd4030a0c288f76f76), [6bd1a4b](https://github.com/openclaw/openclaw/commit/6bd1a4b89f2f82da1e19b0205c80fc4bd855be6d), [531af42](https://github.com/openclaw/openclaw/commit/531af42246acecc8ee37d0ee189c8d3b8fea3af6), [305715c](https://github.com/openclaw/openclaw/commit/305715c725af26d80c69bc9daa3fad77df330139), [8f9e163](https://github.com/openclaw/openclaw/commit/8f9e1635a1d6351f9ec4a64c2624423e45b5e7a8), [2abad57](https://github.com/openclaw/openclaw/commit/2abad575d250b6e7723a660c92b5ad7fed9ea379).
+- Native app status and appearance choices now use the selected language across the translations in this release. Sources: [58d199b](https://github.com/openclaw/openclaw/commit/58d199bbcbd298a3e806bcf5c56eb242759dea5b), [c15348b](https://github.com/openclaw/openclaw/commit/c15348b74f6291282d79b592ec29577b2b871852), [c047a3a](https://github.com/openclaw/openclaw/commit/c047a3a9c669f12c51e3cf0f72606e53e85f7f2b), [e191685](https://github.com/openclaw/openclaw/commit/e191685be93f9a461d6346439ce227419fb41d1d), [b1e173d](https://github.com/openclaw/openclaw/commit/b1e173d4c30419f8c7f7393a9c4977f30a49ddcd), [50fecf8](https://github.com/openclaw/openclaw/commit/50fecf848c405af2902838cecb34771367f3552c), [5211afe](https://github.com/openclaw/openclaw/commit/5211afeb67cc521eb7b55cf19884e1d77c6dbbce), [4c43cf5](https://github.com/openclaw/openclaw/commit/4c43cf5eaba52ab729587c9d4f4a660638770701), [fb394de](https://github.com/openclaw/openclaw/commit/fb394de179ba7b5914b1b886795d67c17aff39e8), [ba8c1fa](https://github.com/openclaw/openclaw/commit/ba8c1fa76fe9031424cc2727c7d0f7b2cd08ecba), [7bee4f6](https://github.com/openclaw/openclaw/commit/7bee4f67d4cd66c78009497f931b8a19e03dda2a), [77ab268](https://github.com/openclaw/openclaw/commit/77ab268f79a5cee110df9ee0014b08f67368ff55), [2417d94](https://github.com/openclaw/openclaw/commit/2417d94663fdfd8770ebf00d67f0a73ae1a904cb), [9b6ef34](https://github.com/openclaw/openclaw/commit/9b6ef34f9deaa6f6fa524b860340d7000eb87ccd), [9c4274f](https://github.com/openclaw/openclaw/commit/9c4274f94570f1f41ee30350eae32255c675c38e), [2671bcc](https://github.com/openclaw/openclaw/commit/2671bcc39f8c17d55ae3e96cabf48e4d474cac19), [b21153b](https://github.com/openclaw/openclaw/commit/b21153b98d6d2bde03cd1979d6db6ecb2ad47bab), [117e8e1](https://github.com/openclaw/openclaw/commit/117e8e1e042709b6eba851fc8d208b98c43b22b9), [cc0d7e1](https://github.com/openclaw/openclaw/commit/cc0d7e1dd4c638034cafc27a93da1bb7c7735694), [e6f3f54](https://github.com/openclaw/openclaw/commit/e6f3f54ad05728d874fdc4ff492e688741785249), [dd64f66](https://github.com/openclaw/openclaw/commit/dd64f66bb981595b8558af907d628fd49322a06f), [4c16e66](https://github.com/openclaw/openclaw/commit/4c16e669b2252724cd6e68bf68d727de3edfedc9), [3a8375c](https://github.com/openclaw/openclaw/commit/3a8375c29a810d923603d9f043e3e0916548bddf), [3e3b6d6](https://github.com/openclaw/openclaw/commit/3e3b6d6669468460959f1c9a57f4cb6a84b00620), [c356245](https://github.com/openclaw/openclaw/commit/c356245fc0d04803f768b6cd0675744728618fcd), [d506201](https://github.com/openclaw/openclaw/commit/d506201c6578e5ae782c4a401cdfd46557a11b1f).
+- Native app license notices, acknowledgements, and unavailable-file explanations now use the selected language across the translations in this release. Sources: [34bf5a9](https://github.com/openclaw/openclaw/commit/34bf5a90b4ae2ff2b987899a44f9c6b10467f6fe), [068088c](https://github.com/openclaw/openclaw/commit/068088c7fc98d6e18d67855abb2c9ad9e6de449a), [a623ac7](https://github.com/openclaw/openclaw/commit/a623ac71eba10364e558490326273cf369d9ee3c), [71374d3](https://github.com/openclaw/openclaw/commit/71374d379b40cd080992955e57587b552e55a5f6), [a9b0de8](https://github.com/openclaw/openclaw/commit/a9b0de803789a9945c12bf37f143ae4cde2faeba), [8f495e2](https://github.com/openclaw/openclaw/commit/8f495e2f805af548d78ee1f3834bde962a86f1a9), [436dd39](https://github.com/openclaw/openclaw/commit/436dd3934328bce7d75d77998212441859a044db), [f917e89](https://github.com/openclaw/openclaw/commit/f917e893a6d3fb2005074b6a1d752cf4fd505497), [2c8b97c](https://github.com/openclaw/openclaw/commit/2c8b97cee9e056f155e2144311eccd5e5a66a6e2), [ace162b](https://github.com/openclaw/openclaw/commit/ace162b95b47d1a16e9b2dd42851af64c731a9f1), [e60cccf](https://github.com/openclaw/openclaw/commit/e60cccf8a9c95d7a158e3fe4b8f47204141fea2e), [359ea4c](https://github.com/openclaw/openclaw/commit/359ea4c19bc9251e225a130d6f9c0fcab71d0ec2), [b7bc860](https://github.com/openclaw/openclaw/commit/b7bc8600e46aca2fbac8e0ddbea1a1084db80c64), [49ea27e](https://github.com/openclaw/openclaw/commit/49ea27ecc230b49b664b594e99758400595fa80f), [99cbc58](https://github.com/openclaw/openclaw/commit/99cbc589536e7309a5f8c468de4d9795addad55f), [204526a](https://github.com/openclaw/openclaw/commit/204526ac0a2a35fd7482cac4c64ecee6ad7de0fa), [3821c36](https://github.com/openclaw/openclaw/commit/3821c36d58cebab82ebf46614413b688930e3b47), [030d184](https://github.com/openclaw/openclaw/commit/030d184254756706af637fb1eeb0a9c31036eb8c), [24f639c](https://github.com/openclaw/openclaw/commit/24f639c66ca9a05a6531d4504971f67434989324), [499feb2](https://github.com/openclaw/openclaw/commit/499feb2e2fd474c7abeff9e87743b720ba03f593), [591d099](https://github.com/openclaw/openclaw/commit/591d099897938a27c6383b17ca36e128abcf098c).
+- Native photo-permission controls now explain limited, selected, and recent-photo access in the selected language across the translations in this release. Sources: [c360f92](https://github.com/openclaw/openclaw/commit/c360f92563fb2221452ae599412ea61f9eee188b), [4dd027e](https://github.com/openclaw/openclaw/commit/4dd027eaa1f14356f4f7740d4258d72adb59d2f2), [9cde1ca](https://github.com/openclaw/openclaw/commit/9cde1ca97141784f89816afd9283b2d7416b9a8c), [328fb70](https://github.com/openclaw/openclaw/commit/328fb70ba730bc7bb4cd3a0eaa5e6d1d089c734c), [71e5fcc](https://github.com/openclaw/openclaw/commit/71e5fccb644b51e50f61e8e3bd6715a0fd717a58), [b11d710](https://github.com/openclaw/openclaw/commit/b11d710e524f7d6d664ea5857f358f4ebbaff6e4), [55a2a9b](https://github.com/openclaw/openclaw/commit/55a2a9b0f0c4c56d03292b930ed116a146322e6c), [c4b40d0](https://github.com/openclaw/openclaw/commit/c4b40d0b2a008c1ba1bae82a180e455bc8656e00), [3a1b983](https://github.com/openclaw/openclaw/commit/3a1b983bc227f67ac0862f1761d53f6a3fee083d), [dea40a5](https://github.com/openclaw/openclaw/commit/dea40a5f96307e9da0862bbc774100f799110d6c), [4b1fab8](https://github.com/openclaw/openclaw/commit/4b1fab8047319bc07e47ef8136a9c83594729ed8), [44ca739](https://github.com/openclaw/openclaw/commit/44ca739f77ab7dfaa1f096627e84bc79e859b849), [d36452c](https://github.com/openclaw/openclaw/commit/d36452cc0bd66722f426c7c686859cbfcb1e9f24), [a50a59e](https://github.com/openclaw/openclaw/commit/a50a59e64802a1263bd8befe6c4bea57e055499e), [49b68e1](https://github.com/openclaw/openclaw/commit/49b68e1039347867c227e992fa7fcfac3e58f932), [122e4ba](https://github.com/openclaw/openclaw/commit/122e4ba3a30f32b8d563d7afa2f60cc4cd6c431b), [4086d35](https://github.com/openclaw/openclaw/commit/4086d35caf54c3a9759b21ad5f83536cdf08c2bc), [547a563](https://github.com/openclaw/openclaw/commit/547a563e4ca3cf6d573cf6210db3ffbedb592175), [538f28a](https://github.com/openclaw/openclaw/commit/538f28abce55949ee0a412da07664092427413d1), [c5afa92](https://github.com/openclaw/openclaw/commit/c5afa92c1f8ac63a9c01b7971acabcfb1d6f948f), [32a986d](https://github.com/openclaw/openclaw/commit/32a986d21c170741b5505870dd0a2e98ec410b1d).
+- Native skill availability, Gateway setup, diagnostics, privacy, and access guidance now use the selected language across the translations in this release. Sources: [fdcd5c0](https://github.com/openclaw/openclaw/commit/fdcd5c0eb0c2493f5d3845fcf76a02f4e1a6d6ba), [26f6735](https://github.com/openclaw/openclaw/commit/26f673526e7a6680df175570da67baf6fe5abeed), [5220eff](https://github.com/openclaw/openclaw/commit/5220effc10c92cec20abb6df0c5acdaa40e56ad6), [bb7dbda](https://github.com/openclaw/openclaw/commit/bb7dbda027b9451281f2d81d2f4cbad9a003599c), [952245b](https://github.com/openclaw/openclaw/commit/952245b49c4b6743afc9ad97f6f3e48af407e5ed), [edb1e74](https://github.com/openclaw/openclaw/commit/edb1e74645ebba0b8992863a9d395d80fd10498f), [f7bad57](https://github.com/openclaw/openclaw/commit/f7bad5749b9a441a6b55d1dc34cf9ef037270960), [0602930](https://github.com/openclaw/openclaw/commit/060293056b33ff1a44dd5ab6f44ff8783d612f31), [e779b8f](https://github.com/openclaw/openclaw/commit/e779b8f1bde92173dcaeadd87853a458656dd7b3), [0400be7](https://github.com/openclaw/openclaw/commit/0400be7118c03b6e3c2330fc31d9451e5a2c0151), [851d0ad](https://github.com/openclaw/openclaw/commit/851d0ad7354321ccad43ecf5f7c04abd168da0dc), [1e0dd95](https://github.com/openclaw/openclaw/commit/1e0dd95e5d9a0bb4d62dd72ce451a9902b4eb6d3), [703e1ad](https://github.com/openclaw/openclaw/commit/703e1adadefe213c4fcc312ccb4aead7b120a3a1), [1c93e50](https://github.com/openclaw/openclaw/commit/1c93e509a36673ee8a58b0c1aa6c4b9a9a00a5e8), [37c45f2](https://github.com/openclaw/openclaw/commit/37c45f28fbbdbd768bd7fefa8d8a94274d075aa9), [8fe917b](https://github.com/openclaw/openclaw/commit/8fe917b4f7784e44dabcb6cf7b673da74bf3753e), [da21e4b](https://github.com/openclaw/openclaw/commit/da21e4b8dd47fc174cef6e3373471aba37f851e0), [f4f63b1](https://github.com/openclaw/openclaw/commit/f4f63b187041cd20fe4016ad62d85ad59b94fa66), [3e4febb](https://github.com/openclaw/openclaw/commit/3e4febbe68f82d8ee06977486a0f50ecba933452), [a82cd35](https://github.com/openclaw/openclaw/commit/a82cd35ed5405a5cca392a5272fe898264eaf107), [52323b6](https://github.com/openclaw/openclaw/commit/52323b67c5872f5c396ad2eb5e5749bfa1a63f6e).
+- Native Gateway connection, diagnostics, permissions, onboarding, Chat, and Talk guidance now uses the selected language across the translations in this release. Sources: [3b27bb4](https://github.com/openclaw/openclaw/commit/3b27bb4536a3bdc4b6bdf82fc59f878e478121d0), [e296d14](https://github.com/openclaw/openclaw/commit/e296d1447eb7b7666100e34169b0cd27b07e759c), [5516775](https://github.com/openclaw/openclaw/commit/5516775933a84f3bc88f9a485d7f53ad2d9e5928), [6ec4962](https://github.com/openclaw/openclaw/commit/6ec49620baf962ecbd2c69f0299fd98410f18a8f), [291f2a4](https://github.com/openclaw/openclaw/commit/291f2a477373c01cde9aac0f36438b9073b7677e), [7e2d41b](https://github.com/openclaw/openclaw/commit/7e2d41b94c7a11ba96abe1839819e7c63c3e6c87), [81bc96f](https://github.com/openclaw/openclaw/commit/81bc96f70f9e50fcf7cbbe014d0e6f9b10ff35d0), [574556c](https://github.com/openclaw/openclaw/commit/574556cd32d816436209d006d6744273b82a0276), [8bb44e6](https://github.com/openclaw/openclaw/commit/8bb44e60d0cf740d13663d40a780fa28705eeeed), [ae09908](https://github.com/openclaw/openclaw/commit/ae09908259e163598eea8170640255aa6d8c04ce), [42fc19d](https://github.com/openclaw/openclaw/commit/42fc19d77e93e7a41ce634c43f3317d3e123fd6a), [28bbb43](https://github.com/openclaw/openclaw/commit/28bbb439f6398a3e48fa8a88e67879290bb70ea0), [6ff9185](https://github.com/openclaw/openclaw/commit/6ff9185637fc3ab0fd1f966355fc7cfe505863e8), [4be0be6](https://github.com/openclaw/openclaw/commit/4be0be697fb95444596f9d604cf54ea4ecd12943), [0f1fbbe](https://github.com/openclaw/openclaw/commit/0f1fbbe8779dfbe317bf99de0a45aebcdadec1ea), [d893a72](https://github.com/openclaw/openclaw/commit/d893a724f6f0e91161a93a223d01057c04cd8db4), [f5cb29b](https://github.com/openclaw/openclaw/commit/f5cb29b2881edf85de14569adbfaea44b7b02056).
+- Wake Words and Discovery Logs now use current, natural labels across supported non-English native app locales. [de30d2f](https://github.com/openclaw/openclaw/commit/de30d2f5c333d49004f0771f529b578ed1af6f17)
+- Supported non-English native apps now translate workspace file browsing and sharing, image preview failures, offline status, and custom Gateway header controls. [6b99fd9](https://github.com/openclaw/openclaw/commit/6b99fd9a94ce99023c77e733efe7943e4f51c285)
+- OpenClaw's mascot now uses the same float, blink, antenna, and claw animations across web, iOS, and Android surfaces while respecting reduced-motion preferences. [851156a](https://github.com/openclaw/openclaw/commit/851156af3b35b56c56d8d20fff7fb97104d13d1a)
+
+#### Android
+
+##### Setup, navigation, and app tools
+
+- New Android users now get a guided first-run path through setup-code or QR entry, Gateway pairing, node approval, permissions, recovery steps, and confirmed phone readiness before onboarding completes. [#98752](https://github.com/openclaw/openclaw/pull/98752) Thanks @jesse-merhi.
+- Android users can open an agent-workspace shell from Settings > Terminal, with clear connection guidance and Gateway credentials passed without placing the token in the URL when supported. [fcd7eb6](https://github.com/openclaw/openclaw/commit/fcd7eb6130ed0d3de4a850bda6434f6a8b67664f)
+- Android users can sideload the official signed `OpenClaw-Android.apk` from a stable GitHub release and verify it with the published SHA-256 checksums. [#101212](https://github.com/openclaw/openclaw/pull/101212)
+- Android node reconnects now point users from a failed `devices approve` attempt to the correct `openclaw nodes approve <requestId>` command, including a reminder to reuse connection flags. [#98115](https://github.com/openclaw/openclaw/pull/98115) Thanks @welfo-beo.
+- Android SMS commands now clearly distinguish phone permission from the Gateway's separate opt-in, allowing read-only `sms.search` without also enabling `sms.send`. [#100993](https://github.com/openclaw/openclaw/pull/100993) Thanks @narcissus0702.
+- Android notification forwarding now leaves WhatsApp, Telegram, Discord, and Signal messages with their dedicated channel sessions, preventing duplicate or wrong-conversation replies while other selected apps continue to follow forwarding rules. [#101170](https://github.com/openclaw/openclaw/pull/101170)
+- Android Canvas content can no longer navigate to device-local web services, while normal remote and Gateway-hosted pages continue to work. [#99874](https://github.com/openclaw/openclaw/pull/99874) Thanks @ly85206559.
+- Android release builds no longer expose detailed `camera.clip` settings, device data, temporary paths, and recording events in production logs. [#99484](https://github.com/openclaw/openclaw/pull/99484) Thanks @nianjiuzst.
+- Android Back navigation now returns users from Gateway or Talk settings, Sessions, and Providers to the Voice, Chat, or command-palette tab where they started. [#98914](https://github.com/openclaw/openclaw/pull/98914) Thanks @lokimorty.
+- Android now presents evenly spaced bottom tabs and avoids the chat-cache startup crash that could block entry to the post-onboarding shell. [#100382](https://github.com/openclaw/openclaw/pull/100382) Thanks @iwhatsskill.
+- Android's Home overview now uses more consistent card, Talk, and recent-session spacing for a calmer, easier-to-tap first screen. [#100059](https://github.com/openclaw/openclaw/pull/100059) Thanks @iwhatsskill.
+- Android's command palette now keeps action and session rows visually aligned, with consistent icons, navigation spacing, and clean truncation for long labels. [#101072](https://github.com/openclaw/openclaw/pull/101072) Thanks @iwhatsskill.
+- Android users can open a scheduled job to inspect its timing, payload, delivery state, recent results, errors, and exact ID. [#95107](https://github.com/openclaw/openclaw/pull/95107) Thanks @tosko4.
+- The Android Files card now lets users browse the active agent workspace, preview text and images, and share output directly from their phone. [#100776](https://github.com/openclaw/openclaw/pull/100776)
+- Android users can now read bundled third-party and open-source license notices directly from Settings > Licenses. [#99299](https://github.com/openclaw/openclaw/pull/99299) Thanks @joshavant.
+- Android's About screen now clearly identifies OpenClaw and provides direct links to the website, documentation, source repository, and Discord community. [#100994](https://github.com/openclaw/openclaw/pull/100994)
+
+##### Chat and sessions
+
+- Android Chat now includes a New chat action and a `/` command browser that filters the current agent's advertised commands without dropping command arguments. [#98796](https://github.com/openclaw/openclaw/pull/98796) Thanks @iwhatsskill, @solvely-colin.
+- Android Chat now lets users choose and verify the configured agent for new messages, with Chat, Talk mode, and the home canvas staying aligned to that selection. [#80422](https://github.com/openclaw/openclaw/pull/80422) Thanks @bcperry.
+- Android chats now render links, lists, quotes, emphasis, code, and plain text consistently through the shared Markdown renderer. [#88899](https://github.com/openclaw/openclaw/pull/88899) Related [#88014](https://github.com/openclaw/openclaw/issues/88014). Thanks @iman-sharif, @pluviobyte.
+- Android chat now adds light- and dark-mode syntax highlighting to supported fenced code, making code-heavy replies easier to scan without delaying partial or oversized messages. [#100217](https://github.com/openclaw/openclaw/pull/100217)
+- Android chat now restores an active response with buffered text after reconnecting or reopening, and recovers missed event gaps without duplicating transcript rows. [#100384](https://github.com/openclaw/openclaw/pull/100384)
+- Android chat now keeps sent messages and active replies stable through reconnects, reconciling delayed history without duplicate turns or stale composer activity. [#100551](https://github.com/openclaw/openclaw/pull/100551)
+- Android chats now keep internal reasoning, tool results, and raw operational details out of both live conversations and reopened offline caches. [#100826](https://github.com/openclaw/openclaw/pull/100826) Thanks @iman-sharif.
+- Android users can long-press a completed chat message to copy all text, select an excerpt, share it, or quote it in a reply without losing their current draft. [#100879](https://github.com/openclaw/openclaw/pull/100879) Thanks @bdhwan.
+- Android chat users can preview a link's destination and summary before opening it, without messages triggering background lookups and with a clear unavailable state when inspection fails. [#100898](https://github.com/openclaw/openclaw/pull/100898)
+- Android's model picker now stays aligned with the active chat and agent, and a failed model change no longer sends the next message with the previous model. [#100985](https://github.com/openclaw/openclaw/pull/100985)
+- Android hides thinking controls for models that do not support configurable reasoning, prevents unsupported settings from breaking live or queued sends, and restores the user's preference on compatible models. [#101002](https://github.com/openclaw/openclaw/pull/101002)
+- Android users can search sessions by name, label, or key beyond the currently loaded Recent or Archived window, with cached active-session matches still available during a temporary Gateway outage. [#101102](https://github.com/openclaw/openclaw/pull/101102)
+- Android users with a physical keyboard can press Enter to send a chat message while modified Enter combinations remain available for multiline text. [#101321](https://github.com/openclaw/openclaw/pull/101321) Thanks @3ninyt3nin-creator.
+- Android users can now see safe page thumbnails in expanded link previews, while bad or blocked images quietly leave the text preview intact. [#101396](https://github.com/openclaw/openclaw/pull/101396)
+- Android users can now archive a chat session and delete it from the Archived view even with the app's bounded operator permissions. [#101522](https://github.com/openclaw/openclaw/pull/101522)
+- Android users with a hardware keyboard can now send from the chat composer with Enter, while an unaccepted send still preserves the draft. [de8db74](https://github.com/openclaw/openclaw/commit/de8db7405850146199c5f4e6e9efa0704878eea4) Thanks @vincentkoc.
+- Android users can switch the current chat's model from the composer, pin favorites, revisit recent choices, and return to the default without leaving the conversation; older pairings may need to be renewed. [#100798](https://github.com/openclaw/openclaw/pull/100798)
+- Android chat now renders top-level display LaTeX as readable equations while invalid or still-streaming math remains visible as text. [#101435](https://github.com/openclaw/openclaw/pull/101435)
+- Android's thread picker now prioritizes real conversations, hides internal setup and device sessions, and still makes valid older chats available through All. [#99557](https://github.com/openclaw/openclaw/pull/99557) Thanks @ly85206559.
+- Returning to an already loaded Android chat no longer flashes a loading screen, and the Overview recent-session list stays deduplicated and steadier during refreshes. [#100966](https://github.com/openclaw/openclaw/pull/100966) Thanks @solvely-colin.
+- Android Home's Recent Sessions section now keeps recently active rows in a stable order, collapses duplicates, and preserves labels and timestamps during partial live refreshes. [#101161](https://github.com/openclaw/openclaw/pull/101161) Thanks @solvely-colin.
+- Android physical-keyboard users can press or hold Enter to send once without leaving a stray newline, while Shift+Enter and in-progress input-method composition keep working. [#101360](https://github.com/openclaw/openclaw/pull/101360) Thanks @3ninyt3nin-creator, @joshavant.
+- Expanded Android link previews now keep thumbnail memory within a byte budget, reducing excessive memory retention during long chats. [#101560](https://github.com/openclaw/openclaw/pull/101560)
+
+##### Gateway setup and connections
+
+- Android can now keep multiple Gateways paired and switch among them without repeating setup, while each Gateway retains its own credentials, chat state, queued messages, and removable local data. [#100947](https://github.com/openclaw/openclaw/pull/100947)
+- Android Gateway actions now stop promptly when their connection closes, while requests started after reconnect are not cancelled by old cleanup. [#98067](https://github.com/openclaw/openclaw/pull/98067) Thanks @nianjiuzst.
+- Android connection recovery now identifies expired setup codes, stale credentials, and missing or invalid authentication with the appropriate next step. [#98094](https://github.com/openclaw/openclaw/pull/98094) Thanks @qingminglong.
+- Android can reconnect to the same Gateway without erasing saved access when credential fields are blank, while endpoint and setup-code changes avoid carrying stale credentials silently. [#98277](https://github.com/openclaw/openclaw/pull/98277) Thanks @solvely-colin.
+- Android now gives clearer TLS verification guidance for reachable remote and Tailnet Gateways and allows slow valid handshakes more time to show the trust prompt. [#98366](https://github.com/openclaw/openclaw/pull/98366) Related [#98365](https://github.com/openclaw/openclaw/issues/98365). Thanks @joshavant.
+- Android can now pair with local Gateways advertised by standard cleartext `.local` names while continuing to reject unsafe remote or ambiguous cleartext addresses. [#98439](https://github.com/openclaw/openclaw/pull/98439) Thanks @joshavant.
+- Scanning a valid Gateway setup QR code on Android now starts pairing immediately and advances to recovery or approval instead of leaving users on setup. [#98483](https://github.com/openclaw/openclaw/pull/98483) Thanks @joshavant.
+- Android Gateway setup now replaces a generic authentication warning with specific recovery labels for expired setup codes, missing or invalid credentials, stale saved authentication, and required device identity. [#98698](https://github.com/openclaw/openclaw/pull/98698) Related [#98046](https://github.com/openclaw/openclaw/issues/98046). Thanks @ccaprani, @masatohoshino.
+- Android gateway setup now gives specific recovery actions for expired codes, stale credentials, pending node approval, and terminal authentication failures. [#99414](https://github.com/openclaw/openclaw/pull/99414) Related [#98045](https://github.com/openclaw/openclaw/issues/98045), [#98046](https://github.com/openclaw/openclaw/issues/98046). Thanks @ccaprani.
+- Android manual Gateway setup now defaults blank ports to 18789 for ordinary TLS and cleartext hosts while retaining port 443 for Tailscale MagicDNS. [#99865](https://github.com/openclaw/openclaw/pull/99865) Thanks @ly85206559.
+- Saved Android Gateway sessions now reconnect promptly when validated internet access returns, without unnecessary retries during captive or partial network changes. [#100347](https://github.com/openclaw/openclaw/pull/100347) Thanks @ly85206559.
+- Android Gateway settings now give connection details, setup fields, and helper text more stable space on phone-sized screens, reducing clipping and crowding. [#100363](https://github.com/openclaw/openclaw/pull/100363) Thanks @iwhatsskill.
+- Android now isolates cached conversations and queued commands when users re-pair, sign out, or replace Gateway credentials, preventing a new identity from inheriting the previous one's data. [#100454](https://github.com/openclaw/openclaw/pull/100454)
+- Android onboarding now finishes after permission-triggered node approval instead of trapping users in a loop between the Permissions and approval screens. [#100959](https://github.com/openclaw/openclaw/pull/100959)
+- Android users can now connect to Gateways behind Cloudflare Access or another authenticating reverse proxy by saving the required credential headers in Advanced manual-connection settings. [#100765](https://github.com/openclaw/openclaw/pull/100765)
+- When Android Chat cannot reach the Gateway, users can open Gateway Settings or copy connection diagnostics directly from the blocked screen. [#94566](https://github.com/openclaw/openclaw/pull/94566) Thanks @tosko4.
+- Android manual Gateway setup now accepts IPv6 hosts such as `::1` directly instead of rejecting an address that works only when entered as a bracketed WebSocket URL. [#99107](https://github.com/openclaw/openclaw/pull/99107) Thanks @ly85206559.
+- Android manual setup now accepts and preserves complete `ws://`, `wss://`, and HTTP Gateway addresses, including embedded ports, so private-LAN onboarding reaches the intended server. [#99110](https://github.com/openclaw/openclaw/pull/99110) Related [#87216](https://github.com/openclaw/openclaw/issues/87216). Thanks @cursoragent, @ly85206559, @ruben2000de.
+- Android setup now rejects gateway URLs with unsupported IPv6 interface zones and directs users to an unscoped address or LAN hostname before saving. [#99570](https://github.com/openclaw/openclaw/pull/99570) Thanks @ly85206559.
+- Android now preserves specific Gateway and A2UI error codes containing numbers, such as `A2UI_HOST_UNAVAILABLE`, instead of replacing them with a generic failure. [#99591](https://github.com/openclaw/openclaw/pull/99591) Thanks @ly85206559.
+- Android Gateway settings now show both setup actions as full-width buttons, keeping `Pair New Gateway` readable and easy to tap. [#100090](https://github.com/openclaw/openclaw/pull/100090) Thanks @iwhatsskill.
+- The Android app now respects a user's disconnect, connect, or gateway-switch choice during startup and reports final disconnect failures to fire-and-forget callers. [#101799](https://github.com/openclaw/openclaw/pull/101799)
+
+##### Voice and Talk
+
+- Android users can record and send a voice note of up to three minutes from the chat composer without entering live Talk mode. [#101193](https://github.com/openclaw/openclaw/pull/101193)
+- Android background push-to-talk requests now return `NODE_BACKGROUND_UNAVAILABLE` instead of attempting a microphone start that the operating system may reject. [#98055](https://github.com/openclaw/openclaw/pull/98055) Thanks @nianjiuzst.
+- Android now reports Realtime Talk and Dictation readiness separately, opens setup only for the mode that needs it, and keeps useful provider failure details visible. [#98269](https://github.com/openclaw/openclaw/pull/98269) Related [#98268](https://github.com/openclaw/openclaw/issues/98268). Thanks @solvely-colin.
+- Android Talk and Dictation now use a connected Bluetooth headset microphone for hands-free capture and fall back cleanly when it disconnects. [#99259](https://github.com/openclaw/openclaw/pull/99259) Related [#96241](https://github.com/openclaw/openclaw/issues/96241). Thanks @gwtaylor.
+- Android push-to-talk now takes exclusive microphone control during Talk Mode and resumes the correct realtime listener afterward, preventing duplicate capture. [#99986](https://github.com/openclaw/openclaw/pull/99986) Thanks @nianjiuzst.
+- Android push-to-talk now cleans up backgrounded, cancelled, or retried captures without reopening the microphone or stopping a newer voice session, and overlapping requests return busy. [#100552](https://github.com/openclaw/openclaw/pull/100552) Thanks @xialonglee.
+- Android users can now long-press an assistant reply and choose Listen, with visible playback status, tap-to-stop, and on-device speech fallback. [#100772](https://github.com/openclaw/openclaw/pull/100772)
+- Android Talk Mode now keeps push-to-talk busy until the active turn is safely handed off, preventing overlapping microphones, stale playback, or the wrong relay resuming. [#100786](https://github.com/openclaw/openclaw/pull/100786)
+- Android voice features now speak only chat events explicitly identified as assistant replies, preventing user, tool, system, or role-less text from being read aloud. [#99123](https://github.com/openclaw/openclaw/pull/99123) Thanks @ly85206559.
+- Android Talk now applies supported directive values even when generated or dictated JSON uses different capitalization for keys such as `Voice` or `Language_Code`. [#99592](https://github.com/openclaw/openclaw/pull/99592) Thanks @ly85206559.
+- Android Talk Mode now delivers agent-consult answers even when realtime completion events arrive out of order, preventing sessions from remaining stuck on `Thinking...`. [#100049](https://github.com/openclaw/openclaw/pull/100049) Thanks @qingminglong.
+- Android Voice and Talk setup text now truncates cleanly on narrow screens and at larger accessibility font sizes instead of appearing clipped. [#100060](https://github.com/openclaw/openclaw/pull/100060) Thanks @iwhatsskill, @solvely-colin.
+- The Android Voice tab now gives Realtime Talk and Dictation text and controls enough room to remain readable on phones and at larger font sizes. [#100491](https://github.com/openclaw/openclaw/pull/100491) Thanks @iwhatsskill.
+
+##### Device permissions, notifications, and capture
+
+- Third-party Android builds can allow Gateway-requested location checks while the app is in the background by selecting Location > Always and granting Android's persistent location permission. [#100967](https://github.com/openclaw/openclaw/pull/100967) Thanks @ioridev.
+- Android notification automations now queue accepted events during Gateway connection or reconnection and deliver them in order once the link is ready. [#92602](https://github.com/openclaw/openclaw/pull/92602) Related [#79552](https://github.com/openclaw/openclaw/issues/79552). Thanks @ashishpatel26, @hectorrp13.
+- Android one-shot camera captures now turn the camera and privacy indicator off promptly after success, failure, or cancellation. [#98040](https://github.com/openclaw/openclaw/pull/98040) Thanks @nianjiuzst.
+- Android's selected-photos permission now counts as usable access, allowing `photos.latest` while clearly showing how to manage the limited selection. [#98059](https://github.com/openclaw/openclaw/pull/98059) Thanks @nianjiuzst.
+- Android onboarding now marks Contacts and Calendar ready only after both read and write access are available, including when those permissions arrive in separate prompts. [#99158](https://github.com/openclaw/openclaw/pull/99158) Thanks @nianjiuzst.
+- Android now reports Contacts and Calendar access as granted only when both reading and adding entries are authorized, preventing misleading setup results. [#99204](https://github.com/openclaw/openclaw/pull/99204) Thanks @nianjiuzst.
+- The Android companion no longer forwards OpenClaw's own notifications back to the Gateway, even when older allowlists still include the app package. [#99568](https://github.com/openclaw/openclaw/pull/99568) Thanks @ly85206559.
+- Android third-party onboarding now recognizes SMS access when send and read permissions are granted in separate prompts, while genuinely missing permissions remain unauthorized. [#99147](https://github.com/openclaw/openclaw/pull/99147) Thanks @nianjiuzst.
+- Cancelled, timed-out, failed, or interrupted Android `camera.clip` requests now release the camera and remove unfinished temporary files before later camera commands run. [#99153](https://github.com/openclaw/openclaw/pull/99153) Thanks @nianjiuzst.
+- Android node commands now honor common boolean values such as `yes`, `no`, `1`, and `0` for app filters and camera audio options. [#99873](https://github.com/openclaw/openclaw/pull/99873) Thanks @ly85206559.
+- Tapping an Android notification created by `system.notify` now brings OpenClaw to the foreground. [#100888](https://github.com/openclaw/openclaw/pull/100888)
+
+##### Localization
+
+- Android's "New chat in worktree" action is now translated across supported non-English locales instead of appearing with a missing resource. [#100805](https://github.com/openclaw/openclaw/pull/100805) Thanks @amknight.
+- Android users in supported languages now see key Gateway setup, connection, trust, shell, and recovery prompts in their device language. [#97111](https://github.com/openclaw/openclaw/pull/97111) Thanks @vincentkoc.
+- Indonesian Android strings ship under Android's recognized locale; the same prior-release work also prepared the 2026.6.11 Play version and store text. [3412318](https://github.com/openclaw/openclaw/commit/341231831b706df0024d2d9e2096438e3581b5af) Thanks @joshavant.
+- Traditional Chinese users now see localized wording for common native app actions, permissions, connection messages, and mobile states. [f0d2066](https://github.com/openclaw/openclaw/commit/f0d2066787f172079c19f26b72f49ad3950ceea6)
+- Android now explains in the selected language how to keep a saved token or replace an existing Gateway setup. Sources: [32f3eb3](https://github.com/openclaw/openclaw/commit/32f3eb3fa805e776f562ea1af6f7731bf4ce8b48), [6336762](https://github.com/openclaw/openclaw/commit/6336762b68e5cebd44acbda527ba1d964448355a), [eeb0682](https://github.com/openclaw/openclaw/commit/eeb0682409b86dcd956ffe30e45f12c6424d8c05), [ed72b86](https://github.com/openclaw/openclaw/commit/ed72b860a436eb187c9fa2fb4ef91ecb13180760), [e376f28](https://github.com/openclaw/openclaw/commit/e376f285e87bfa07bf3111b446b9e44fcba6cd9e), [a6631fe](https://github.com/openclaw/openclaw/commit/a6631fee6d465b30e116038d8e6e8aa1f041019c), [283bd82](https://github.com/openclaw/openclaw/commit/283bd82eb414f0ba968157aec77eac7701e7ae1e), [6d5a1db](https://github.com/openclaw/openclaw/commit/6d5a1db04859adbf8860376ddbd5ce1b5d5f3efa), [d3087fc](https://github.com/openclaw/openclaw/commit/d3087fcf375c81b81ffb0cf7b65764559b6e836f), [8bab3f7](https://github.com/openclaw/openclaw/commit/8bab3f7dbd8364de93422d064c00c7171139ccf4), [dfb7bc8](https://github.com/openclaw/openclaw/commit/dfb7bc84d8194177988d2870fe17b963912a1c52), [7780e30](https://github.com/openclaw/openclaw/commit/7780e3062dcb547227d90cbd02111910e00e3f6f), [b109b88](https://github.com/openclaw/openclaw/commit/b109b88b5785b22fea0fe20f06b314dbda156d58), [c1b7bf2](https://github.com/openclaw/openclaw/commit/c1b7bf23bc16d641e966ff4de7cbb8b2becfaddc), [dedb17c](https://github.com/openclaw/openclaw/commit/dedb17ceff3c93c938aaff5c3f697d70d06e9dd1), [6f84c10](https://github.com/openclaw/openclaw/commit/6f84c10bdae1f73b112777c9a94d5933171d4b75), [a8358e8](https://github.com/openclaw/openclaw/commit/a8358e8848c8228893a259b36cd6f54139fa18da), [2501ca3](https://github.com/openclaw/openclaw/commit/2501ca340945072642b9bb2ec1348a15de83d4b6), [1b40eb9](https://github.com/openclaw/openclaw/commit/1b40eb9e6a2feb0c436948fbcd113424e85db01e), [d47308f](https://github.com/openclaw/openclaw/commit/d47308f8008ca08c7df983d3932c63d4ede4060c), [3a2baef](https://github.com/openclaw/openclaw/commit/3a2baef0bfc62b0d37b4f7648869e57fabaa3cb3).
+- Android pairing and connection failures now provide localized next steps for expired codes, credentials, approvals, and retries. Sources: [48eae1b](https://github.com/openclaw/openclaw/commit/48eae1b8c96d9e8873ba59ccc6e2493fa847c27e), [f095eb9](https://github.com/openclaw/openclaw/commit/f095eb9fd989020ad1bdd57a57702ce899f98607), [714c2b0](https://github.com/openclaw/openclaw/commit/714c2b07bdf715055205b550018d289e4fb06948), [d2b5bb7](https://github.com/openclaw/openclaw/commit/d2b5bb72e8e3b61dac5ddc7085fb0b5dfe53a18c), [d2551bd](https://github.com/openclaw/openclaw/commit/d2551bdd3cf53973d679a47f3e753fc0d75f3edb), [6b91507](https://github.com/openclaw/openclaw/commit/6b915072208b121055000ef1d3a36578eac4da2e), [f1c4476](https://github.com/openclaw/openclaw/commit/f1c44762771edb9fe2124a15c871dc466b215c43), [5ef6fb4](https://github.com/openclaw/openclaw/commit/5ef6fb4d7cd053e1caa0d1caf27ff93f7bb3311c), [e2e0312](https://github.com/openclaw/openclaw/commit/e2e03127240c1878b3ea6a336fd91bd995a2be83), [7fb70b2](https://github.com/openclaw/openclaw/commit/7fb70b235d1d7d4ece6519b27f2d65d51999272c), [d702f5c](https://github.com/openclaw/openclaw/commit/d702f5c6e6c4f1463c82c4f74d96765b316f76bf), [24e6b9f](https://github.com/openclaw/openclaw/commit/24e6b9fbe1b9449b837fecddf1f9b160ed7bb896), [7cb41cc](https://github.com/openclaw/openclaw/commit/7cb41ccc63f51208630426e08ceef65e78b02bf9), [a6040c3](https://github.com/openclaw/openclaw/commit/a6040c3560c18005b58aed73a687b8c0d06b7d6b), [5e61da3](https://github.com/openclaw/openclaw/commit/5e61da3deb190b16899157ace98aa520b424e085), [18360ac](https://github.com/openclaw/openclaw/commit/18360ac668f82631f61cf48d0816800385f4cf05), [17a1e3b](https://github.com/openclaw/openclaw/commit/17a1e3bbb2b8de1da6569fe4f46a4ea4138c56e6), [adafb56](https://github.com/openclaw/openclaw/commit/adafb56b2eb9207d93896ebf6c5faa9205875833), [5b5fadb](https://github.com/openclaw/openclaw/commit/5b5fadbf0d17c1fddb13d891037767beb64aa144), [9b30570](https://github.com/openclaw/openclaw/commit/9b30570a935ecdae8ee0e2bc45a42ffdd7223948), [d331a36](https://github.com/openclaw/openclaw/commit/d331a36250f8ebb29bda2ae8fa480a2aa5e15193).
+- Android Gateway discovery, QR and manual setup, connection checks, approvals, and permission guidance now use the selected language across the translations in this release. Sources: [28062c8](https://github.com/openclaw/openclaw/commit/28062c868c03e1e6876013d450c8f92bf1fc2faf), [3d43858](https://github.com/openclaw/openclaw/commit/3d438588c5eb0497bdb2fbccf9d6f6cd325d0ec5), [ad74b32](https://github.com/openclaw/openclaw/commit/ad74b322ba80178c1c0f68348a55d5d3e65e64ae), [1b07620](https://github.com/openclaw/openclaw/commit/1b076209c4d2ea37a7178b50f5ba5c54b5753c2b), [4fa4c9e](https://github.com/openclaw/openclaw/commit/4fa4c9e06e39e095a7373390240b3a5a5cf1be79), [1dd5230](https://github.com/openclaw/openclaw/commit/1dd52307fcd74bc25ea31800a4c551bc415f7645), [9db7ec5](https://github.com/openclaw/openclaw/commit/9db7ec5edd62e3f05758a28a6c6acb14f6889ea5), [e6f8788](https://github.com/openclaw/openclaw/commit/e6f8788bf5569e87e9df0d3e404eaef5f86184ab), [e5cf67e](https://github.com/openclaw/openclaw/commit/e5cf67ea1d73d9724a227000eadead902fa606a9), [b52d988](https://github.com/openclaw/openclaw/commit/b52d98861e8c14f30dc459c395fd60281fa99604), [cd3b4ee](https://github.com/openclaw/openclaw/commit/cd3b4eee7d104d266d8514afea2ae53eea435e9d), [c3bcb9f](https://github.com/openclaw/openclaw/commit/c3bcb9fa21ec5f1b98bdb89940e93707b8f9a3e1), [8af3aa0](https://github.com/openclaw/openclaw/commit/8af3aa0b1bfa3f5d2950b053a8d7d2568cbbea31), [c34e79e](https://github.com/openclaw/openclaw/commit/c34e79e7299b19267000a79bb94bcae9608f93a1), [c9c8f6c](https://github.com/openclaw/openclaw/commit/c9c8f6c9f6a9ebf337ff486c15b9cc4d43904ffe), [255e251](https://github.com/openclaw/openclaw/commit/255e2518de492d518cde78617f6c5b220bb1278d), [0e98ba4](https://github.com/openclaw/openclaw/commit/0e98ba4391dddfa9bcd48a978b5cd1df8ae03411), [0cc9927](https://github.com/openclaw/openclaw/commit/0cc9927577c6663a5839a4d2ad3e5708df04157a), [97955d9](https://github.com/openclaw/openclaw/commit/97955d969d83a158a70c23912703e92b69b0883a), [ba449f2](https://github.com/openclaw/openclaw/commit/ba449f240d4e437752be44bef76e93c177454ca4), [0e22e54](https://github.com/openclaw/openclaw/commit/0e22e54431f5740b65ddbfcc307bd6b3c1f43eea), [ae65251](https://github.com/openclaw/openclaw/commit/ae65251fdf5ebfa7213a7d36f64a5bbb8883eb4c), [d957f5a](https://github.com/openclaw/openclaw/commit/d957f5a7900e134b514915cee07c45bb0c2a54be).
+- Android now explains in the selected language when a scoped IPv6 address must be replaced with an unscoped address or LAN hostname. Sources: [5793f73](https://github.com/openclaw/openclaw/commit/5793f731f54f1de387a49e014a632517450f75a2), [066e697](https://github.com/openclaw/openclaw/commit/066e6973b084c62717a2e9ac99b84e99459597b7), [bf35947](https://github.com/openclaw/openclaw/commit/bf35947eb2695740e61cdd180fde44b4308ba472), [3385817](https://github.com/openclaw/openclaw/commit/3385817658496c88166f16cdbcbb0dbd3b8419b5), [a0a5054](https://github.com/openclaw/openclaw/commit/a0a5054b93bf842ff4dd281dac2617129dd9900c), [66cb9a9](https://github.com/openclaw/openclaw/commit/66cb9a99b1d9c30589fcc9b42144c95322bd30ab), [3da73a7](https://github.com/openclaw/openclaw/commit/3da73a77fe51060659a3ad69018a65e19cf21837), [df659ec](https://github.com/openclaw/openclaw/commit/df659eca87253824b5eccaa1939fa38877a87e7e), [57a3975](https://github.com/openclaw/openclaw/commit/57a3975ce14062de887707e38ab580b20ff39421), [141b2cf](https://github.com/openclaw/openclaw/commit/141b2cf4d10cb33a487e62c7e304aba88b135da1), [b043adf](https://github.com/openclaw/openclaw/commit/b043adf192bb64e8ff64bbf6b9631e30a4446f1e), [dcc4fa8](https://github.com/openclaw/openclaw/commit/dcc4fa874683a59f86656be19adfc05b688cc3ea), [eade8f1](https://github.com/openclaw/openclaw/commit/eade8f1c1a142eefa47a2657ef77a352944506cc), [72a8098](https://github.com/openclaw/openclaw/commit/72a809840890575654f7d293631965af0541f9e9), [355fa77](https://github.com/openclaw/openclaw/commit/355fa773f8ac13c433eea42f4e575c895b224863), [8cc1786](https://github.com/openclaw/openclaw/commit/8cc1786f495af1c7c55ac5f2b145ff7df25853dd), [a3ef37b](https://github.com/openclaw/openclaw/commit/a3ef37b991533671eae13ddbd25324bc5f9c4749), [cb9ac50](https://github.com/openclaw/openclaw/commit/cb9ac50f5bc7f8148eeacbf8b921ebaa3bab6680), [cab8147](https://github.com/openclaw/openclaw/commit/cab81470d96126ef92614ba38468e94964429c20), [7cc3cb0](https://github.com/openclaw/openclaw/commit/7cc3cb0d28c807871b2e997a996f4c920fc0b7ae), [ca258fb](https://github.com/openclaw/openclaw/commit/ca258fb9452d6dac7344530fafbcf2939238d9a4).
+- Android license notices, acknowledgements, empty states, and open-license actions now use the selected language across the translations in this release. Sources: [4b8b60f](https://github.com/openclaw/openclaw/commit/4b8b60f8abc1ae99228fe31bedd31977064062d1), [3b16c41](https://github.com/openclaw/openclaw/commit/3b16c41daa8237f481c2b8061b0f6e00817ffbca), [c4966e8](https://github.com/openclaw/openclaw/commit/c4966e86cbc9403177ccb725d5d1cb87c519b853), [116e9db](https://github.com/openclaw/openclaw/commit/116e9db2a18d5341b5e44844dfefa938fa467e6a), [1617233](https://github.com/openclaw/openclaw/commit/1617233ff141c913def1675aaee33bac3590b1f6), [a598c97](https://github.com/openclaw/openclaw/commit/a598c976d01db50adc35de495a981635c6a38cd4), [3b9e0c8](https://github.com/openclaw/openclaw/commit/3b9e0c86828e0d8f45acafd2908b82191ecfd13f), [eebbf6c](https://github.com/openclaw/openclaw/commit/eebbf6cba5fef565044e556b862f3ce09db2fd86), [4c08ea4](https://github.com/openclaw/openclaw/commit/4c08ea403ad9436d9a8cf0dd02799a441a1bc4db), [21be45c](https://github.com/openclaw/openclaw/commit/21be45c17e845e4027f7a044d2c009423bcd07b7), [b415072](https://github.com/openclaw/openclaw/commit/b415072a2e6a900f382d7e68594b4511bd1a0c5b), [9eec24d](https://github.com/openclaw/openclaw/commit/9eec24df6710308e7a66a7a80bc232f7ee024900), [de23987](https://github.com/openclaw/openclaw/commit/de23987f13b95d71a145218b11f36857a8eefc2c), [898564e](https://github.com/openclaw/openclaw/commit/898564e71aef7abe66112d757eee8db83eaf04d2), [7af800b](https://github.com/openclaw/openclaw/commit/7af800b5be960b595829642b412fce2842017cfc), [a47ec8d](https://github.com/openclaw/openclaw/commit/a47ec8d303e46642d81c8c231786fb0b2fd51045), [fac9e58](https://github.com/openclaw/openclaw/commit/fac9e586685666a9f8159f5132fb18ad2bc37210), [61e4ef0](https://github.com/openclaw/openclaw/commit/61e4ef08f483e9e32eaa6edf6fb391185e462394), [399f9d6](https://github.com/openclaw/openclaw/commit/399f9d696171ec14eafa1d5de64533d2b9670819), [9069f69](https://github.com/openclaw/openclaw/commit/9069f696986ed970565989efacb27024160dbad2), [2e049f5](https://github.com/openclaw/openclaw/commit/2e049f509fad1ba2889186e457e630bad50d7a16).
+- Android Talk, dictation, speech-provider setup, readiness, and failure guidance now use the selected language across the translations in this release. Sources: [c785196](https://github.com/openclaw/openclaw/commit/c785196287d0e929396def1fc0929af672bdc7cf), [9edb906](https://github.com/openclaw/openclaw/commit/9edb9065a8596f8473bea1ae4a626da8f0508724), [da67520](https://github.com/openclaw/openclaw/commit/da67520b8d5fc49775005638425ca2d9317d6ee7), [88f13ca](https://github.com/openclaw/openclaw/commit/88f13cab62999abe7c2650ccd32d55e72ee80046), [e878efe](https://github.com/openclaw/openclaw/commit/e878efe9508edd88166a09eb5a1e503ab405aad9), [662d127](https://github.com/openclaw/openclaw/commit/662d127f60b91aaaec4b5363c73bd00855d9e3f0), [5002a0e](https://github.com/openclaw/openclaw/commit/5002a0e9ea9970e4e270ec029c994dc217549687), [fe57718](https://github.com/openclaw/openclaw/commit/fe57718b419a08a5306e3d195519d3527a07f936), [ebcf8dc](https://github.com/openclaw/openclaw/commit/ebcf8dcaf7120bfdc01d0b83c595895355944b5b), [4e7ca8e](https://github.com/openclaw/openclaw/commit/4e7ca8e6c6afe672da1a40922e67f94e005f9e8b), [9863ceb](https://github.com/openclaw/openclaw/commit/9863cebef12bf2e7b1414ac5f64bc3277a7ca28b), [768da09](https://github.com/openclaw/openclaw/commit/768da09ceb157a1bfd4dd309b8566a2b9ce7668d), [ff5d986](https://github.com/openclaw/openclaw/commit/ff5d98681f7e38043bbc33a87fade6069da9795c), [005ebd1](https://github.com/openclaw/openclaw/commit/005ebd108f4d6ebd663c8cf996634aeaf3e82287), [2824796](https://github.com/openclaw/openclaw/commit/28247960130f88b6ac01d8a392d54d0996212c1a), [4eaec93](https://github.com/openclaw/openclaw/commit/4eaec934e83d0bc4f0d595c37e06356c5b54dc2a), [f99fdc9](https://github.com/openclaw/openclaw/commit/f99fdc9403b49b59a42c8d3522368d64b9168498), [555f601](https://github.com/openclaw/openclaw/commit/555f601230c075185f362c71db518096c3818998), [d2af689](https://github.com/openclaw/openclaw/commit/d2af68965a0cdb3a1ed91c2d1ba8aedd76dcb3ac), [81e92de](https://github.com/openclaw/openclaw/commit/81e92deb089b54ccedbe0c9593b492f6f09b989d), [8ed6c78](https://github.com/openclaw/openclaw/commit/8ed6c78b7891b12fee2b378d79e6888764455486).
+- Android command search and New Chat labels now use the selected language across the translations in this release. Sources: [b81c58b](https://github.com/openclaw/openclaw/commit/b81c58bdf6a07894231bc3afcab9a6b12b175bf8), [8929118](https://github.com/openclaw/openclaw/commit/8929118353fce0b8ac8189a95fd4534b39e85903), [1eee853](https://github.com/openclaw/openclaw/commit/1eee853c71e1ddd5c632e49f1e75b18c0837add7), [a5c9662](https://github.com/openclaw/openclaw/commit/a5c9662cd17746a35adf350f55b3f6b7c6cae78c), [9035729](https://github.com/openclaw/openclaw/commit/9035729528a9ae0ed4922728c94fd025cfdd8ea6), [2e359d4](https://github.com/openclaw/openclaw/commit/2e359d49951bf8c786e4c018ef59858743e80386), [91f4d0a](https://github.com/openclaw/openclaw/commit/91f4d0ae25ae86f76cccaac709b84d87990c7ca1), [e785c4a](https://github.com/openclaw/openclaw/commit/e785c4a8f7025ee7a529816a50207c0f925e3a93), [2c5a076](https://github.com/openclaw/openclaw/commit/2c5a07661c153bced0feb10f34e74811f2920831), [02250d9](https://github.com/openclaw/openclaw/commit/02250d957fed2a1e05baac4b33b7315603002732), [bf23194](https://github.com/openclaw/openclaw/commit/bf23194888b626ec4318955d4305197c1c9c4a88), [603502f](https://github.com/openclaw/openclaw/commit/603502f60f54bf9c0e0b7bd8b200ac0a4cc0d5e5), [a837a1a](https://github.com/openclaw/openclaw/commit/a837a1ac6c00c3e71471bcf4ff451b9cecf02f69), [26df1fa](https://github.com/openclaw/openclaw/commit/26df1fa7bca40fbb24f199593ae4bd4de74b2302), [c926610](https://github.com/openclaw/openclaw/commit/c9266107d6c65489b75ae412fe9484d2eca347c6), [c312f9f](https://github.com/openclaw/openclaw/commit/c312f9f0e059b838f4afdbf20f2f1bd8b938ba13), [f4275fa](https://github.com/openclaw/openclaw/commit/f4275fa00b8f89055a8b3a8b23740153750e97af), [69d4657](https://github.com/openclaw/openclaw/commit/69d4657bdb2da553641e34f1b7f85223cfb8c660), [3e66eb9](https://github.com/openclaw/openclaw/commit/3e66eb9de863d333d9f7b7951d2b63eac857df07), [db5057e](https://github.com/openclaw/openclaw/commit/db5057edf935d85b6324bd725506424f2554fc89), [1fee4a5](https://github.com/openclaw/openclaw/commit/1fee4a5daf57a864cd730b9dc2f0bcb19d90c5d8).
+- Supported non-English Android builds now localize offline Gateway queue guidance and the Retry and Delete actions for text messages. [660d752](https://github.com/openclaw/openclaw/commit/660d752b348f740f130610571101db1f0e3ebb53)
+- Supported non-English Android builds now translate more cron inspection, delivery error, copy feedback, default-state, and agent request details. [d83ee4c](https://github.com/openclaw/openclaw/commit/d83ee4c44f9562c4e73fb571016624cf54b538d7)
+- Android model organization, default-model, and pinning controls now use the selected language. Sources: [41bea62](https://github.com/openclaw/openclaw/commit/41bea62b4a28fab24edff319c7cd8807c494cd53), [bdc98f4](https://github.com/openclaw/openclaw/commit/bdc98f482a1ab6f86766041d8c48a16dddde5a96).
+- Android link-preview controls and status messages now appear in the selected language across refreshed locales. [9997c53](https://github.com/openclaw/openclaw/commit/9997c534b8ebd82fb8db0e9a944e75e594facb2d)
+- The Android background-location explanation, settings action, and Not Now choice now appear in the selected language when Always location mode is offered. [4c38d89](https://github.com/openclaw/openclaw/commit/4c38d89c0c948b215dd00603db68a80029364c37)
+
+#### iOS and Apple Watch
+
+##### Navigation, settings, and app information
+
+- Opening Control -> Terminal on iOS now goes directly to the terminal without briefly showing the general Web UI login screen during connection. [#100727](https://github.com/openclaw/openclaw/pull/100727)
+- iOS users can open Terminal directly from the Control hub, see a Gateway setup prompt when disconnected, and keep active shell sessions running through unrelated screen updates. [211e0d7](https://github.com/openclaw/openclaw/commit/211e0d7263c188ef8cbc5956808306b37bbfccc0)
+- The iOS Control, Chat, Talk, Agent, Settings, Gateway, and Overview screens now use clearer navigation, status cues, controls, and a compact expanding chat composer. [#98452](https://github.com/openclaw/openclaw/pull/98452) Thanks @joelnishanth.
+- The iOS Control, Agents, and Settings screens are now easier to scan, with fewer duplicate destinations, more compact controls, standard navigation, and a direct Gateway shortcut from detail views. [#98811](https://github.com/openclaw/openclaw/pull/98811) Related [#98803](https://github.com/openclaw/openclaw/issues/98803).
+- Chat, Talk, Settings, navigation, and onboarding on iPhone and iPad now use more consistent native controls, appearance, and back behavior. [#99231](https://github.com/openclaw/openclaw/pull/99231) Related [#99195](https://github.com/openclaw/openclaw/issues/99195). Thanks @marvkr.
+- On iPad, selecting Overview, Chat, Talk, or another sidebar destination now leaves the current Settings detail and opens the requested screen. [#94991](https://github.com/openclaw/openclaw/pull/94991) Thanks @solvely-colin.
+- The iOS app now opens to Chat for normal launches while preserving direct navigation to Control, Settings, Agent, Talk, and nested destinations. [#98353](https://github.com/openclaw/openclaw/pull/98353) Thanks @bsniznd.
+- iOS Control, Talk, and Settings are easier to scan with clearer status emphasis, safer action styling, calmer idle visuals, and improved large-text support. [#98423](https://github.com/openclaw/openclaw/pull/98423) Related [#98397](https://github.com/openclaw/openclaw/issues/98397).
+- iOS connection, warning, and information text is now easier to read in light and dark modes, and Appearance settings accurately describe the selected behavior. [#98443](https://github.com/openclaw/openclaw/pull/98443) Related [#98440](https://github.com/openclaw/openclaw/issues/98440).
+- iOS users who open Gateway, Voice, or Notifications settings from another screen now return to the Chat, Talk, Agent, Control, or Approvals screen they came from. [#98898](https://github.com/openclaw/openclaw/pull/98898) Thanks @lokimorty.
+- The iOS app now applies OpenClaw's palette consistently across Talk, settings, Gateway, privacy, usage, and workboard views while retaining accessible contrast. [#98930](https://github.com/openclaw/openclaw/pull/98930) Thanks @joelnishanth.
+- iPhone users who open Chat from a Control detail can now return to that same Overview, Activity, Workboard, or Sessions screen without losing their place. [#99245](https://github.com/openclaw/openclaw/pull/99245) Thanks @solvely-colin.
+- iOS users can now read OpenClaw's bundled third-party license acknowledgements from Settings > Licenses. [#99290](https://github.com/openclaw/openclaw/pull/99290) Thanks @joshavant.
+- On iOS 26, affected Settings switches now respond when users tap anywhere on the labeled row, with accessibility labels and values preserved. [#99888](https://github.com/openclaw/openclaw/pull/99888) Thanks @ly85206559.
+- Talk and Settings rows on iOS now use consistent title sizing and typography, making adjacent options easier to scan. [#100515](https://github.com/openclaw/openclaw/pull/100515)
+- The iOS About screen now presents OpenClaw branding, license information, and direct links to the website, documentation, GitHub repository, and Discord community. [#100531](https://github.com/openclaw/openclaw/pull/100531)
+- Equivalent rows in the iPhone Control and Settings tabs now use the same rounded icon treatment, making both lists easier to scan. [#98936](https://github.com/openclaw/openclaw/pull/98936) Related [#98916](https://github.com/openclaw/openclaw/issues/98916). Thanks @sahilsatralkar.
+- The iOS About screen now shows a concise app, device-family, and iOS summary without duplicated identity or a raw hardware identifier. [#98985](https://github.com/openclaw/openclaw/pull/98985) Related [#98943](https://github.com/openclaw/openclaw/issues/98943). Thanks @sahilsatralkar.
+- The iOS appearance setting now sits in the normal Settings list, shows the current System, Light, or Dark choice at a glance, and behaves consistently on iPad. [#99052](https://github.com/openclaw/openclaw/pull/99052) Related [#98995](https://github.com/openclaw/openclaw/issues/98995). Thanks @sahilsatralkar.
+- The iPhone Control destination list is now denser and easier to scan without changing navigation or status information. [#99468](https://github.com/openclaw/openclaw/pull/99468) Related [#99439](https://github.com/openclaw/openclaw/issues/99439). Thanks @sahilsatralkar.
+- Already-paired iPhone users now return to Chat, Talk, and Settings instead of being trapped in setup when older onboarding flags are stale. [#101481](https://github.com/openclaw/openclaw/pull/101481)
+
+##### Chat and sessions
+
+- Images shared from iOS or through node `agent.request` now remain attached to the correct conversation turn after history reload, so later messages can still use them. [#86936](https://github.com/openclaw/openclaw/pull/86936) Thanks @peterdsp.
+- iPhone and iPad users can now browse an agent workspace, preview generated files, logs, and configuration, and share a file without returning to the host computer. [#100767](https://github.com/openclaw/openclaw/pull/100767)
+- Native iOS Chat now follows Larger Text and Dynamic Type settings for messages, the intro, and composer text with less clipping. [#97552](https://github.com/openclaw/openclaw/pull/97552) Thanks @jmcte.
+- Native iOS Chat now gives the conversation more room, uses a compact composer that grows with longer drafts, and keeps attachment, Talk, and send controls comfortably tappable. [#98953](https://github.com/openclaw/openclaw/pull/98953) Related [#98929](https://github.com/openclaw/openclaw/issues/98929).
+- iOS Chat now keeps one final assistant reply per turn instead of briefly showing a duplicate that disappears after history refreshes. [#98117](https://github.com/openclaw/openclaw/pull/98117) Related [#98116](https://github.com/openclaw/openclaw/issues/98116). Thanks @joshavant, @ooiuuii.
+- iOS Chat now preserves intentional line breaks in assistant responses and other multiline messages without disrupting normal Markdown rendering. [#98304](https://github.com/openclaw/openclaw/pull/98304) Related [#98028](https://github.com/openclaw/openclaw/issues/98028). Thanks @jabato01, @joshavant.
+- The iOS chat experience now offers useful starting prompts, clearer pairing and setup actions, better agent placeholders, and steadier message ordering during refreshes. [#99243](https://github.com/openclaw/openclaw/pull/99243) Thanks @jcooley8.
+- iOS chat now lets users browse, filter, and select available commands and skills from the composer instead of memorizing exact slash commands. [#99426](https://github.com/openclaw/openclaw/pull/99426) Thanks @solvely-colin, @viczhang6.
+- iOS chat now provides tactile feedback for accepted sends and most completed or failed runs, though some abort paths may still omit or misclassify failure feedback. [#100416](https://github.com/openclaw/openclaw/pull/100416)
+- iOS users can export the current conversation as a named, readable Markdown file and save or send it through the system share sheet. [#100417](https://github.com/openclaw/openclaw/pull/100417)
+- Offline iOS messages now survive relaunch, remain tied to their original Gateway and conversation, and send once only when delivery can be confirmed, with clear uncertain-delivery status when it cannot. [#100942](https://github.com/openclaw/openclaw/pull/100942)
+- Tapping the iPhone status bar now leaves the chat at the top for reading older messages until the user chooses Jump to latest. [#100502](https://github.com/openclaw/openclaw/pull/100502)
+
+##### Voice, Talk, and Apple Watch
+
+- Translated Gateway controls on iOS and approval actions on Apple Watch no longer fall back to English in supported locales. [#97112](https://github.com/openclaw/openclaw/pull/97112) Thanks @vincentkoc.
+- iOS voice notes now stay with the intended chat and recover more reliably across offline queues, app recreation, uncertain sends, and competing microphone use. [#101236](https://github.com/openclaw/openclaw/pull/101236)
+- The iPhone app now presents a compact Talk control bar, a cleaner Appearance picker, and a properly aligned realtime-audio button beside the resting Chat composer. [#98736](https://github.com/openclaw/openclaw/pull/98736)
+- Apple Watch users can dictate a message and hear OpenClaw's final reply on the Watch, with separate silent-send, cancel, and stop controls. [#100283](https://github.com/openclaw/openclaw/pull/100283)
+- iOS users can record and send a voice note of up to three minutes from the chat composer, optionally add text, and see the recording's duration in chat. [#100946](https://github.com/openclaw/openclaw/pull/100946)
+- Paired iOS users can start native ElevenLabs Talk with a SecretRef-backed Gateway key without copying the credential into plaintext mobile configuration. [#98210](https://github.com/openclaw/openclaw/pull/98210) Related [#98209](https://github.com/openclaw/openclaw/issues/98209). Thanks @joshavant, @ooiuuii.
+- iOS Talk's Gateway Default now uses the configured Gateway speech provider, and stopping a reply prevents delayed audio from leaking into later turns. [#98376](https://github.com/openclaw/openclaw/pull/98376) Related [#98153](https://github.com/openclaw/openclaw/issues/98153). Thanks @jraxworthy, @tony-ooo.
+- OpenAI Realtime Talk on iPhone now uses native WebRTC by default, recovers continuous sessions from provider disconnects, and respects speaker, Bluetooth, and AirPlay output choices. [#98563](https://github.com/openclaw/openclaw/pull/98563) Thanks @pollybot13.
+- The iOS Talk fallback banner now opens Voice & Talk settings directly instead of sending users to unrelated Gateway settings. [#98602](https://github.com/openclaw/openclaw/pull/98602) Related [#98593](https://github.com/openclaw/openclaw/issues/98593). Thanks @pollybot13.
+- Voice Wake on iOS can now pause while Talk, camera audio, or another feature uses the microphone and resume without crashing the app. [#99137](https://github.com/openclaw/openclaw/pull/99137) Thanks @pollybot13.
+- Apple Watch pairing and companion status now refresh without restarting the iPhone app, while cold-launch actions wait for readiness or return a clear `WATCH_UNAVAILABLE` error. [#100732](https://github.com/openclaw/openclaw/pull/100732)
+- iPhone users can now choose Listen on an assistant reply, follow preparation and playback status, stop at any time, and fall back to on-device speech when needed. [#100771](https://github.com/openclaw/openclaw/pull/100771)
+- Apple Watch quick replies now survive an unavailable iPhone and reconnect later to the intended Gateway without being lost, duplicated, or misrouted. [#100372](https://github.com/openclaw/openclaw/pull/100372) Thanks @nianjiuzst.
+- OpenClaw now uses consistent branded typography throughout its iOS, Watch, and Live Activity interfaces while retaining Dynamic Type and accessibility support. [#99246](https://github.com/openclaw/openclaw/pull/99246) Thanks @joelnishanth, @joshavant.
+
+##### Gateway setup and connections
+
+- iOS users can pair multiple Gateways once and switch among them while keeping credentials, trust, chats, preferences, device access, and push registration attached to the correct Gateway. [#100948](https://github.com/openclaw/openclaw/pull/100948)
+- iPhone users pairing with a LAN Gateway now stay authenticated after the one-time bootstrap so Chat and the node connection do not immediately disconnect. [#98066](https://github.com/openclaw/openclaw/pull/98066) Related [#98064](https://github.com/openclaw/openclaw/issues/98064). Thanks @ooiuuii.
+- After scanning an iOS pairing QR code, users now move to a live connection-progress screen instead of returning to Welcome while pairing continues invisibly. [#98302](https://github.com/openclaw/openclaw/pull/98302) Related [#98297](https://github.com/openclaw/openclaw/issues/98297). Thanks @joelnishanth.
+- iOS now explains secure Gateway connection and certificate-verification failures precisely and reliably presents the fingerprint trust prompt for first-time HTTPS connections. [#98429](https://github.com/openclaw/openclaw/pull/98429) Thanks @joshavant.
+- New iPhone users now get clearer QR, setup-code, and manual Gateway choices, better nearby and connection status, and a direct handoff to Chat after connecting. [#98868](https://github.com/openclaw/openclaw/pull/98868) Thanks @solvely-colin, @thats2easyyy.
+- iOS users can correct gateway details after a failed manual setup and retry immediately with the values currently on screen. [#99220](https://github.com/openclaw/openclaw/pull/99220) Related [#99219](https://github.com/openclaw/openclaw/issues/99219). Thanks @abdullahtas0.
+- iOS gateway QR pairing now stays open through trust and approval, avoids scanner crashes, and keeps credentials and pending actions with the correct gateway during switches. [#99572](https://github.com/openclaw/openclaw/pull/99572) Thanks @pollybot13.
+- Repeated iOS Gateway setup links now update the visible settings screen with the newest connection instead of being consumed by a hidden view or replaying stale details. [#100328](https://github.com/openclaw/openclaw/pull/100328)
+- The iOS app can now connect through Cloudflare Access, Basic authentication, and similar proxies by storing per-Gateway credential headers for the next reconnect. [#100768](https://github.com/openclaw/openclaw/pull/100768)
+- iOS pairing codes can now advertise both local and Tailnet Gateway routes, allowing the phone to save the first reachable address when it is away from the private LAN. [#100317](https://github.com/openclaw/openclaw/pull/100317)
+- iOS Gateway connection errors now appear as one dismissible toast that returns for a later failure and visibly reacts instead of stacking when the same problem repeats. [#98856](https://github.com/openclaw/openclaw/pull/98856) Thanks @lokimorty.
+- The iOS QR setup scanner is less likely to crash or become unstable when users open, cancel, or close the camera during onboarding. [#101235](https://github.com/openclaw/openclaw/pull/101235) Thanks @joshavant, @solvely-colin.
+
+##### Permissions, location, and capture
+
+- iOS location settings now explain Off, While Using, Always, Precise Location, restrictions, and permission mismatches in the selected language across the translations in this release. Sources: [3542585](https://github.com/openclaw/openclaw/commit/3542585de59987dd0b962df3ddb70bde093fa4dd), [261d79a](https://github.com/openclaw/openclaw/commit/261d79a9a42ef45a41c3947caa6e616c92702ad4), [ef1474d](https://github.com/openclaw/openclaw/commit/ef1474dd3d4dfdffd4a47a5f14166dc8e2e97a55), [cc1d61b](https://github.com/openclaw/openclaw/commit/cc1d61bd3c04d86b470f94364b1fe7fc6762c456), [2a1e118](https://github.com/openclaw/openclaw/commit/2a1e1184f5139d300567d0c2437669727dddc821), [748bfee](https://github.com/openclaw/openclaw/commit/748bfee90d16df63b9d89ae7db8c80579c8f7a6f), [e0b2dda](https://github.com/openclaw/openclaw/commit/e0b2ddad6cd7a8a562dd39fd99746557923549a1), [f371a2f](https://github.com/openclaw/openclaw/commit/f371a2f2022f9ef6dd9ee781ccf9cb3ee2cf5d88), [ee00cc7](https://github.com/openclaw/openclaw/commit/ee00cc7c949469612e79a55479c363d62a00f7e6), [27f9ae0](https://github.com/openclaw/openclaw/commit/27f9ae0c0a41f812c872439efdfb05f1df79c17c), [51a07ae](https://github.com/openclaw/openclaw/commit/51a07aec27eee6ff7c75ddc9d2d1d40ce0d74672), [ba9d167](https://github.com/openclaw/openclaw/commit/ba9d167e1a9596eff784716992a1f9885d60e892), [576169e](https://github.com/openclaw/openclaw/commit/576169e6d247308fd92cb8cdd3ba493797fa2f3f), [10500a6](https://github.com/openclaw/openclaw/commit/10500a63fa5837a58d3e9b400daa7f52d20d0fbb), [a344252](https://github.com/openclaw/openclaw/commit/a34425273c4ed1796845f1706d1c3b3974044434), [d7d280f](https://github.com/openclaw/openclaw/commit/d7d280fc78a0e8c51b3404294a6a1958a023eb03), [cb2547f](https://github.com/openclaw/openclaw/commit/cb2547f329109ee0b81a62b12ebea7743cac5905), [2191c2e](https://github.com/openclaw/openclaw/commit/2191c2eb1f77eb24f5c0dc8499630d52ebb55a68), [c63e9f9](https://github.com/openclaw/openclaw/commit/c63e9f9bf8ac0e573cfd32937e11ee0e16248709), [4b1e0de](https://github.com/openclaw/openclaw/commit/4b1e0deb3374012338586f39fa8f064515a50cc8), [525c4c7](https://github.com/openclaw/openclaw/commit/525c4c7ce1b821236a07901d80b14a0e7ed81ded).
+- iOS location settings now show the permission that is actually in effect, including Precise Location and mismatches between OpenClaw's selected mode and the iOS grant. [#99247](https://github.com/openclaw/openclaw/pull/99247) Thanks @pollybot13.
+- iOS users can now add contacts and search affected records without crashing the app or disconnecting the node. [#99475](https://github.com/openclaw/openclaw/pull/99475) Thanks @abdullahtas0.
+- iOS Calendar, Reminders, and Contacts commands now return an immediate permission-required result instead of opening a prompt that leaves the agent request waiting. [#99477](https://github.com/openclaw/openclaw/pull/99477) Thanks @nianjiuzst.
+- Choosing While Using for location access on iOS now remains selected after approval and after the app is relaunched. [#100512](https://github.com/openclaw/openclaw/pull/100512)
+- The iOS `screen.record` command now finishes more reliably with a nonempty MP4 instead of crashing the app and disconnecting the node as recording stops. [#101550](https://github.com/openclaw/openclaw/pull/101550) Thanks @tony-ooo.
+- The iOS app now recovers when a location permission prompt returns without a clear decision instead of waiting indefinitely. [75c8753](https://github.com/openclaw/openclaw/commit/75c8753a2cb52cf14acdc50cfa2d2c99368d0e0e) Thanks @vincentkoc.
+- Cancelling or interrupting an iOS `screen.record` request now stops the system recorder instead of letting capture continue after the tool call fails. [#99155](https://github.com/openclaw/openclaw/pull/99155) Thanks @nianjiuzst.
+- iOS now recognizes Limited Photos access as usable, offers in-app controls for requesting or managing the grant, and avoids interrupting gateway requests with a surprise prompt. [#99350](https://github.com/openclaw/openclaw/pull/99350) Related [#99046](https://github.com/openclaw/openclaw/issues/99046). Thanks @tony-ooo.
+- The iOS camera permission prompt now clearly connects access to Gateway setup and assistant-requested photo, video, document, screen, or workspace capture. [e77994e](https://github.com/openclaw/openclaw/commit/e77994ed5adfd5e69c457a5bca82795eff3555bf) Thanks @joshavant.
+
+#### macOS
+
+##### Setup and local agent
+
+- Localized macOS builds now translate the new GitHub link label, including its accessibility-facing text, instead of falling back to English. [8be1d36](https://github.com/openclaw/openclaw/commit/8be1d366a1f72936495c3d2b00461c5b58572706)
+- macOS onboarding now translates local Gateway installation, checks, repairs, retries, paused setup, and resume guidance across the languages updated in this release. Sources: [7a717b7](https://github.com/openclaw/openclaw/commit/7a717b777037c6e5152eda24e135e2a64295d256), [85d31e1](https://github.com/openclaw/openclaw/commit/85d31e10d5fcbbeb331e31aa67f8bce520cdbd8e), [27778a7](https://github.com/openclaw/openclaw/commit/27778a7c3de9ba798ae821d5a8dfc3059d4b9af2), [cffc6ad](https://github.com/openclaw/openclaw/commit/cffc6adbce9ca2c8421459a29cfc7bcabb5cf148), [ab0d604](https://github.com/openclaw/openclaw/commit/ab0d604ced35802e8e754ba298b76f5d9a933e1b), [972d394](https://github.com/openclaw/openclaw/commit/972d394c7b008ff278a138c6e1587647e8545c4f), [edbbdf6](https://github.com/openclaw/openclaw/commit/edbbdf6728472f98b92bba22381dd7d70bcb9c0b), [863a054](https://github.com/openclaw/openclaw/commit/863a054576cdeed556bb55c110a451f5c8cab571), [ef5650f](https://github.com/openclaw/openclaw/commit/ef5650f7816433aa5003ebef40019220911bf126), [5f2e51f](https://github.com/openclaw/openclaw/commit/5f2e51fccfc1c700a854cf1b288b16311fd43f87), [5769416](https://github.com/openclaw/openclaw/commit/5769416b6280042684efde75a64ebb36ff27c6d7), [a3aa917](https://github.com/openclaw/openclaw/commit/a3aa917225ecaf87ef83d41f7d23b31dba748722), [2f7bd01](https://github.com/openclaw/openclaw/commit/2f7bd01835c8e7fe28a0aee44d235a6fd521c7f4), [c54a6f3](https://github.com/openclaw/openclaw/commit/c54a6f304e49ba6746e8d92bd96d7ed904352a2c), [9c3ffc5](https://github.com/openclaw/openclaw/commit/9c3ffc5aafbf1075c0f6a00bdd2956a71e8a5f05), [469e707](https://github.com/openclaw/openclaw/commit/469e707970ea5ac0465b83b259f060b13ed2eede), [d066a81](https://github.com/openclaw/openclaw/commit/d066a81d225df29c3f763c62885219991585bea6), [72a3b71](https://github.com/openclaw/openclaw/commit/72a3b712af9b02352d6f2d8d2af3202204480097), [63aa909](https://github.com/openclaw/openclaw/commit/63aa90921602909f19293ba243c344f4d895da6e), [b68e2e7](https://github.com/openclaw/openclaw/commit/b68e2e701ae5f083909e499a84d57ec225cc5ffb).
+- macOS users can run Codex Computer Use desktop controls through managed installation without a manual `appServer.command`, and an outdated Codex Desktop app-server no longer blocks a supported plugin-local binary. [#96730](https://github.com/openclaw/openclaw/pull/96730) Thanks @bdjben.
+- New Mac users can now open the app and reach a working local agent without Terminal, Homebrew, administrator access, or an extra approval prompt for the app's own node. [#99767](https://github.com/openclaw/openclaw/pull/99767) Related [#99764](https://github.com/openclaw/openclaw/issues/99764).
+- macOS onboarding now verifies the chosen AI connection before first chat, presents clearer local and remote setup choices, and offers friendly recovery or a verified manual API-key path when authentication fails. [#100288](https://github.com/openclaw/openclaw/pull/100288)
+- macOS onboarding now offers the Gateway's supported text-inference provider catalog instead of only Anthropic, OpenAI, and Google, and tests credentials before saving them. [#101132](https://github.com/openclaw/openclaw/pull/101132)
+- First-run macOS setup now recognizes a successfully saved Codex login and is less likely to finish with a stale Gateway or bundled-skills warning. [#101218](https://github.com/openclaw/openclaw/pull/101218)
+- After `openclaw doctor --fix` archives a legacy sidecar, the macOS app no longer recreates it or triggers the same migration conflict warning on every command or Gateway start. [#99039](https://github.com/openclaw/openclaw/pull/99039) Related [#98917](https://github.com/openclaw/openclaw/issues/98917). Thanks @momothemage, @p51moustache.
+- Repeated pairing repair attempts now produce one usable macOS approval prompt per device instead of stacking stale alerts that cannot complete approval. [#100976](https://github.com/openclaw/openclaw/pull/100976)
+- On macOS, an explicit `OPENCLAW_STATE_DIR` now stays isolated from the machine's existing App Group pairing identity and device tokens. [#101779](https://github.com/openclaw/openclaw/pull/101779)
+
+##### Remote mode and Gateway reliability
+
+- macOS remote mode can now connect through explicitly selected managed SSH aliases and recover app-owned tunnels when SSH multiplexing or backgrounding is enabled. [#99661](https://github.com/openclaw/openclaw/pull/99661)
+- Finder-launched macOS sessions can now use SSH aliases backed by common user-installed `ProxyCommand` helpers without losing agent state or failing Gateway readiness checks. [#100214](https://github.com/openclaw/openclaw/pull/100214)
+- Multiple macOS app instances now preserve shared SSH tunnel tracking and clean up stale processes more reliably, reducing port conflicts after a crash. [#100601](https://github.com/openclaw/openclaw/pull/100601)
+- The macOS Dashboard now follows a restarted remote SSH tunnel to its new local port automatically and keeps authentication tokens out of logged URLs. [#100488](https://github.com/openclaw/openclaw/pull/100488)
+- After a macOS crash or force quit, OpenClaw now reclaims confirmed orphaned remote-mode SSH tunnels so relaunches can reuse the preferred local Gateway port. [#100489](https://github.com/openclaw/openclaw/pull/100489)
+- The macOS menu-bar app now uses fewer idle CPU wakeups and less repeated configuration and permission work, reducing background battery use without changing active status behavior. [#100463](https://github.com/openclaw/openclaw/pull/100463)
+- Long-running `system.run` commands on the macOS app node no longer make the node appear offline or block unrelated Gateway traffic. [#100842](https://github.com/openclaw/openclaw/pull/100842) Thanks @lvan185, @vincentkoc.
+- The macOS app no longer mistakes a valid launchd-managed local Gateway for an unexpected listener and terminates active assistant or channel work. [#100867](https://github.com/openclaw/openclaw/pull/100867) Thanks @lsr911, @vincentkoc.
+- The macOS app now keeps the same paired device and node identity across upgrades, restarts, and Gateway reconnects instead of repeatedly asking for approval or creating stale duplicates. [#101105](https://github.com/openclaw/openclaw/pull/101105) Thanks @yetval.
+
+##### App design and launching
+
+- The Mac app now shows the animated OpenClaw mascot in onboarding and About, while Reduce Motion keeps it still. [f052a2f](https://github.com/openclaw/openclaw/commit/f052a2f23b2d2b510686526ce52c6637bca8a4c6)
+- The macOS onboarding and About mascot now more closely matches openclaw.ai with theme-aware colors, glow, hover scaling, and smoother motion that keeps its antennae visible. [05c9dcc](https://github.com/openclaw/openclaw/commit/05c9dccf35ec86ebd41e17fdcc0dbf67d203b54c)
+- The Mac About screen now links directly to the OpenClaw website, documentation, GitHub project, and Discord community, matching the other native apps. [6e7ef63](https://github.com/openclaw/openclaw/commit/6e7ef631d2ac41370fc5b14b8e5b5992413a4cd7)
+- Opening OpenClaw again from the macOS Dock or Finder now brings up the dashboard or its failure window even when the menu-bar app is already running. [#97637](https://github.com/openclaw/openclaw/pull/97637) Thanks @solvely-colin.
+
+### Terminal UI and Other Clients
+
+#### Terminal conversations and recovery
+
+- `openclaw tui` now finds the custom port of an active local Gateway automatically, so users usually do not need to repeat its URL with `--url`. [#73338](https://github.com/openclaw/openclaw/pull/73338) Thanks @haishmg, @vincentkoc.
+- Gateway-backed and local TUI sessions now display assistant text as it arrives instead of appearing quiet until the final response. [#83000](https://github.com/openclaw/openclaw/pull/83000) Thanks @flashosophy.
+- The TUI now explains when repeated invalid tool arguments abort a run, giving users a useful correction clue without exposing sensitive inputs. [#91002](https://github.com/openclaw/openclaw/pull/91002) Thanks @taerlandsen, @wsyjh8.
+- Typing indicators now remain active during long Codex model, tool, command, recovery, and queued follow-up work instead of making the reply appear idle. [#95844](https://github.com/openclaw/openclaw/pull/95844) Thanks @jalehman.
+- Shortened exec and bash summaries now keep emoji and other supplementary characters intact around the ellipsis instead of displaying a broken replacement glyph. [#96963](https://github.com/openclaw/openclaw/pull/96963) Thanks @bartok9, @ly-wang19, @vincentkoc.
+- Replies triggered through Telegram or another external channel now appear only once in the terminal UI after history refreshes, while resets, session switches, delayed events, and in-progress recovery continue normally. [#96980](https://github.com/openclaw/openclaw/pull/96980) Thanks @xialonglee.
+- Long assistant and provider errors now end cleanly when emoji or rare Unicode characters land near the display limit. [#97289](https://github.com/openclaw/openclaw/pull/97289) Thanks @zenglingbiao.
+- The TUI now directs users to the pending device or scope-upgrade approval command instead of incorrectly sending them through chat-DM pairing. [#98144](https://github.com/openclaw/openclaw/pull/98144) Thanks @romneyda.
+- Embedded and local TUI sessions now contain event-consumer errors instead of terminating the terminal. [#100117](https://github.com/openclaw/openclaw/pull/100117) Thanks @cxbasdev.
+- TUI users can now submit prompts while an agent is working and receive the configured followup, collect, or interrupt behavior, with Esc and `/stop` canceling only the intended work. [#100123](https://github.com/openclaw/openclaw/pull/100123) Thanks @kevinlp, @sebtardif.
+- TUI `/new` now performs a real session transition with the expected lifecycle hooks and prevents a new session from racing an active turn. [#100241](https://github.com/openclaw/openclaw/pull/100241) Thanks @caopulan.
+- Terminal Hatch onboarding and other TUI connections now show `starting up` until session loading finishes, with accurate running indicators after reconnects. [#93999](https://github.com/openclaw/openclaw/pull/93999) Thanks @ml12580.
+- Repeated submits while the TUI agent is busy now update one warning instead of flooding the conversation with duplicate notices. [#99879](https://github.com/openclaw/openclaw/pull/99879) Thanks @vincentkoc.
+- `openclaw tui --local` now explains when a known slash command requires the Gateway instead of sending that command to the model as an unwanted prompt. [#100188](https://github.com/openclaw/openclaw/pull/100188) Thanks @goslingmanagment.
+- Workspace skill approvals started in the TUI now appear in that terminal, so users can review and unblock the run without switching to Telegram. [#100251](https://github.com/openclaw/openclaw/pull/100251) Thanks @vincentkoc.
+- The terminal UI now stays open and shows a safe, useful error when a local shell command, slash command, or message submission fails. [#100340](https://github.com/openclaw/openclaw/pull/100340) Thanks @cxbasdev.
+
+#### Codex CLI session lists
+
+- Codex CLI session lists now shorten long last-message previews without splitting emoji or similar characters into broken text. [#96582](https://github.com/openclaw/openclaw/pull/96582) Thanks @llagy007, @weeli-009.
+
+### Plugins and Packaging
+
+[Skills](https://docs.openclaw.ai/cli/skills) can be drafted from a conversation or source, reviewed, pinned, archived, restored, and kept out of future context when stale. [Plugin management](https://docs.openclaw.ai/plugins/manage-plugins) is clearer about discovery, installation, updates, marketplace snapshots, connected Codex apps, approvals, and runtime failures, while [Codex supervision](https://docs.openclaw.ai/plugins/codex-supervision) can give each new thread an explicit bounded app allowlist.
+Official packages are easier to obtain through the supported [Docker](https://docs.openclaw.ai/install/docker) and [Android](https://docs.openclaw.ai/platforms/android) paths, and plugin-backed workflows such as Google Meet and [Apple Messages](https://docs.openclaw.ai/channels/imessage) recover from more setup and migration problems. [Doctor](https://docs.openclaw.ai/cli/doctor) also handles damaged migration caches and older plugin or skill layouts without turning a recoverable upgrade into a dead end.
+
+#### Skills and personal workflows
+
+- Users can turn a conversation, file path, URL, or pasted note into a reviewable Skill Workshop proposal with one message instead of starting from a blank draft. [#100442](https://github.com/openclaw/openclaw/pull/100442)
+- Long-running agents can automatically retire unused Skill Workshop skills from future context, pin important ones, restore archives, and surface possible overlaps without deleting the underlying skills. [#101214](https://github.com/openclaw/openclaw/pull/101214)
+- The opt-in Logbook lets users review a model-organized workday timeline, generate standups, and ask questions about captured activity, with owner-only local storage and configurable retention. [#99930](https://github.com/openclaw/openclaw/pull/99930)
+- Skill archive validation and upload hashing errors now identify the missing or unreadable file while preserving the original filesystem error. [#101085](https://github.com/openclaw/openclaw/pull/101085) Thanks @cxbasdev, @vincentkoc.
+- The bundled xurl skill now shows a working Node/npm installation path, and the github skill no longer advertises an unsupported Linux apt option. [#102158](https://github.com/openclaw/openclaw/pull/102158) Thanks @not-stbenjam.
+
+#### Codex apps and connected agents
+
+- Owner-operated native Codex agents can now use selected apps already connected to the operator's Codex account, with a bounded per-thread allowlist and existing approval controls preserved. [#100973](https://github.com/openclaw/openclaw/pull/100973) Thanks @pash-openai.
+- Updated integration runtimes keep Codex, ACP, Copilot, Telegram, and diff rendering aligned with compatible upstream behavior, while reconnect recovery no longer floods operator logs with duplicate messages. [#100027](https://github.com/openclaw/openclaw/pull/100027)
+- Configured and accessible native Codex plugin apps now remain available when a new OpenClaw thread starts during an app-inventory and activation-state transition instead of disappearing silently. [#96872](https://github.com/openclaw/openclaw/pull/96872) Thanks @kevinslin.
+
+#### Plugin workflows, hooks, and media
+
+- Changes made by plugin hooks now reach agent and child-run context, including replacements or removals made by `agent:bootstrap`. [#97281](https://github.com/openclaw/openclaw/pull/97281) Thanks @outdog-hwh.
+- Embedded context-engine plugins now see the current turn in the transcript during `afterTurn`, preventing missing first messages and duplicate imports. [#97342](https://github.com/openclaw/openclaw/pull/97342) Thanks @gorkem2020, @iwhatsskill, @sgh6688, @udjin79.
+- Windows can now load valid inbound media when configured roots and runtime file paths differ only in letter casing. [#97630](https://github.com/openclaw/openclaw/pull/97630) Thanks @vectorpeak.
+- Plugins can now react when a new DM pairing request is created, enabling owner alerts, audit records, tickets, and approval integrations without polling. [#97733](https://github.com/openclaw/openclaw/pull/97733) Thanks @clawsean, @omarshahine, @trupe-rs.
+- Provider plugins that mask text now restore intended values inside tool-call inputs before messages, file operations, and other external actions run. [#97769](https://github.com/openclaw/openclaw/pull/97769) Related [#97761](https://github.com/openclaw/openclaw/issues/97761). Thanks @get-viti, @zoowh.
+- Plugin and media workflows now handle malformed or truncated ffprobe output without crashing while continuing to read valid video dimensions normally. [#98613](https://github.com/openclaw/openclaw/pull/98613) Thanks @pick-cat.
+- Ordinary Lobster run and resume approvals no longer fail TaskFlow-only validation simply because unused default flow fields were present. [#102036](https://github.com/openclaw/openclaw/pull/102036) Thanks @arthurnie, @lilan0125, @vincentkoc.
+
+#### Plugin marketplace and development
+
+- Operators can run `openclaw plugins marketplace refresh` to verify and save a hosted feed, enforce a SHA-256 match, and see whether live, saved, or bundled data was used. [#96155](https://github.com/openclaw/openclaw/pull/96155) Thanks @giodl73-repo.
+- `openclaw plugins init` can now scaffold a model-provider plugin with authentication, model setup, tests, packaging, validation, and ClawHub publishing structure. [#94352](https://github.com/openclaw/openclaw/pull/94352) Thanks @patrick-erichsen.
+- Existing plugin discovery keeps the same bundled official catalog while gaining a versioned, fail-closed fallback format for the hosted marketplace work. [#95846](https://github.com/openclaw/openclaw/pull/95846) Thanks @giodl73-repo.
+- ClawHub marketplace reads now fail back to OpenClaw's bundled plugin catalog when hosted data is unsafe or unusable, providing a guarded base for the new marketplace workflow. [#95868](https://github.com/openclaw/openclaw/pull/95868) Thanks @giodl73-repo.
+- A hosted marketplace can keep serving its last verified catalog when the feed is unchanged or briefly unavailable, without trusting stale or invalid saved data. [#95877](https://github.com/openclaw/openclaw/pull/95877) Thanks @giodl73-repo.
+- The latest verified hosted marketplace catalog can survive a restart and remain available through unchanged responses or temporary feed failures, with persistence still optional. [#95964](https://github.com/openclaw/openclaw/pull/95964) Thanks @giodl73-repo.
+- Hosted marketplace entries become installable only when they match approved local sources and trusted ClawHub packages, preventing unknown or untrusted choices from slipping into installation. [#95969](https://github.com/openclaw/openclaw/pull/95969) Thanks @giodl73-repo.
+- Administrators can configure named hosted marketplace feeds and the trusted local package sources those feeds may reference, while unsupported trust settings are rejected. [#95981](https://github.com/openclaw/openclaw/pull/95981) Thanks @giodl73-repo.
+- The new `openclaw plugins marketplace entries` command lists available hosted plugins, versions, and install choices while showing whether results came from live, saved, or bundled data. [#96158](https://github.com/openclaw/openclaw/pull/96158) Thanks @giodl73-repo.
+- Marketplace diagnostics now show whether refresh and entries commands used a hosted feed, a saved snapshot, or a fallback without logging feed secrets. [#96194](https://github.com/openclaw/openclaw/pull/96194) Thanks @giodl73-repo.
+- Plugin authors can now import shared `textResult` and `jsonResult` helpers from `openclaw/plugin-sdk/tool-results` instead of recreating common response shapes. [#99740](https://github.com/openclaw/openclaw/pull/99740) Thanks @romneyda.
+- Plugin authors now have a shared `formatByteSize` helper for consistent byte labels, while existing labels across OpenClaw remain unchanged. [#99768](https://github.com/openclaw/openclaw/pull/99768) Thanks @romneyda.
+
+#### Plugin installation, updates, and repair
+
+- Migration `agentDir` values beginning with `~` now resolve against OpenClaw's effective home. [#99901](https://github.com/openclaw/openclaw/pull/99901)
+- Starting QR login without a required official channel plugin now returns the exact installation command or `openclaw doctor --fix` instead of only saying the provider is unavailable. [#90517](https://github.com/openclaw/openclaw/pull/90517) Related [#83277](https://github.com/openclaw/openclaw/issues/83277). Thanks @carol-iung, @tuaran.
+- Plugin update failures now report the real npm metadata or registry problem instead of disguising it as an unsupported package specification. [#96143](https://github.com/openclaw/openclaw/pull/96143) Thanks @brokemac79, @romneyda, @slideshow-dingo.
+- Operators can install a pinned older ClawHub plugin when that version is compatible with their OpenClaw deployment, without the latest release's requirements incorrectly blocking it; incompatible or unverifiable versions remain blocked. [#96506](https://github.com/openclaw/openclaw/pull/96506) Thanks @isaiahstapleton.
+- `openclaw plugins update --all` now realigns trusted official plugins with the current stable or beta catalog after a core upgrade, without manual force installs or overwriting intentional targeted pins. [#96831](https://github.com/openclaw/openclaw/pull/96831) Thanks @ooiuuii, @velvet-shark.
+- `openclaw plugins update <id> --dry-run` now tells operators when a newer default release exists even if the installed plugin is pinned exactly. [#97282](https://github.com/openclaw/openclaw/pull/97282) Thanks @yungchentang.
+- Windows plugin updates no longer create managed paths so long that official Codex-backed agents fail before they can start and reply. [#97488](https://github.com/openclaw/openclaw/pull/97488) Thanks @ooiuuii.
+- `openclaw update` now accepts valid bundle-format marketplace and ClawHub plugins without `package.json`, preventing plugin sync from aborting and leaving the Gateway stopped. [#98010](https://github.com/openclaw/openclaw/pull/98010) Related [#97985](https://github.com/openclaw/openclaw/issues/97985). Thanks @herove, @lilan0125.
+- `openclaw/memory-lancedb` can now install and update under normal npm dependency resolution, keeping LanceDB-backed memory active without version pinning or bypass flags. [#99118](https://github.com/openclaw/openclaw/pull/99118) Related [#90295](https://github.com/openclaw/openclaw/issues/90295). Thanks @allenhurff, @joshavant.
+- Installing a managed npm plugin no longer makes workspace plugins from `plugins.load.paths` disappear after startup or restart. [#99196](https://github.com/openclaw/openclaw/pull/99196) Thanks @leonidaslux.
+- Git-backed plugin installs and updates now work when `~/.openclaw` and the system temp directory are on different filesystems, without a `TMPDIR` workaround. [#99896](https://github.com/openclaw/openclaw/pull/99896) Thanks @bartok9, @carelvanheerden, @vincentkoc.
+- Extended-stable users can install, repair, and update eligible official plugins at the exact OpenClaw core version instead of drifting onto the regular stable line. [#100448](https://github.com/openclaw/openclaw/pull/100448) Thanks @kevinslin.
+- `openclaw update` no longer retries a plugin after successfully moving it to ClawHub, preventing a redundant transient failure from disabling the migrated plugin. [3ce26d6](https://github.com/openclaw/openclaw/commit/3ce26d690f627ad07dd1097384e8c71dd1537ac1) Thanks @vincentkoc.
+- `openclaw doctor` can continue legacy dedupe migration when a retired cache file contains malformed JSON instead of stopping with a parsing error. [#98125](https://github.com/openclaw/openclaw/pull/98125) Thanks @pick-cat.
+- Plugin install and update failures now show whether npm exited, was killed, or timed out instead of presenting a blank error that makes valid packages look invalid. [#98497](https://github.com/openclaw/openclaw/pull/98497) Thanks @sanjays2402, @vincentkoc.
+- Failed plugin installations now show the useful plugin error without adding a false `Also not a valid hook pack` diagnosis, while genuine hook-pack failures remain visible. [#100554](https://github.com/openclaw/openclaw/pull/100554) Thanks @vincentkoc.
+
+#### Plugin runtime, status, and diagnostics
+
+- Declared plugin tools now remain callable in subagent sessions after plugin registry changes, avoiding repeated `plugin tool runtime missing` failures and Gateway restarts. [#82562](https://github.com/openclaw/openclaw/pull/82562) Thanks @luoyanglang, @vincentkoc.
+- Plugin metadata cache hits no longer flood diagnostics with repeated full-scan entries, leaving smaller timelines where real scans are easier to identify. [#86796](https://github.com/openclaw/openclaw/pull/86796) Thanks @galiniliev, @vincentkoc.
+- Plugin loading no longer evaluates OpenClaw's own package code twice, reducing startup work and avoiding duplicate module, class, singleton, or registry identities in one process. [#88384](https://github.com/openclaw/openclaw/pull/88384) Thanks @vincentkoc.
+- `openclaw plugins inspect` now shows the bundled document-extract plugin's PDF extractor as an available capability instead of reporting none. [#91597](https://github.com/openclaw/openclaw/pull/91597) Thanks @xydt-tanshanshan.
+- Configured context-engine plugins such as lossless-claw now stay active after discovery instead of being silently replaced by the built-in legacy engine. [#96357](https://github.com/openclaw/openclaw/pull/96357) Thanks @vincentkoc.
+- Gateway startup now reports configured channels that failed to load, so operators can fix plugin trust, enablement, or installation before messages go missing. [#96397](https://github.com/openclaw/openclaw/pull/96397) Thanks @849261680.
+- Plugin-heavy startup and configuration checks, especially on Windows, now repeat fewer package-path lookups while rebuilding installed-plugin fingerprints, making those paths more responsive. [#96710](https://github.com/openclaw/openclaw/pull/96710) Thanks @211-lee, @sheyanmin, @vincentkoc.
+- `/status plugins` now labels a plugin as loaded only when it is actually running, while still showing healthy installed inventory. [#97479](https://github.com/openclaw/openclaw/pull/97479) Thanks @masatohoshino.
+- Raising a running Gateway's log level to debug now immediately enables Mattermost, Matrix, Microsoft Teams, IRC, Nextcloud Talk, and other plugin diagnostics without a restart. [#97617](https://github.com/openclaw/openclaw/pull/97617) Thanks @amknight, @vincentkoc.
+- Detailed `/status plugins` now flags a plugin that was configured to run but did not load, separating runtime drift from ordinary inactive inventory. [#97878](https://github.com/openclaw/openclaw/pull/97878) Thanks @masatohoshino.
+- Plugin loading now honors operator-configured Jiti native-module exceptions while retaining protection against duplicate OpenClaw package evaluation. [#100344](https://github.com/openclaw/openclaw/pull/100344)
+- Bundled channel setup plugins now load correctly through current-release symlinks and mixed source/dist layouts without false outside-package warnings. [#100758](https://github.com/openclaw/openclaw/pull/100758)
+- Source checkouts with a partial bundled plugin tree now retain complete built-in metadata for plugin health checks and provider endpoint discovery. [26c0285](https://github.com/openclaw/openclaw/commit/26c0285812b4299bcb5d61ae76f374410e39d5c5) Thanks @vincentkoc.
+- The GitHub Copilot plugin no longer breaks `openclaw plugins list` or `openclaw status` during metadata-only loading before full runtime state is available. [#95229](https://github.com/openclaw/openclaw/pull/95229) Related [#94516](https://github.com/openclaw/openclaw/issues/94516). Thanks @cuihaijun, @sunlit-deng.
+- `/status plugins` now groups disabled plugins by reason, including allowlist, denylist, default, and override decisions, without changing activation behavior. [#99598](https://github.com/openclaw/openclaw/pull/99598) Thanks @masatohoshino.
+- Bundled channel runtime and setup plugins now load from valid source-only registry roots in mixed source/dist checkouts instead of silently disappearing. [#100737](https://github.com/openclaw/openclaw/pull/100737)
+- Duplicate plugin-request scopes now normalize consistently, and genuine plugin scan access failures are surfaced. [#99932](https://github.com/openclaw/openclaw/pull/99932)
+
+#### Packages and platform installs
+
+- Official OpenClaw container images are now available from Docker Hub as well as GHCR, reducing reliance on unofficial mirrors. [#97122](https://github.com/openclaw/openclaw/pull/97122) Thanks @vincentkoc.
+- Docker users now get a more complete bundled AI runtime, reducing startup and runtime failures caused by package links removed during image trimming. [57ca1b0](https://github.com/openclaw/openclaw/commit/57ca1b02543af9f4ac1d78446951b98cc31fba5a) Thanks @vincentkoc.
+- Affected npm installations can once again start the Gateway and produce replies because speech now loads only through its supported package-backed TTS path. [#89899](https://github.com/openclaw/openclaw/pull/89899) Thanks @zhangguiping-xydt.
+- OpenClaw npm packages are now about 3.18 MB smaller unpacked and 371 KB smaller compressed, with plugin SDK entrypoints and runtime behavior unchanged. [#98758](https://github.com/openclaw/openclaw/pull/98758) Related [#98757](https://github.com/openclaw/openclaw/issues/98757). Thanks @romneyda.
+- Source and macOS package builds no longer fail when the tsdown configuration is loaded from a temporary directory that cannot resolve the runtime package. [#100499](https://github.com/openclaw/openclaw/pull/100499)
+- Global npm upgrades can continue as OpenClaw's packaged files grow without hitting `InstalledDistScanLimitError`, while runaway scans remain bounded. [#101206](https://github.com/openclaw/openclaw/pull/101206)
+- Source builds now work on supported Node.js distributions without native TypeScript stripping, avoiding a late failure tied to `--experimental-strip-types`. [#91262](https://github.com/openclaw/openclaw/pull/91262) Thanks @smoe, @vincentkoc.
+
+### Docs and Admin Tools
+
+#### Setup and configuration
+
+##### Onboarding and guided setup
+
+- `openclaw onboard` now explains up front what setup covers, why full onboarding can take longer, and which optional steps can be postponed. [#97482](https://github.com/openclaw/openclaw/pull/97482) Thanks @ly85206559.
+- Crestodian on Claude Code or Gemini CLI can now hold multi-turn setup conversations, inspect state, request exact approval for changes, and verify writes instead of falling back immediately to a single-turn planner. [#100029](https://github.com/openclaw/openclaw/pull/100029)
+- Crestodian setup and repair chats no longer destabilize the local TUI when a terminal event consumer fails during response delivery. [#100341](https://github.com/openclaw/openclaw/pull/100341) Thanks @cxbasdev, @vincentkoc.
+- Crestodian now distinguishes ordinary questions from operational requests, accepts natural approval phrases, clears stale proposals, and keeps sensitive configuration out of the conversation model. [#100656](https://github.com/openclaw/openclaw/pull/100656)
+- Fresh git installs now lead users through setup, or give the exact command to finish later, before missing configuration or Gateway authentication can break first use. [#101901](https://github.com/openclaw/openclaw/pull/101901) Thanks @fuller-stack-dev.
+- Setup now checks the configured custom agent or auth directory for credentials instead of reporting the wrong bootstrap state from a default location. [0fd69dc](https://github.com/openclaw/openclaw/commit/0fd69dc3d2b864fb7d3a0b5204a7c720b5a19c0d) Thanks @vincentkoc.
+
+##### Configuration editing and live reload
+
+- `openclaw config` now recommends a Gateway restart only when the changed settings require one, so hot-loadable agent, model, and provider edits no longer prompt unnecessary restarts. [#80823](https://github.com/openclaw/openclaw/pull/80823) Thanks @kiranmagic7.
+- Removing a visible built-in model alias now explains that the alias is automatic and shows how to shadow it, while genuinely absent aliases still report as not found. [#81641](https://github.com/openclaw/openclaw/pull/81641) Thanks @scientificprogrammer, @vincentkoc.
+- `openclaw config unset` now explains when a visible value is an inherited runtime default that is not stored in the user's config, avoiding an unproductive loop between `config get` and `config unset` while leaving failed attempts unchanged. [#96557](https://github.com/openclaw/openclaw/pull/96557) Thanks @moeghashim.
+- Configuration and plugin-schema validation hints now show clear allowed values instead of the misleading literal label `undefined`. [#99045](https://github.com/openclaw/openclaw/pull/99045) Thanks @lzyyzznl.
+- Valid `openclaw.json` files with a BOM, PowerShell formatting, or deep indentation can now save authentication, model, repair, and other configuration changes without manual reformatting. [#100591](https://github.com/openclaw/openclaw/pull/100591) Thanks @vincentkoc.
+- Upgrades from the legacy config-health store no longer repeat a permanent conflict warning, and existing recovery backups remain available without overwriting newer observations. [#99728](https://github.com/openclaw/openclaw/pull/99728) Related [#99280](https://github.com/openclaw/openclaw/issues/99280). Thanks @ccbridle, @jalehman, @joshavant.
+- Repeated configuration warnings are now suppressed between meaningful recurrences, keeping long-running Gateway logs readable without hiding new diagnostics. [#100569](https://github.com/openclaw/openclaw/pull/100569) Thanks @vincentkoc.
+- Gateway settings marked as no-restart now take effect in live and heartbeat-driven turns without requiring a manual restart. [#100586](https://github.com/openclaw/openclaw/pull/100586) Thanks @obviyus, @sedrak-hovhannisyan.
+- Gateway `config.patch` now accepts unrelated configuration updates when a bundled provider uses its default endpoint, without saving empty runtime-only provider fields. [#98396](https://github.com/openclaw/openclaw/pull/98396) Related [#98270](https://github.com/openclaw/openclaw/issues/98270). Thanks @momothemage, @weltmaister.
+- Gateway configuration updates now reject missing redacted values for keys such as `toString` or `constructor` instead of restoring an inherited JavaScript function. [#99152](https://github.com/openclaw/openclaw/pull/99152) Thanks @zenglingbiao.
+- Manual Gateway setup now rejects port entries such as `1e3` or `0x1000` instead of silently saving a different port, while valid decimal ports remain unchanged. [#98689](https://github.com/openclaw/openclaw/pull/98689) Related [#98681](https://github.com/openclaw/openclaw/issues/98681). Thanks @qingminglong.
+
+#### Doctor and diagnostics
+
+##### Core checks and repair behavior
+
+- `openclaw doctor` now warns when QMD session search is enabled without transcript export and provides commands and documentation to correct the missing recall setup. [#80947](https://github.com/openclaw/openclaw/pull/80947) Thanks @anyech.
+- `openclaw doctor` now gives a missing-transcript preview command that actually shows the entries eligible for removal before users choose to enforce cleanup. [#83630](https://github.com/openclaw/openclaw/pull/83630) Thanks @yuanhanzhong.
+- `openclaw doctor` now evaluates the default agent's actual per-agent bootstrap limits, producing accurate truncation warnings and remediation guidance. [#84424](https://github.com/openclaw/openclaw/pull/84424) Thanks @kasangyong, @vincentkoc.
+- Gateway-managed skill checks can now find commands installed through pnpm 11 and common npm-global layouts, reducing false missing-tool warnings and unnecessary reinstalls. [#85238](https://github.com/openclaw/openclaw/pull/85238) Thanks @shbernal, @vincentkoc.
+- `openclaw doctor` on Windows now detects supported Chrome versions accurately instead of warning that a working installation could not be identified. [#87937](https://github.com/openclaw/openclaw/pull/87937) Thanks @mukundakatta.
+- `openclaw doctor` no longer aborts when a configured agent workspace has not been created yet, while real file operations still enforce workspace boundaries. [#89226](https://github.com/openclaw/openclaw/pull/89226) Thanks @sasan1200, @shifengwang333-ai.
+- Gateway status, Doctor, and onboarding diagnostics now read large logs within fixed bounds and surface recent useful failures instead of stale noise. [#99407](https://github.com/openclaw/openclaw/pull/99407) Thanks @sunlit-deng.
+- Terminal notes, Doctor output, and diagnostics now wrap long runs of CJK, full-width, or emoji characters within the requested width instead of spilling across columns. [#96746](https://github.com/openclaw/openclaw/pull/96746) Thanks @ly-wang19.
+- Default `doctor --lint` results now focus on actionable configuration and runtime problems, with optional backup and memory advice available only when requested. [#99249](https://github.com/openclaw/openclaw/pull/99249) Thanks @giodl73-repo.
+- `openclaw doctor --fix` now completes successfully in locked-down environments when only shell-completion installation is blocked, while still reporting genuine write failures. [#99540](https://github.com/openclaw/openclaw/pull/99540) Related [#99237](https://github.com/openclaw/openclaw/issues/99237). Thanks @hunglp6d, @rballiance.
+- `doctor --lint --all` can now explain the path or permission that would block a configuration repair before operators run `doctor --fix`. [#100093](https://github.com/openclaw/openclaw/pull/100093) Thanks @giodl73-repo.
+- `openclaw health` now warns when gateway configuration hot reload has stopped, so operators know a restart is needed instead of unknowingly running stale settings. [#99267](https://github.com/openclaw/openclaw/pull/99267) Thanks @masatohoshino, @vincentkoc.
+
+##### Focused lint checks
+
+- Operators can inspect stale session write locks with `openclaw doctor --lint --json --only core/doctor/session-locks` and preview which locks a repair would remove or preserve. [#84366](https://github.com/openclaw/openclaw/pull/84366) Thanks @giodl73-repo.
+- Optional Doctor lint can now report missing, unsafe, unwritable, cloud-synced, removable, volatile, or incomplete OpenClaw state storage with paths and repair guidance. [#95979](https://github.com/openclaw/openclaw/pull/95979) Thanks @giodl73-repo.
+- An opt-in Doctor lint check now explains which configured plugin installation is broken and previews the repair before operators run the existing fix workflow. [#96171](https://github.com/openclaw/openclaw/pull/96171) Thanks @giodl73-repo.
+- Operators can run `openclaw doctor --lint --all` to include every opt-in diagnostic check without changing the behavior of existing `doctor --lint` automation. [#96471](https://github.com/openclaw/openclaw/pull/96471) Thanks @giodl73-repo.
+- Operators can run `openclaw doctor --lint --only core/doctor/gateway-health`, `--only core/doctor/gateway-daemon`, or `--all` for structured, credential-safe warnings about Gateway reachability and local service health without changing service state. [#97075](https://github.com/openclaw/openclaw/pull/97075) Thanks @giodl73-repo.
+- Operators can use the focused auth-profile Doctor lint check to find expired, missing, malformed, cooled-down, disabled, or legacy credentials with structured repair guidance. [#97125](https://github.com/openclaw/openclaw/pull/97125) Thanks @giodl73-repo.
+- A focused memory-search Doctor lint check now reports provider, credential, backend, and QMD setup problems with structured paths and fixes. [#97137](https://github.com/openclaw/openclaw/pull/97137) Thanks @giodl73-repo.
+- The workspace-status Doctor lint check now reports plugin drift, compatibility, loading diagnostics, and recoverable TaskFlow state in machine-readable form. [#97358](https://github.com/openclaw/openclaw/pull/97358) Thanks @giodl73-repo.
+- A focused device-pairing Doctor lint check now provides structured warnings and repair guidance for pending requests, stale authentication, missing scopes, and unreadable stores. [#97366](https://github.com/openclaw/openclaw/pull/97366) Thanks @giodl73-repo.
+- Operators can request a structured Doctor lint check for configured channels whose backing plugins are blocked, including the unmet requirement and suggested fix. [#97496](https://github.com/openclaw/openclaw/pull/97496) Thanks @giodl73-repo.
+- A focused tool-result-cap Doctor lint check now identifies settings below model-aware defaults or above the runtime ceiling with actionable paths. [#97500](https://github.com/openclaw/openclaw/pull/97500) Thanks @giodl73-repo.
+- Linux operators can use the systemd-linger Doctor lint check to learn when logout may stop the Gateway and get the exact `loginctl enable-linger` remedy. [#97514](https://github.com/openclaw/openclaw/pull/97514) Thanks @giodl73-repo.
+- Doctor lint can now identify legacy fenced `HEARTBEAT.md` templates and distinguish files suitable for automatic cleanup from those containing custom content. [#98400](https://github.com/openclaw/openclaw/pull/98400) Thanks @giodl73-repo.
+- Doctor lint can now flag the combination of WhatsApp, a strained Gateway event loop, and active local TUI sessions that is associated with delayed replies. [#98406](https://github.com/openclaw/openclaw/pull/98406) Thanks @giodl73-repo.
+- Structured Doctor lint can now report stale global plugin-runtime symlinks, including the obsolete link, its target, and the `openclaw doctor --fix` cleanup command. [#98729](https://github.com/openclaw/openclaw/pull/98729) Thanks @giodl73-repo.
+- Operators can use targeted Doctor lint to inspect legacy session transcripts and stale snapshot paths, preview the cleanup, and choose whether to apply it. [#95976](https://github.com/openclaw/openclaw/pull/95976) Thanks @giodl73-repo.
+- WhatsApp and Telegram default-account routing warnings are now available through selectable structured Doctor lint while normal Doctor output remains unchanged. [#96147](https://github.com/openclaw/openclaw/pull/96147) Thanks @pick-cat, @vincentkoc.
+- Optional Doctor lint can now identify stale or missing plugin registry data, shadowed bundled plugins, stale install records, and broken OpenClaw peer links. [#96169](https://github.com/openclaw/openclaw/pull/96169) Thanks @giodl73-repo.
+- Structured Doctor lint can now report low or critical disk space for the OpenClaw state directory, including the affected path, available space, requirement, and remediation. [#98391](https://github.com/openclaw/openclaw/pull/98391) Thanks @giodl73-repo.
+- Plugin operators can run `doctor --lint --only core/doctor/legacy-plugin-manifests` or `--all` to identify legacy manifest keys and see the affected plugin, path, and repair command. [#98695](https://github.com/openclaw/openclaw/pull/98695) Thanks @giodl73-repo.
+- Operators can use `openclaw doctor --lint --only core/doctor/legacy-plugin-dependencies` or `--all` to find stale plugin dependency state and receive a path plus safe repair guidance without changing the installation. [#98725](https://github.com/openclaw/openclaw/pull/98725) Thanks @giodl73-repo.
+- Channel setup warnings are now available as structured Doctor lint findings with stable paths and repair guidance for operators and automation. [#99238](https://github.com/openclaw/openclaw/pull/99238) Thanks @giodl73-repo.
+
+#### CLI
+
+Operators can [attach an external coding harness](https://docs.openclaw.ai/cli/attach) to an existing Gateway session and work with compatible [Codex-supervised](https://docs.openclaw.ai/plugins/codex-supervision) threads across native and OpenClaw surfaces. [Status](https://docs.openclaw.ai/cli/status) and [configuration](https://docs.openclaw.ai/cli/config) commands provide clearer diagnostics, safer defaults, and more dependable control of sessions, services, credentials, and runtime behavior.
+
+##### Attached coding and sessions
+
+- `openclaw attach` now launches Claude Code with temporary access to the main or selected Gateway session, keeps credentials out of arguments, and revokes the grant when the session ends. [#96454](https://github.com/openclaw/openclaw/pull/96454) Thanks @anagnorisis2peripeteia, @obviyus.
+- Owner-controlled agents can opt into `appServer.homeScope: "user"` to inspect and safely fork the same Codex threads available in Desktop and the CLI. [#99821](https://github.com/openclaw/openclaw/pull/99821)
+- `openclaw sessions --json` now includes available subagent lineage and runtime details such as parent linkage, workspace, depth, role, timestamps, and status. [#87917](https://github.com/openclaw/openclaw/pull/87917) Related [#80286](https://github.com/openclaw/openclaw/issues/80286). Thanks @islandpreneur007, @zhangguiping-xydt.
+- `status` and `status --json` now build session model labels with less unnecessary normalization, improving readback speed for larger session sets and incident checks. [#87831](https://github.com/openclaw/openclaw/pull/87831) Thanks @acskamloops.
+- `usage.cost` and `sessions.usage` now reject a start date later than the end date with a clear `INVALID_REQUEST` instead of returning a misleading empty report. [#94096](https://github.com/openclaw/openclaw/pull/94096) Thanks @alix-007.
+- Session cost summaries now estimate a real charge when a transcript records zero dollars despite token use and known model pricing. [c5260a3](https://github.com/openclaw/openclaw/commit/c5260a3c03b0444597f3dc4a80c1f003ca7c4b4a) Thanks @nianjiuzst.
+- Session logs and cached cost views now preserve provider-reconciled zero-dollar totals while recalculating genuinely missing costs from stored provider and model details. [c45124a](https://github.com/openclaw/openclaw/commit/c45124ab8554d70c4564ae1b3a81fc65872ecb9d)
+- `openclaw sessions tail --tail` now rejects counts too large to represent safely instead of applying an imprecise history limit. [#99398](https://github.com/openclaw/openclaw/pull/99398) Thanks @qingminglong.
+- A malformed transcript timestamp no longer corrupts session usage and cost records with invalid values. [#99420](https://github.com/openclaw/openclaw/pull/99420) Thanks @krissding.
+- Session maintenance warnings now say `1 minute`, `1 hour`, or `1 day` at rounded boundaries instead of awkward values such as `60 seconds`. [#100096](https://github.com/openclaw/openclaw/pull/100096) Thanks @narahariraghava, @vincentkoc.
+- Session maintenance warnings now show more accurate wait estimates near unit boundaries, so a roughly 90-second delay is not inflated to two minutes. [58d707f](https://github.com/openclaw/openclaw/commit/58d707fbed3400292b9d7bf8fe31e6480309a180) Thanks @vincentkoc.
+
+##### Status, logs, usage, and telemetry
+
+- `openclaw logs --follow` can bridge a brief local Gateway outage with journal output and automatically return to normal Gateway logs after recovery. [#88159](https://github.com/openclaw/openclaw/pull/88159) Thanks @anyech, @vincentkoc.
+- Debug proxy capture now keeps oversized or endless response bodies from crashing the agent, while retaining useful status and header metadata. [#97551](https://github.com/openclaw/openclaw/pull/97551) Thanks @alix-007.
+- The first Gateway status check after a restart now reports the selected model's actual context window instead of briefly showing a generic 200k limit. [#97576](https://github.com/openclaw/openclaw/pull/97576) Thanks @turbotheturtle.
+- `openclaw health` now surfaces permanently failed deliveries with queue counts and oldest-failure age instead of reporting an all-green state. [#99842](https://github.com/openclaw/openclaw/pull/99842) Thanks @masatohoshino.
+- Timing displays now roll rounded sub-second values over to `1s` instead of showing the awkward `1000ms`. [#100006](https://github.com/openclaw/openclaw/pull/100006) Thanks @qingminglong.
+- `openclaw logs` now reports log-tail stream failures cleanly instead of crashing, hanging, or leaving `journalctl` running. [#100850](https://github.com/openclaw/openclaw/pull/100850) Thanks @cxbasdev, @vincentkoc.
+- Trimmed OpenClaw CLI logs now remain valid UTF-8 when the retained byte range begins inside an emoji or other multibyte character. [#101029](https://github.com/openclaw/openclaw/pull/101029) Thanks @ly85206559.
+- Langfuse, OpenTelemetry, and Prometheus can now capture usage, cost, model, provider, timing, and session data for runs started through `/v1/responses` and `/v1/chat/completions`. [#96152](https://github.com/openclaw/openclaw/pull/96152) Thanks @rocke2020, @xialonglee.
+- File-backed usage-bar templates now keep watcher and file-descriptor use bounded in long-running OpenClaw processes while still reloading templates when needed. [#98990](https://github.com/openclaw/openclaw/pull/98990) Thanks @chenyangjun-xy, @vincentkoc, @zhanglei99586.
+- Compact `/status` no longer shows the ambiguous `Plugins: OK` row, while warnings and detailed plugin diagnostics remain available. [#100143](https://github.com/openclaw/openclaw/pull/100143)
+- Failed OpenClaw and plugin-harness traces now include useful redacted error details in OpenTelemetry instead of only a generic failure label. [#101244](https://github.com/openclaw/openclaw/pull/101244) Thanks @amknight.
+- OpenTelemetry trace viewers can now display captured tool results alongside tool inputs in standard GenAI fields, making failed-run investigation more complete. [#101371](https://github.com/openclaw/openclaw/pull/101371) Thanks @amknight.
+- `openclaw status --all` now keeps shortened channel issue messages readable when an emoji falls at the display boundary. [#101503](https://github.com/openclaw/openclaw/pull/101503) Thanks @wm0018.
+- OTLP traces, metrics, and logs now follow `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY`, keeping diagnostics exports on the configured network path. [#100616](https://github.com/openclaw/openclaw/pull/100616) Thanks @jesse-merhi.
+
+##### Commands, help, tables, and terminal output
+
+- The bounded `openclaw hooks` commands now return control promptly after printing their output, so terminals, scripts, and CI jobs no longer remain stuck. [#76922](https://github.com/openclaw/openclaw/pull/76922) Thanks @dorukardahan.
+- Non-interactive `openclaw models list` and `openclaw models status` now exit normally after printing their results, allowing scripts and SSH diagnostics to finish without an external timeout. [#77904](https://github.com/openclaw/openclaw/pull/77904) Thanks @dorukardahan, @vincentkoc.
+- TUI links now leave malformed fragments and stray punctuation as plain text while keeping valid parenthetical, IPv6, and line-wrapped URLs clickable at the correct target. [#100780](https://github.com/openclaw/openclaw/pull/100780)
+- `openclaw docs` now rejects oversized search responses with a clear error before they can destabilize the CLI or exhaust memory. [#98188](https://github.com/openclaw/openclaw/pull/98188) Thanks @cxbasdev.
+- Several edge cases now preserve transcript and voice text, surface MCP failures, bound oversized responses, show current session time, choose the right Linux package manager, and use port 443 for secure Gateway links without an explicit port. [#100258](https://github.com/openclaw/openclaw/pull/100258) Thanks @connermo, @cxbasdev, @gfaerny, @hailory, @harjothkhara, @ly85206559, @mushuiyu886, @simon-xydt, @sunlit-deng, @uditdewan.
+- Failed `openclaw --help` and `openclaw --version` startup now returns exit code 1 promptly instead of leaving the terminal process stuck. [#97807](https://github.com/openclaw/openclaw/pull/97807) Thanks @aniruddhaadak80, @maweibin.
+- CLI tables now shorten only the actual home directory and its descendants, so sibling paths such as `/home/alice2/project` no longer appear as misleading home-relative paths. [#98876](https://github.com/openclaw/openclaw/pull/98876) Related [#98872](https://github.com/openclaw/openclaw/issues/98872). Thanks @qingminglong.
+- Message read, pinned-message, and search commands can now display more than 25 returned rows when a higher `--limit` is requested and warn when additional provider results remain. [#99089](https://github.com/openclaw/openclaw/pull/99089) Thanks @jerrytao-ai, @wm0018.
+- `openclaw --help` now matches command-specific help and completions, with `config patch` and `config schema` visible from the main command list. [#100670](https://github.com/openclaw/openclaw/pull/100670) Thanks @amirf194, @vincentkoc.
+- Terminal-rendered links containing balanced parentheses now remain clickable through the complete intended URL instead of being shortened or misdirected. [#100697](https://github.com/openclaw/openclaw/pull/100697) Thanks @aniruddhaadak80, @zoowh.
+- Generated shell completion now suggests accepted OpenClaw command aliases and continues completing their options and subcommands. [#99419](https://github.com/openclaw/openclaw/pull/99419) Thanks @amirf194, @jack-dev-ops, @vincentkoc.
+- Terminal and setup documentation links now resolve correctly when relative paths begin with `http` or absolute HTTP schemes use uppercase letters. [#96439](https://github.com/openclaw/openclaw/pull/96439) Thanks @lin-hongkuan.
+- Long IDs and scopes no longer push `openclaw commitments` columns out of alignment, keeping the table readable at a glance. [#95923](https://github.com/openclaw/openclaw/pull/95923) Thanks @parveshsaini.
+
+#### Devices, nodes, and Gateway administration
+
+##### Pairing and node management
+
+- Built-in `openclaw nodes status`, `openclaw nodes list`, and related node commands now start quickly without unnecessary plugin initialization, while plugin-provided node commands still load when requested. [#96702](https://github.com/openclaw/openclaw/pull/96702) Thanks @erhhung, @qijian-zhang, @zengwen-dt.
+- Failed `openclaw devices approve` attempts now explain whether to approve a scope upgrade elsewhere or refresh the pending request ID and retry. [#98146](https://github.com/openclaw/openclaw/pull/98146) Thanks @romneyda.
+- An invalid `openclaw nodes approve <requestId>` now shows available pending IDs and the `openclaw nodes pending` recovery command instead of a raw client error. [#94452](https://github.com/openclaw/openclaw/pull/94452) Thanks @mushuiyu886.
+- `openclaw pairing list` now gives a useful device-approval next step when no chat DM pairing channels exist instead of displaying a broken empty-choice error. [#98142](https://github.com/openclaw/openclaw/pull/98142) Thanks @romneyda.
+- Node status, list, and pending-pairing views now tolerate malformed saved values and show the usable node information instead of crashing. [#93930](https://github.com/openclaw/openclaw/pull/93930) Thanks @ly-wang19.
+- Operators can upgrade the Gateway before N-1 subordinate nodes without losing the normal update, restart, repair, status, and maintenance path for those nodes. [#101109](https://github.com/openclaw/openclaw/pull/101109) Thanks @jtczville.
+- `openclaw agents list` now shows configured external channels even when their plugin is missing and provides the appropriate install or `openclaw doctor --fix` guidance. [#95363](https://github.com/openclaw/openclaw/pull/95363) Thanks @hugenshen.
+
+##### Gateway status, connectivity, and recovery
+
+- `openclaw gateway status` now gives relevant credential, configuration, restart, and log guidance when a running Gateway fails its probe instead of telling operators to wait for warm-up. [#98183](https://github.com/openclaw/openclaw/pull/98183) Thanks @masatohoshino.
+- Remote node hosts can now connect to Gateways mounted at reverse-proxy paths such as `/openclaw-gw`, including after daemon installation or reconnect. [#97679](https://github.com/openclaw/openclaw/pull/97679) Related [#97678](https://github.com/openclaw/openclaw/issues/97678). Thanks @wm0018.
+- Linux operators now see when systemd has stopped restarting a repeatedly crashing Gateway, and `openclaw gateway restart` can recover the latched failed service. [#98291](https://github.com/openclaw/openclaw/pull/98291) Thanks @masatohoshino.
+- Control UI, pairing, setup-code, QR, and status links now prefer a reachable LAN address on hosts with VPNs, virtual adapters, WSL, Hyper-V, or multiple networks. [#98482](https://github.com/openclaw/openclaw/pull/98482) Thanks @joshavant.
+- `openclaw gateway status --deep` can now identify Windows Firewall rules blocking LAN devices and suggest practical rule, loopback, Tailscale, or SSH-tunnel remedies. [#98666](https://github.com/openclaw/openclaw/pull/98666) Thanks @joshavant.
+- `gateway run --force` now ignores malformed listener PID records during port cleanup instead of carrying invalid process state into recovery. [#98371](https://github.com/openclaw/openclaw/pull/98371) Thanks @lzyyzznl.
+- Gateway busy-port diagnostics and forced cleanup now ignore malformed listener IDs, avoid phantom processes, and verify that a port is actually free before reporting recovery. [#98505](https://github.com/openclaw/openclaw/pull/98505) Thanks @qiuyuang.
+- Windows now detects active Gateway listeners reliably from localized `netstat` output, improving port diagnostics and `gateway --force` cleanup without confusing established connections for listeners. [#100012](https://github.com/openclaw/openclaw/pull/100012) Thanks @qingminglong, @vincentkoc.
+- A Gateway WebSocket 1006 disconnect now gives operators accurate connection-loss guidance instead of implying that a healthy Gateway necessarily crashed. [#101219](https://github.com/openclaw/openclaw/pull/101219) Thanks @darren2030, @vincentkoc.
+- Windows Gateway restarts no longer depend on the `findstr` check that could leave a visible or hung command window blocking the handoff. [#101366](https://github.com/openclaw/openclaw/pull/101366) Thanks @deepujain.
+- `openclaw status`, `status --json`, and `status --all` now respect their timeout on Linux when systemd is unresponsive instead of hanging indefinitely. [#94149](https://github.com/openclaw/openclaw/pull/94149) Related [#84698](https://github.com/openclaw/openclaw/issues/84698). Thanks @zengwen-dt, @zus-assistant.
+- When a local Gateway is listening but unhealthy, `openclaw gateway status --deep` can surface a recent likely cause such as a full disk instead of only reporting a generic disconnect. [#95902](https://github.com/openclaw/openclaw/pull/95902) Thanks @vincentkoc, @wangbyg.
+- Remote Gateway status checks now fall back to the configured SSH target when local effective-config probing fails instead of crashing or stalling discovery. [#101160](https://github.com/openclaw/openclaw/pull/101160) Thanks @cxbasdev.
+
+#### Installation, updates, and backups
+
+The supported [installation](https://docs.openclaw.ai/install) and [update](https://docs.openclaw.ai/install/updating) paths preserve working state more carefully across packages, containers, and daemons. [Onboarding](https://docs.openclaw.ai/cli/onboard) and [doctor](https://docs.openclaw.ai/cli/doctor) retain choices through interrupted setup and migrations, surface actionable repair steps, and avoid silently continuing with stale services, missing plugins, or unusable model configuration.
+
+##### Installation and prerequisites
+
+- Shell-completion repair during `openclaw doctor` and updates now skips expensive plugin-command loading, avoiding unnecessary delays while full user-requested generation still includes plugin commands. [#76235](https://github.com/openclaw/openclaw/pull/76235)
+- Pressing Ctrl+C during the installer upgrade doctor now stops the flow cleanly and prevents an incomplete or failed installation from opening a stale dashboard. [#76386](https://github.com/openclaw/openclaw/pull/76386) Thanks @sebtardif.
+- LaunchAgent-managed Gateways on permission-constrained macOS volumes now start the generated environment wrapper through `/bin/sh`, preventing immediate background-service exits. [#89967](https://github.com/openclaw/openclaw/pull/89967) Related [#87199](https://github.com/openclaw/openclaw/issues/87199). Thanks @joshdaynard, @zhangguiping-xydt.
+- Windows command lookup now honors the caller's `PATHEXT`, allowing valid PowerShell scripts and executables to resolve in containers, CI, and isolated environments. [#98093](https://github.com/openclaw/openclaw/pull/98093) Thanks @wendy-chsy.
+- Windows Gateway setup now detects when Task Scheduler exits without starting a listener and can use the existing fallback launch without creating a duplicate if startup is merely late. [#76245](https://github.com/openclaw/openclaw/pull/76245)
+- Local Docker source builds are less likely to run out of memory, and failures that still exhaust memory now suggest the relevant build settings. [#98119](https://github.com/openclaw/openclaw/pull/98119) Related [#98118](https://github.com/openclaw/openclaw/issues/98118). Thanks @zyzo.
+- First-run skill setup on minimal machines now groups missing Homebrew, uv, or Go prerequisites into one clear note while still installing dependencies that can succeed. [#99726](https://github.com/openclaw/openclaw/pull/99726) Thanks @fuller-stack-dev, @sedrak-hovhannisyan.
+- Installers and runtime checks now reject Node 23.0-23.10 early with supported-version guidance instead of leaving users with a broken OpenClaw CLI. [#99832](https://github.com/openclaw/openclaw/pull/99832) Thanks @fuller-stack-dev, @vincentkoc.
+- The CLI and full-screen TUI now open with a clear recovery message when their launch directory has been deleted instead of crashing before startup. [#93636](https://github.com/openclaw/openclaw/pull/93636) Thanks @ml12580.
+- Windows users can launch globally installed Gemini CLI and Claude Code backends through their npm command shims without immediate spawn failures or mangled prompt arguments. [#101378](https://github.com/openclaw/openclaw/pull/101378) Thanks @wendy-chsy.
+- Failed CLI installations now clean up their temporary Node staging directories and pnpm workspace rewrite files. [#103725](https://github.com/openclaw/openclaw/pull/103725) Thanks @sebtardif.
+- Git installs now create an `openclaw` launcher that keeps using the intended Node.js runtime even after the user's PATH changes. [be7198f](https://github.com/openclaw/openclaw/commit/be7198f6a2225dd988e707c4ef11c3cf002c14c3)
+- `openclaw plugins list` now uses substantially less peak memory on fresh and already-migrated packaged installs while preserving required migration behavior. [#103132](https://github.com/openclaw/openclaw/pull/103132)
+
+##### Updates and service handoff
+
+- OpenClaw update checks now limit malformed or unexpectedly large npm registry responses before they can consume excessive memory. [#98508](https://github.com/openclaw/openclaw/pull/98508) Thanks @lzyyzznl.
+- `openclaw update` on Windows now prevents the managed Gateway Scheduled Task from relaunching during package replacement, avoiding partially updated or mixed-version processes. [#100757](https://github.com/openclaw/openclaw/pull/100757) Thanks @vincentkoc.
+- Managed Gateway updates now allow active work to finish within the configured drain period before timing out the service handoff. [#99695](https://github.com/openclaw/openclaw/pull/99695) Thanks @zoowh.
+- Extended-stable Gateways now show a periodic `openclaw update` hint when a newer exact package is verified, without changing the installation automatically. [#100438](https://github.com/openclaw/openclaw/pull/100438) Thanks @kevinslin.
+- Restarting, updating, reinstalling, or repairing a macOS Gateway now preserves active SecretRef-backed channel credentials instead of leaving Telegram and other integrations unable to authenticate. [#99124](https://github.com/openclaw/openclaw/pull/99124) Thanks @mushuiyu886.
+- Update and status checks now identify malformed npm metadata as invalid JSON instead of returning only an opaque syntax error. [#100338](https://github.com/openclaw/openclaw/pull/100338) Thanks @cxbasdev.
+- A failed Gateway replacement process during an update no longer causes an additional uncaught crash in the existing parent process. [#101489](https://github.com/openclaw/openclaw/pull/101489) Thanks @aniruddhaadak80, @momothemage, @vincentkoc.
+- Windows update and doctor repair now move an owned legacy Startup gateway to Task Scheduler without leaving a stale process, dropping authentication, or removing the fallback too early. [#101213](https://github.com/openclaw/openclaw/pull/101213) Thanks @vincentkoc.
+- `openclaw update` now targets the global Node installation that launched it, avoiding false success when Homebrew, nvm, asdf, or Volta exposes another OpenClaw copy. [#101228](https://github.com/openclaw/openclaw/pull/101228) Thanks @buddyh.
+
+##### Backups and durable state
+
+- Windows backups now recover more reliably from live-write races by avoiding repeated use of the same locked temporary archive and cleaning stale retry files. [#101449](https://github.com/openclaw/openclaw/pull/101449) Thanks @lilan0125, @vincentkoc.
+- Large session histories now produce smaller `.usage-cost-cache.json` files with less parsing and rewrite work, rebuilding automatically after upgrade. [#99714](https://github.com/openclaw/openclaw/pull/99714) Related [#99511](https://github.com/openclaw/openclaw/issues/99511). Thanks @dexhunter, @wayne524.
+- `openclaw backup create` now tolerates disposable runtime files disappearing during a live backup, while continuing to protect durable files under the existing inclusion policy. [#98879](https://github.com/openclaw/openclaw/pull/98879) Related [#98865](https://github.com/openclaw/openclaw/issues/98865). Thanks @carterstebbins23-spec, @vincentkoc, @zengwen-dt.
+- `openclaw backup create` on Windows now retries live-file archive races with fresh temporary paths, reducing locked partial backups and leftover retry archives. [#101464](https://github.com/openclaw/openclaw/pull/101464) Thanks @lilan0125, @zoowh.
+
+#### Scheduled work
+
+[Scheduled automation](https://docs.openclaw.ai/automation/cron-jobs) retains intended models, timing, state, and delivery across more restarts and edits. Tool calls and results also recover more cleanly from timeouts, malformed content, oversized output, and interrupted work instead of leaving a task looking complete when its usable result was lost.
+
+##### Cron configuration and administration
+
+- When cron command output is truncated, operators can still recover the earlier login or setup instruction they need without exposing its raw secret through notifications. [#96393](https://github.com/openclaw/openclaw/pull/96393) Related [#96346](https://github.com/openclaw/openclaw/issues/96346). Thanks @nz365guy.
+- Default cron failure alerts enabled with `openclaw cron edit <job> --failure-alert` now survive Gateway restarts instead of silently disappearing after reload. [#96615](https://github.com/openclaw/openclaw/pull/96615) Thanks @liuhao1024.
+- `openclaw doctor` now warns when cron jobs target channels whose plugins are inactive, letting operators correct delivery before the next scheduled run fails. [#98184](https://github.com/openclaw/openclaw/pull/98184) Thanks @masatohoshino, @vincentkoc.
+- Docker and bind-mount installations can finish legacy cron migration across filesystem boundaries, with actionable warnings and duplicate-safe retries when cleanup cannot complete. [#98217](https://github.com/openclaw/openclaw/pull/98217) Thanks @masatohoshino.
+- `openclaw doctor` now explains cron jobs that still look in flight after an interrupted Gateway run and how those leftover markers are cleared on the next start. [#98620](https://github.com/openclaw/openclaw/pull/98620) Thanks @masatohoshino.
+- Doctor now warns when enabled cron jobs are stuck in repeated failures without configured alerts, while healthy and below-threshold jobs stay quiet. [#99606](https://github.com/openclaw/openclaw/pull/99606) Thanks @masatohoshino.
+- `openclaw cron add` now rejects invalid `--no-output-timeout-seconds` and `--output-max-bytes` values immediately instead of silently creating a command job without the requested limits. [#96516](https://github.com/openclaw/openclaw/pull/96516) Thanks @zhangguiping-xydt.
+- Human-readable `cron list` and `cron show` output now reveals repeated failure streaks such as `error (12x)` while leaving JSON status values unchanged. [#99602](https://github.com/openclaw/openclaw/pull/99602) Thanks @masatohoshino.
+- Operators can opt into `core/doctor/legacy-cron-store` to find legacy cron data that needs attention without the lint check changing any stored state. [#99211](https://github.com/openclaw/openclaw/pull/99211) Thanks @giodl73-repo.
+- A normal Doctor lint run no longer invokes `crontab -l` for the optional legacy WhatsApp check unless an operator explicitly selects it. [#99250](https://github.com/openclaw/openclaw/pull/99250) Thanks @giodl73-repo.
+- Cron jobs with a valid future run exactly on a second boundary now keep that scheduled time instead of being incorrectly treated as stale and rebased. [#81731](https://github.com/openclaw/openclaw/pull/81731) Thanks @vincentkoc, @yashkot007.
+- Editing a recurring cron job no longer skips a run that is already due or shifts an unchanged interval schedule to the edit time. [#96159](https://github.com/openclaw/openclaw/pull/96159) Thanks @yetval.
+- Clearing a saved Model or Thinking/Effort override in the Cron Control UI now truly restores inherited defaults, with `--clear-thinking` available from the CLI. [#96293](https://github.com/openclaw/openclaw/pull/96293) Related [#96287](https://github.com/openclaw/openclaw/issues/96287). Thanks @takamasa-aiso, @zengwen-dt.
+- Failed `cron add`, `cron update`, and `cron remove` commands now leave the running scheduler unchanged, so live jobs match the saved configuration and reported result. [#99960](https://github.com/openclaw/openclaw/pull/99960) Thanks @masatohoshino, @vincentkoc.
+- Editing a scheduled job's message no longer accidentally breaks later CLI-backed runs, while explicit tool restrictions remain protected where they cannot be enforced. [#100203](https://github.com/openclaw/openclaw/pull/100203) Thanks @obviyus.
+- Cron job updates can now remove a job-specific fallback model setting so scheduled runs inherit the global defaults again without recreating the job. [#100801](https://github.com/openclaw/openclaw/pull/100801) Thanks @sunnyshu0925.
+- `openclaw cron edit` now finds jobs more reliably and with less delay on Gateways that contain many scheduled jobs, including `--exact` and timeout-only edits. [#100836](https://github.com/openclaw/openclaw/pull/100836) Thanks @machine3at, @vincentkoc.
+- Editing a cron payload with `--no-best-effort-deliver` no longer silently changes the job's delivery mode to announcements. [#100846](https://github.com/openclaw/openclaw/pull/100846) Thanks @machine3at.
+- Using `openclaw cron edit <id> --no-best-effort-deliver` on an older detached job no longer accidentally suppresses its completion announcement. [#101027](https://github.com/openclaw/openclaw/pull/101027)
+- Agent and MCP cron requests using mixed-case command labels now fail closed instead of slipping past the restriction on shell-backed agent cron jobs. [#101350](https://github.com/openclaw/openclaw/pull/101350) Thanks @pgondhi987.
+- Replies now correctly confirm reminders scheduled through commands such as `openclaw cron add` instead of also claiming that no reminder was created. [#101807](https://github.com/openclaw/openclaw/pull/101807) Thanks @bryantegomoh, @vincentkoc.
+
+##### Scheduled runs, delivery, and recovery
+
+- A timeout while one isolated cron job is setting up no longer restarts the Gateway or interrupts unrelated agent and scheduled work. [#96396](https://github.com/openclaw/openclaw/pull/96396) Thanks @849261680, @brycemurray, @velvet-shark.
+- `openclaw tasks maintenance --apply` now preserves active cron session history even when job IDs contain spaces, capitals, punctuation, or explicit session keys. [#96352](https://github.com/openclaw/openclaw/pull/96352) Thanks @ly-wang19, @vincentkoc.
+- Isolated `agentTurn` cron jobs can recover from temporarily mismatched runtime artifacts instead of failing at startup with a `sourceReplyDeliveryMode` error. [#85249](https://github.com/openclaw/openclaw/pull/85249) Thanks @jerry-xin.
+- `openclaw tasks maintenance --apply` can now repair false lost-task records when durable cron history proves the run completed successfully. [#86088](https://github.com/openclaw/openclaw/pull/86088) Thanks @altaywtf, @liaoandi.
+- Scheduled agent jobs now warn when `ANNOUNCE_SKIP` suppresses a cron completion, making missing reports and partial output easier to diagnose. [#90566](https://github.com/openclaw/openclaw/pull/90566) Related [#68561](https://github.com/openclaw/openclaw/issues/68561). Thanks @mibslee, @sahibzada-allahyar.
+- Catch-up cron jobs deferred briefly after startup are no longer skipped merely because an operator checks cron status before they fire. [#94022](https://github.com/openclaw/openclaw/pull/94022) Related [#93935](https://github.com/openclaw/openclaw/issues/93935). Thanks @richchen01, @vincentkoc, @yetval.
+- Scheduled agent turns using `claude-cli` or another CLI backend now start normally, while explicitly unsupported tool restrictions still fail closed. [#95615](https://github.com/openclaw/openclaw/pull/95615) Thanks @anagnorisis2peripeteia, @obviyus.
+- Timed-out or cancelled isolated cron runs now retain their provider, model, and session details in `cron_run_logs`, making failed jobs easier to trace. [#95943](https://github.com/openclaw/openclaw/pull/95943) Related [#95873](https://github.com/openclaw/openclaw/issues/95873). Thanks @luke-renjoy, @zengwen-dt.
+- A scheduled cloud-model job that opens a response but sends no content can now move to a healthy fallback model before the entire run times out. [#96096](https://github.com/openclaw/openclaw/pull/96096) Thanks @849261680, @velvet-shark.
+- CLI-backed workers from isolated cron jobs now exit after completion instead of accumulating and slowing the host and Gateway. [#97227](https://github.com/openclaw/openclaw/pull/97227) Thanks @vianne-droid, @xialonglee, @yusukeit0.
+- Long cron failure alerts now preserve emoji and other supplementary Unicode characters instead of ending with a broken replacement symbol. [#97298](https://github.com/openclaw/openclaw/pull/97298) Thanks @zenglingbiao.
+- Heartbeat fallback failures no longer send noisy chat messages made only of repeated internal error placeholders. [#97364](https://github.com/openclaw/openclaw/pull/97364) Thanks @turbotheturtle.
+- Scheduled jobs that permit `web_search` now report that no usable search provider is selected instead of completing with an unusable result. [#97677](https://github.com/openclaw/openclaw/pull/97677) Thanks @lilan0125, @riazrahaman.
+- Scheduled commitment follow-ups now stay focused on their original conversation instead of absorbing unrelated heartbeat instructions, queued context, or recovery work. [#98169](https://github.com/openclaw/openclaw/pull/98169) Thanks @bdjben.
+- Scheduled jobs can deliver to a live chat without blocking replies or mixing background work into its transcript, and operators can clear stale childless cron tasks without cancelling active session-backed runs. [#98755](https://github.com/openclaw/openclaw/pull/98755) Related [#98121](https://github.com/openclaw/openclaw/issues/98121). Thanks @ethansk, @obviyus.
+- Recurring cron jobs created for `current` or `session:<id>` once again carry their selected conversation history into later runs, while `isolated` jobs still start clean. [#98947](https://github.com/openclaw/openclaw/pull/98947) Thanks @ethansk, @obviyus.
+- Completed heartbeat tasks remain recorded when the quiet `HEARTBEAT_OK` acknowledgment cannot be delivered, reducing repeated work and duplicate follow-up actions on the next heartbeat. [#100834](https://github.com/openclaw/openclaw/pull/100834) Thanks @machine3at, @vincentkoc.
+
+#### Browser control
+
+##### Connections, profiles, and tab control
+
+- Browser CLI commands now accept `--browser-profile` before or after the subcommand, restoring existing remote-browser and WSL2 command patterns. [#94431](https://github.com/openclaw/openclaw/pull/94431) Thanks @ml12580.
+- A stalled remote Chrome or WSL2 browser can no longer hold tab-list requests indefinitely; OpenClaw returns a bounded timeout and can reconnect on the next request. [#80147](https://github.com/openclaw/openclaw/pull/80147) Thanks @hemantsudarshan, @keaneyan.
+- Remote-browser actions now recover from a closed or replaced selected tab by retrying without the stale tab ID, matching local browser behavior. [#89086](https://github.com/openclaw/openclaw/pull/89086) Thanks @rhclaw.
+- Updating `browser.profiles.*` connection details can now take effect without an unnecessary Gateway restart or interruption to active sessions. [#93827](https://github.com/openclaw/openclaw/pull/93827) Thanks @goutamadwant.
+- Browser automation can now act on tabs by suggested ID, tab ID, label, or unique prefix without false target-mismatch failures. [#96178](https://github.com/openclaw/openclaw/pull/96178) Thanks @zengwen-dt.
+- Persistent managed-browser logins now survive ordinary Chrome and Gateway restarts, reducing repeated sign-ins and MFA interruptions for unattended browser work. [#98284](https://github.com/openclaw/openclaw/pull/98284) Thanks @malashenia, @turbotheturtle.
+- Browser extensions can reconnect with a newly rotated pairing token while Browser control remains running, and old tokens continue to be rejected. [a703183](https://github.com/openclaw/openclaw/commit/a7031832ecd5bb9eba30ce844b1a059c9c3b5395) Thanks @vincentkoc.
+- Remote browser CDP connections now accept URL-encoded Basic auth credentials containing spaces, at signs, and other reserved characters. [#97972](https://github.com/openclaw/openclaw/pull/97972) Thanks @vectorpeak.
+- Running `/new` or `/reset` in a direct message now closes that conversation's managed browser tabs while leaving other people's tabs alone, even through a brief browser connection hiccup. [#100792](https://github.com/openclaw/openclaw/pull/100792) Thanks @fmls.
+- Agents can now screenshot a selected background Chromium tab without waiting for the browser command to time out, though capture may bring that tab forward. [#100857](https://github.com/openclaw/openclaw/pull/100857) Thanks @spencer2211.
+- Managed local browser pages can navigate normally under a restrictive `browser.ssrfPolicy.hostnameAllowlist`, while remote CDP endpoints and disallowed destinations remain blocked. [#100986](https://github.com/openclaw/openclaw/pull/100986) Thanks @nianjiuzst, @sarinv.
+- Browser automation attached to an existing Chrome session now stops with a bounded error when Chrome crashes or a request is cancelled, and later requests can reconnect cleanly. [#101454](https://github.com/openclaw/openclaw/pull/101454) Thanks @aniruddhaadak80.
+- Browser Control users who are missing Playwright now receive a working documentation pointer for installing or repairing the required browser runtime. [d460635](https://github.com/openclaw/openclaw/commit/d460635185a499ffb96b3ca32df8a05d058c9145)
+- Browser Control can now emulate no explicit color preference with `openclaw browser set media no-preference`, and invalid values list every supported choice. [9133118](https://github.com/openclaw/openclaw/commit/913311845ebdab6faf701ee73e07465f171274e7)
+- Browser POST actions now complete on supported Node 24.16 and newer runtimes after JSON parsing while still cancelling when the client disconnects. [52044e1](https://github.com/openclaw/openclaw/commit/52044e134567ebe3598684b6f968027723dd86a5) Thanks @obviyus, @vincentkoc.
+
+##### Downloads, uploads, screenshots, and page data
+
+- CDP-backed browser navigation to CSV, PDF, and other attachment URLs now returns a safely saved managed file with its URL and suggested filename. [#89416](https://github.com/openclaw/openclaw/pull/89416) Thanks @zhangguiping-xydt.
+- Browser downloads now tell the agent the saved filename and path, helping it use the completed download instead of retrying the action. [#93307](https://github.com/openclaw/openclaw/pull/93307) Thanks @sunlit-deng.
+- Oversized browser-control error responses can no longer consume excessive Gateway memory, while ordinary failures still provide useful diagnostics. [#98455](https://github.com/openclaw/openclaw/pull/98455) Thanks @wings1029.
+- Browser `responsebody` requests for a short prefix of a large response now avoid decoding a second full-size text copy while still returning the requested truncated content. [#98940](https://github.com/openclaw/openclaw/pull/98940) Thanks @pandah97.
+- Malformed browser fill data supplied through `--fields` or `--fields-file` now produces a clear actionable error and exits before any browser action starts. [#98861](https://github.com/openclaw/openclaw/pull/98861) Thanks @lsr911.
+- Browser screenshots used privately for visual inspection are no longer attached automatically to channel replies and are shared only when explicitly requested. [#101434](https://github.com/openclaw/openclaw/pull/101434)
+- Browser uploads on re-rendering pages now recover more reliably and expose the real stale-reference or action error instead of a generic timeout. [#101465](https://github.com/openclaw/openclaw/pull/101465) Thanks @diwakarrankawat, @m13v, @tigicion.
+- Browser response bodies and page snapshots now stay valid and readable when output is shortened near an emoji. [#101761](https://github.com/openclaw/openclaw/pull/101761) Thanks @mushuiyu886.
+
+#### Files, documents, and media
+
+##### PDFs and image understanding
+
+- Vision-capable models can now read rendered pages from scanned and image-only PDFs attached through chat channels. [#97354](https://github.com/openclaw/openclaw/pull/97354) Thanks @joshavant.
+- `openclaw infer image describe` now tries configured fallback image models after an explicitly selected model fails and reports which model ultimately succeeded. [#98347](https://github.com/openclaw/openclaw/pull/98347) Thanks @momothemage.
+- Multi-page scanned PDFs now keep later pages at a usable image size during fallback extraction, allowing vision models to read the full document. [#96390](https://github.com/openclaw/openclaw/pull/96390) Thanks @cls3389, @vincentkoc, @zengwen-dt.
+- Requesting nonexistent PDF pages now returns a clear range error instead of accidentally sending the entire document to a native provider. [#97698](https://github.com/openclaw/openclaw/pull/97698) Thanks @zhangguiping-xydt.
+- Fractional PDF page selections such as `1.5` now fail immediately with a clear validation error instead of silently omitting requested content. [#99399](https://github.com/openclaw/openclaw/pull/99399) Thanks @qingminglong.
+
+##### Media, attachments, and file transfer
+
+- Screenshot-style images returned by plugin tools over MCP now reach clients as usable results instead of causing the tool call to fail. [#90902](https://github.com/openclaw/openclaw/pull/90902) Thanks @k-schmidt, @mushuiyu886.
+- After one generated video clip is ready, a different next clip can start immediately instead of waiting several extra minutes behind stale duplicate suppression. [#96018](https://github.com/openclaw/openclaw/pull/96018) Thanks @palomyates516-alt, @vincentkoc.
+- `openclaw capability video generate` now returns a bounded, actionable error when a provider URL serves an oversized video without `--output`. [#97549](https://github.com/openclaw/openclaw/pull/97549) Thanks @alix-007.
+- Fetching an empty file with an image-style name now returns a clear saved-file path instead of an unusable inline image result. [#99370](https://github.com/openclaw/openclaw/pull/99370) Thanks @2loch-ness6, @vincentkoc.
+- File Transfer folder downloads now either produce a complete verified archive or report a clear read failure instead of crashing or returning partial data. [#101590](https://github.com/openclaw/openclaw/pull/101590) Thanks @sunlit-deng.
+- Multi-attachment prompts now keep real captions while removing duplicate transport markers and placeholder-only text that could confuse the model. [#96431](https://github.com/openclaw/openclaw/pull/96431) Thanks @lin-hongkuan.
+- GIF attachments are now recognized despite normal Content-Type parameters, spaces, or mixed casing instead of falling through as another media type. [#96435](https://github.com/openclaw/openclaw/pull/96435) Thanks @lin-hongkuan.
+- Valid inline image data URLs without trailing base64 padding are now accepted, while malformed image payloads remain blocked. [#96437](https://github.com/openclaw/openclaw/pull/96437) Thanks @lin-hongkuan, @vincentkoc.
+- Video inputs near the configured size boundary are now accepted or rejected according to their actual byte size, avoiding unexpected failures for files that are still within the limit. [#96519](https://github.com/openclaw/openclaw/pull/96519) Thanks @lin-hongkuan, @vincentkoc.
+- Markdown frontmatter now preserves null-valued fields named `toString`, `constructor`, `valueOf`, or `hasOwnProperty` instead of silently dropping metadata from skills, hooks, or commands. [#99129](https://github.com/openclaw/openclaw/pull/99129) Thanks @vincentkoc, @zenglingbiao.
+- Markdown beginning with text such as `---not` or `----` now remains ordinary content instead of being mistaken for frontmatter and stripped. [#101795](https://github.com/openclaw/openclaw/pull/101795) Thanks @nianjiuzst.
+
+#### Worktrees and sandboxes
+
+##### Managed worktrees
+
+- Workboard tasks can now use managed isolated worktrees, with CLI and Control UI tools for creation, cleanup, restoration, and recovery snapshots when work cannot be removed safely. [#100535](https://github.com/openclaw/openclaw/pull/100535)
+- Users can now start a chat in its own managed worktree from the Control UI or mobile app, isolating parallel coding while preserving dirty work and cleaning safe idle checkouts automatically. [#100788](https://github.com/openclaw/openclaw/pull/100788)
+
+##### Sandboxes and workspace paths
+
+- Agent commands with an invalid explicit `workdir`, including a literal `~`, now stop clearly instead of running from an unintended fallback directory. [#94441](https://github.com/openclaw/openclaw/pull/94441) Thanks @jesse-merhi, @renaudcerrato.
+- SSH- and OpenShell-backed sandbox commands now clean up remote resources after failed launches, preserve the correct plugin session and channel context, and return a normal tool error for malformed input instead of an internal WeakMap failure. [#96926](https://github.com/openclaw/openclaw/pull/96926) Thanks @jesse-merhi.
+- OpenShell sandbox sessions now start with the intended workspace files in the managed remote directory, avoiding missing-file and wrong-directory failures. [d9034da](https://github.com/openclaw/openclaw/commit/d9034da0a60600cb1d2e081cb80e619ff7d180c5) Thanks @vincentkoc.
+- The optional common sandbox image now includes Node 24 and pnpm so documented Node-based development tasks can run inside it. [eabc12b](https://github.com/openclaw/openclaw/commit/eabc12b7d66687f6829009c103c0f33114e2949e) Thanks @vincentkoc.
+- OpenShell sandbox uploads now place workspace directories at the requested remote path so sandbox commands can reliably find their files. [#96303](https://github.com/openclaw/openclaw/pull/96303) Thanks @vincentkoc.
+
+#### Command execution
+
+##### Process execution and cleanup
+
+- Pending exec approval cards now describe only the approval state, and the foreground-fallback warning appears only after a command actually runs that way. [#101561](https://github.com/openclaw/openclaw/pull/101561) Thanks @vincentkoc.
+- Timed-out commands on Windows are less likely to leave child processes running when `taskkill.exe` cannot start. [#101392](https://github.com/openclaw/openclaw/pull/101392) Thanks @aniruddhaadak80, @zengwen-dt.
+- Failed shell-tool messages now separate the command the agent typed from framework labels and show the exit code, node, and working directory more clearly. [#97511](https://github.com/openclaw/openclaw/pull/97511) Thanks @aditya-vithaldas.
+- Exec and finished background-session results now include signals, timeout flags, failure kinds, and exit reasons so users can tell why a command stopped. [#89104](https://github.com/openclaw/openclaw/pull/89104) Thanks @yu-xin-c.
+- Windows `autoreview --engine copilot` runs now return a completed review result even when temporary-directory cleanup is briefly delayed. [#97901](https://github.com/openclaw/openclaw/pull/97901) Thanks @paulcam206.
+- Oversized local socket replies now fail promptly without consuming memory until timeout, while large macOS commands still return completion status and bounded recent output. [#98130](https://github.com/openclaw/openclaw/pull/98130) Thanks @pick-cat.
+- Timed-out, aborted, or output-limited extension commands now clean up their child processes instead of leaving background work running after `api.exec()` returns. [#98340](https://github.com/openclaw/openclaw/pull/98340) Related [#98335](https://github.com/openclaw/openclaw/issues/98335). Thanks @ooiuuii.
+- Emoji and other supplementary Unicode characters remain intact when long command output is shortened for polls, completion notices, or approval follow-ups. [#98721](https://github.com/openclaw/openclaw/pull/98721) Thanks @zengwen-dt.
+- A set of failure-path fixes now keeps commands and maintenance tasks running through isolated errors, preserves terminal and model text, improves skill and approval diagnostics, and stops Android voice sessions cleanly after microphone loss. [#100440](https://github.com/openclaw/openclaw/pull/100440) Thanks @cxbasdev, @lavyatandel, @nankingjing, @nianjiuzst, @tzy-17, @wendy-chsy.
+- Agent workflows can now survive transient stdout or stderr read failures from helper processes instead of losing the whole OpenClaw process. [#100522](https://github.com/openclaw/openclaw/pull/100522) Thanks @cxbasdev, @vincentkoc.
+- Docker sandbox commands now return an explicit failure when output cannot be read instead of crashing OpenClaw or reporting an incomplete result as successful. [#100523](https://github.com/openclaw/openclaw/pull/100523) Thanks @cxbasdev.
+- Crestodian setup and local-tool checks no longer terminate OpenClaw when a probed command encounters a rare output-stream read failure. [#100741](https://github.com/openclaw/openclaw/pull/100741) Thanks @lsr911.
+- Stopping a chat through `chat.abort` can now find and terminate its matching embedded run instead of reporting failure while the underlying tool process continues. [#101222](https://github.com/openclaw/openclaw/pull/101222) Thanks @zoowh.
+- Broken child-process output, timeouts, and aborts during agent shell commands are now contained instead of causing rare Gateway crashes. [#101370](https://github.com/openclaw/openclaw/pull/101370) Thanks @wings1029.
+- Repeated failed or cancelled agent directory listings now release their cancellation listeners, avoiding listener buildup over time. [#101588](https://github.com/openclaw/openclaw/pull/101588) Thanks @lzw112.
+- Codex session tools now honor their requested seconds-based timeout and return their own useful timeout status instead of ending early. [#100722](https://github.com/openclaw/openclaw/pull/100722) Thanks @carterstebbins23-spec, @cxbasdev.
+- Cancelled ACP background tasks now appear as cancelled in task lists, summaries, and parent-run updates rather than being reported as successful. [#101245](https://github.com/openclaw/openclaw/pull/101245) Thanks @masatohoshino.
+
+##### Editing, diffs, and task recovery
+
+- Reliability fixes now reject unsafe cron and plugin inputs, preserve skill formatting, surface Gateway and memory failures, fail LSP startup sooner, and prevent stale Android camera results after cancellation. [#100399](https://github.com/openclaw/openclaw/pull/100399) Thanks @849261680, @anyech, @cxbasdev, @lin-hongkuan, @masatohoshino, @nankingjing, @qingminglong, @simon-xydt, @snotty, @xialonglee.
+- A broad reliability pass now replaces stalled child-process work with clear errors, improves sandbox diagnostics, bounds mobile calendar and voice state, normalizes cron fallbacks, and rejects unsafe provider responses. [#100483](https://github.com/openclaw/openclaw/pull/100483) Thanks @aniruddhaadak80, @cxbasdev, @jincheng-xydt, @morluto, @nianjiuzst, @pandah97, @versatagent, @xialonglee, @zenglingbiao, @zengwen-dt.
+- Agent runs now stop cleanly when a `write`, `edit`, or `apply_patch` operation would make no change, preventing repeated false-progress retries while real mutations and valid sibling edits continue normally. [#97044](https://github.com/openclaw/openclaw/pull/97044) Thanks @vincentkoc, @zw-xysk.
+- The diffs tool now renders default outputs faster, preserves highlighting for pack-only languages, handles unchanged input clearly, and reports file-render and invalid-patch errors more accurately. [#100487](https://github.com/openclaw/openclaw/pull/100487)
+- Failed code-mode tool attempts now show the error type, message, and location, giving the model and operator enough detail to diagnose or correct the problem. [#95906](https://github.com/openclaw/openclaw/pull/95906) Thanks @vincentkoc, @zengwen-dt.
+- When the edit tool cannot match `oldText`, its error now points to likely nearby lines and explains common indentation, escaping, and whitespace differences, reducing blind retries. [#97038](https://github.com/openclaw/openclaw/pull/97038) Thanks @aocogoal-gethub, @vincentkoc, @zoowh.
+- Legacy task upgrades now restore persisted tasks automatically, preventing linked TaskFlows from falsely reporting them missing or requiring manual SQLite recovery. [#103946](https://github.com/openclaw/openclaw/pull/103946) Thanks @bek91, @theo674.
+- Terminal task lists now shorten emoji-heavy summaries without leaving broken replacement characters in the row. [#101600](https://github.com/openclaw/openclaw/pull/101600) Thanks @maweibin.
+- Progress summaries for inline scripts and generated files no longer present heredoc content as extra shell commands that ran. [#99379](https://github.com/openclaw/openclaw/pull/99379) Thanks @zengwen-dt.
+- Failed exact-match edits now show readable current-file context even when truncation falls beside an emoji or other non-BMP character. [#99527](https://github.com/openclaw/openclaw/pull/99527) Thanks @mikasa0818.
+
+#### Search and web
+
+##### Web fetch and link understanding
+
+- `web_fetch` now reaches provider fallback much faster for shell-style pages with no locally extractable content, cutting the measured fresh-process delay from several seconds to about one. [#98559](https://github.com/openclaw/openclaw/pull/98559) Thanks @vincentkoc.
+- `web_fetch` now handles malformed or adversarial HTML more predictably, reducing excessive processing and keeping hidden script-like text out of fallback output. [#102033](https://github.com/openclaw/openclaw/pull/102033) Thanks @pgondhi987.
+- Agent-side `web_search` now sees the configured provider in the active runtime, so Gateway and channel sessions can keep using providers such as Brave without a restart. [#88684](https://github.com/openclaw/openclaw/pull/88684) Thanks @alexzhu0, @vincentkoc.
+- Link understanding now keeps page fetching available for the slowest configured fallback and applies `tools.links.timeoutSeconds` consistently regardless of model order. [#100731](https://github.com/openclaw/openclaw/pull/100731) Thanks @aniruddhaadak80, @cxbasdev.
+- Recovered `web_fetch` spill files now keep emoji intact and report the actual safely written length when a long page exceeds the inline limit. [#101312](https://github.com/openclaw/openclaw/pull/101312) Thanks @alix-007.
+- `web_fetch` now preserves emoji, mathematical symbols, extended Unicode, and intentionally escaped numeric entity text more faithfully. [#96268](https://github.com/openclaw/openclaw/pull/96268) Thanks @ly-wang19.
+- DuckDuckGo results now preserve intentional entity notation such as `<` and `'` instead of silently changing titles, snippets, or URLs. [#96348](https://github.com/openclaw/openclaw/pull/96348) Thanks @ly-wang19, @vincentkoc.
+- Canvas embed replies now retain their visible message text when a self-closing embed shortcode is followed by an extra closing marker. [#96449](https://github.com/openclaw/openclaw/pull/96449) Thanks @ly-wang19.
+- Bracketed labels in Markdown citations no longer make link understanding fetch display-only URLs that the user did not intend to retrieve. [#96476](https://github.com/openclaw/openclaw/pull/96476) Thanks @ly-wang19, @vincentkoc.
+- DuckDuckGo search pages containing malformed numeric HTML entities no longer crash parsing or inject broken Unicode into titles, URLs, and snippets, while valid emoji entities remain supported. [#96583](https://github.com/openclaw/openclaw/pull/96583) Thanks @llagy007, @weeli-009.
+
+##### Local and tool search
+
+- When an installed `fd` or `rg` binary is unusable, agent search can now install a working copy and recover instead of failing repeatedly. [#96361](https://github.com/openclaw/openclaw/pull/96361) Thanks @miorbnli.
+- A failed `find` search now returns one contained tool error and stops its `fd` process instead of risking an agent crash or orphaned search. [#101158](https://github.com/openclaw/openclaw/pull/101158) Thanks @cxbasdev.
+- Tool Search now fails the affected call cleanly and terminates its unusable child when the diagnostic stream breaks, rather than risking a stranded request or Gateway crash. [#101295](https://github.com/openclaw/openclaw/pull/101295) Thanks @cxbasdev.
+- QMD command pipe failures now report a clean memory-operation error instead of taking down the memory host. [#101402](https://github.com/openclaw/openclaw/pull/101402) Thanks @wings1029.
+- The agent `find` tool now reports an interrupted or failed directory search as an error instead of returning a partial match list as complete. [#99446](https://github.com/openclaw/openclaw/pull/99446) Thanks @zhangguiping-xydt.
+
+#### SDK, MCP, and tools
+
+Agents can read scanned PDFs with vision-capable models, work in isolated coding checkouts, and handle files, media, browser results, and execution failures with more usable output. [Browser control](https://docs.openclaw.ai/tools/browser-control) preserves pairing and download state more reliably, while parallel workspace operations are less likely to collide with one another or the user's current files.
+
+##### MCP, ACP, and tool protocols
+
+- Shortened tool descriptions in catalogs and `/tools verbose` no longer split emoji or other Unicode characters into garbled replacement symbols. [#98644](https://github.com/openclaw/openclaw/pull/98644) Thanks @zengwen-dt.
+- `openclaw mcp serve` and bare `openclaw acp` now begin with clean machine-protocol output, preventing startup warnings from corrupting JSON-RPC for MCP and ACP clients. [#89997](https://github.com/openclaw/openclaw/pull/89997) Thanks @kenners22, @vincentkoc.
+- When a bundled MCP server stops mid-session, users now get a prompt server-specific disconnect message and can clear the dead session by refreshing the catalog. [#98738](https://github.com/openclaw/openclaw/pull/98738) Thanks @masatohoshino, @vincentkoc.
+- Malformed draft-2020-12 tool schemas from an MCP server now produce an actionable setup error that identifies the external schema and retains the underlying failure. [#89619](https://github.com/openclaw/openclaw/pull/89619) Thanks @vincentkoc.
+- Prompt templates now preserve intentionally blank quoted arguments so later positional placeholders receive the correct values. [#96405](https://github.com/openclaw/openclaw/pull/96405) Thanks @lin-hongkuan.
+- OpenTelemetry latency dashboards now provide useful duration and context-size distributions for agent and harness work lasting well beyond 10 seconds, including multi-minute runs, without collector-side bucket customization. [#96592](https://github.com/openclaw/openclaw/pull/96592) Thanks @hcnode, @vincentkoc, @zhiling-chen-20230331.
+- MCP tools now receive optional null values correctly instead of having them changed into empty strings that can break valid calls. [#97212](https://github.com/openclaw/openclaw/pull/97212) Thanks @vincentkoc, @zw-xysk.
+- Successful Codex thread-goal reads now appear as successful in model context, transcripts, and diagnostics instead of being recorded as failed tool calls. [#98659](https://github.com/openclaw/openclaw/pull/98659) Thanks @yetval.
+- Message-tool calls with an invalid Gateway timeout now return an immediate validation error instead of appearing to stall. [#98652](https://github.com/openclaw/openclaw/pull/98652)
+- Invalid plugin approval requests now show the actual validation problem instead of misleading users with a Gateway-unavailable error. [#100337](https://github.com/openclaw/openclaw/pull/100337) Thanks @tzy-17.
+- Oversized ClawHub packages, skills, ClawPacks, resolver archives, and GitHub-source downloads now stop with a clear size-limit error before they can exhaust Gateway memory. [#101176](https://github.com/openclaw/openclaw/pull/101176)
+- Automatic session rotation is less likely to strand the next conversation when a context-engine plugin immediately reads or checkpoints its transcript. [#101192](https://github.com/openclaw/openclaw/pull/101192)
+- Internal hook authors now receive a warning when a likely event-name typo would otherwise leave a hook silently inactive. [#99456](https://github.com/openclaw/openclaw/pull/99456) Thanks @masatohoshino.
+- Tool-using Anthropic-family requests can now fail over to OpenAI without a 400 error caused by an incompatible tool format. [#101443](https://github.com/openclaw/openclaw/pull/101443) Thanks @chrisbaker2000.
+
+##### Skill Workshop
+
+- Natural-language corrections can now become the right pending Skill Workshop improvement after successful or failed turns without repeating old feedback, duplicating `/learn`, or replacing proposal context. [#100576](https://github.com/openclaw/openclaw/pull/100576) Thanks @vincentkoc.
+- Skill Workshop approval prompts now include the proposal details needed to apply, reject, or quarantine a change, while unanswered requests stay safely pending and return a clear timeout message. [#100498](https://github.com/openclaw/openclaw/pull/100498)
+- When users say things like "next time" or "remember to," OpenClaw can now offer one reviewable Skill Workshop proposal without requiring autonomous capture or repeatedly prompting after dismissal. [#100692](https://github.com/openclaw/openclaw/pull/100692)
+- Skill Workshop now explains when tool policy is hiding `skill_workshop` and shows the exact `allow` or `alsoAllow` change needed to enable manual review calls. [#100654](https://github.com/openclaw/openclaw/pull/100654) Thanks @wangwllu.
+
+#### Documentation
+
+Official operating guidance now matches shipped commands, configuration, setup, status output, placeholders, and recovery behavior more closely. Generated documentation maps also preserve literal command parameters, reducing the chance that a reader follows an example whose identifiers were stripped or whose workflow no longer matches the product.
+
+##### Setup and operating guides
+
+- The CLI config documentation now clearly distinguishes normal JSON5 value parsing from `--strict-json`, which accepts standard JSON and rejects JSON5-only syntax. [#80981](https://github.com/openclaw/openclaw/pull/80981) Thanks @addu2612.
+- The macOS guide now gives users a clearer path from downloading the app through first-run setup, Gateway selection, and focused troubleshooting. [#97120](https://github.com/openclaw/openclaw/pull/97120) Thanks @romneyda.
+- OpenClaw's public docs now use shorter, task-first instructions with corrected commands, configuration names, defaults, provider behavior, and troubleshooting steps. [#100142](https://github.com/openclaw/openclaw/pull/100142)
+- Logbook users now have end-to-end guidance for setup, model routing, privacy choices, and troubleshooting missing capture or timeline results. [b6a7898](https://github.com/openclaw/openclaw/commit/b6a7898c7c7f43e4b984c6c62aaa685f6a206f33)
+- Safe-restart guidance now states that the default wait can end after `gateway.reload.deferralTimeoutMs` and explains how to configure an indefinite wait. [#95397](https://github.com/openclaw/openclaw/pull/95397) Thanks @zhangqueping.
+- The agent configuration guide now identifies the current models selected by the built-in `opus` and `gpt` aliases. [#96375](https://github.com/openclaw/openclaw/pull/96375) Thanks @niks999.
+- Docker operators now have an official path to install, authenticate, verify, and persist the `claude-cli` backend across container image upgrades. [#96380](https://github.com/openclaw/openclaw/pull/96380) Thanks @fffrank, @zaidazmi.
+- OpenClaw's Anthropic and Claude CLI documentation now reflects the current subscription-limit treatment for `claude -p` and related usage, with official references for billing and deployment decisions. [#96848](https://github.com/openclaw/openclaw/pull/96848) Thanks @fightingsleep, @tirion-p.
+- The public onboarding docs now cover eleven existing non-interactive flags for token auth, Cloudflare AI Gateway, daemon, UI, hooks, and token output. [#97753](https://github.com/openclaw/openclaw/pull/97753) Thanks @vincentkoc, @wm0018.
+- OpenClaw's mobile documentation now identifies the iOS and Android apps as official releases and provides consistent App Store, Google Play, and hosted iOS push-relay guidance. [#98843](https://github.com/openclaw/openclaw/pull/98843) Thanks @joshavant.
+- Official OpenClaw docs now help operators and plugin authors handle credentials safely, preflight cron jobs that use local-provider fallbacks, apply Talk timing defaults, configure MiniMax providers and models, and copy a complete minimal plugin package with the required dependency metadata. [#100182](https://github.com/openclaw/openclaw/pull/100182)
+- Android node operators now have an end-to-end guide for securely mirroring and controlling a remote device from macOS, including authorization, troubleshooting, and clean disconnection. [#100398](https://github.com/openclaw/openclaw/pull/100398)
+- The onboarding reference now explains that bare `openclaw` starts onboarding for a missing config, opens Crestodian for an invalid config, and launches the agent TUI for a valid config. [d9dbee7](https://github.com/openclaw/openclaw/commit/d9dbee7676fb4a7fcd4617e9fe3bd26f7adf4452)
+- ACP troubleshooting now names `PermissionPromptUnavailableError`, helping operators recognize a non-interactive permission failure and find the right configuration fix. [b3a74cc](https://github.com/openclaw/openclaw/commit/b3a74ccc3aef9d670994baee3b0039e4783d82a2)
+- The onboarding reference now gives accurate signal-cli, Gateway runtime, and channel allowlist guidance, including Windows limits and the IDs expected for direct messages. [aaaa803](https://github.com/openclaw/openclaw/commit/aaaa8030bf4f139d43717731fd3402e06b248d48)
+
+##### Channels and messaging guidance
+
+- Plugin and channel-status documentation now clarifies that a `MessageReceipt` or durable `sent` result proves platform acceptance, not display or read confirmation on a recipient's device. [#90063](https://github.com/openclaw/openclaw/pull/90063) Thanks @pdurlej.
+- The Discord setup guide now points users to the correct Developer settings section for enabling Developer Mode and copying required IDs. [#97336](https://github.com/openclaw/openclaw/pull/97336) Thanks @naseemm123.
+- The Discord setup guide now separates General Permissions from Text Permissions so bot access choices are easier to read correctly. [#97584](https://github.com/openclaw/openclaw/pull/97584) Thanks @slammajamma28.
+- Telegram's error-reply documentation now lists the supported policies and correct cooldown defaults, avoiding invalid `errorPolicy: "reply"` configurations. [#97635](https://github.com/openclaw/openclaw/pull/97635) Thanks @wm0018.
+- The Feishu documentation no longer suggests the rejected `dmPolicy: disabled` setting, reducing configuration failures copied from the guide. [#97640](https://github.com/openclaw/openclaw/pull/97640) Thanks @wm0018.
+- Matrix documentation now explains progress streaming, room-specific mention matching, per-room enablement, and bot-loop safeguards that operators can configure. [#98318](https://github.com/openclaw/openclaw/pull/98318) Thanks @vincentkoc, @wm0018.
+- Telegram channel documentation now correctly states that an unset streaming mode uses partial previews and explains how to choose final-only replies. [#98453](https://github.com/openclaw/openclaw/pull/98453) Thanks @solodmd.
+- The bundled `imsg` skill now guides agents toward the correct direct or group conversation, stable targets, least-privilege actions, and confirmation before visible or sensitive changes. [#100105](https://github.com/openclaw/openclaw/pull/100105) Thanks @omarshahine.
+
+##### Plugin and generated reference guidance
+
+- Plugin developers now receive clearer SDK deprecations and migration guidance for session-store and transcript-file helpers ahead of the planned SQLite transition. [#97494](https://github.com/openclaw/openclaw/pull/97494) Thanks @jalehman.
+- Plugin authors now get clearer packaging guidance for runtime dependencies, built artifacts, `npm-pack:` validation, and trusted official-plugin checks before publication. [#99962](https://github.com/openclaw/openclaw/pull/99962) Thanks @hxy91819.
+- Official plugin package examples now agree on the required `typebox` runtime and `openclaw` peer dependencies, reducing copy-and-paste setup failures. [#99973](https://github.com/openclaw/openclaw/pull/99973)
+- The Codex and WhatsApp plugin references now identify their tools contract, making supported plugin capabilities easier to match with OpenClaw workflows. [46ad3f9](https://github.com/openclaw/openclaw/commit/46ad3f9ae94cec1bfa94b14974a3d32b46921080) Thanks @vincentkoc.
+- Generated documentation navigation now preserves complete headings with command placeholders such as `<id>` and `<deviceId>` instead of hiding required arguments. [#99099](https://github.com/openclaw/openclaw/pull/99099) Thanks @hxy91819.
+
+### Additional contributions
+
+Maintainer-facing contributions: [#59695](https://github.com/openclaw/openclaw/pull/59695), [#73649](https://github.com/openclaw/openclaw/pull/73649), [#83826](https://github.com/openclaw/openclaw/pull/83826), [#87081](https://github.com/openclaw/openclaw/pull/87081), [#87695](https://github.com/openclaw/openclaw/pull/87695), [#89535](https://github.com/openclaw/openclaw/pull/89535), [#89558](https://github.com/openclaw/openclaw/pull/89558), [#89585](https://github.com/openclaw/openclaw/pull/89585), [#90365](https://github.com/openclaw/openclaw/pull/90365), [#90547](https://github.com/openclaw/openclaw/pull/90547), [#91134](https://github.com/openclaw/openclaw/pull/91134), [#91276](https://github.com/openclaw/openclaw/pull/91276), [#91483](https://github.com/openclaw/openclaw/pull/91483), [#91519](https://github.com/openclaw/openclaw/pull/91519), [#91728](https://github.com/openclaw/openclaw/pull/91728), [#91907](https://github.com/openclaw/openclaw/pull/91907), [#92667](https://github.com/openclaw/openclaw/pull/92667), [#93209](https://github.com/openclaw/openclaw/pull/93209), [#94291](https://github.com/openclaw/openclaw/pull/94291), [#94526](https://github.com/openclaw/openclaw/pull/94526) (related [#89352](https://github.com/openclaw/openclaw/issues/89352)), [#94708](https://github.com/openclaw/openclaw/pull/94708), [#95211](https://github.com/openclaw/openclaw/pull/95211), [#95230](https://github.com/openclaw/openclaw/pull/95230), [#95531](https://github.com/openclaw/openclaw/pull/95531), [#95534](https://github.com/openclaw/openclaw/pull/95534), [#95622](https://github.com/openclaw/openclaw/pull/95622), [#95842](https://github.com/openclaw/openclaw/pull/95842), [#95920](https://github.com/openclaw/openclaw/pull/95920), [#95954](https://github.com/openclaw/openclaw/pull/95954), [#96058](https://github.com/openclaw/openclaw/pull/96058), [#96094](https://github.com/openclaw/openclaw/pull/96094) (related [#91167](https://github.com/openclaw/openclaw/issues/91167)), [#96222](https://github.com/openclaw/openclaw/pull/96222), [#96225](https://github.com/openclaw/openclaw/pull/96225), [#96302](https://github.com/openclaw/openclaw/pull/96302), [#96320](https://github.com/openclaw/openclaw/pull/96320), [#96327](https://github.com/openclaw/openclaw/pull/96327), [#96338](https://github.com/openclaw/openclaw/pull/96338), [#96340](https://github.com/openclaw/openclaw/pull/96340), [#96359](https://github.com/openclaw/openclaw/pull/96359), [#96360](https://github.com/openclaw/openclaw/pull/96360), [#96366](https://github.com/openclaw/openclaw/pull/96366), [#96434](https://github.com/openclaw/openclaw/pull/96434), [#96448](https://github.com/openclaw/openclaw/pull/96448), [#96460](https://github.com/openclaw/openclaw/pull/96460), [#96507](https://github.com/openclaw/openclaw/pull/96507), [#96524](https://github.com/openclaw/openclaw/pull/96524), [#96527](https://github.com/openclaw/openclaw/pull/96527), [#96530](https://github.com/openclaw/openclaw/pull/96530), [#96539](https://github.com/openclaw/openclaw/pull/96539), [#96543](https://github.com/openclaw/openclaw/pull/96543), [#96567](https://github.com/openclaw/openclaw/pull/96567), [#96594](https://github.com/openclaw/openclaw/pull/96594), [#96595](https://github.com/openclaw/openclaw/pull/96595), [#96707](https://github.com/openclaw/openclaw/pull/96707), [#96711](https://github.com/openclaw/openclaw/pull/96711), [#96714](https://github.com/openclaw/openclaw/pull/96714), [#96735](https://github.com/openclaw/openclaw/pull/96735), [#96736](https://github.com/openclaw/openclaw/pull/96736), [#96765](https://github.com/openclaw/openclaw/pull/96765), [#96811](https://github.com/openclaw/openclaw/pull/96811), [#96930](https://github.com/openclaw/openclaw/pull/96930), [#96945](https://github.com/openclaw/openclaw/pull/96945), [#96948](https://github.com/openclaw/openclaw/pull/96948), [#96950](https://github.com/openclaw/openclaw/pull/96950), [#96952](https://github.com/openclaw/openclaw/pull/96952), [#96955](https://github.com/openclaw/openclaw/pull/96955), [#96964](https://github.com/openclaw/openclaw/pull/96964), [#97079](https://github.com/openclaw/openclaw/pull/97079), [#97101](https://github.com/openclaw/openclaw/pull/97101), [#97110](https://github.com/openclaw/openclaw/pull/97110), [#97113](https://github.com/openclaw/openclaw/pull/97113), [#97116](https://github.com/openclaw/openclaw/pull/97116), [#97119](https://github.com/openclaw/openclaw/pull/97119), [#97124](https://github.com/openclaw/openclaw/pull/97124), [#97133](https://github.com/openclaw/openclaw/pull/97133), [#97150](https://github.com/openclaw/openclaw/pull/97150), [#97151](https://github.com/openclaw/openclaw/pull/97151), [#97181](https://github.com/openclaw/openclaw/pull/97181), [#97250](https://github.com/openclaw/openclaw/pull/97250), [#97297](https://github.com/openclaw/openclaw/pull/97297), [#97306](https://github.com/openclaw/openclaw/pull/97306), [#97348](https://github.com/openclaw/openclaw/pull/97348), [#97351](https://github.com/openclaw/openclaw/pull/97351), [#97369](https://github.com/openclaw/openclaw/pull/97369), [#97370](https://github.com/openclaw/openclaw/pull/97370), [#97374](https://github.com/openclaw/openclaw/pull/97374), [#97478](https://github.com/openclaw/openclaw/pull/97478), [#97547](https://github.com/openclaw/openclaw/pull/97547), [#97548](https://github.com/openclaw/openclaw/pull/97548), [#97604](https://github.com/openclaw/openclaw/pull/97604), [#97609](https://github.com/openclaw/openclaw/pull/97609), [#97632](https://github.com/openclaw/openclaw/pull/97632), [#97657](https://github.com/openclaw/openclaw/pull/97657), [#97661](https://github.com/openclaw/openclaw/pull/97661), [#97689](https://github.com/openclaw/openclaw/pull/97689), [#97701](https://github.com/openclaw/openclaw/pull/97701), [#97708](https://github.com/openclaw/openclaw/pull/97708), [#97712](https://github.com/openclaw/openclaw/pull/97712), [#97714](https://github.com/openclaw/openclaw/pull/97714), [#97736](https://github.com/openclaw/openclaw/pull/97736), [#97802](https://github.com/openclaw/openclaw/pull/97802), [#97803](https://github.com/openclaw/openclaw/pull/97803), [#97805](https://github.com/openclaw/openclaw/pull/97805), [#97891](https://github.com/openclaw/openclaw/pull/97891), [#97896](https://github.com/openclaw/openclaw/pull/97896), [#97898](https://github.com/openclaw/openclaw/pull/97898) (related [#97792](https://github.com/openclaw/openclaw/issues/97792)), [#97900](https://github.com/openclaw/openclaw/pull/97900), [#97907](https://github.com/openclaw/openclaw/pull/97907), [#97912](https://github.com/openclaw/openclaw/pull/97912), [#97915](https://github.com/openclaw/openclaw/pull/97915), [#97937](https://github.com/openclaw/openclaw/pull/97937), [#97940](https://github.com/openclaw/openclaw/pull/97940), [#97941](https://github.com/openclaw/openclaw/pull/97941), [#97943](https://github.com/openclaw/openclaw/pull/97943), [#97946](https://github.com/openclaw/openclaw/pull/97946), [#97947](https://github.com/openclaw/openclaw/pull/97947), [#97948](https://github.com/openclaw/openclaw/pull/97948), [#97950](https://github.com/openclaw/openclaw/pull/97950), [#97951](https://github.com/openclaw/openclaw/pull/97951), [#97959](https://github.com/openclaw/openclaw/pull/97959), [#97962](https://github.com/openclaw/openclaw/pull/97962), [#98009](https://github.com/openclaw/openclaw/pull/98009), [#98087](https://github.com/openclaw/openclaw/pull/98087), [#98134](https://github.com/openclaw/openclaw/pull/98134), [#98138](https://github.com/openclaw/openclaw/pull/98138), [#98205](https://github.com/openclaw/openclaw/pull/98205), [#98219](https://github.com/openclaw/openclaw/pull/98219), [#98233](https://github.com/openclaw/openclaw/pull/98233), [#98249](https://github.com/openclaw/openclaw/pull/98249), [#98319](https://github.com/openclaw/openclaw/pull/98319), [#98325](https://github.com/openclaw/openclaw/pull/98325), [#98369](https://github.com/openclaw/openclaw/pull/98369), [#98370](https://github.com/openclaw/openclaw/pull/98370), [#98395](https://github.com/openclaw/openclaw/pull/98395), [#98494](https://github.com/openclaw/openclaw/pull/98494), [#98533](https://github.com/openclaw/openclaw/pull/98533), [#98536](https://github.com/openclaw/openclaw/pull/98536), [#98551](https://github.com/openclaw/openclaw/pull/98551), [#98598](https://github.com/openclaw/openclaw/pull/98598) (related [#98462](https://github.com/openclaw/openclaw/issues/98462), [#98464](https://github.com/openclaw/openclaw/issues/98464)), [#98605](https://github.com/openclaw/openclaw/pull/98605), [#98610](https://github.com/openclaw/openclaw/pull/98610), [#98611](https://github.com/openclaw/openclaw/pull/98611) (related [#98566](https://github.com/openclaw/openclaw/issues/98566)), [#98619](https://github.com/openclaw/openclaw/pull/98619), [#98701](https://github.com/openclaw/openclaw/pull/98701), [#98749](https://github.com/openclaw/openclaw/pull/98749), [#98751](https://github.com/openclaw/openclaw/pull/98751), [#98779](https://github.com/openclaw/openclaw/pull/98779), [#98792](https://github.com/openclaw/openclaw/pull/98792), [#98808](https://github.com/openclaw/openclaw/pull/98808), [#98818](https://github.com/openclaw/openclaw/pull/98818), [#99098](https://github.com/openclaw/openclaw/pull/99098), [#99151](https://github.com/openclaw/openclaw/pull/99151), [#99165](https://github.com/openclaw/openclaw/pull/99165), [#99169](https://github.com/openclaw/openclaw/pull/99169), [#99212](https://github.com/openclaw/openclaw/pull/99212), [#99233](https://github.com/openclaw/openclaw/pull/99233), [#99261](https://github.com/openclaw/openclaw/pull/99261), [#99262](https://github.com/openclaw/openclaw/pull/99262), [#99264](https://github.com/openclaw/openclaw/pull/99264), [#99265](https://github.com/openclaw/openclaw/pull/99265), [#99278](https://github.com/openclaw/openclaw/pull/99278), [#99294](https://github.com/openclaw/openclaw/pull/99294), [#99296](https://github.com/openclaw/openclaw/pull/99296), [#99298](https://github.com/openclaw/openclaw/pull/99298), [#99302](https://github.com/openclaw/openclaw/pull/99302), [#99303](https://github.com/openclaw/openclaw/pull/99303), [#99307](https://github.com/openclaw/openclaw/pull/99307), [#99310](https://github.com/openclaw/openclaw/pull/99310), [#99352](https://github.com/openclaw/openclaw/pull/99352), [#99355](https://github.com/openclaw/openclaw/pull/99355), [#99359](https://github.com/openclaw/openclaw/pull/99359), [#99361](https://github.com/openclaw/openclaw/pull/99361), [#99368](https://github.com/openclaw/openclaw/pull/99368), [#99374](https://github.com/openclaw/openclaw/pull/99374), [#99520](https://github.com/openclaw/openclaw/pull/99520) (related [#99513](https://github.com/openclaw/openclaw/issues/99513)), [#99607](https://github.com/openclaw/openclaw/pull/99607), [#99628](https://github.com/openclaw/openclaw/pull/99628) (related [#99627](https://github.com/openclaw/openclaw/issues/99627)), [#99629](https://github.com/openclaw/openclaw/pull/99629), [#99632](https://github.com/openclaw/openclaw/pull/99632) (related [#99622](https://github.com/openclaw/openclaw/issues/99622)), [#99642](https://github.com/openclaw/openclaw/pull/99642), [#99649](https://github.com/openclaw/openclaw/pull/99649) (related [#99648](https://github.com/openclaw/openclaw/issues/99648)), [#99656](https://github.com/openclaw/openclaw/pull/99656) (related [#99655](https://github.com/openclaw/openclaw/issues/99655)), [#99671](https://github.com/openclaw/openclaw/pull/99671) (related [#99667](https://github.com/openclaw/openclaw/issues/99667)), [#99676](https://github.com/openclaw/openclaw/pull/99676) (related [#99663](https://github.com/openclaw/openclaw/issues/99663)), [#99679](https://github.com/openclaw/openclaw/pull/99679) (related [#99664](https://github.com/openclaw/openclaw/issues/99664)), [#99682](https://github.com/openclaw/openclaw/pull/99682) (related [#99674](https://github.com/openclaw/openclaw/issues/99674)), [#99687](https://github.com/openclaw/openclaw/pull/99687) (related [#99675](https://github.com/openclaw/openclaw/issues/99675)), [#99688](https://github.com/openclaw/openclaw/pull/99688), [#99691](https://github.com/openclaw/openclaw/pull/99691), [#99702](https://github.com/openclaw/openclaw/pull/99702) (related [#99697](https://github.com/openclaw/openclaw/issues/99697)), [#99705](https://github.com/openclaw/openclaw/pull/99705), [#99707](https://github.com/openclaw/openclaw/pull/99707), [#99710](https://github.com/openclaw/openclaw/pull/99710), [#99715](https://github.com/openclaw/openclaw/pull/99715), [#99717](https://github.com/openclaw/openclaw/pull/99717), [#99718](https://github.com/openclaw/openclaw/pull/99718), [#99719](https://github.com/openclaw/openclaw/pull/99719), [#99721](https://github.com/openclaw/openclaw/pull/99721), [#99735](https://github.com/openclaw/openclaw/pull/99735), [#99736](https://github.com/openclaw/openclaw/pull/99736) (related [#99734](https://github.com/openclaw/openclaw/issues/99734)), [#99737](https://github.com/openclaw/openclaw/pull/99737), [#99743](https://github.com/openclaw/openclaw/pull/99743), [#99744](https://github.com/openclaw/openclaw/pull/99744), [#99746](https://github.com/openclaw/openclaw/pull/99746), [#99750](https://github.com/openclaw/openclaw/pull/99750), [#99753](https://github.com/openclaw/openclaw/pull/99753), [#99755](https://github.com/openclaw/openclaw/pull/99755), [#99766](https://github.com/openclaw/openclaw/pull/99766), [#99771](https://github.com/openclaw/openclaw/pull/99771), [#99777](https://github.com/openclaw/openclaw/pull/99777), [#99778](https://github.com/openclaw/openclaw/pull/99778), [#99784](https://github.com/openclaw/openclaw/pull/99784), [#99785](https://github.com/openclaw/openclaw/pull/99785), [#99786](https://github.com/openclaw/openclaw/pull/99786), [#99788](https://github.com/openclaw/openclaw/pull/99788), [#99790](https://github.com/openclaw/openclaw/pull/99790), [#99793](https://github.com/openclaw/openclaw/pull/99793), [#99816](https://github.com/openclaw/openclaw/pull/99816), [#99820](https://github.com/openclaw/openclaw/pull/99820), [#99850](https://github.com/openclaw/openclaw/pull/99850), [#99900](https://github.com/openclaw/openclaw/pull/99900), [#99909](https://github.com/openclaw/openclaw/pull/99909), [#99917](https://github.com/openclaw/openclaw/pull/99917), [#99940](https://github.com/openclaw/openclaw/pull/99940), [#99944](https://github.com/openclaw/openclaw/pull/99944), [#99945](https://github.com/openclaw/openclaw/pull/99945), [#99969](https://github.com/openclaw/openclaw/pull/99969), [#99988](https://github.com/openclaw/openclaw/pull/99988), [#100002](https://github.com/openclaw/openclaw/pull/100002), [#100008](https://github.com/openclaw/openclaw/pull/100008), [#100015](https://github.com/openclaw/openclaw/pull/100015), [#100019](https://github.com/openclaw/openclaw/pull/100019), [#100024](https://github.com/openclaw/openclaw/pull/100024), [#100039](https://github.com/openclaw/openclaw/pull/100039), [#100053](https://github.com/openclaw/openclaw/pull/100053), [#100061](https://github.com/openclaw/openclaw/pull/100061), [#100069](https://github.com/openclaw/openclaw/pull/100069), [#100083](https://github.com/openclaw/openclaw/pull/100083), [#100087](https://github.com/openclaw/openclaw/pull/100087), [#100108](https://github.com/openclaw/openclaw/pull/100108), [#100114](https://github.com/openclaw/openclaw/pull/100114), [#100122](https://github.com/openclaw/openclaw/pull/100122), [#100183](https://github.com/openclaw/openclaw/pull/100183), [#100186](https://github.com/openclaw/openclaw/pull/100186), [#100200](https://github.com/openclaw/openclaw/pull/100200), [#100201](https://github.com/openclaw/openclaw/pull/100201), [#100206](https://github.com/openclaw/openclaw/pull/100206), [#100210](https://github.com/openclaw/openclaw/pull/100210), [#100220](https://github.com/openclaw/openclaw/pull/100220), [#100221](https://github.com/openclaw/openclaw/pull/100221), [#100222](https://github.com/openclaw/openclaw/pull/100222), [#100223](https://github.com/openclaw/openclaw/pull/100223), [#100239](https://github.com/openclaw/openclaw/pull/100239), [#100242](https://github.com/openclaw/openclaw/pull/100242), [#100243](https://github.com/openclaw/openclaw/pull/100243), [#100249](https://github.com/openclaw/openclaw/pull/100249), [#100253](https://github.com/openclaw/openclaw/pull/100253), [#100259](https://github.com/openclaw/openclaw/pull/100259), [#100272](https://github.com/openclaw/openclaw/pull/100272), [#100278](https://github.com/openclaw/openclaw/pull/100278), [#100304](https://github.com/openclaw/openclaw/pull/100304), [#100332](https://github.com/openclaw/openclaw/pull/100332), [#100346](https://github.com/openclaw/openclaw/pull/100346), [#100355](https://github.com/openclaw/openclaw/pull/100355), [#100370](https://github.com/openclaw/openclaw/pull/100370), [#100420](https://github.com/openclaw/openclaw/pull/100420), [#100437](https://github.com/openclaw/openclaw/pull/100437), [#100441](https://github.com/openclaw/openclaw/pull/100441), [#100459](https://github.com/openclaw/openclaw/pull/100459), [#100464](https://github.com/openclaw/openclaw/pull/100464), [#100466](https://github.com/openclaw/openclaw/pull/100466), [#100469](https://github.com/openclaw/openclaw/pull/100469), [#100472](https://github.com/openclaw/openclaw/pull/100472), [#100473](https://github.com/openclaw/openclaw/pull/100473), [#100495](https://github.com/openclaw/openclaw/pull/100495), [#100497](https://github.com/openclaw/openclaw/pull/100497), [#100507](https://github.com/openclaw/openclaw/pull/100507), [#100517](https://github.com/openclaw/openclaw/pull/100517), [#100532](https://github.com/openclaw/openclaw/pull/100532), [#100533](https://github.com/openclaw/openclaw/pull/100533), [#100536](https://github.com/openclaw/openclaw/pull/100536), [#100543](https://github.com/openclaw/openclaw/pull/100543), [#100545](https://github.com/openclaw/openclaw/pull/100545), [#100555](https://github.com/openclaw/openclaw/pull/100555), [#100561](https://github.com/openclaw/openclaw/pull/100561), [#100562](https://github.com/openclaw/openclaw/pull/100562), [#100575](https://github.com/openclaw/openclaw/pull/100575), [#100593](https://github.com/openclaw/openclaw/pull/100593), [#100599](https://github.com/openclaw/openclaw/pull/100599), [#100603](https://github.com/openclaw/openclaw/pull/100603), [#100609](https://github.com/openclaw/openclaw/pull/100609), [#100611](https://github.com/openclaw/openclaw/pull/100611), [#100612](https://github.com/openclaw/openclaw/pull/100612), [#100650](https://github.com/openclaw/openclaw/pull/100650), [#100663](https://github.com/openclaw/openclaw/pull/100663), [#100702](https://github.com/openclaw/openclaw/pull/100702), [#100703](https://github.com/openclaw/openclaw/pull/100703), [#100723](https://github.com/openclaw/openclaw/pull/100723), [#100740](https://github.com/openclaw/openclaw/pull/100740), [#100781](https://github.com/openclaw/openclaw/pull/100781), [#100793](https://github.com/openclaw/openclaw/pull/100793), [#100804](https://github.com/openclaw/openclaw/pull/100804), [#100823](https://github.com/openclaw/openclaw/pull/100823), [#100856](https://github.com/openclaw/openclaw/pull/100856), [#100882](https://github.com/openclaw/openclaw/pull/100882), [#100887](https://github.com/openclaw/openclaw/pull/100887), [#100895](https://github.com/openclaw/openclaw/pull/100895), [#100897](https://github.com/openclaw/openclaw/pull/100897), [#100903](https://github.com/openclaw/openclaw/pull/100903), [#100909](https://github.com/openclaw/openclaw/pull/100909), [#100931](https://github.com/openclaw/openclaw/pull/100931), [#100950](https://github.com/openclaw/openclaw/pull/100950), [#100952](https://github.com/openclaw/openclaw/pull/100952), [#100961](https://github.com/openclaw/openclaw/pull/100961), [#100975](https://github.com/openclaw/openclaw/pull/100975), [#100989](https://github.com/openclaw/openclaw/pull/100989), [#100990](https://github.com/openclaw/openclaw/pull/100990), [#100992](https://github.com/openclaw/openclaw/pull/100992), [#101012](https://github.com/openclaw/openclaw/pull/101012), [#101013](https://github.com/openclaw/openclaw/pull/101013), [#101041](https://github.com/openclaw/openclaw/pull/101041), [#101045](https://github.com/openclaw/openclaw/pull/101045), [#101051](https://github.com/openclaw/openclaw/pull/101051), [#101055](https://github.com/openclaw/openclaw/pull/101055), [#101063](https://github.com/openclaw/openclaw/pull/101063), [#101076](https://github.com/openclaw/openclaw/pull/101076), [#101080](https://github.com/openclaw/openclaw/pull/101080), [#101081](https://github.com/openclaw/openclaw/pull/101081), [#101112](https://github.com/openclaw/openclaw/pull/101112), [#101128](https://github.com/openclaw/openclaw/pull/101128), [#101131](https://github.com/openclaw/openclaw/pull/101131), [#101135](https://github.com/openclaw/openclaw/pull/101135), [#101165](https://github.com/openclaw/openclaw/pull/101165), [#101173](https://github.com/openclaw/openclaw/pull/101173), [#101174](https://github.com/openclaw/openclaw/pull/101174), [#101178](https://github.com/openclaw/openclaw/pull/101178), [#101179](https://github.com/openclaw/openclaw/pull/101179), [#101180](https://github.com/openclaw/openclaw/pull/101180), [#101184](https://github.com/openclaw/openclaw/pull/101184), [#101185](https://github.com/openclaw/openclaw/pull/101185), [#101186](https://github.com/openclaw/openclaw/pull/101186), [#101196](https://github.com/openclaw/openclaw/pull/101196), [#101223](https://github.com/openclaw/openclaw/pull/101223), [#101232](https://github.com/openclaw/openclaw/pull/101232), [#101233](https://github.com/openclaw/openclaw/pull/101233), [#101242](https://github.com/openclaw/openclaw/pull/101242), [#101243](https://github.com/openclaw/openclaw/pull/101243), [#101262](https://github.com/openclaw/openclaw/pull/101262), [#101273](https://github.com/openclaw/openclaw/pull/101273), [#101275](https://github.com/openclaw/openclaw/pull/101275), [#101315](https://github.com/openclaw/openclaw/pull/101315), [#101331](https://github.com/openclaw/openclaw/pull/101331), [#101339](https://github.com/openclaw/openclaw/pull/101339), [#101356](https://github.com/openclaw/openclaw/pull/101356), [#101362](https://github.com/openclaw/openclaw/pull/101362), [#101372](https://github.com/openclaw/openclaw/pull/101372), [#101379](https://github.com/openclaw/openclaw/pull/101379), [#101393](https://github.com/openclaw/openclaw/pull/101393), [#101406](https://github.com/openclaw/openclaw/pull/101406), [#101425](https://github.com/openclaw/openclaw/pull/101425), [#101440](https://github.com/openclaw/openclaw/pull/101440), [#101452](https://github.com/openclaw/openclaw/pull/101452), [#101466](https://github.com/openclaw/openclaw/pull/101466), [#101470](https://github.com/openclaw/openclaw/pull/101470), [#101508](https://github.com/openclaw/openclaw/pull/101508), [#101519](https://github.com/openclaw/openclaw/pull/101519), [#101523](https://github.com/openclaw/openclaw/pull/101523), [#101549](https://github.com/openclaw/openclaw/pull/101549), [#101566](https://github.com/openclaw/openclaw/pull/101566), [#101568](https://github.com/openclaw/openclaw/pull/101568), [#101579](https://github.com/openclaw/openclaw/pull/101579), [#101583](https://github.com/openclaw/openclaw/pull/101583), [#101594](https://github.com/openclaw/openclaw/pull/101594), [#101604](https://github.com/openclaw/openclaw/pull/101604), [#101632](https://github.com/openclaw/openclaw/pull/101632), [#101647](https://github.com/openclaw/openclaw/pull/101647), [#101666](https://github.com/openclaw/openclaw/pull/101666), [#101680](https://github.com/openclaw/openclaw/pull/101680), [#101682](https://github.com/openclaw/openclaw/pull/101682), [#101688](https://github.com/openclaw/openclaw/pull/101688), [#101689](https://github.com/openclaw/openclaw/pull/101689), [#101699](https://github.com/openclaw/openclaw/pull/101699), [#101701](https://github.com/openclaw/openclaw/pull/101701), [#101726](https://github.com/openclaw/openclaw/pull/101726), [#101731](https://github.com/openclaw/openclaw/pull/101731), [#101757](https://github.com/openclaw/openclaw/pull/101757), [#101758](https://github.com/openclaw/openclaw/pull/101758), [#101771](https://github.com/openclaw/openclaw/pull/101771), [#101831](https://github.com/openclaw/openclaw/pull/101831), [#101834](https://github.com/openclaw/openclaw/pull/101834), [#101858](https://github.com/openclaw/openclaw/pull/101858), [#101860](https://github.com/openclaw/openclaw/pull/101860), [#101869](https://github.com/openclaw/openclaw/pull/101869), [#101875](https://github.com/openclaw/openclaw/pull/101875), [#101886](https://github.com/openclaw/openclaw/pull/101886), [#101889](https://github.com/openclaw/openclaw/pull/101889), [#101892](https://github.com/openclaw/openclaw/pull/101892), [#101894](https://github.com/openclaw/openclaw/pull/101894), [#101896](https://github.com/openclaw/openclaw/pull/101896), [#101898](https://github.com/openclaw/openclaw/pull/101898), [#101903](https://github.com/openclaw/openclaw/pull/101903), [#101904](https://github.com/openclaw/openclaw/pull/101904), [#101907](https://github.com/openclaw/openclaw/pull/101907), [#101915](https://github.com/openclaw/openclaw/pull/101915), [#101917](https://github.com/openclaw/openclaw/pull/101917), [#101922](https://github.com/openclaw/openclaw/pull/101922), [#101925](https://github.com/openclaw/openclaw/pull/101925), [#101931](https://github.com/openclaw/openclaw/pull/101931), [#101936](https://github.com/openclaw/openclaw/pull/101936), [#101941](https://github.com/openclaw/openclaw/pull/101941), [#101945](https://github.com/openclaw/openclaw/pull/101945), [#101949](https://github.com/openclaw/openclaw/pull/101949), [#101954](https://github.com/openclaw/openclaw/pull/101954), [#101959](https://github.com/openclaw/openclaw/pull/101959), [#101963](https://github.com/openclaw/openclaw/pull/101963), [#101969](https://github.com/openclaw/openclaw/pull/101969), [#101974](https://github.com/openclaw/openclaw/pull/101974), [#101980](https://github.com/openclaw/openclaw/pull/101980), [#101987](https://github.com/openclaw/openclaw/pull/101987), [#101990](https://github.com/openclaw/openclaw/pull/101990), [#102005](https://github.com/openclaw/openclaw/pull/102005), [#102010](https://github.com/openclaw/openclaw/pull/102010), [#102021](https://github.com/openclaw/openclaw/pull/102021), [#102029](https://github.com/openclaw/openclaw/pull/102029), [#102037](https://github.com/openclaw/openclaw/pull/102037), [#102040](https://github.com/openclaw/openclaw/pull/102040), [#102042](https://github.com/openclaw/openclaw/pull/102042), [#102044](https://github.com/openclaw/openclaw/pull/102044), [#102048](https://github.com/openclaw/openclaw/pull/102048), [#102059](https://github.com/openclaw/openclaw/pull/102059), [#102065](https://github.com/openclaw/openclaw/pull/102065), [#102159](https://github.com/openclaw/openclaw/pull/102159), [#102256](https://github.com/openclaw/openclaw/pull/102256), [#102600](https://github.com/openclaw/openclaw/pull/102600), [#102732](https://github.com/openclaw/openclaw/pull/102732), [#103163](https://github.com/openclaw/openclaw/pull/103163), [#103244](https://github.com/openclaw/openclaw/pull/103244), [#103467](https://github.com/openclaw/openclaw/pull/103467), [#103556](https://github.com/openclaw/openclaw/pull/103556), [#103564](https://github.com/openclaw/openclaw/pull/103564), [#103635](https://github.com/openclaw/openclaw/pull/103635), [#103650](https://github.com/openclaw/openclaw/pull/103650), [#103654](https://github.com/openclaw/openclaw/pull/103654), [#103681](https://github.com/openclaw/openclaw/pull/103681), [#103685](https://github.com/openclaw/openclaw/pull/103685), [#103718](https://github.com/openclaw/openclaw/pull/103718), [#103906](https://github.com/openclaw/openclaw/pull/103906), [#103923](https://github.com/openclaw/openclaw/pull/103923), [#104162](https://github.com/openclaw/openclaw/pull/104162), [#104186](https://github.com/openclaw/openclaw/pull/104186), [#104684](https://github.com/openclaw/openclaw/pull/104684), [#104702](https://github.com/openclaw/openclaw/pull/104702), [#104722](https://github.com/openclaw/openclaw/pull/104722), [#104750](https://github.com/openclaw/openclaw/pull/104750), [#104794](https://github.com/openclaw/openclaw/pull/104794), [#104939](https://github.com/openclaw/openclaw/pull/104939), [#104975](https://github.com/openclaw/openclaw/pull/104975), [#105133](https://github.com/openclaw/openclaw/pull/105133), [#105401](https://github.com/openclaw/openclaw/pull/105401), [#105444](https://github.com/openclaw/openclaw/pull/105444), [#105488](https://github.com/openclaw/openclaw/pull/105488), [#105493](https://github.com/openclaw/openclaw/pull/105493), [#105500](https://github.com/openclaw/openclaw/pull/105500). Thanks @100yenadmin, @645648406-max, @849261680, @acosx, @aleps001, @alix-007, @aniruddhaadak80, @bartok9, @brian-bell, @brokemac79, @bryantegomoh, @clawsean, @cxbasdev, @d1rshan, @dboone323, @deepujain, @dwc1997, @evan-ym, @fuller-stack-dev, @galiniliev, @giodl73-repo, @glenn-agent, @goutamadwant, @guanbear, @haishmg, @hannesrudolph, @hemantsudarshan, @hugenshen, @hxy91819, @hyspacex, @iwhatsskill, @jalehman, @joshavant, @keaneyan, @kesslerio, @kevinslin, @kiagentkronos-cell, @leonidaslux, @lin-hongkuan, @luoyanglang, @ly-wang19, @lzw112, @marvinthebored, @masatohoshino, @maweibin, @mcaxtr, @miorbnli, @ml12580, @morluto, @mushuiyu886, @neatguycoding, @nxmxbbd, @obviyus, @ooiuuii, @osolmaz, @patrick-erichsen, @peetiegonzalez, @pikaqqqqqq, @pmika, @qingminglong, @qiuyuang, @romneyda, @ruanrrn, @saju01, @sebtardif, @shakkernerd, @solodmd, @solvely-colin, @steipete-oai, @sunlit-deng, @super-cabbage, @sweetcornna, @tiffanychum, @totobusnello, @turbotheturtle, @vincentkoc, @vishal-dharm, @vishalj99, @wiidz, @wm0018, @wuqxuan, @xialonglee, @xianshishan, @yonganzhang, @zenglingbiao, @zengwen-dt, @zhangguiping-xydt, @zhanglei99586, @zw-xysk.
## 2026.6.11
diff --git a/docs/.i18n/glossary.zh-CN.json b/docs/.i18n/glossary.zh-CN.json
index 2f96c5689cd..34c737685b2 100644
--- a/docs/.i18n/glossary.zh-CN.json
+++ b/docs/.i18n/glossary.zh-CN.json
@@ -1487,6 +1487,10 @@
"source": "Gateway configuration reference",
"target": "Gateway 配置参考"
},
+ {
+ "source": "v2026.7.1",
+ "target": "v2026.7.1"
+ },
{
"source": "Security audit",
"target": "安全审计"
diff --git a/docs/docs.json b/docs/docs.json
index 893054025dc..5b96e2994be 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -1957,6 +1957,7 @@
"group": "Release notes",
"pages": [
"releases/index",
+ "releases/2026.7.1",
"releases/2026.6.11"
]
},
diff --git a/docs/docs_map.md b/docs/docs_map.md
index 00ea5848507..697b5169191 100644
--- a/docs/docs_map.md
+++ b/docs/docs_map.md
@@ -8971,6 +8971,60 @@ Do not edit it by hand; run `pnpm docs:map:gen`.
- H3: Setup and command reliability
- H3: Tools and scheduled work
+## releases/2026.7.1.md
+
+- Route: /releases/2026.7.1
+- Headings:
+ - H1: OpenClaw v2026.7.1 Release Notes (2026-07-13)
+ - H2: Highlights
+ - H3: Control UI overhaul: chat, sessions, workspaces, and usage
+ - H3: Easier setup from install to first chat
+ - H3: Official apps
+ - H4: Shared app improvements
+ - H4: iOS, iPadOS, and Apple Watch
+ - H4: Android
+ - H4: macOS
+ - H3: Models and providers
+ - H4: GPT-5.6 and Codex
+ - H4: Tencent Hy3
+ - H4: Meta Model API and Muse Spark 1.1
+ - H4: Claude models
+ - H4: Other provider routes
+ - H3: Codex and connected coding agents
+ - H3: Telegram
+ - H3: Signal
+ - H3: Slack
+ - H3: Discord
+ - H3: WhatsApp
+ - H3: Apple Messages
+ - H3: Crash loops now stop for repair
+ - H3: Scheduled work, remote browser control, and workspace terminals
+ - H4: Scheduled work that wakes only when needed
+ - H4: Remote browser pairing and downloads
+ - H4: Workspace terminals in web and mobile
+ - H2: More channel improvements
+ - H3: More fixes across messaging channels
+ - H2: More model and provider improvements
+ - H3: Sign-in, model choice, media, and reliability
+ - H2: Memory and conversations
+ - H3: Recall, long chats, and session continuity
+ - H2: Agents, background work, and connections
+ - H3: Keeping work moving and replies delivered
+ - H2: Accounts, devices, and private data
+ - H3: Credentials, permissions, pairing, and file safeguards
+ - H2: Official app details
+ - H3: Shared app changes
+ - H3: More iOS, iPadOS, and Apple Watch changes
+ - H3: More Android changes
+ - H3: More macOS changes
+ - H3: Terminal UI and other clients
+ - H2: Skills, plugins, and installs
+ - H3: Skills, connected apps, packages, and repairs
+ - H2: Setup, maintenance, and tools
+ - H3: Command-line setup, updates, and administration
+ - H3: Documentation and operating guides
+ - H3: Browser, schedules, files, and coding tools
+
## releases/index.md
- Route: /releases
diff --git a/docs/releases/2026.7.1.md b/docs/releases/2026.7.1.md
new file mode 100644
index 00000000000..8e867898286
--- /dev/null
+++ b/docs/releases/2026.7.1.md
@@ -0,0 +1,2542 @@
+---
+title: "v2026.7.1"
+summary: "Major Control UI and onboarding overhauls, big iOS, Android, and macOS updates, expanded model support, and substantial Telegram, Slack, Discord, and Apple Messages improvements."
+description: "Detailed OpenClaw v2026.7.1 release notes for July 13, 2026, covering clients, channels, models, sessions, security, plugins, tools, and administration."
+keywords:
+ - OpenClaw
+ - v2026.7.1
+ - release notes
+ - Control UI
+ - Gateway
+ - reliability
+---
+
+# OpenClaw v2026.7.1 Release Notes (2026-07-13)
+
+OpenClaw v2026.7.1 brings major Control UI and onboarding overhauls, major updates to the official iOS, Android, and macOS apps, expanded model and provider support including GPT-5.6 compatibility, Tencent Hy3, and Meta Muse Spark 1.1, and stronger Codex and connected coding-agent workflows. Telegram, Slack, Discord, and Apple Messages each receive substantial updates, while Gateway crash loops, scheduled work, remote browser control, workspace terminals, sessions, and goals also improve. There are also many general fixes and refinements throughout OpenClaw.
+
+## Highlights
+
+### Control UI overhaul: chat, sessions, workspaces, and usage
+
+The [Control UI](/web/control-ui) now works more like one browser workspace for conversations and parallel work. Chats receive clearer titles, recent sessions are easier to find, pin, group, rename, fork, archive, and mark read, and multiple sessions can sit in resizable panes that return after a reload. Drag-and-drop placement, a denser Sessions page, and a live Tasks view make it easier to move between active work without juggling browser tabs.
+
+Chat controls are clearer while work is in progress. The composer keeps attachments, model choice, voice, reasoning, send and stop state, and message actions usable across screen sizes; Talk users can choose or refresh a microphone from settings and get readable permission guidance on narrow screens; quoted replies preserve the point being answered; and compact tool rows keep inputs, results, images, progress, errors, approvals, and steering available without overwhelming the conversation.
+
+Usage information is easier to understand from both [status views](/cli/status) and the browser. The Usage page compares recent estimated spend and daily values without repeated reloads or hovering, shows each provider, model, agent, or channel's share, and can include provider-reported plans, quotas, balances, budgets, and Anthropic or OpenAI billing details. Seven-, thirty-, and ninety-day charts now keep zero-activity days visible, large all-agent reports limit concurrent work to reduce slowdowns and memory pressure, and chat-level context panels and completed-message details show the active model, tokens, cache use, context pressure, and estimated cost.
+
+Mobile pairing, Gateway health, desktop-node approvals, linked GitHub work, workspace files, scheduled jobs, worktrees, Workboard items, and background tasks are now available closer to the conversation. Their status, permissions, and next steps are also clearer.
+
+The rework also strengthens the paths underneath those controls. Dashboard connects and reconnects use less temporary Gateway memory, reducing false pressure warnings, while temporary Gateway restarts and stale assets recover more cleanly. Path-routed Gateways keep the right destination and credentials, saved choices survive refreshes, and authentication, protocol, update, and pairing failures show more useful next steps instead of leaving the page stuck or ambiguous.
+
+Responsive layouts keep chat history and controls usable on phones, tablets, short landscape screens, and large desktops. Keyboard and focus behavior, contrast, assistive labels, copying, scrolling, and touch targets are more consistent, while navigation, pairing, voice, schedule, and status text reaches more supported languages.
+
+
+
+- New Control UI chats now receive concise sidebar titles from their first message, and operators can route dashboard, Telegram topic, and Discord thread title generation through a smaller `utilityModel`. [#87643](https://github.com/openclaw/openclaw/pull/87643) Thanks @juliangsm, @zhangguiping-xydt.
+- Paired administrators can now create a mobile setup QR or copyable code from Control UI Nodes and use it to connect an official iOS or Android app. [#94672](https://github.com/openclaw/openclaw/pull/94672) Thanks @bkudiess, @douhualili.
+- Control UI now makes conversations easier to create, find, and switch from a populated session sidebar, while keeping context pressure and provider quota information close at hand. [#99289](https://github.com/openclaw/openclaw/pull/99289) Related [#99288](https://github.com/openclaw/openclaw/issues/99288).
+- The Control UI sidebar now focuses on sessions and a few default destinations while letting users pin their preferred pages and keep those choices across reloads. [#100296](https://github.com/openclaw/openclaw/pull/100296)
+- The redesigned Control UI composer keeps attachments, provider and model selection, voice, run state, and message actions clearer and more stable across mobile and desktop layouts. [#100461](https://github.com/openclaw/openclaw/pull/100461) Thanks @fuller-stack-dev.
+- Control UI Talk users can choose and refresh a microphone on narrow screens and read clear permission guidance when browser access is blocked. [#101377](https://github.com/openclaw/openclaw/pull/101377) Thanks @fuller-stack-dev.
+- Control UI chat can now show multiple resizable sessions side by side or stacked, preserve the pane layout across reloads, and keep the active pane usable on narrow screens. [#100754](https://github.com/openclaw/openclaw/pull/100754)
+- The Control UI now has a live Tasks page where operators can inspect active and recent background work, open its session, refresh details, and cancel queued or running tasks when authorized. [#100789](https://github.com/openclaw/openclaw/pull/100789)
+- Session lists across web and mobile now support pinned and custom groups, shared read and unread status, background-output indicators, transcript forking, and in-place rename, archive, move, and delete actions. [#100814](https://github.com/openclaw/openclaw/pull/100814)
+- The Control UI Sessions page now fits more useful status and actions on a typical screen, with row details opening to reveal labels, tuning controls, and checkpoint history instead of forcing routine sideways scrolling. [#100943](https://github.com/openclaw/openclaw/pull/100943)
+- Control UI users can drag a session directly into the current pane or onto any side to create a split, with a preview showing where it will land. [#101191](https://github.com/openclaw/openclaw/pull/101191)
+- Operators can configure token or full per-reply usage footers once with `messages.responseUsage`, while users can turn them off or reset a session to the inherited default. [#89762](https://github.com/openclaw/openclaw/pull/89762) Thanks @marvinthebored, @obviyus, @peetiegonzalez.
+- The Control UI Usage page now makes recent estimated costs, daily values, and each provider, model, agent, or channel's share easier to compare without repeated reloads or hovering. [#100432](https://github.com/openclaw/openclaw/pull/100432)
+- The Usage page now shows provider-reported plans, quotas, reset times, balances, spending, and budgets alongside OpenClaw session analysis, including OpenRouter and Venice coverage. [#100520](https://github.com/openclaw/openclaw/pull/100520)
+- Control UI Usage can now show Anthropic and OpenAI daily spend, tokens, requests, top models, and billing categories for today, seven days, and thirty days when admin credentials are configured. [#100672](https://github.com/openclaw/openclaw/pull/100672)
+- Daily token and cost charts now include zero-activity days across bounded date ranges, so 7-day, 30-day, and 90-day views show the full calendar period instead of shrinking around active days. [#81467](https://github.com/openclaw/openclaw/pull/81467) Thanks @adapepper.
+- All-agent cost reports on large installations now limit concurrent Gateway work so the dashboard is less likely to slow down, time out, or add memory pressure. [#101589](https://github.com/openclaw/openclaw/pull/101589) Thanks @vincentkoc, @zw-xysk.
+- Hovering or keyboard-focusing a public GitHub issue or pull request in Control UI chat now previews its status, title, author, activity, comments, and change size without leaving the conversation. [#100434](https://github.com/openclaw/openclaw/pull/100434)
+- File paths in Control UI chats are now clickable, opening a searchable syntax-highlighted preview at the cited line with options to reveal, copy, or open the file in a supported editor. [#100679](https://github.com/openclaw/openclaw/pull/100679)
+- Control UI connection failures now show actionable messages such as "Pairing required" instead of replacing them with a generic gateway disconnect. [#54758](https://github.com/openclaw/openclaw/pull/54758) Thanks @ruanrrn.
+- Control UI sessions using full verbose output now open tool inputs and results by default, reducing repeated clicks during debugging and review. [#74398](https://github.com/openclaw/openclaw/pull/74398) Thanks @samrusani.
+- The Control UI context indicator now remains visible with an approximate cached total while a response is active, without using stale data for urgent warnings or the Compact action. [#89772](https://github.com/openclaw/openclaw/pull/89772) Thanks @bladin.
+- Control UI and WebChat no longer let a non-terminal internal tool failure dominate the transcript with a red error banner after the assistant has already produced a normal final answer. [#90122](https://github.com/openclaw/openclaw/pull/90122) Thanks @harjothkhara.
+- A default agent selected in the Control UI now remains selected after refresh without saving unrelated unfinished settings. [#91457](https://github.com/openclaw/openclaw/pull/91457) Thanks @zengwen-dt.
+- Segmented streaming replies in Control UI WebChat now stay under one assistant avatar and footer instead of appearing as several separate responses. [#92063](https://github.com/openclaw/openclaw/pull/92063) Related [#63956](https://github.com/openclaw/openclaw/issues/63956). Thanks @contentfree, @harjothkhara.
+- Dashboard WebChat users can right-click a completed message and reply with visible quote context instead of manually copying and formatting it. [#92654](https://github.com/openclaw/openclaw/pull/92654) Thanks @programmingwtf, @vincentkoc.
+- After an update installs, the Control UI now says when a Gateway restart is already in progress instead of making the Update button appear unresponsive. [#93082](https://github.com/openclaw/openclaw/pull/93082) Thanks @goutamadwant.
+- Live tool-using replies in Control UI WebChat now keep the assistant's introduction ahead of the tool card, even when browser and Gateway clocks differ. [#93184](https://github.com/openclaw/openclaw/pull/93184) Thanks @pick-cat.
+- Control UI Quick Create now lets users choose a model for an agent-turn cron job and shows whether existing jobs use that model or the default. [#95341](https://github.com/openclaw/openclaw/pull/95341) Thanks @ly85206559.
+- Control UI WebChat can now show Codex preamble and commentary while tools are running, with a choice to hide or retain that progress after the final answer. [#95708](https://github.com/openclaw/openclaw/pull/95708) Thanks @obviyus, @ragesaq.
+- Long reply IDs containing emoji or other supplementary characters now remain valid when shortened for WebChat and Gateway reply directives instead of being cut into malformed text. [#96938](https://github.com/openclaw/openclaw/pull/96938) Thanks @ly-wang19.
+- Long tool activity details now remain readable when shortened for chat, UI, or logs, even when an emoji or other supplementary character falls at the cutoff. [#96958](https://github.com/openclaw/openclaw/pull/96958) Thanks @bartok9, @ly-wang19, @vincentkoc.
+- WebChat now shows long provider and model names together with the selected reasoning level in the composer, while narrow screens retain a sensible overflow limit. [#96990](https://github.com/openclaw/openclaw/pull/96990) Thanks @maweibin, @xiayingren123.
+- Agents can use targetless `message.send` for progress or intermediate updates in the current WebChat without an explicit destination. [#97167](https://github.com/openclaw/openclaw/pull/97167) Related [#96840](https://github.com/openclaw/openclaw/issues/96840). Thanks @mantiscartography, @zhangguiping-xydt.
+- New Control UI chats now use the selected model's current context window instead of inheriting an outdated, smaller limit from a parent session. [#97332](https://github.com/openclaw/openclaw/pull/97332) Thanks @galiniliev.
+- WebChat stays on the newest reply when assistant audio or video finishes loading, while respecting readers who intentionally scrolled upward. [#97575](https://github.com/openclaw/openclaw/pull/97575) Thanks @turbotheturtle.
+- Control UI pages for multiple Gateways on one domain now stay connected to the Gateway named by their path instead of reusing a sibling page's saved destination. [#97665](https://github.com/openclaw/openclaw/pull/97665) Thanks @alix-007.
+- `/pair qr` now delivers a scannable code in Telegram and Control UI or a readable code in the TUI without storing the one-time setup secret in chat history. [#97933](https://github.com/openclaw/openclaw/pull/97933) Thanks @joshavant.
+- Expired `/pair qr` cards in Control UI now clearly say the code is unusable and direct users to generate a fresh one. [#98049](https://github.com/openclaw/openclaw/pull/98049) Related [#98039](https://github.com/openclaw/openclaw/issues/98039). Thanks @ooiuuii.
+- Expired mobile-pairing codes now explain how to run `/pair qr` again in the selected language. Sources: [bb4afe4](https://github.com/openclaw/openclaw/commit/bb4afe40ae6dbd1c711d22cdaee0b36cf404e5f8), [da9308d](https://github.com/openclaw/openclaw/commit/da9308ddb73113b54c860eafe8d8c2a81b860e41), [dfaec18](https://github.com/openclaw/openclaw/commit/dfaec1888d7ab3f5464ddd5a4a0b6f9fa9cfdb68), [6b7986e](https://github.com/openclaw/openclaw/commit/6b7986e14e00978e4a0b30faf324b3a21f35c717), [21af6e7](https://github.com/openclaw/openclaw/commit/21af6e7b19bfcea5da47316bac973eeb2d211ce8), [4e62124](https://github.com/openclaw/openclaw/commit/4e621240e8da1783657b87ea0c53a750274ea377), [6cd0106](https://github.com/openclaw/openclaw/commit/6cd0106bbc20b9d42a3d714f09e3ced3607fb208), [a72a641](https://github.com/openclaw/openclaw/commit/a72a64136ea047a05a0558f41760b57480ae5e5e), [a143ae4](https://github.com/openclaw/openclaw/commit/a143ae4e7dfea84b209948cd26044b8d8aec77e3), [cd30b1c](https://github.com/openclaw/openclaw/commit/cd30b1c3eeef9eb1b20b858aebb805698cded6f2), [f69e27a](https://github.com/openclaw/openclaw/commit/f69e27afa2b4fb99e169c51a49f39c3fb7e09c21), [ccddbee](https://github.com/openclaw/openclaw/commit/ccddbeea6a104fdf292a9d6ba2e8cca60dd21631), [9ed03df](https://github.com/openclaw/openclaw/commit/9ed03df44d812ccb14b2e69897be7e3209b65770), [f84243f](https://github.com/openclaw/openclaw/commit/f84243fe3fb4d83adb97e88baf607329ab9e9aa2), [3d06ee9](https://github.com/openclaw/openclaw/commit/3d06ee9ed78e946cc02d5b7af9e974c331e60e96), [9bd071e](https://github.com/openclaw/openclaw/commit/9bd071ead3d14e533e619acac075dba2c40bc9ec), [405b7a5](https://github.com/openclaw/openclaw/commit/405b7a52c159f996fc9a7dfc3bc899e2f3411ba0), [1a160ce](https://github.com/openclaw/openclaw/commit/1a160cec093e48141912e8b2f92a5c5ea007e6b5).
+- Control UI now shows channel-triggered agent runs as in progress, so users can tell that messages from channels such as Weixin are actively being handled. [#98257](https://github.com/openclaw/openclaw/pull/98257) Thanks @scotthuang.
+- The Control UI workspace rail now gives long Project files lists their own scrollbar so files remain browsable without spilling off screen. [#98646](https://github.com/openclaw/openclaw/pull/98646) Related [#98566](https://github.com/openclaw/openclaw/issues/98566). Thanks @645648406-max, @wuqxuan.
+- Session Workspace file paths can now be copied from Chat even when the Control UI runs over plain HTTP or another context without the standard Clipboard API. [#98764](https://github.com/openclaw/openclaw/pull/98764) Related [#98759](https://github.com/openclaw/openclaw/issues/98759). Thanks @adinballew, @zengwen-dt.
+- Tool-heavy Control UI chats now use compact expandable activity rows, so commands and results take less space while full details stay one click away. [#99763](https://github.com/openclaw/openclaw/pull/99763)
+- The Control UI now stays fixed during trackpad overscroll on Mac and desktop browsers while chat threads and lists continue scrolling normally. [#99830](https://github.com/openclaw/openclaw/pull/99830)
+- Control UI chat is easier to scan with quieter composer controls, a Faster-to-Smarter reasoning slider, and connection status that no longer competes with persistent version text. [#99838](https://github.com/openclaw/openclaw/pull/99838) Related [#99837](https://github.com/openclaw/openclaw/issues/99837).
+- Mounted deep links, Set Default, authenticated avatars, cron alerts, and Workboard scrolling now behave correctly again across the Control UI. [#100106](https://github.com/openclaw/openclaw/pull/100106)
+- Administrators can now open mobile pairing from any Control UI page or Quick Settings, while non-admin operators continue to see the action disabled with an access explanation. [#100157](https://github.com/openclaw/openclaw/pull/100157)
+- The Control UI now shows a ready mobile-pairing QR code immediately even when the pending-device list is slow, then adds approval requests when they arrive. [#100179](https://github.com/openclaw/openclaw/pull/100179)
+- Control UI users can select and copy tool activity without toggling its row, and failed tools no longer repeat redundant error indicators. [#100199](https://github.com/openclaw/openclaw/pull/100199) Thanks @steipete-oai.
+- The Gateway Dashboard login now fits and behaves better on phones and short windows, with larger touch targets, easier URL entry, and reachable recovery help. [#100208](https://github.com/openclaw/openclaw/pull/100208)
+- Control UI users can organize large session lists by custom group, channel, kind, agent, or date, with persistent assignments and drag-and-drop management. [#100262](https://github.com/openclaw/openclaw/pull/100262)
+- Users can open the Control UI context ring to inspect exact context use, the latest input and output token counts, and the active model without leaving chat. [#100264](https://github.com/openclaw/openclaw/pull/100264)
+- Images returned by tools such as `read` now appear directly in the Control UI conversation instead of only being mentioned in text. [#100295](https://github.com/openclaw/openclaw/pull/100295) Thanks @lzyyzznl, @pandah97, @rquinones84.
+- Control UI tool activity now combines matching calls and results into one consistent row, removes repeated labels and categories, and keeps inputs, outputs, previews, and real errors accessible. [#100318](https://github.com/openclaw/openclaw/pull/100318)
+- The Control UI context panel now shows the latest run's estimated total cost and available input, output, cache-read, and cache-write breakdowns beside the provider and model. [#100379](https://github.com/openclaw/openclaw/pull/100379)
+- The Control UI sidebar now keeps all pinned chats visible alongside nine ordinary recent chats in a more compact, conversation-focused desktop and tablet layout. [#100386](https://github.com/openclaw/openclaw/pull/100386)
+- The Control UI composer now shows reasoning level clearly, keeps Talk and its settings together, and preserves usable model controls on phone and landscape layouts. [#100445](https://github.com/openclaw/openclaw/pull/100445)
+- Control UI Talk now starts from a simpler composer while administrators can set durable provider, transport, timing, and reasoning defaults in Settings. [#100453](https://github.com/openclaw/openclaw/pull/100453)
+- Temporary Gateway disconnects no longer replace an authenticated Control UI page with the login screen, preserving dashboard context while automatic reconnection continues. [#100479](https://github.com/openclaw/openclaw/pull/100479)
+- The Control UI Cron Jobs page now uses compact summaries, clear status cues, expandable details, and an overflow menu so large job lists are faster to review. [#100646](https://github.com/openclaw/openclaw/pull/100646)
+- The Control UI sidebar now keeps recent chats in place while switching, combines search entry points, supports touch session actions, and reduces unnecessary chrome. [#100648](https://github.com/openclaw/openclaw/pull/100648)
+- Images received through Telegram, iMessage, and other channels now reappear inline when users revisit Control UI chat history after a reload. [#100725](https://github.com/openclaw/openclaw/pull/100725) Thanks @sweetcornna, @vergissberlin.
+- The Control UI goal pill now supports pause, resume, clear, inspection, and edit preparation with live timing and token details, while command and TUI users can reword a goal without resetting its budget. [#100736](https://github.com/openclaw/openclaw/pull/100736)
+- The Control UI keeps Overview, Workboard, Agents, and More visible while allowing the session list to use available height and scroll independently. [#100742](https://github.com/openclaw/openclaw/pull/100742)
+- Assistant documents downloaded from the Control UI now keep recognizable original filenames instead of exposing UUID-suffixed staging names. [#100743](https://github.com/openclaw/openclaw/pull/100743)
+- Copying code from a long Control UI reply now keeps the chat at the same reading position instead of jumping upward. [#100807](https://github.com/openclaw/openclaw/pull/100807) Thanks @jvlegod.
+- Desktop Control UI users can choose whether Enter sends or inserts a new line, with Command+Enter or Ctrl+Enter available as the send shortcut and the choice retained for that Gateway. [#100810](https://github.com/openclaw/openclaw/pull/100810) Thanks @moomx, @vincentkoc.
+- Switching Control UI chats no longer unexpectedly moves the selected session to the top, and users can choose stable creation order or recently updated order for the sidebar. [#100927](https://github.com/openclaw/openclaw/pull/100927) Thanks @shakkernerd, @vyctorbrzezowski.
+- Control UI Settings now use consistent `/settings/...` paths while old bookmarks continue to work, making reloads and links more reliable on hosted or reverse-proxied installations. [#100928](https://github.com/openclaw/openclaw/pull/100928) Thanks @vyctorbrzezowski.
+- Control UI navigation now places branding, search, and sidebar controls where desktop and mobile users expect them, with clearer active sessions, compact timestamps, and easier terminal access. [#101017](https://github.com/openclaw/openclaw/pull/101017) Thanks @shakkernerd, @vyctorbrzezowski.
+- The Control UI sidebar collapse control now sits in the sidebar it affects instead of looking like an unrelated topbar or terminal button. [#101038](https://github.com/openclaw/openclaw/pull/101038)
+- Control UI Talk users can choose the system default or any browser-visible microphone beside the Talk button and receive a clear message when a saved device is unavailable. [#101100](https://github.com/openclaw/openclaw/pull/101100)
+- Sidebar session groups can now be renamed, removed without deleting sessions, created while empty, or disabled to restore one flat recent-session list. [#101117](https://github.com/openclaw/openclaw/pull/101117)
+- The Control UI now shows Workboard navigation only when Workboard is enabled and presents a cleaner collapsed sidebar with clearer icons and status spacing. [#101123](https://github.com/openclaw/openclaw/pull/101123)
+- The Control UI now puts search, sidebar access, theme choice, and macOS branding in clearer, more predictable locations with accurate screen-reader labels. [#101497](https://github.com/openclaw/openclaw/pull/101497)
+- Temporary Gateway drops no longer push Control UI content down with a full-width banner, so the dashboard stays in place while a compact Retry notice appears. [#101812](https://github.com/openclaw/openclaw/pull/101812)
+- Temporary Gateway disconnects now use a calmer, dashboard-native reconnect pill with the same Retry and accessibility behavior. [#101844](https://github.com/openclaw/openclaw/pull/101844)
+- Control UI commentary settings now use the selected language across the supported translations in this release. Sources: [34badde](https://github.com/openclaw/openclaw/commit/34badde1d983c247cd6b16ad8f5b4e1f9891c0f1), [a9cb866](https://github.com/openclaw/openclaw/commit/a9cb866f62fe9c2f7c8f9a8c3ef1a23cae556781), [ce9166d](https://github.com/openclaw/openclaw/commit/ce9166d1cd8404db51004bbdd5edc95d229788c8), [6b67ada](https://github.com/openclaw/openclaw/commit/6b67ada87ad934f6dd8afbda95830381b3767247), [006c2f7](https://github.com/openclaw/openclaw/commit/006c2f7a2b28433753521f2f9f729ba0032b51ff), [6bdffa5](https://github.com/openclaw/openclaw/commit/6bdffa501bcf8eb1b3b13122b6e2e76149693f07), [b4476ab](https://github.com/openclaw/openclaw/commit/b4476ab72f9d74a946ef0cc963e4d26dab280e45), [5b5c623](https://github.com/openclaw/openclaw/commit/5b5c6237c236b79a894c6d2c1dd4d3bd7e5188f3), [1520d09](https://github.com/openclaw/openclaw/commit/1520d0980741c85407c4e2037dfd5fb9d8f9d1c4), [6140326](https://github.com/openclaw/openclaw/commit/614032676d16bf2dd98030e7925f14ad52f5618e), [75bd44a](https://github.com/openclaw/openclaw/commit/75bd44a94bfb096010273ae14935b9cd90ccc2d3), [c1aeaf9](https://github.com/openclaw/openclaw/commit/c1aeaf9287ec25428ed1e673d869e193e930ba6b), [49edc0a](https://github.com/openclaw/openclaw/commit/49edc0a8af2f06cca21cd6df2abd81a7d99a574c), [cb69ce7](https://github.com/openclaw/openclaw/commit/cb69ce7ba84f7252acd3b87653a0a91b7442f41d), [bb0af61](https://github.com/openclaw/openclaw/commit/bb0af61d20277cf91205e6fe561dc7cccfc8e969), [0dcfbb0](https://github.com/openclaw/openclaw/commit/0dcfbb09d807800585219a4363eb67438b006f40), [db73ece](https://github.com/openclaw/openclaw/commit/db73ece2de77053433a767bcc587348d5a77fef1), [21e6fc9](https://github.com/openclaw/openclaw/commit/21e6fc948b1977b5702ab4c981dacf4d0b3b6de6).
+- The All Sessions sidebar label now uses the selected language across the supported Control UI translations in this release. Sources: [b2c3dc2](https://github.com/openclaw/openclaw/commit/b2c3dc2d55f8bef05f2c8107b9c9b867653aec20), [61347a5](https://github.com/openclaw/openclaw/commit/61347a5054e6c4fce8dee39509c104521b087c7e), [a2674b6](https://github.com/openclaw/openclaw/commit/a2674b6aa4333a6c37ddb3cf7a4c7f52924c37c6), [bbabad4](https://github.com/openclaw/openclaw/commit/bbabad4031c3cab4f0e685fb0fcab183520291ab), [8909289](https://github.com/openclaw/openclaw/commit/89092893fea34eefecca09076d643a5b08f62498), [22552d6](https://github.com/openclaw/openclaw/commit/22552d6e667fa8c35ff236f85d3d3e1aa66872fb), [96e3615](https://github.com/openclaw/openclaw/commit/96e361558e7367f452a2b400fc8120c3a4f6fc72), [452351c](https://github.com/openclaw/openclaw/commit/452351cc7152abdd765445a2109726e5278b153f), [5e9a62c](https://github.com/openclaw/openclaw/commit/5e9a62cc1945850b72d7944e937fef969c9f8ed1), [0a9648b](https://github.com/openclaw/openclaw/commit/0a9648ba4766e0c5da87866d6c7299bb07ede4fa), [a803589](https://github.com/openclaw/openclaw/commit/a8035892b1f04b20f1b8e687094e6e7a18dee45c), [7c30ff8](https://github.com/openclaw/openclaw/commit/7c30ff8a60896a290de07af45d0176d2e30069e5), [e3d2878](https://github.com/openclaw/openclaw/commit/e3d2878af44f7095436d6754f73431b9add676b1), [620f2e3](https://github.com/openclaw/openclaw/commit/620f2e3112016622c59350e4aaf71a0e448d0c1a), [aa0f36c](https://github.com/openclaw/openclaw/commit/aa0f36cb0632ae283493f9d01f3d9819548b5107), [c336256](https://github.com/openclaw/openclaw/commit/c336256309956b18ff4c211ab62481c6dcd59d8b), [64dd688](https://github.com/openclaw/openclaw/commit/64dd68899e6b9f8b15c9a3c533e470ba6e36d7a5), [e2ecbc8](https://github.com/openclaw/openclaw/commit/e2ecbc85b7fe30b3096f86ba9cb189fb43807850).
+- The Control UI mobile-pairing flow now appears in the selected language across 18 supported locales instead of mixing localized screens with English setup text. [c78b0d5](https://github.com/openclaw/openclaw/commit/c78b0d59f5a2becf7e3e0f0bb5d470f72e8526ed)
+- A failed Control UI login or Gateway connection now immediately shows the error, recovery steps, and relevant documentation link instead of hiding them in a collapsed panel. [f9e194e](https://github.com/openclaw/openclaw/commit/f9e194e4a122f0c142c23f1bc9603466add7eb03)
+- The web sidebar now reliably fills pinned and overflow navigation routes, keeping destinations such as Worktrees available. [55a0012](https://github.com/openclaw/openclaw/commit/55a0012c44b52af2f22982cc85568e6e5d0df5c7) Thanks @vincentkoc.
+- Non-English Control UI users now see translated cron overflow-menu and "run if due" labels, including the assistive label for more actions. [2585d6b](https://github.com/openclaw/openclaw/commit/2585d6b2e8202149576f643259c932406a6f8294)
+- The Control UI microphone-access warning for realtime voice input now appears in the user's selected language. [68c85ef](https://github.com/openclaw/openclaw/commit/68c85effcd1e0a1c65673397a206e53bf7d672ac)
+- The Control UI sidebar now builds cleanly with session grouping and drag-to-split behavior intact after stray merge-conflict text was removed. [0e3ce24](https://github.com/openclaw/openclaw/commit/0e3ce24cc8cd16faa78d87b12b114fcf24a42d87)
+- Hindi and Russian users can now receive matching Control UI translations, and documentation operators can generate those language editions through the existing locale workflow. [689baa5](https://github.com/openclaw/openclaw/commit/689baa5c1e48be2aa31564fd5c3fd21bf4dfb754) Thanks @vincentkoc.
+- During device pairing, `/ pair qr` now follows the same authorized pairing flow as `/pair qr` without starting an agent turn or disrupting the existing Control UI route. [#98262](https://github.com/openclaw/openclaw/pull/98262) Thanks @brokemac79.
+- Opening or reconnecting the Control UI dashboard now uses much less temporary Gateway memory, reducing false `rss_growth` warnings while preserving requested usage totals. [#100054](https://github.com/openclaw/openclaw/pull/100054) Thanks @nianjiuzst.
+- Control UI Settings now shows a remote Gateway's host identity, address, operating system, runtime, uptime, CPU load, memory, and free disk space without requiring SSH. [#100478](https://github.com/openclaw/openclaw/pull/100478)
+- The Control UI now shows execution approvals for supported desktop nodes and rejects pending, unsupported, or policy-blocked requests before they reach the node. [#100505](https://github.com/openclaw/openclaw/pull/100505) Thanks @vincentkoc.
+- A configured `ui.seamColor` now changes Control UI buttons, highlights, selections, and focus rings, while invalid values fall back cleanly. [#93699](https://github.com/openclaw/openclaw/pull/93699) Thanks @dennis-lynch, @goutamadwant.
+- QR codes and other half-block text art in the Control UI now preserve spacing, scroll when needed, and copy with enough padding to remain usable. [#93869](https://github.com/openclaw/openclaw/pull/93869) Thanks @emg110, @vincentkoc.
+- Open Control UI tabs now switch to the active build after a service-worker update, reducing stale JavaScript, CSS, and protocol mismatch errors after upgrades. [#96141](https://github.com/openclaw/openclaw/pull/96141) Thanks @andrewccctechlink, @brokemac79.
+- Chat clients can now match each pending user message to its exact Gateway-confirmed message, reducing duplicate or mismatched bubbles during interleaved turns. [#96273](https://github.com/openclaw/openclaw/pull/96273) Thanks @datus1982, @wyf027.
+- Clicking a cron job's History button now gives immediate feedback and scrolls directly to that job's updated run history. [#96281](https://github.com/openclaw/openclaw/pull/96281) Thanks @wyf027, @yzhong52.
+- Control UI token totals near one million now display as `1.0M` instead of the confusing `1000k`. [#96298](https://github.com/openclaw/openclaw/pull/96298) Thanks @ly-wang19.
+- Usage Mosaic and usage summaries now show near-million token totals as `1.0M` instead of `1000.0K`. [#96450](https://github.com/openclaw/openclaw/pull/96450) Thanks @ly-wang19.
+- The Voice, Model, and Sensitivity controls in Control UI Talk settings now align consistently in one row without duplicate selected-value text disturbing the layout. [#96925](https://github.com/openclaw/openclaw/pull/96925) Thanks @evan-ym.
+- Control UI approval prompts no longer inherit failures from older requests or re-enable controls while the current decision is still being processed. [#98394](https://github.com/openclaw/openclaw/pull/98394) Thanks @haruaiclone-droid.
+- Control UI now stops retrying after detecting an incompatible Gateway protocol and shows the update or reload guidance needed to reconnect. [#98414](https://github.com/openclaw/openclaw/pull/98414) Thanks @haruaiclone-droid.
+- On phones and other short landscape screens, the Control UI composer now scrolls within a bounded area so chat history and all composing controls remain accessible. [#98683](https://github.com/openclaw/openclaw/pull/98683) Related [#98615](https://github.com/openclaw/openclaw/issues/98615). Thanks @jin-li, @qingminglong.
+- The Control UI now retries after a temporary failed load during a Gateway restart or stale-asset transition instead of remaining stuck until the page is refreshed manually. [#99111](https://github.com/openclaw/openclaw/pull/99111) Thanks @zengwen-dt.
+- Large pasted PNG screenshots can now be sent through Control UI webchat without failing during attachment processing. [#99213](https://github.com/openclaw/openclaw/pull/99213) Thanks @jincheng-xydt, @vincentkoc.
+- The Control UI mobile-pairing flow is now fully localized for Hindi and Russian users, from setup-code creation through pending-device management. [#100040](https://github.com/openclaw/openclaw/pull/100040)
+- The Control UI workspace rail now sits flush with the window and uses less space when collapsed, removing the empty strip without overlapping chat. [#100088](https://github.com/openclaw/openclaw/pull/100088)
+- Control UI chat history now hides only exact duplicate final delivery mirrors, leaving legitimate repeated sends, forwards, and distinct replies visible. [#100136](https://github.com/openclaw/openclaw/pull/100136)
+- Control UI chats now leave consistent space above the first message across phones, standard desktops, and tall windows. [#100144](https://github.com/openclaw/openclaw/pull/100144) Thanks @steipete-oai.
+- Control UI Settings now offers a persistent Simple/Advanced switch, cleaner Appearance controls, and a Pending label only when a Context Profile change is actually staged. [#100147](https://github.com/openclaw/openclaw/pull/100147)
+- Control UI tool-call bubbles and error badges now share clean right-edge alignment, so failed activity is easier to scan on phone-sized and desktop chats. [#100163](https://github.com/openclaw/openclaw/pull/100163) Thanks @steipete-oai.
+- OpenAI users now see only the supported Standard and Fast choices in the Control UI speed picker, with inherited Fast mode shown correctly. [#100190](https://github.com/openclaw/openclaw/pull/100190)
+- Short drafts in the Control UI composer no longer show an unnecessary scrollbar gutter, while long drafts still scroll when needed. [#100252](https://github.com/openclaw/openclaw/pull/100252)
+- Clearing a session label now removes the old name promptly from other subscribed Control UI clients without requiring a full refresh. [#100266](https://github.com/openclaw/openclaw/pull/100266)
+- Desktop Control UI users can hover a shortened recent-session name to reveal its hidden tail and distinguish similar conversations without opening each one. [#100276](https://github.com/openclaw/openclaw/pull/100276)
+- The expanded Control UI sidebar no longer repeats provider quota information already available in chat, Overview, and Usage views. [#100356](https://github.com/openclaw/openclaw/pull/100356) Thanks @shakkernerd.
+- Completed Control UI messages now use the timestamp to open token, cache, context, cost, and model details instead of adding a separate Context control to every footer. [#100391](https://github.com/openclaw/openclaw/pull/100391) Thanks @steipete-oai.
+- Autonomous session history now keeps an earlier failed cron or scheduled turn marked as an error even after a later turn succeeds or the page reloads. [#100514](https://github.com/openclaw/openclaw/pull/100514) Thanks @qingminglong.
+- The Control UI Skills page now shows readable Agent and Search labels with aligned filters and correctly sized selection controls. [#100526](https://github.com/openclaw/openclaw/pull/100526) Thanks @evan-ym.
+- After a Control UI reply finishes, the composer now stays on Send despite delayed completed-run state, while a real new run still switches it to Stop. [#100527](https://github.com/openclaw/openclaw/pull/100527) Thanks @tiffanychum.
+- Control UI and Skill Workshop file previews now show a single Escape shortcut hint while retaining Escape-to-close behavior. [#100528](https://github.com/openclaw/openclaw/pull/100528) Thanks @xianshishan.
+- Expanded Control UI tool activity no longer repeats the tool name and icon, making completed and in-progress calls quicker to scan. [#100606](https://github.com/openclaw/openclaw/pull/100606)
+- Clearing a Control UI session model override now shows the selected agent's own default model rather than the unrelated global default. [#100719](https://github.com/openclaw/openclaw/pull/100719) Thanks @hyspacex.
+- Assistant-sent documents in WebChat now download with their original server-provided filename, including Unicode names, instead of opening as an unnamed browser document. [#100728](https://github.com/openclaw/openclaw/pull/100728) Thanks @lptrichor.
+- The Control UI now accepts `/steer` guidance during an active run instead of incorrectly replying `No active run`. [#100803](https://github.com/openclaw/openclaw/pull/100803) Thanks @hackerismydream.
+- New Control UI sessions now stay visible at the front of the sidebar after users switch to another chat, without requiring a page refresh. [#100981](https://github.com/openclaw/openclaw/pull/100981) Thanks @shakkernerd.
+- Worktrees management now lives under Control UI Settings instead of occupying a top-level sidebar item, while existing deep links remain valid. [#100995](https://github.com/openclaw/openclaw/pull/100995)
+- Long `/btw` answers in the desktop Control UI now stay within the browser window and scroll inside the result card, while mobile retains full-card scrolling. [#101169](https://github.com/openclaw/openclaw/pull/101169) Thanks @snoutfirst.
+- Finished chats no longer remain stuck with a busy spinner in the Control UI sidebar, even when an older Gateway update arrives afterward. [#101293](https://github.com/openclaw/openclaw/pull/101293) Thanks @fuller-stack-dev.
+- Large Skill Workshop support files now scroll, switch, filter, wrap, and copy without freezing or severely slowing the Control UI. [#101319](https://github.com/openclaw/openclaw/pull/101319) Thanks @shakkernerd, @xianshishan.
+- Users can stay signed in to multiple path- or query-routed Control UI gateways on one HTTPS origin without one gateway overwriting another's device token. [#101352](https://github.com/openclaw/openclaw/pull/101352) Thanks @fuller-stack-dev.
+- Control UI users can type `/approve` to release a waiting exec prompt without the decision getting queued behind the blocked chat run. [#101532](https://github.com/openclaw/openclaw/pull/101532) Thanks @vincentkoc.
+- Control UI build errors now keep emoji and other supplementary characters intact when command output is shortened for display. [#101591](https://github.com/openclaw/openclaw/pull/101591) Thanks @maweibin.
+- Workboard cards can now be edited, moved, archived, stopped, opened, or deleted directly from the detail drawer, while read-only viewers still see no mutation controls. [#101658](https://github.com/openclaw/openclaw/pull/101658) Thanks @momothemage, @princebansal.
+- The Control UI microphone button is now visually quieter while idle and more distinct while recording, making the current voice state easier to recognize. [#101843](https://github.com/openclaw/openclaw/pull/101843)
+- Users with saved working dashboard credentials no longer see the login screen flash briefly while Control UI reconnects. [#101849](https://github.com/openclaw/openclaw/pull/101849)
+- Typing anywhere in the active Control UI chat now places the first character in the message composer without stealing input from the command palette. [#102210](https://github.com/openclaw/openclaw/pull/102210) Thanks @shakkernerd.
+
+
+
+### Easier setup from install to first chat
+
+[Onboarding](/cli/onboard) now offers clearer paths to a usable first chat. Fresh CLI installs enter guided setup, configured installs open the TUI, and conversational Crestodian setup remains optional. Android and macOS guide users through [pairing](/channels/pairing), permissions, local or remote setup, and recovery; macOS can also test detected Claude Code, Codex, Gemini CLI, API-key, and supported provider-catalog choices before saving them. Interrupted authentication or channel setup retains earlier choices, while users without a working model are guided through credential and model selection instead of being sent into an unusable chat. Owners and administrators can also renew an expired Codex or OpenAI login through private Telegram, Web UI, Discord, or Slack commands without SSH access.
+
+Existing installations receive safeguards before their working state is changed. [Doctor](/cli/doctor) and updates refuse to replace an unreadable configuration, Doctor preserves model tuning while merging retired entries, and [extended-stable updates](/install/updating) retain the selected release channel. Container upgrades complete migrations and plugin repairs before reporting readiness, and unsafe runtimes are stopped before they can open OpenClaw state databases.
+
+
+
+- `openclaw doctor` and updates now refuse to replace an unreadable `openclaw.json`, preserving existing Gateway, agent, channel, and plugin settings instead of breaking the installation. [#96469](https://github.com/openclaw/openclaw/pull/96469) Thanks @obviyus, @yetval.
+- `openclaw doctor --fix` now preserves aliases, parameters, streaming choices, runtime settings, and other model tuning when several retired model names merge into one current model, and reports any merge conflicts accurately. [#96544](https://github.com/openclaw/openclaw/pull/96544) Thanks @vincentkoc, @yetval.
+- Owners and admins can now restore an expired Codex or OpenAI login from a browser through private Telegram, Web UI, Discord, or Slack commands without SSH access. [#98006](https://github.com/openclaw/openclaw/pull/98006) Thanks @100yenadmin, @jalehman, @obviyus.
+- The CLI now guides fresh installs through setup, opens configured installs directly in the TUI, preserves existing choices on reruns, and finishes onboarding in a usable terminal chat. [#98218](https://github.com/openclaw/openclaw/pull/98218) Thanks @fuller-stack-dev.
+- New Android users now get a guided first-run path through setup-code or QR entry, Gateway pairing, node approval, permissions, recovery steps, and confirmed phone readiness before onboarding completes. [#98752](https://github.com/openclaw/openclaw/pull/98752) Thanks @jesse-merhi.
+- New Mac users can now open the app and reach a working local agent without Terminal, Homebrew, administrator access, or an extra approval prompt for the app's own node. [#99767](https://github.com/openclaw/openclaw/pull/99767) Related [#99764](https://github.com/openclaw/openclaw/issues/99764).
+- Package installs can now select and retain `openclaw update --channel extended-stable`, inspect its availability, and fail safely if its npm metadata is incomplete. [#99811](https://github.com/openclaw/openclaw/pull/99811) Thanks @kevinslin.
+- Fresh installs can now complete conversational Crestodian setup, approve the proposed plan once, connect channels, and continue into the normal agent while classic and scripted onboarding remain available. [#99935](https://github.com/openclaw/openclaw/pull/99935)
+- macOS onboarding now verifies the chosen AI connection before first chat, presents clearer local and remote setup choices, and offers friendly recovery or a verified manual API-key path when authentication fails. [#100288](https://github.com/openclaw/openclaw/pull/100288)
+- First-time onboarding now preserves earlier choices after authentication or pairing trouble and gives users an actionable model-configuration next step instead of opening an unusable first chat. [#100632](https://github.com/openclaw/openclaw/pull/100632)
+- macOS onboarding now offers the Gateway's supported text-inference provider catalog instead of only Anthropic, OpenAI, and Google, and tests credentials before saving them. [#101132](https://github.com/openclaw/openclaw/pull/101132)
+- Container upgrades now finish required migrations and plugin repairs before reporting the Gateway ready, and failed repairs stop with actionable guidance instead of leaving a false-green service. [#101881](https://github.com/openclaw/openclaw/pull/101881) Thanks @sallyom.
+- Crestodian setup now guides users who lack a usable model provider through masked credential entry and model selection, while deterministic setup and repair commands remain available until inference is configured. [#101887](https://github.com/openclaw/openclaw/pull/101887) Thanks @fuller-stack-dev.
+- OpenClaw now blocks unsafe runtimes before they can open SQLite-backed state, guides legacy Bun services to Node, and selects a WAL-safe Node runtime during setup and repair. [#106065](https://github.com/openclaw/openclaw/pull/106065) Thanks @vincentkoc.
+
+
+
+### Official apps
+
+The official [iOS](/platforms/ios), [Android](/platforms/android), and [macOS](/platforms/macos) apps received substantial updates across setup, navigation, chat, voice, Apple Watch, permissions, localization, files, scheduled work, native session controls, and Gateway recovery. Recent conversations remain useful through temporary disconnects: cached sessions and transcripts stay available for reading, supported text sends can wait for reconnection in the correct chat, and long conversations are easier to resume without losing the current place or mistaking an offline view for live history.
+
+These improvements also bring the native clients closer together. Mobile queues survive app restarts, the [macOS](/platforms/macos) app gains fuller session and transcript tools, and each client refreshes the same conversation when the Gateway returns.
+
+#### Shared app improvements
+
+
+
+- iOS and Android chats now preserve the reader's scroll position as new messages and tool activity arrive, with a clear way to return to the latest reply. [#98258](https://github.com/openclaw/openclaw/pull/98258) Related [#98255](https://github.com/openclaw/openclaw/issues/98255). Thanks @christopheraaronhogg.
+
+
+
+#### iOS, iPadOS, and Apple Watch
+
+
+
+- iPhone and iPad chat now opens with the last known conversation and lets users browse recent cached sessions while the Gateway is unavailable. [#100219](https://github.com/openclaw/openclaw/pull/100219)
+- iOS users can queue chat messages while disconnected, keep them through app restarts, and send them in order after reconnection with clear retry and delete controls. [#100331](https://github.com/openclaw/openclaw/pull/100331)
+- Apple Watch users can dictate a message and hear OpenClaw's final reply on the Watch, with separate silent-send, cancel, and stop controls. [#100283](https://github.com/openclaw/openclaw/pull/100283)
+
+
+
+#### Android
+
+
+
+- Android chat now shows the last known transcript immediately and keeps recent cached conversations readable during a Gateway outage, then refreshes them after reconnection. [#100227](https://github.com/openclaw/openclaw/pull/100227)
+- Android users can queue text while the Gateway is offline, keep it through an app restart, and send it in order after reconnection with Retry and Delete controls for failures. [#100290](https://github.com/openclaw/openclaw/pull/100290)
+
+
+
+#### macOS
+
+
+
+- Mac chat now restores recent sessions and transcripts immediately, remains browsable while disconnected, and queues offline sends for the correct Gateway identity. [#100275](https://github.com/openclaw/openclaw/pull/100275)
+- The native macOS chat window now provides a full session sidebar, real new-session creation, slash-command completion, context and cost visibility, message copying, transcript export, and compact or clear-history actions. [#101103](https://github.com/openclaw/openclaw/pull/101103)
+
+
+
+### Models and providers
+
+OpenClaw [model selection](/concepts/models) expands across major hosted, managed, and local choices. Each supported [provider route](/concepts/model-providers) retains its own authentication, model limits, reasoning controls, tool behavior, image support, and usage reporting.
+
+#### GPT-5.6 and Codex
+
+Organizations with GPT-5.6 preview access can select Sol, Terra, or Luna through supported OpenAI and Codex routes with the expected context metadata, text and image input, reasoning levels, and cache-write accounting when OpenAI supplies it. Fresh OpenAI API-key and ChatGPT/Codex setups choose their intended GPT-5.6 defaults without replacing an explicit model choice. Supported Ultra choices remain aligned across OpenClaw and native Codex, and [Codex supervision](/plugins/codex-supervision) records native Codex child agents as tasks and returns their results to the parent.
+
+#### Tencent Hy3
+
+Tencent Hunyuan Hy3 now has a complete setup path through TokenHub or TokenPlan, including first-class authentication choices, CLI onboarding, model discovery, and configuration validation. Existing TokenHub configurations retain access to `hy3-preview` alongside the stable `hy3` model.
+
+#### Meta Model API and Muse Spark 1.1
+
+Operators can configure Meta Model API with `MODEL_API_KEY` or the onboarding authentication choice, select `meta-model-api/muse-spark-1.1`, and use supported streaming, tool calling, image input, and reasoning-effort controls.
+
+#### Claude models
+
+Claude Sonnet 5 is selectable through direct Anthropic, Claude CLI, supported Vertex regions, Bedrock inference profiles, and Bedrock Mantle with its documented context, output, image, thinking, and pricing behavior. Users with Claude Mythos 5 access can select it through supported Anthropic-family routes with its required context, output, adaptive-thinking, caching, and replay behavior.
+
+#### Other provider routes
+
+Copilot sessions can explicitly use supported custom OpenAI, Azure OpenAI, Ollama-compatible, or Anthropic providers and start a compatible session when connection or credential settings change. Paired computers can run short tasks on eligible local Ollama models, while ClawRouter can expose the models granted to one managed key and report their usage and budget. Users can also claim active promotional models without replacing existing defaults, install LongCat-2.0 through its official provider, and continue Gemini latest tool-calling conversations across both supported Google transports.
+
+
+
+- Copilot sessions can now use explicitly selected custom OpenAI, Azure OpenAI, Ollama-compatible, or Anthropic providers and restart cleanly when model, endpoint, credentials, headers, or token limits change. [#96345](https://github.com/openclaw/openclaw/pull/96345) Thanks @vincentkoc.
+- GPT-5.6 users can now select supported Ultra modes consistently, keep model and thinking choices aligned across OpenClaw surfaces, and receive native Codex child-agent results as tracked tasks. [#98021](https://github.com/openclaw/openclaw/pull/98021) Thanks @anyech.
+- Claude Sonnet 5 is now selectable across Anthropic, Claude CLI, supported Vertex regions, Bedrock inference profiles, and Bedrock Mantle with its documented context, output, image, thinking, and pricing behavior. [#98254](https://github.com/openclaw/openclaw/pull/98254) Thanks @vortexopenclaw.
+- Organizations with GPT-5.6 preview access can select Sol, Terra, or Luna across supported OpenAI and Codex paths with correct reasoning controls, context metadata, and cache-write accounting. [#98333](https://github.com/openclaw/openclaw/pull/98333) Related [#98296](https://github.com/openclaw/openclaw/issues/98296). Thanks @steipete-oai.
+- Tencent Hunyuan Hy3 now has a complete supported OpenClaw setup path through TokenHub or TokenPlan, including first-class authentication, model discovery, configuration validation, CLI onboarding, and compatibility for existing `hy3-preview` setups. [#99076](https://github.com/openclaw/openclaw/pull/99076) Thanks @moncac.
+- OpenClaw agents can now run short tasks on chat-capable Ollama models installed on paired macOS, Linux, or Windows nodes, with a separate control for disabling node inference. [#99234](https://github.com/openclaw/openclaw/pull/99234) Related [#99228](https://github.com/openclaw/openclaw/issues/99228).
+- A single `CLAWROUTER_API_KEY` can now expose only its granted models across supported transports and show managed requests, tokens, spend, and monthly budget in normal status views. [#99658](https://github.com/openclaw/openclaw/pull/99658) Related [#99657](https://github.com/openclaw/openclaw/issues/99657).
+- Users can discover active promotional models and claim them with `openclaw promos claim <slug>` without rerunning onboarding or unexpectedly replacing existing defaults and credentials. [#100236](https://github.com/openclaw/openclaw/pull/100236) Thanks @fuller-stack-dev.
+- Hosted LongCat-2.0 can now be installed through the official LongCat plugin, configured with `LONGCAT_API_KEY` during onboarding, and selected as `longcat/LongCat-2.0` for multi-turn tool use. [#100501](https://github.com/openclaw/openclaw/pull/100501) Thanks @vincentkoc.
+- Gemini latest aliases now continue tool-calling conversations across both supported Google transports instead of stopping with a missing-thought-signature HTTP 400. [#100605](https://github.com/openclaw/openclaw/pull/100605) Thanks @chenxiaoyu209, @guarismo.
+- Users with Claude Mythos 5 access can select it through Anthropic, Anthropic Vertex, Amazon Bedrock, or Bedrock Mantle with its required context, output, thinking, caching, and replay behavior. [#101238](https://github.com/openclaw/openclaw/pull/101238) Thanks @vincentkoc.
+- OpenClaw now supports Meta Model API setup and the Muse Spark 1.1 model, including streaming, tool calling, image input, and supported reasoning controls. [#102873](https://github.com/openclaw/openclaw/pull/102873) Thanks @davemorin, @hamidshojanazeri, @jalehman, @solvely-colin.
+- Legacy-state upgrades no longer stall repeatedly, while fresh OpenAI and ChatGPT/Codex setups select the intended GPT-5.6 defaults and use supported temperature and tool-call behavior. [#104656](https://github.com/openclaw/openclaw/pull/104656) Thanks @bdjben, @obviyus, @sallyom.
+
+
+
+### Codex and connected coding agents
+
+OpenClaw now works more cleanly with coding agents that live outside the current chat. `openclaw attach` can open Claude Code against the main or a selected Gateway session with temporary, revocable access instead of process-wide credentials. Codex app-server sessions can resume, delegate to native subagents, and return their results as tracked work, while Copilot sessions can use explicitly selected custom providers and restart when their connection settings change.
+
+The surrounding session workflow is more durable too. Important conversations can be pinned, renamed, archived, restored, and monitored as ongoing work, while active goals remain part of working memory across later turns, compaction, queues, and interruptions.
+
+
+
+- External tools can now receive session-scoped Gateway access without process-wide credentials or permission to impersonate another session, forming the secure base for `openclaw attach`. [#96351](https://github.com/openclaw/openclaw/pull/96351) Thanks @anagnorisis2peripeteia, @obviyus.
+- `openclaw attach` now launches Claude Code with temporary access to the main or selected Gateway session, keeps credentials out of arguments, and revokes the grant when the session ends. [#96454](https://github.com/openclaw/openclaw/pull/96454) Thanks @anagnorisis2peripeteia, @obviyus.
+- GPT-5.6 users can now select supported Ultra modes consistently, keep model and thinking choices aligned across OpenClaw surfaces, and receive native Codex child-agent results as tracked tasks. [#98021](https://github.com/openclaw/openclaw/pull/98021) Thanks @anyech.
+- Codex app-server agents can again list allowed agents, spawn OpenClaw or connected subagents, and yield during delegated work without resumed heartbeats hitting incompatible tool definitions. [#99561](https://github.com/openclaw/openclaw/pull/99561) Related [#99464](https://github.com/openclaw/openclaw/issues/99464). Thanks @100yenadmin, @joshavant.
+- Codex-native delegation from OpenClaw threads now creates native task records again, while unsupported custom Codex app-server versions fail startup with a clear minimum-version error. [#101221](https://github.com/openclaw/openclaw/pull/101221)
+- Copilot sessions can now use explicitly selected custom OpenAI, Azure OpenAI, Ollama-compatible, or Anthropic providers and restart cleanly when model, endpoint, credentials, headers, or token limits change. [#96345](https://github.com/openclaw/openclaw/pull/96345) Thanks @vincentkoc.
+- Sessions can now be pinned, archived without losing transcripts, restored, renamed from chat surfaces, and monitored for active runs as durable conversation threads. [#98510](https://github.com/openclaw/openclaw/pull/98510) Thanks @maziyang2.
+- An active `/goal` now keeps guiding later turns and survives compaction, queues, and interruptions until the goal is paused, completed, blocked, or limited. [#100468](https://github.com/openclaw/openclaw/pull/100468)
+
+
+
+### Telegram
+
+[Telegram](/channels/telegram) received broad work across live progress, media, documents, topics, commands, retries, account routing, setup, and delivery. Albums reach the model with every available image, long replies remain easier to follow while they run, and temporary conflicts or network failures are less likely to block later messages or create duplicates.
+
+Messages and actions also stay with the intended bot, topic, and conversation more consistently, while setup and account-health problems provide clearer ways to recover.
+
+
+
+- Telegram photo albums now give the model every successfully downloaded image in order instead of only one photo and unusable file references, while failed items are omitted. [#97045](https://github.com/openclaw/openclaw/pull/97045) Thanks @nianjiuzst, @obviyus.
+- Telegram's live progress view now keeps reasoning, commentary, formatting, and tool activity readable and stable, then leaves a concise completion summary instead of disappearing. [#98907](https://github.com/openclaw/openclaw/pull/98907) Thanks @marvinthebored, @peetiegonzalez.
+- Telegram users should see fewer failed final replies or bot delivery sends during flaky network handshakes, without increasing duplicate-message risk for failures that may have happened after a request was sent. [#101258](https://github.com/openclaw/openclaw/pull/101258) Thanks @lzw112.
+
+
+
+### Signal
+
+[Signal](/channels/signal) replies can now quote the message that triggered them, making busy conversations easier to follow. Friendly aliases such as `signal:me` or `signal:ops` also make repeat contacts and groups easier to address without reusing raw identifiers.
+
+
+
+- Signal auto-replies now quote the message that triggered them, making responses easier to follow in groups and busy conversations. [#95718](https://github.com/openclaw/openclaw/pull/95718) Thanks @jesse-merhi.
+- Signal users can assign stable names such as `signal:me` or `signal:ops` to repeat contacts and groups instead of reusing raw phone numbers, UUIDs, or IDs. [#95738](https://github.com/openclaw/openclaw/pull/95738) Thanks @jesse-merhi.
+
+
+
+### Slack
+
+[Slack](https://docs.openclaw.ai/channels/slack) threads retain their conversation history more consistently, interactive cards and progress stay in the right place, and accepted replies are less likely to be repeated after an uncertain confirmation. Long-running conversations also avoid more unnecessary waits before reaching the agent.
+
+
+
+- Slack replies stay attached to the root thread's session history instead of accumulating separate, nearly empty child sessions. [#97168](https://github.com/openclaw/openclaw/pull/97168) Related [#96535](https://github.com/openclaw/openclaw/issues/96535). Thanks @gorkem2020, @liuwqgit.
+- When Slack accepts a reply but the confirmation is lost, OpenClaw can verify the existing post and avoid sending a duplicate. [#97480](https://github.com/openclaw/openclaw/pull/97480) Thanks @joeyfrasier.
+
+
+
+### Discord
+
+[Discord](https://docs.openclaw.ai/channels/discord) improves reply visibility, attachments, voice sessions, progress, reconnects, and multi-account behavior. Completed replies produce more useful unread cues, brief Gateway reconnects are less likely to lose outbound messages, and repeated session-resume failures can recover without taking the whole Gateway down.
+
+
+
+- Completed partial-stream Discord replies now arrive as fresh messages that can trigger normal unread cues after a user leaves the channel. [#99711](https://github.com/openclaw/openclaw/pull/99711) Thanks @davelutztx.
+- Discord replies, cron reports, and other outbound messages are less likely to disappear during a brief Gateway reconnect, without replaying chunks or media Discord already accepted. [#100896](https://github.com/openclaw/openclaw/pull/100896) Thanks @tiffanychum.
+- Discord bots can now recover in place after repeated session-resume rejection, reducing prolonged outages, lost replies, and full Gateway restarts. [#103596](https://github.com/openclaw/openclaw/pull/103596)
+
+
+
+### WhatsApp
+
+[WhatsApp](/channels/whatsapp) reconnects and overlapping replies are less likely to lose, skip, or disorder messages. Logged-out accounts remain stopped until they are deliberately reconnected, while accepted messages and completed replies continue more reliably through brief connection changes.
+
+
+
+- Logged-out or replaced WhatsApp accounts now stay stopped until reconnection instead of entering repeated restart loops that can consume resources and slow other accounts. [#78511](https://github.com/openclaw/openclaw/pull/78511) Thanks @openperf.
+- Eligible WhatsApp messages received during a brief reconnect now reach OpenClaw for an automatic reply instead of being marked read and silently skipped. [#80642](https://github.com/openclaw/openclaw/pull/80642) Thanks @vishalj99.
+- Concurrent WhatsApp Web replies, media, reactions, and queued messages now send one at a time per account, reducing interference and unpredictable delivery order. [#99050](https://github.com/openclaw/openclaw/pull/99050) Thanks @ooiuuii.
+- Completed WhatsApp replies now continue delivering when another message arrives mid-delivery, so overlapping conversations are less likely to go unexpectedly silent. [#100205](https://github.com/openclaw/openclaw/pull/100205)
+
+
+
+### Apple Messages
+
+[Apple Messages](/channels/imessage) receives broader improvements to replies, typing, media, routing, setup guidance, and chat continuity. Remote Mac attachments can reach the active conversation through a usable local path, replies work in more bridge setups, and ordinary message text is less likely to be mistaken for internal role markers.
+
+
+
+- Photos bridged from a remote iMessage Mac to a separate Gateway host now arrive in Codex conversations through a readable local path rather than a Mac-only filename. [#91803](https://github.com/openclaw/openclaw/pull/91803) Thanks @turbotheturtle.
+- AppleScript-only and bot-user or SSH iMessage setups now deliver replies even when threading is unavailable, and database changes no longer leave inbound messages hidden behind stale recovery state. [#100446](https://github.com/openclaw/openclaw/pull/100446) Thanks @omarshahine.
+- Direct iMessage chats using the `imsg` private API bridge now show typing as soon as a slow turn is accepted, without waiting for a read receipt. [#95621](https://github.com/openclaw/openclaw/pull/95621) Thanks @omarshahine.
+- iMessage replies no longer lose ordinary sentence text that happens to end with `user:`, `system:`, or `assistant:`. [#96392](https://github.com/openclaw/openclaw/pull/96392) Thanks @ly-wang19.
+
+
+
+### Crash loops now stop for repair
+
+A supervised Gateway that repeatedly fails during startup now leaves operators a stable [restart and recovery](/gateway/restart-recovery) process to inspect and repair. Instead of relaunching forever, the control path remains available while automatic channel and provider restarts pause until the underlying problem is fixed.
+
+
+
+- A repeatedly crashing supervised Gateway now leaves a stable control process available for inspection and repair instead of trapping operators in a restart loop. [a18708c](https://github.com/openclaw/openclaw/commit/a18708c5c12d93f14eb753b543a6747e8baa8c47) Thanks @obviyus.
+
+
+
+### Scheduled work, remote browser control, and workspace terminals
+
+Scheduled work can wake when a command finishes or a watched condition changes, remote browser control can pair selected signed-in tabs and save completed downloads safely, and guarded workspace terminals are available across web and mobile.
+
+#### Scheduled work that wakes only when needed
+
+[Scheduled jobs](/automation/cron-jobs) can react when an external command finishes or a watched condition changes, so the full agent runs only when there is something new to handle. Reapplying the same declaration updates the intended job in place, preserving identity and history instead of creating duplicate schedules.
+
+
+
+- A cron job can now watch a build, deploy, script, or other command and resume the originating workflow with its exit code and recent output when it finishes. [#92037](https://github.com/openclaw/openclaw/pull/92037) Thanks @anagnorisis2peripeteia.
+- Cron declarations can now be safely reapplied without duplicate jobs or lost history, while ownership, next run, latest result, delivery, and failure notifications are easier to inspect. [#100480](https://github.com/openclaw/openclaw/pull/100480)
+- Cron jobs can now watch an outside condition and run their real payload only when that state changes, avoiding full agent wakeups on unchanged polls. [#101195](https://github.com/openclaw/openclaw/pull/101195)
+
+
+
+#### Remote browser pairing and downloads
+
+[Browser control](/tools/browser-control) is easier to use across machines: operators can pair the bundled Chrome extension with a remote Gateway, share only selected signed-in tabs, diagnose Windows and WSL2 connection details, and revoke access by removing a tab from the OpenClaw group. Agents can also wait for delayed downloads and save the finished file to a guarded local path with its final URL and suggested name.
+
+
+
+- Windows and WSL2 users now get IPv4 and IPv6 checks plus the matching portproxy guidance needed to restore Chrome browser control without broadening CDP exposure. [#100590](https://github.com/openclaw/openclaw/pull/100590) Thanks @owlock, @zengwen-dt.
+- The bundled Chrome extension now lets users control selected signed-in tabs from a phone or another channel without someone approving remote debugging at the desktop, and removing a tab revokes access. [#100619](https://github.com/openclaw/openclaw/pull/100619)
+- Remote Gateway users can pair the bundled Chrome extension from another browser machine with `openclaw browser extension pair --gateway-url wss://...`, without installing OpenClaw or Node.js there or opening an inbound port. [#101127](https://github.com/openclaw/openclaw/pull/101127)
+- Agents can now save a browser download to a chosen guarded path or wait for a delayed export, receiving the final URL, filename, and local path. [#101369](https://github.com/openclaw/openclaw/pull/101369) Thanks @grd-chang.
+
+
+
+#### Workspace terminals in web and mobile
+
+Authenticated operators can open a guarded workspace terminal from the [Control UI](/web/control-ui), iOS, or Android without leaving the current workspace. Sessions use the selected agent's workspace and configured shell, can be disabled by policy, and follow the [Gateway protocol](/gateway/protocol) controls for ownership and connection state. Browser terminals can dock, resize, and run side by side, while iOS and Android provide focused entry points with clear connection guidance.
+
+Same-release browser hardening completes the capability: terminals can reattach after reloads, sleep, or brief network drops and replay recent output; newly enabled support appears without a manual refresh; and closing, reopening, theming, cursor focus, prompt glyphs, and new-tab controls remain usable through repeated sessions.
+
+
+
+- Authenticated admins can open an interactive terminal in an agent workspace from Gateway-backed controls, while fully sandboxed agents remain blocked and the feature can be disabled with `gateway.terminal.enabled`. [f083f35](https://github.com/openclaw/openclaw/commit/f083f35ddb467fa5ed7077244525913673bc7aa0)
+- Control UI admins can now keep chat, session controls, and live shells together by opening multiple dockable, resizable terminal tabs inside the browser workspace. [ec72de4](https://github.com/openclaw/openclaw/commit/ec72de41faa71b71d0e479eaa31d791e3b6afe58)
+- iOS users can open Terminal directly from the Control hub, see a Gateway setup prompt when disconnected, and keep active shell sessions running through unrelated screen updates. [211e0d7](https://github.com/openclaw/openclaw/commit/211e0d7263c188ef8cbc5956808306b37bbfccc0)
+- Android users can open an agent-workspace shell from Settings > Terminal, with clear connection guidance and Gateway credentials passed without placing the token in the URL when supported. [fcd7eb6](https://github.com/openclaw/openclaw/commit/fcd7eb6130ed0d3de4a850bda6434f6a8b67664f)
+- Opt-in Control UI terminal sessions can now survive page reloads, sleep, and brief network drops, letting operators reattach and replay recent output instead of losing running commands. [#100089](https://github.com/openclaw/openclaw/pull/100089)
+- Opening a new Control UI terminal after closing the final tab now starts with a blank fresh shell instead of restoring the closed terminal output. [#100665](https://github.com/openclaw/openclaw/pull/100665)
+- Control UI terminal tabs now close cleanly while opening, follow theme changes, and reopen at a usable size instead of leaving hidden sessions, stale colors, or unreachable controls. [2399ce7](https://github.com/openclaw/openclaw/commit/2399ce7c854d278276e65c9ed75f273a3c972e39)
+- An already-open Control UI page now notices when terminal support is enabled and makes the terminal available without requiring a manual refresh. [3f976f9](https://github.com/openclaw/openclaw/commit/3f976f9f8624ded5af6fc48abf43c25a79661a32)
+- Opening a new Control UI terminal tab after closing another no longer inherits an old exited state. [3c03389](https://github.com/openclaw/openclaw/commit/3c033899257210cb46d3c87468bb1a613e4fc831)
+- The Control UI terminal no longer crashes when its web component is loaded more than once in a shared browser registry. [f2e5159](https://github.com/openclaw/openclaw/commit/f2e5159f53248800416c15cc3aef50e505968317)
+- Control UI terminals now use installed Nerd Font fallbacks so supported prompt and listing icons render as glyphs instead of placeholder boxes. [#100128](https://github.com/openclaw/openclaw/pull/100128)
+- The Control UI integrated terminal now shows one cursor instead of overlapping Chrome and terminal carets, making focus and typing state clearer. [#100240](https://github.com/openclaw/openclaw/pull/100240)
+- The Control UI terminal's new-session button now aligns with the surrounding tabs for a cleaner, easier-to-scan tab bar. [#100256](https://github.com/openclaw/openclaw/pull/100256)
+
+
+
+## More channel improvements
+
+### More fixes across messaging channels
+
+Replies and media now stay attached to the intended conversation more consistently across workspace, mobile, and community channels. [Telegram](/channels/telegram) handles albums, progress, retries, topics, routing, and delivery with fewer dropped, duplicated, stale, or hard-to-read results.
+
+Discord, Slack, WhatsApp, Apple Messages, and other supported channels also receive clearer command, thread, attachment, proxy, and recovery behavior. The [Apple Messages](/channels/imessage) setup and delivery paths in this group preserve the chat context readers expect rather than exposing the routing work underneath.
+
+
+
+- Telegram photo albums now give the model every successfully downloaded image in order instead of only one photo and unusable file references, while failed items are omitted. [#97045](https://github.com/openclaw/openclaw/pull/97045) Thanks @nianjiuzst, @obviyus.
+- Telegram's live progress view now keeps reasoning, commentary, formatting, and tool activity readable and stable, then leaves a concise completion summary instead of disappearing. [#98907](https://github.com/openclaw/openclaw/pull/98907) Thanks @marvinthebored, @peetiegonzalez.
+- Slack channels can keep ambient OpenClaw participation while the opt-in `ignoreOtherMentions` setting prevents replies to conversations aimed at another person or group and retains that conversation as context for a later bot mention. [#53467](https://github.com/openclaw/openclaw/pull/53467) Thanks @hanamizuki.
+- Slack operators running multiple Gateways through one Socket Mode app now receive a startup warning explaining why events may reach another connection and how to choose a safer deployment setup. [#79938](https://github.com/openclaw/openclaw/pull/79938) Thanks @jeffvsutherland.
+- Discord message reads and searches now decode raw compressed responses correctly and return clear errors for unexpected data instead of garbled output or opaque failures. [#80788](https://github.com/openclaw/openclaw/pull/80788) Thanks @jbetala7.
+- Slack operators can now choose `off`, `first`, `all`, or `batched` reply threading per channel, with automatic replies and message tools following the same effective choice. [#82253](https://github.com/openclaw/openclaw/pull/82253)
+- Slack button and select interactions now remain in the correct assistant thread and show a working status there until the follow-up turn finishes. [#82895](https://github.com/openclaw/openclaw/pull/82895) Thanks @wukongai-cmu.
+- Discord tool-only replies no longer leave overlapping typing refreshes that suggest another answer is still coming, while explicitly configured typing behavior remains intact. [#84288](https://github.com/openclaw/openclaw/pull/84288) Thanks @dr00-eth.
+- Scheduled and heartbeat-driven Slack messages now use the configured agent name and icon, with graceful fallback to the app identity when Slack rejects customization. [#84335](https://github.com/openclaw/openclaw/pull/84335) Thanks @rohang2005.
+- Longer Slack assistant-thread replies now show changing progress notes so users can tell OpenClaw is still working. [#85507](https://github.com/openclaw/openclaw/pull/85507) Thanks @emergentash.
+- Multiple Discord bot accounts in one server now keep independent voice sessions, and configured voice auto-join works even when Discord becomes ready before voice startup completes. [#87530](https://github.com/openclaw/openclaw/pull/87530) Thanks @geekhuashan.
+- When a Discord voice-note reply fails, users now receive the assistant's answer as a threaded text fallback without duplicating text that was already delivered. [#89962](https://github.com/openclaw/openclaw/pull/89962) Thanks @danhayman.
+- Discord's clear-all reactions action now returns a real error if any bot reaction remains instead of claiming complete success. [#90038](https://github.com/openclaw/openclaw/pull/90038) Thanks @masatohoshino.
+- Checking a Discord member who is not in voice now reports them as disconnected instead of raising a misleading command or gateway failure. [#90969](https://github.com/openclaw/openclaw/pull/90969) Thanks @asock.
+- Discord REST calls now fail with a clear error when a response is oversized or stalls instead of risking unbounded memory use and process instability. [#95412](https://github.com/openclaw/openclaw/pull/95412) Thanks @alix-007.
+- Slack presentation messages now arrive as native Block Kit cards with working headers, controls, and receipts instead of flattened plain text. [#95463](https://github.com/openclaw/openclaw/pull/95463) Thanks @zoowh.
+- Discord now shows enabled Anthropic reasoning, notes, and tool activity in the right order with accurate counters and nonblank summaries. [#96106](https://github.com/openclaw/openclaw/pull/96106) Thanks @marvinthebored, @obviyus, @peetiegonzalez.
+- Adding a named Discord account no longer knocks a SecretRef-backed default account offline or into a restart loop. [#96401](https://github.com/openclaw/openclaw/pull/96401) Thanks @849261680.
+- Slack rich-text block actions can now include emoji near the preview limit without producing malformed interaction text or downstream encoding failures. [#96577](https://github.com/openclaw/openclaw/pull/96577) Thanks @llagy007, @weeli-009.
+- The first Slack reply after a daily or idle reset can reuse recent thread history, so the conversation does not suddenly start from scratch. [#97100](https://github.com/openclaw/openclaw/pull/97100) Thanks @bek91.
+- Slack replies stay attached to the root thread's session history instead of accumulating separate, nearly empty child sessions. [#97168](https://github.com/openclaw/openclaw/pull/97168) Related [#96535](https://github.com/openclaw/openclaw/issues/96535). Thanks @gorkem2020, @liuwqgit.
+- Discord account health checks now fail safely on oversized identity responses instead of risking a Gateway crash or out-of-memory failure. [#97278](https://github.com/openclaw/openclaw/pull/97278) Thanks @hugenshen.
+- Slack replies no longer expose internal tool-failure banners, reasoning scaffolding, or tool-call markup to users. [#97367](https://github.com/openclaw/openclaw/pull/97367) Thanks @masatohoshino.
+- When Slack accepts a reply but the confirmation is lost, OpenClaw can verify the existing post and avoid sending a duplicate. [#97480](https://github.com/openclaw/openclaw/pull/97480) Thanks @joeyfrasier.
+- Discord message, thread-history, and attachment requests now reject oversized successful responses before they can drive excessive Gateway memory growth. [#97693](https://github.com/openclaw/openclaw/pull/97693) Thanks @alix-007.
+- Discord PluralKit lookups and voice-upload setup now stop unexpectedly large JSON responses before they can exhaust memory. [#97706](https://github.com/openclaw/openclaw/pull/97706) Thanks @cxbasdev.
+- Discord voice conversations in `stt-tts` mode now retain earlier spoken context across turns instead of starting over after each reply. [#97746](https://github.com/openclaw/openclaw/pull/97746) Thanks @karabaralex, @sanjays2402.
+- Malformed successful Discord responses now fail with endpoint-specific context instead of surfacing a raw parser error or crashing OpenClaw. [#97889](https://github.com/openclaw/openclaw/pull/97889) Thanks @lsr911.
+- An oversized Discord gateway metadata response now logs a bounded error and falls back to Discord's default gateway URL instead of risking a Gateway crash. [#98682](https://github.com/openclaw/openclaw/pull/98682) Thanks @wings1029.
+- Discord deployments in restricted networks can now route Gateway and REST traffic through an explicitly configured DNS or private HTTP(S) proxy without opening broad direct HTTPS egress. [#99126](https://github.com/openclaw/openclaw/pull/99126) Related [#98266](https://github.com/openclaw/openclaw/issues/98266). Thanks @joshavant, @sallyom, @svuppala2006.
+- Discord users now receive the reply text and a clear notice when an attachment is too large instead of seeing the completed response disappear. [#99577](https://github.com/openclaw/openclaw/pull/99577) Thanks @lin-hongkuan.
+- Slack replies now retry after a temporary session-start conflict instead of stopping before the expected message is delivered. [#99647](https://github.com/openclaw/openclaw/pull/99647) Thanks @steipete-oai.
+- Completed partial-stream Discord replies now arrive as fresh messages that can trigger normal unread cues after a user leaves the channel. [#99711](https://github.com/openclaw/openclaw/pull/99711) Thanks @davelutztx.
+- Slack buttons and menus now preserve time labels such as `9:00` and return the intended action value when selected. [#99877](https://github.com/openclaw/openclaw/pull/99877) Thanks @qingminglong, @rodja.
+- Discord and other progress views now hide repetitive internal Code Mode polling while continuing to show meaningful tool activity. [#99893](https://github.com/openclaw/openclaw/pull/99893)
+- Discord Gateway connections now cap incoming frames at 16 MiB, preserving tested large member events while rejecting extreme traffic before it pressures memory. [#99998](https://github.com/openclaw/openclaw/pull/99998) Thanks @sunlit-deng.
+- Slack message reactions now accept common emoji or shortcode names, can target the current message without repeating its ID, and provide clearer member-lookup guidance. [#100375](https://github.com/openclaw/openclaw/pull/100375) Thanks @gorkem2020.
+- Slack now uses one static acknowledgement reaction alongside its native assistant loading status by default, avoiding two competing progress displays for the same reply. [#100462](https://github.com/openclaw/openclaw/pull/100462) Thanks @steipete-oai.
+- Ordinary Slack thread replies no longer download and process the opening message attachments again, while new or reset sessions still receive those files once. [#100516](https://github.com/openclaw/openclaw/pull/100516)
+- Session history now identifies Slack replies that were generated but intentionally superseded before delivery, so operators do not mistake them for messages the user received. [#100607](https://github.com/openclaw/openclaw/pull/100607) Thanks @bek91.
+- Messages that fail before reaching Discord, Slack, Matrix, or another channel can now be replayed after connectivity returns, while uncertain post-send outcomes still avoid blind duplicates. [#101024](https://github.com/openclaw/openclaw/pull/101024) Thanks @sunnyshu0925.
+- Cron summaries, Teams and Slack replies, and other embedded assistant responses no longer expose provider reasoning markers such as `</mm:think>`. [#101036](https://github.com/openclaw/openclaw/pull/101036) Thanks @velanir-ai-manager.
+- Discord voice playback now turns broken ffmpeg output pipes into a normal playback error instead of an uncaught Gateway-level exception. [#101088](https://github.com/openclaw/openclaw/pull/101088) Thanks @masatohoshino.
+- Long-running Discord and Nextcloud Talk integrations now bound their channel metadata caches instead of letting each newly encountered room increase memory use forever. [#101650](https://github.com/openclaw/openclaw/pull/101650) Thanks @alix-007, @vincentkoc.
+- Slack replies in very long threads and on busy Gateways now avoid several unnecessary waits, reducing stalls before thread and direct-message events reach the agent. [#101888](https://github.com/openclaw/openclaw/pull/101888) Thanks @obviyus.
+- Discord bots can now recover in place after repeated session-resume rejection, reducing prolonged outages, lost replies, and full Gateway restarts. [#103596](https://github.com/openclaw/openclaw/pull/103596)
+- Channel previews, thread names, snippets, and shortened errors across browser and messaging integrations now preserve whole emoji and other Unicode characters. [c16bb87](https://github.com/openclaw/openclaw/commit/c16bb8725a8a04d5de92855769cf87e13574384f) Thanks @vincentkoc.
+- Long Slack context labels, Zalo messages and captions, and extension command output now truncate without breaking emoji or other non-BMP characters. [7e03242](https://github.com/openclaw/openclaw/commit/7e0324263b867d3d47138d1d2b1e9afd1dd2016f) Thanks @hugenshen, @mushuiyu886, @vincentkoc.
+- Default and named LINE bots configured under `channels.line.accounts` now receive working webhook routes unless explicitly disabled, preventing valid inbound messages from ending in 404 responses. [#81471](https://github.com/openclaw/openclaw/pull/81471) Thanks @edenfunf, @honorlin.
+- A Feishu connection that stops receiving messages is less likely to remain falsely marked healthy because transport activity now updates channel health. [#90966](https://github.com/openclaw/openclaw/pull/90966) Thanks @acache, @richardataxai-lab, @vincentkoc.
+- Photos bridged from a remote iMessage Mac to a separate Gateway host now arrive in Codex conversations through a readable local path rather than a Mac-only filename. [#91803](https://github.com/openclaw/openclaw/pull/91803) Thanks @turbotheturtle.
+- Compatible iMessage bridge users can create, read, and vote on native Apple Messages polls, with upgrade guidance for unsupported `imsg` installations. [#98421](https://github.com/openclaw/openclaw/pull/98421) Thanks @lobster, @omarshahine.
+- WhatsApp group owners can reliably use `/new`, `/stop`, `/status`, and similar commands even when their sender identity arrives as an internal LID. [#93379](https://github.com/openclaw/openclaw/pull/93379) Related [#77755](https://github.com/openclaw/openclaw/issues/77755). Thanks @jiveshkalra, @xialonglee.
+- LINE file uploads now retain recognizable audio extensions such as `.m4a`, allowing valid recordings to reach transcription instead of being treated as unknown files. [#96403](https://github.com/openclaw/openclaw/pull/96403) Thanks @tancolo, @zaidazmi.
+- Fenced code blocks that contain example lines resembling Markdown fence markers are now kept together instead of being split mid-block and becoming confusing or misread. [#96745](https://github.com/openclaw/openclaw/pull/96745) Thanks @ly-wang19, @vincentkoc.
+- Signal reaction shortcuts now apply only to the intended structured exec or plugin approval, including forwarded monitor and chunked prompts, while ordinary messages that merely quote approval commands no longer gain controls; older delivered prompts may still require `/approve` once after upgrade. [#96880](https://github.com/openclaw/openclaw/pull/96880) Thanks @joshavant.
+- Signal QuickStart now shows one clear `signal-cli` installation failure and proceeds directly to the custom-path prompt instead of repeating the missing-binary message. [#96932](https://github.com/openclaw/openclaw/pull/96932) Thanks @romneyda.
+- Long unbroken messages now keep emoji intact when split into delivery-sized chunks, preventing garbled replacement characters for users and channel plugins. [#96951](https://github.com/openclaw/openclaw/pull/96951) Thanks @bartok9, @ly-wang19.
+- Signal users now receive clean assistant replies without internal tool status, reasoning tags, or tool-call markup. [#97360](https://github.com/openclaw/openclaw/pull/97360) Thanks @masatohoshino.
+- LINE template titles, fallback text, and alt text now keep emoji intact at field limits, preventing broken previews and rejected payloads. [#97428](https://github.com/openclaw/openclaw/pull/97428) Thanks @ly-wang19, @vincentkoc.
+- Long LINE button labels, quick replies, postback data, and media controls now preserve emoji at field limits instead of producing malformed text. [#97470](https://github.com/openclaw/openclaw/pull/97470) Thanks @ly-wang19, @vincentkoc.
+- Signal plugin setup now handles slow, malformed, or oversized GitHub release metadata without risking process memory exhaustion. [#97536](https://github.com/openclaw/openclaw/pull/97536) Thanks @hugenshen.
+- Signal container mode now stops oversized or runaway `signal-cli-rest-api` responses from threatening the entire OpenClaw process. [#97539](https://github.com/openclaw/openclaw/pull/97539) Thanks @alix-007.
+- Invalid JSON from the Signal REST container now produces a clear Signal-specific failure instead of exposing a raw parser error. [#98073](https://github.com/openclaw/openclaw/pull/98073) Thanks @lsr911, @vincentkoc.
+- Voting for an emoji-labeled iMessage poll option no longer sends an extra one-word message that repeats the selected answer. [#98691](https://github.com/openclaw/openclaw/pull/98691) Thanks @omarshahine.
+- Agents now answer iMessage polls, including polls with comments, with one native vote instead of an ordinary text answer, a repeated selection, or a separate reply to the comment. [#98781](https://github.com/openclaw/openclaw/pull/98781) Thanks @omarshahine.
+- Signal users who enable status reactions can now see when OpenClaw accepts a message, works, uses tools, compacts, stalls, or finishes in direct and group chats. [#98791](https://github.com/openclaw/openclaw/pull/98791) Thanks @jesse-merhi.
+- LINE messages, cards, menus, locations, and code blocks now preserve emoji and other multi-unit characters at field limits instead of producing broken text or rejected payloads. [#98994](https://github.com/openclaw/openclaw/pull/98994) Thanks @lexes7, @vincentkoc.
+- Bare 32-character iMessage group IDs from `imsg` now route scheduled and direct sends to the intended conversation instead of a nonexistent phone number. [#99525](https://github.com/openclaw/openclaw/pull/99525) Related [#89235](https://github.com/openclaw/openclaw/issues/89235). Thanks @matthewdelprado.
+- With `channels.whatsapp.actions.calls`, MeowCaller, and telephony TTS configured, a WhatsApp agent can now call the requester and speak a short task-completion or urgent message. [#99635](https://github.com/openclaw/openclaw/pull/99635)
+- Attachment download failures across WhatsApp, LINE, Signal, iMessage, Teams, Feishu, Mattermost, and Zalo now remain visible and actionable instead of disappearing or masquerading as successful media. [#100119](https://github.com/openclaw/openclaw/pull/100119)
+- AppleScript-only and bot-user or SSH iMessage setups now deliver replies even when threading is unavailable, and database changes no longer leave inbound messages hidden behind stale recovery state. [#100446](https://github.com/openclaw/openclaw/pull/100446) Thanks @omarshahine.
+- Noisy phone numbers with extra plus signs now match the intended Signal, iMessage, or WhatsApp contact, while identities with no digits are rejected safely. [#100467](https://github.com/openclaw/openclaw/pull/100467) Thanks @morluto.
+- ClickClack agent replies to top-level messages now stay in the active channel or direct message, while replies inside real threads remain threaded. [#100582](https://github.com/openclaw/openclaw/pull/100582) Thanks @marvinthebored, @vincentkoc.
+- LINE replies that combine text with an image, card, or location now report a failed rich-media portion accurately while delivering the text once and avoiding duplicate retries. [#100996](https://github.com/openclaw/openclaw/pull/100996) Thanks @masatohoshino.
+- An iMessage helper pipe failure now ends pending work predictably and lets the monitor recover or stop cleanly instead of crashing the Gateway or hanging requests. [#101084](https://github.com/openclaw/openclaw/pull/101084) Thanks @masatohoshino.
+- Direct WhatsApp polls now honor the same outreach timelock as other sends instead of reaching recipients during a blocked window. [1d128b4](https://github.com/openclaw/openclaw/commit/1d128b4dd23297ee3553142954e4ce0542ba83e6) Thanks @vincentkoc.
+- Google Meet and direct Voice Call sessions now keep the identity, workspace, routing, and transcript attribution of the agent that started the call instead of silently switching to the default agent. [#77763](https://github.com/openclaw/openclaw/pull/77763) Thanks @quangtran88.
+- Google Live call history now keeps both sides of the conversation, while reconnects avoid submitting unfinished speech or combining unrelated utterances. [#84161](https://github.com/openclaw/openclaw/pull/84161)
+- OpenAI Realtime outbound calls now play one opening greeting even when the recipient speaks immediately after answering, while later interruptions continue to stop active speech. [#86285](https://github.com/openclaw/openclaw/pull/86285) Thanks @giodl73-repo, @jnikolaidis.
+- QQBot upgrades now migrate recoverable credential backups into SQLite without deleting source files when import fails, while disposable caches rebuild separately. [#89597](https://github.com/openclaw/openclaw/pull/89597)
+- Callers using realtime OpenAI or Google voice calls can now interrupt assistant speech and have buffered phone audio stop promptly, while other providers keep the existing local fallback. [#90749](https://github.com/openclaw/openclaw/pull/90749) Thanks @moellenbeck.
+- QQBot can now deliver documents and media created by sandboxed agents from authorized workspace paths while continuing to block path escapes. [#92872](https://github.com/openclaw/openclaw/pull/92872) Thanks @sliverp, @zhangguiping-xydt.
+- Messages sent through OpenClaw's message tool now retain configured static or identity response prefixes, keeping routed and broadcast messages consistently labeled. [#93639](https://github.com/openclaw/openclaw/pull/93639) Thanks @zengwen-dt.
+- Voice callers now hear a completed answer without waiting for post-turn compaction, and a successful early playback is no longer repeated. [#94015](https://github.com/openclaw/openclaw/pull/94015) Thanks @xialonglee.
+- Feishu replies now arrive as completed blocks when block streaming is enabled without streaming cards, rather than disappearing entirely. [#94250](https://github.com/openclaw/openclaw/pull/94250) Related [#55027](https://github.com/openclaw/openclaw/issues/55027). Thanks @vincentkoc, @xialonglee, @zichaolong.
+- When an interactive command button falls back to text, users now receive the command they can copy, with Feishu document comments explaining the manual step. [#94385](https://github.com/openclaw/openclaw/pull/94385) Related [#69754](https://github.com/openclaw/openclaw/issues/69754). Thanks @1yihui, @xialonglee.
+- Twilio voice-call operators can select US1, IE1, or AU1 so call control and records use the intended Region, with US1 remaining the default. [#95832](https://github.com/openclaw/openclaw/pull/95832) Thanks @jodok.
+- Nextcloud Talk sends and reactions now bound server response sizes, protecting OpenClaw from hangs or runaway memory use while preserving normal delivery. [#96031](https://github.com/openclaw/openclaw/pull/96031) Thanks @alix-007.
+- Reply directives containing hidden unsafe characters now produce stable, display-safe reply IDs before chat routing uses them. [#96446](https://github.com/openclaw/openclaw/pull/96446) Thanks @lin-hongkuan.
+- Microsoft Teams replies to long parent messages now keep emoji and similar characters intact in the agent's parent-message context instead of inserting malformed text. [#96569](https://github.com/openclaw/openclaw/pull/96569) Thanks @llagy007, @weeli-009.
+- Long IRC messages now keep emoji and other supplementary characters intact when split into delivery chunks, including with unusually small configured chunk limits. [#96572](https://github.com/openclaw/openclaw/pull/96572) Thanks @llagy007, @weeli-009.
+- Google Chat sends and request verification now bound oversized API, certificate, and error responses, allowing normal traffic through while broken or hostile bodies fail or truncate without exhausting memory. [#96772](https://github.com/openclaw/openclaw/pull/96772) Thanks @vincentkoc, @wangmiao0668000666.
+- QQBot speech-to-text now returns an early, labelled error when an OpenAI-compatible transcription endpoint sends an oversized response instead of buffering the full body in memory. [#96968](https://github.com/openclaw/openclaw/pull/96968) Thanks @mushuiyu886.
+- `openclaw channels login --channel feishu` now prints a compact QR code that stays scannable in a normal terminal window. [#97087](https://github.com/openclaw/openclaw/pull/97087) Thanks @nianjiuzst.
+- Long Matrix thread starters keep emoji and other special characters intact when OpenClaw shortens them for agent context. [#97121](https://github.com/openclaw/openclaw/pull/97121) Thanks @bartok9, @ly-wang19.
+- IRC users now receive the intended answer without internal tool-failure banners or assistant-only scaffolding appearing in channel messages. [#97214](https://github.com/openclaw/openclaw/pull/97214) Thanks @masatohoshino, @studentzhou-svg, @vincentkoc.
+- Zalo setup, polling, sending, and health checks now reject abnormally large successful replies before they can push the Gateway into severe memory pressure. [#97277](https://github.com/openclaw/openclaw/pull/97277) Thanks @hugenshen.
+- Matrix operators now receive a structured warning when token rotations leave multiple populated storage roots, with details for identifying and carefully archiving stale folders. [#97353](https://github.com/openclaw/openclaw/pull/97353) Thanks @eldron81-r2d2, @outdog-hwh.
+- Matrix replies now deliver the intended answer without leaking internal tool diagnostics, reasoning tags, or assistant-only scaffolding. [#97372](https://github.com/openclaw/openclaw/pull/97372) Thanks @masatohoshino.
+- QQBot Markdown tables now keep escaped pipe characters inside their cells, so commands and expressions do not shift into the wrong columns. [#97429](https://github.com/openclaw/openclaw/pull/97429) Thanks @ly-wang19.
+- Long Feishu streaming-card summaries now keep emoji and other non-BMP characters intact at the truncation boundary. [#97462](https://github.com/openclaw/openclaw/pull/97462) Thanks @ly-wang19.
+- Long Matrix reply quotes sent to agents now truncate emoji and other multi-unit characters without leaving broken text. [#97471](https://github.com/openclaw/openclaw/pull/97471) Thanks @ly-wang19.
+- Mattermost streaming draft previews now shorten long text containing emoji without showing a malformed replacement character. [#97472](https://github.com/openclaw/openclaw/pull/97472) Thanks @ly-wang19.
+- Microsoft Teams Adaptive Card button clicks now deliver the submitted value to the agent instead of arriving as empty messages. [#97546](https://github.com/openclaw/openclaw/pull/97546) Thanks @jimmypuckett.
+- Long Feishu comments containing emoji at the cutoff now reach the agent as valid text instead of being split into malformed characters. [#97595](https://github.com/openclaw/openclaw/pull/97595) Thanks @llagy007, @weeli-009.
+- Matrix media downloads now enforce size and idle-timeout limits before buffering, including for encrypted media. [#97662](https://github.com/openclaw/openclaw/pull/97662) Thanks @alix-007.
+- Feishu and Lark registration and streaming-card requests now reject oversized provider JSON before it can place unbounded pressure on memory. [#97782](https://github.com/openclaw/openclaw/pull/97782) Thanks @alix-007.
+- Microsoft Teams file delivery and chat lookup now cap large Microsoft Graph responses and return a labeled error instead of risking a process crash. [#97784](https://github.com/openclaw/openclaw/pull/97784) Thanks @alix-007.
+- SMS replies now hide internal tool-trace failure banners and show only the intended assistant response. [#97989](https://github.com/openclaw/openclaw/pull/97989) Thanks @zengwen-dt.
+- Twilio SMS account checks now handle malformed successful JSON with safe phone-number listing or a clear Messaging Service error. [#97999](https://github.com/openclaw/openclaw/pull/97999) Thanks @lsr911.
+- Canceling a Feishu reconnect, startup, or bot-identity retry wait now ends cleanly instead of risking a `ReferenceError` during cleanup. [#98137](https://github.com/openclaw/openclaw/pull/98137) Thanks @zhanglei99586.
+- Punctuation around a model's `NO_REPLY` token no longer turns it into a visible chat message, while legitimate messages containing the token still arrive. [#98224](https://github.com/openclaw/openclaw/pull/98224) Thanks @sunnyshu0925.
+- Completions from subagents, scheduled tasks, media jobs, and agent harnesses now return through the same configured account, destination, and thread that requested them. [#98240](https://github.com/openclaw/openclaw/pull/98240) Thanks @yetval.
+- Tlon and Urbit channel failures now bound oversized or malformed error responses before they can cause memory spikes, while retaining useful short messages. [#98496](https://github.com/openclaw/openclaw/pull/98496) Thanks @pandah97.
+- Mattermost replies now show the intended assistant response without exposing internal tool-failure diagnostics. [#98693](https://github.com/openclaw/openclaw/pull/98693) Thanks @zengwen-dt.
+- Feishu bot replies no longer expose internal tool or runtime failure banners alongside the intended response. [#98705](https://github.com/openclaw/openclaw/pull/98705) Thanks @zengwen-dt.
+- Zalo operators can point Bot API calls at a compatible alternate endpoint without patching code, while ordinary workspace environment files cannot silently redirect traffic and millisecond message times remain accurate. [#98768](https://github.com/openclaw/openclaw/pull/98768) Thanks @romneyda.
+- Ambient agents now stay quieter in observed group conversations and honor operator instructions such as replying only when spoken to. [#99144](https://github.com/openclaw/openclaw/pull/99144) Thanks @obviyus.
+- Ambient group chats now remain silent unless the agent deliberately sends a message, without stray status lines, tool summaries, compaction notices, delivery warnings, or overflow follow-ups. [#99145](https://github.com/openclaw/openclaw/pull/99145) Thanks @obviyus.
+- Mattermost channel monitoring now rejects inbound events above 16 MiB and reconnects, limiting memory exposure while continuing to accept normal large messages. [#99366](https://github.com/openclaw/openclaw/pull/99366) Thanks @sunlit-deng.
+- Always-on group agents can now receive and answer valid unmentioned messages after a plugin fallback instead of silently dropping them. [#99506](https://github.com/openclaw/openclaw/pull/99506) Related [#99457](https://github.com/openclaw/openclaw/issues/99457). Thanks @lzy3538, @zqchris.
+- Replies and attachments already accepted by a channel are no longer resent after a restart or recovery failure, while genuinely unsent items remain retryable. [#99600](https://github.com/openclaw/openclaw/pull/99600) Thanks @zhangguiping-xydt.
+- Outbound sends now report failed and partially delivered messages with useful per-part outcomes instead of presenting every attempt as a success. [#99928](https://github.com/openclaw/openclaw/pull/99928) Thanks @masatohoshino.
+- ClickClack can now show opt-in, durable commentary and tool activity during a run so users are not left with an empty channel until the final reply. [#99954](https://github.com/openclaw/openclaw/pull/99954) Thanks @obviyus, @ragesaq.
+- Inbound Telnyx-style and Plivo voice conversations can now continue after the caller's first response instead of falling silent before OpenClaw speaks again. [#100255](https://github.com/openclaw/openclaw/pull/100255) Thanks @dvy.
+- Valid Twilio and Plivo callbacks now pass signature checks behind trusted IPv4 reverse proxies even when Node reports the proxy as an IPv4-mapped IPv6 address. [#100261](https://github.com/openclaw/openclaw/pull/100261) Thanks @rohitjavvadi.
+- Repeated voice-call webhook deliveries are now acknowledged without repeating call or transcript side effects within the replay window. [#100263](https://github.com/openclaw/openclaw/pull/100263) Thanks @xialonglee.
+- A transient Gmail watch-renewal failure now produces an error without crashing a long-running foreground `openclaw webhooks gmail run` process. [#100342](https://github.com/openclaw/openclaw/pull/100342) Thanks @cxbasdev, @vincentkoc.
+- Agents catching up in busy group chats now receive clearer sender-by-sender history, making multi-person conversations easier to follow without exposing local paths or URLs. [#100366](https://github.com/openclaw/openclaw/pull/100366) Thanks @gorkem2020.
+- Tlon now stops oversized or stalled external image downloads before they consume unbounded memory and can continue the message with the original URL. [#100374](https://github.com/openclaw/openclaw/pull/100374) Thanks @hugenshen.
+- Oversized Tlon scry responses now fail with a clear path-specific error instead of risking a Gateway out-of-memory crash. [#100376](https://github.com/openclaw/openclaw/pull/100376) Thanks @hugenshen.
+- Non-streaming channels no longer send the same final text or media twice for one message, while genuinely separate replies with different routing or thread identities still go through. [#100828](https://github.com/openclaw/openclaw/pull/100828) Thanks @vincentkoc, @zhangxiaojiujiayi.
+- Supported interactive-card JSON sent through Feishu messages, thread replies, or text payloads now renders as a card instead of appearing as raw JSON. [#100883](https://github.com/openclaw/openclaw/pull/100883) Thanks @martingarramon, @vincentkoc, @zenorewn.
+- Microsoft Teams attachment recovery now declines oversized Graph metadata with diagnostics instead of buffering it into Gateway memory, while normal hosted media still downloads within configured limits. [#101082](https://github.com/openclaw/openclaw/pull/101082) Thanks @cxbasdev.
+- Stalled Feishu tenant-token or streaming-card requests now time out with a clear error and release the processing lane so other Gateway messages can continue. [#102948](https://github.com/openclaw/openclaw/pull/102948) Thanks @hugenshen, @sallyom.
+- The Twilio voice-call provider now rejects unsupported API hostnames before sending a request and accepts only OpenClaw's supported Twilio regional hosts. [094c0d4](https://github.com/openclaw/openclaw/commit/094c0d421faff7691d259a26af9cb135f00c6ebc) Thanks @vincentkoc.
+- Cron and outbound channel sends no longer report success without a usable platform receipt, making missing notifications show as not delivered or suppressed instead of falsely delivered. [#79811](https://github.com/openclaw/openclaw/pull/79811) Thanks @indulgeback.
+- Telegram stickers and other plugin message actions now stay in the active forum topic or thread when sent to the matching conversation, including through Gateway dispatch. [#80293](https://github.com/openclaw/openclaw/pull/80293) Thanks @artdaal.
+- Telegram and Discord plugin commands that send their own response can return `{ suppressReply: true }`, preventing a second misleading empty-response warning or failure. [#80928](https://github.com/openclaw/openclaw/pull/80928) Related [#80756](https://github.com/openclaw/openclaw/issues/80756). Thanks @alexuser, @unclouded77.
+- With `messages.ackReactionScope: "all"`, ambient room messages now receive the configured acknowledgement reaction across Discord, Slack, and Telegram. [#87433](https://github.com/openclaw/openclaw/pull/87433) Thanks @paul-phan, @scoootscooob.
+- Established Telegram direct-message sessions now avoid resending recent messages already stored in the transcript, reducing token use and repetitive or confused replies. [#89855](https://github.com/openclaw/openclaw/pull/89855) Thanks @sweetcornna.
+- Telegram no longer follows a successfully delivered final answer with a contradictory generic error when a later dispatch step fails, while partial-only failures still receive the existing fallback. [#90152](https://github.com/openclaw/openclaw/pull/90152) Thanks @zhangguiping-xydt.
+- Telegram documents received through a containerized local Bot API now arrive with their actual contents when its mounted data path differs between containers. [#91984](https://github.com/openclaw/openclaw/pull/91984) Thanks @ailucasdz, @dizesales.
+- Telegram messages can now be sent proactively through the `message` tool or `openclaw message send` instead of failing as an unsupported channel. [#92107](https://github.com/openclaw/openclaw/pull/92107) Thanks @bladin, @obviyus.
+- OpenClaw now recognizes `.m2a` recordings as audio, allowing them to move through attachment, transcription, memory, and chat display workflows without conversion. [#92167](https://github.com/openclaw/openclaw/pull/92167) Thanks @llljjjwww333.
+- Telegram and other channels can recover automatically after certain API outages and timed-out shutdowns instead of remaining silent until a Gateway restart. [#94016](https://github.com/openclaw/openclaw/pull/94016) Thanks @sheyanmin.
+- Telegram replies now omit internal tool-execution failure lines and deliver only the intended assistant answer. [#95774](https://github.com/openclaw/openclaw/pull/95774) Thanks @mushuiyu886.
+- Telegram rich replies and progress messages containing OAuth email addresses now arrive instead of being rejected by Telegram validation. [#95900](https://github.com/openclaw/openclaw/pull/95900) Thanks @obviyus.
+- A partially delivered queued send is no longer blindly replayed after reconnect, reducing duplicate Telegram and other channel messages. [#96247](https://github.com/openclaw/openclaw/pull/96247) Thanks @obviyus, @rosenlo.
+- Telegram progress updates now truncate safely around emoji and other multi-unit characters, preventing broken glyphs and rejected Bot API payloads. [#96456](https://github.com/openclaw/openclaw/pull/96456) Thanks @he-yufeng.
+- Telegram configurations with legacy `capabilities: []` now inherit the normal inline-button policy, restoring clickable buttons without overriding intentional opt-outs. [#96468](https://github.com/openclaw/openclaw/pull/96468) Thanks @vincentkoc, @zhangguiping-xydt.
+- Telegram streaming draft previews no longer break or show garbled text when an emoji falls at the size boundary, so long previews can keep updating normally. [#96504](https://github.com/openclaw/openclaw/pull/96504) Thanks @mushuiyu886, @obviyus.
+- A temporary Telegram reply-session conflict no longer traps a DM or forum topic in constant retries that block later messages; retries are paced, conversation order is retained, and unrelated chats continue processing. [#96550](https://github.com/openclaw/openclaw/pull/96550) Thanks @cnbarrier404, @vacinc.
+- Files sent through Telegram and other supported chat channels now keep clean names such as `report.png` instead of exposing an internal cache identifier in the attachment filename. [#96565](https://github.com/openclaw/openclaw/pull/96565) Thanks @narahariraghava, @obviyus.
+- Slack, Discord, Telegram, WhatsApp, and Microsoft Teams users now receive a clear retry and re-authentication message when a model provider returns a recognized HTTP 401 error instead of seeing only a reaction or no useful reply. [#96599](https://github.com/openclaw/openclaw/pull/96599) Thanks @sjf-oa.
+- Telegram reactions and message deletions now retry brief socket or Undici network failures, reducing unnecessary action failures without adding duplicate risk to ordinary message sends. [#96612](https://github.com/openclaw/openclaw/pull/96612) Thanks @miorbnli.
+- Telegram users still receive a plain-text reply when rich formatting for an email, URL, mention, hashtag, command, phone number, bank card, or similar entity is rejected, instead of the bot going silent. [#96642](https://github.com/openclaw/openclaw/pull/96642) Thanks @moguangyu5-design.
+- Telegram automations can now tell from platform metadata whether a sender is a bot, making routing and classification less dependent on usernames or naming conventions. [#96810](https://github.com/openclaw/openclaw/pull/96810) Thanks @lin-hongkuan, @ohyeah521.
+- Telegram messages entering through isolated ingress now proceed to the agent reply instead of replaying the same message in a loop. [#96847](https://github.com/openclaw/openclaw/pull/96847) Thanks @obviyus.
+- Long-running Telegram turns can finish without being reclaimed and processed again midway, reducing stalled or duplicate delivery while giving operators a clearer unhealthy status when the backlog stops draining. [#96962](https://github.com/openclaw/openclaw/pull/96962) Thanks @joshavant.
+- Telegram bots using isolated polling can resume ordered message processing after a stalled drain or Gateway restart without manual database repair. [#97118](https://github.com/openclaw/openclaw/pull/97118) Thanks @romneyda, @vincentkoc.
+- Telegram startup logs now show local socket failures such as `EADDRNOTAVAIL` instead of incorrectly steering operators toward DNS troubleshooting. [#97130](https://github.com/openclaw/openclaw/pull/97130) Thanks @zhangguiping-xydt.
+- Telegram inline buttons supplied by plugins now run their intended actions and cleanup instead of posting raw callback data into chat. [#97174](https://github.com/openclaw/openclaw/pull/97174) Thanks @goldmar.
+- Telegram rich-text replies now render math formulas more reliably instead of exposing raw LaTeX-style markers. [#97197](https://github.com/openclaw/openclaw/pull/97197) Thanks @vincentkoc, @wangwllu.
+- Telegram bot probes, webhook checks, membership audits, and polling now reject oversized Bot API success bodies before they can exhaust Gateway memory. [#97271](https://github.com/openclaw/openclaw/pull/97271) Thanks @hugenshen.
+- Telegram chat-ID lookup now fails safely on oversized `getChat` responses instead of risking excessive Gateway memory use during onboarding or routing. [#97274](https://github.com/openclaw/openclaw/pull/97274) Thanks @hugenshen.
+- Telegram replies retain literal wording such as `<think>` when it is part of the answer, while genuinely marked reasoning remains hidden. [#97286](https://github.com/openclaw/openclaw/pull/97286) Thanks @drickon, @obviyus.
+- Long non-streamed Telegram group replies now keep every chunk visible, including the beginning, while delivery receipts cover all generated text chunks. [#97304](https://github.com/openclaw/openclaw/pull/97304) Thanks @aliseturtle-lu, @obviyus.
+- Long streamed Telegram replies now deliver their middle sections under the default configuration instead of silently omitting part of the answer. [#97312](https://github.com/openclaw/openclaw/pull/97312) Thanks @brycemurray, @obviyus.
+- Telegram documents sent near a Gateway restart now retry after recovery instead of disappearing silently, while permanent failures still request a resend. [#98102](https://github.com/openclaw/openclaw/pull/98102) Related [#98076](https://github.com/openclaw/openclaw/issues/98076). Thanks @davearcher18, @luoyanglang, @obviyus.
+- Telegram `/steer` and `/tell` commands can redirect an active Codex task during streaming or tool work instead of arriving late or becoming follow-up messages. [#98126](https://github.com/openclaw/openclaw/pull/98126) Related [#81594](https://github.com/openclaw/openclaw/issues/81594). Thanks @100yenadmin, @kyzcreig.
+- Saying `wait` in a Telegram group conversation no longer cancels active OpenClaw work, while explicit stop commands still take effect immediately. [#98639](https://github.com/openclaw/openclaw/pull/98639) Thanks @ianchen08.
+- Telegram rich messages and text-bearing forwards without a normal caption now reach the agent as readable conversation content instead of an unsupported-message placeholder. [#98735](https://github.com/openclaw/openclaw/pull/98735) Thanks @obviyus.
+- Telegram direct-message follow-ups now include one copy of the previous assistant reply in recent context instead of duplicating it and wasting tokens. [#98769](https://github.com/openclaw/openclaw/pull/98769) Related [#98767](https://github.com/openclaw/openclaw/issues/98767). Thanks @rabsef-bicrym.
+- Telegram polling now recovers from temporary rate limits, server failures, and malformed error responses without disabling the account, while busy bots avoid cache writes that could trigger false stall restarts. [#98775](https://github.com/openclaw/openclaw/pull/98775) Related [#98772](https://github.com/openclaw/openclaw/issues/98772), [#98773](https://github.com/openclaw/openclaw/issues/98773). Thanks @obviyus.
+- A repeatedly failing Telegram update no longer blocks later messages in the same chat or topic, and replayed updates are retried safely without duplicate commands or apology spam. [#98776](https://github.com/openclaw/openclaw/pull/98776) Related [#98774](https://github.com/openclaw/openclaw/issues/98774). Thanks @obviyus.
+- Telegram final replies and media sends now fall back to readable plain text when formatting, captions, or quotes are rejected, and routine flood waits up to 60 seconds are honored instead of dropping the message. [#98786](https://github.com/openclaw/openclaw/pull/98786) Related [#98778](https://github.com/openclaw/openclaw/issues/98778). Thanks @obviyus.
+- Telegram sends and message actions that omit an account now consistently use the configured default bot instead of a stale identity that can misroute or reject the action. [#98789](https://github.com/openclaw/openclaw/pull/98789) Thanks @yetval.
+- Telegram webhook messages now survive Gateway restarts and temporary processing failures, while accounts recover from brief startup errors and repeated restarts stop leaking network connections. [#98806](https://github.com/openclaw/openclaw/pull/98806) Related [#98777](https://github.com/openclaw/openclaw/issues/98777). Thanks @obviyus.
+- Telegram plugins can now turn a button tap into a normal user reply to the agent, while failed or skipped submissions leave the button available for another attempt. [#98922](https://github.com/openclaw/openclaw/pull/98922) Thanks @goldmar.
+- Telegram bots in ambient group mode now see recent room context before deciding whether to speak, reducing replies to isolated fragments that were not directed at the bot. [#99143](https://github.com/openclaw/openclaw/pull/99143) Related [#99142](https://github.com/openclaw/openclaw/issues/99142). Thanks @obviyus.
+- Telegram group agents now receive one chronological copy of recent messages instead of duplicated history and repeated delivery details consuming context. [#99256](https://github.com/openclaw/openclaw/pull/99256) Related [#99218](https://github.com/openclaw/openclaw/issues/99218). Thanks @obviyus.
+- Telegram ambient group conversations can now retain unmentioned room context across later turns, restarts, and compaction without repeatedly replaying the same window. [#99306](https://github.com/openclaw/openclaw/pull/99306) Related [#99257](https://github.com/openclaw/openclaw/issues/99257). Thanks @obviyus.
+- Telegram ambient group sessions now restore the relevant older chat context after a reset instead of silently treating archived messages as already visible. [#99385](https://github.com/openclaw/openclaw/pull/99385) Related [#99373](https://github.com/openclaw/openclaw/issues/99373). Thanks @obviyus.
+- Direct mentions to Telegram and Discord group bots using `message_tool_only` now produce visible channel replies on both new and resumed sessions. [#99389](https://github.com/openclaw/openclaw/pull/99389) Related [#99371](https://github.com/openclaw/openclaw/issues/99371). Thanks @obviyus.
+- Telegram replies now keep typing visible through more temporary API failures and fall back to plain text when valid rich content cannot be delivered. [#99745](https://github.com/openclaw/openclaw/pull/99745) Thanks @obviyus, @veda-openclaw.
+- `sessions_send` now rejects Telegram topic child sessions before dispatch and directs callers to the parent group, reducing misrouted agent work. [#99845](https://github.com/openclaw/openclaw/pull/99845) Thanks @nianjiuzst, @qingminglong.
+- Telegram tables, rankings, and literal line breaks now remain readable, with explicit logs when rich content must fall back to plain text. [#99861](https://github.com/openclaw/openclaw/pull/99861) Related [#99833](https://github.com/openclaw/openclaw/issues/99833). Thanks @obviyus.
+- Telegram group agents now post visible replies when directly mentioned or replied to, while continuing to ignore unaddressed background chatter. [#99866](https://github.com/openclaw/openclaw/pull/99866) Related [#99854](https://github.com/openclaw/openclaw/issues/99854). Thanks @obviyus.
+- Polls now follow the selected direct or hybrid channel instead of being misrouted through the Gateway, with clear errors for unsupported duration or anonymity options. [#99950](https://github.com/openclaw/openclaw/pull/99950) Thanks @nianjiuzst.
+- Telegram now tells users when an attachment cannot be downloaded, reports the actual size limit for oversized files, and still retries transient failures such as rate limits. [#100051](https://github.com/openclaw/openclaw/pull/100051) Thanks @batyaro777.
+- Telegram replies and forwards now preserve visible text from rich details, lists, math, captions, and credits so the agent receives the context users actually saw. [#100570](https://github.com/openclaw/openclaw/pull/100570) Thanks @veda-openclaw, @wangwllu.
+- Telegram direct-message follow-ups now include one accurate copy of each earlier assistant reply instead of duplicating a hidden-instruction version. [#100573](https://github.com/openclaw/openclaw/pull/100573) Thanks @momothemage, @mooresoftware.
+- MP3 speech from Piper, Kokoro, and other OpenAI-compatible TTS endpoints now arrives in Telegram as a native voice note rather than a filename-style audio attachment. [#100715](https://github.com/openclaw/openclaw/pull/100715) Thanks @hemantsudarshan.
+- Telegram heartbeat fallbacks now hide the `notify=false` control marker and deliver silently as requested, including suppressing marker-only replies. [#100735](https://github.com/openclaw/openclaw/pull/100735) Thanks @hackerismydream, @vincentkoc.
+- Telegram typing indicators now retry after transient network failures, restoring status feedback without adding duplicate-message risk to normal sends. [#100762](https://github.com/openclaw/openclaw/pull/100762) Thanks @lzw112, @vincentkoc.
+- Telegram webhook startup now releases its listener, bot, and network resources after a fatal registration error such as invalid or revoked credentials. [#100863](https://github.com/openclaw/openclaw/pull/100863) Thanks @machine3at.
+- Telegram messages that cannot be steered into an active Codex turn are now retained for handling afterward instead of disappearing without a reply. [#103916](https://github.com/openclaw/openclaw/pull/103916) Thanks @jalehman.
+- When Telegram requests overlap, the newest authorized message now wins without an outdated reply being sent or replaced queued work being started. [#103965](https://github.com/openclaw/openclaw/pull/103965)
+- Queued Telegram updates now remain replayable until restart recovery is safely recorded, reducing message loss during a crash at processing startup. [#104032](https://github.com/openclaw/openclaw/pull/104032) Thanks @obviyus, @vincentkoc.
+- Telegram's final collapsed progress summary now includes Claude CLI thinking activity that was shown during the run instead of making that work appear to vanish. [4212de9](https://github.com/openclaw/openclaw/commit/4212de9e08d6e69357d937e399db3df63c1b66d7) Thanks @vincentkoc.
+- Discord completion and error reactions now remain visible for the configured `doneHoldMs` and `errorHoldMs` durations instead of fixed default delays. [#94736](https://github.com/openclaw/openclaw/pull/94736) Thanks @liuwqgit.
+- Slack read actions can again access intentionally allowlisted channel names when Slack supplies an ID and `dangerouslyAllowNameMatching` is enabled. [#95313](https://github.com/openclaw/openclaw/pull/95313) Thanks @jontsai.
+- Discord voice replies now keep their accompanying text and extra media attached to the original message even when single-use reply mode is enabled. [#95978](https://github.com/openclaw/openclaw/pull/95978) Thanks @nxmxbbd.
+- Discord attachments queued while OpenClaw is busy now remain available when the message finally runs instead of disappearing after temporary download links expire. [#96183](https://github.com/openclaw/openclaw/pull/96183) Thanks @judsonnudson, @zacharyyw.
+- Slack message and attachment text is no longer copied into verbose or debug logs during inbound processing. [#96312](https://github.com/openclaw/openclaw/pull/96312) Thanks @steipete-oai.
+- Slack messages and Block Kit labels now truncate without splitting emoji into broken replacement characters or invalid payload text. [#96382](https://github.com/openclaw/openclaw/pull/96382) Thanks @ly-wang19.
+- Generated Discord thread names now preserve multiple Markdown emphasis spans without dropping or stranding formatting markers. [#96394](https://github.com/openclaw/openclaw/pull/96394) Thanks @ly-wang19.
+- Long Slack command and plugin approval previews now keep emoji intact at the length boundary, avoiding malformed approval text or payloads. [#96576](https://github.com/openclaw/openclaw/pull/96576) Thanks @llagy007, @weeli-009.
+- OpenClaw can use a trusted override for a compatible Slack API endpoint, while normal workspaces continue using Slack's public API and untrusted project .env files cannot redirect bearer-token requests. [#97154](https://github.com/openclaw/openclaw/pull/97154) Thanks @romneyda.
+- Discord's recent-model buttons now shorten long names without breaking emoji or producing invalid picker payloads. [#97600](https://github.com/openclaw/openclaw/pull/97600) Thanks @llagy007, @weeli-009.
+- Slack agents can now read thread messages whose visible content exists only in attachments or blocks, including alerts with empty top-level text. [#97727](https://github.com/openclaw/openclaw/pull/97727) Thanks @chthtlo.
+- Slack agents can now identify admitted bot-authored messages through `is_bot: true`, making it easier to prevent unwanted bot-to-bot replies. [#97822](https://github.com/openclaw/openclaw/pull/97822) Thanks @masatohoshino, @vincentkoc.
+- Discord agents now receive `is_bot: true` for admitted bot messages while human and PluralKit sender behavior stays unchanged. [#97824](https://github.com/openclaw/openclaw/pull/97824) Thanks @masatohoshino, @vincentkoc.
+- Slack slash-command choice menus now shorten long labels without splitting emoji at the 75-character limit. [#97923](https://github.com/openclaw/openclaw/pull/97923) Thanks @lexes7.
+- Slack Socket Mode relay diagnostics now distinguish malformed WebSocket frames from transport failures, making channel problems easier to identify. [#98587](https://github.com/openclaw/openclaw/pull/98587) Thanks @lsr911, @vincentkoc.
+- Skill command descriptions now remain fuller where supported and stay valid in Discord and Mattermost when emoji appears near a platform limit. [#99593](https://github.com/openclaw/openclaw/pull/99593) Thanks @pick-cat.
+- Slack startup and account checks now warn when a user OAuth credential is configured as the bot token, before identity confusion affects mentions or replies. [#99931](https://github.com/openclaw/openclaw/pull/99931) Thanks @ooiuuii.
+- Slack replies now keep each agent's custom name and avatar through streaming or fallback delivery instead of reverting to the app identity. [#100084](https://github.com/openclaw/openclaw/pull/100084) Thanks @moerai.
+- Slack Codex conversations now retain one final assistant reply in history instead of duplicating it through both the app-server transcript and delivery fallback. [#100160](https://github.com/openclaw/openclaw/pull/100160) Thanks @steipete-oai.
+- Long or media-rich implicit Discord replies now quote and notify the referenced user once in `first` or `batched` mode, while explicit and `all` replies retain every intended reference. [#100784](https://github.com/openclaw/openclaw/pull/100784) Thanks @qingminglong, @revision-co-ltd.
+- Discord replies, cron reports, and other outbound messages are less likely to disappear during a brief Gateway reconnect, without replaying chunks or media Discord already accepted. [#100896](https://github.com/openclaw/openclaw/pull/100896) Thanks @tiffanychum.
+- Discord voice playback now cleans up ffmpeg after output-pipe failures, reducing both Gateway crashes and leftover transcoder processes. [#101124](https://github.com/openclaw/openclaw/pull/101124)
+- The configured primary Discord account now starts first in multi-account setups, so the main bot is not delayed behind secondary or invalid entries after a restart. [#101292](https://github.com/openclaw/openclaw/pull/101292) Thanks @turbotheturtle.
+- Discord automatic thread titles now handle long messages and channel details containing emoji without building malformed prompt text. [#101551](https://github.com/openclaw/openclaw/pull/101551) Thanks @alix-007.
+- Long-running Slack integrations now keep conversation metadata caching within a fixed limit, preventing memory use from growing indefinitely as more channels and workspaces are encountered. [#101562](https://github.com/openclaw/openclaw/pull/101562) Thanks @vincentkoc, @zhangguiping-xydt.
+- Discord voice playback failures now produce a readable error within the 8,192-byte limit, including when ffmpeg output contains non-English text or emoji. [#104230](https://github.com/openclaw/openclaw/pull/104230) Thanks @qingminglong.
+- Configured Weixin accounts with opaque IDs containing characters such as an at sign or `.` now start normally and preserve their account-specific routing. [#93686](https://github.com/openclaw/openclaw/pull/93686) Related [#93556](https://github.com/openclaw/openclaw/issues/93556). Thanks @htkillermax-gif, @zhangguiping-xydt.
+- Feishu setups that could send bot pushes but silently lost user replies now pass incoming messages into OpenClaw instead of failing during monitor startup. [#94013](https://github.com/openclaw/openclaw/pull/94013) Thanks @xydt-tanshanshan.
+- Replies to OpenClaw-authored WhatsApp group messages now remain visible on WhatsApp Desktop and other multi-device clients with their quote context intact. [#94879](https://github.com/openclaw/openclaw/pull/94879) Thanks @bartok9.
+- Direct iMessage chats using the `imsg` private API bridge now show typing as soon as a slow turn is accepted, without waiting for a read receipt. [#95621](https://github.com/openclaw/openclaw/pull/95621) Thanks @omarshahine.
+- iMessage replies no longer lose ordinary sentence text that happens to end with `user:`, `system:`, or `assistant:`. [#96392](https://github.com/openclaw/openclaw/pull/96392) Thanks @ly-wang19.
+- WhatsApp direct sends and automatic replies now render combined bold-and-italic Markdown without stray asterisks, including when the formatted text contains emoji. [#96570](https://github.com/openclaw/openclaw/pull/96570) Thanks @llagy007, @weeli-009.
+- Long WhatsApp auto-reply and inbound-message previews now preserve emoji and report the truncated character count accurately, making affected diagnostics readable without changing delivery. [#96580](https://github.com/openclaw/openclaw/pull/96580) Thanks @llagy007, @weeli-009.
+- Signal QuickStart on macOS now installs `signal-cli` through Homebrew instead of downloading an incompatible Linux package, and gives platform-specific guidance when Homebrew is unavailable. [#96909](https://github.com/openclaw/openclaw/pull/96909) Thanks @romneyda.
+- Bursts of long iMessage messages can now be combined without cutting an emoji in half and sending broken text to the agent. [#97598](https://github.com/openclaw/openclaw/pull/97598) Thanks @weeli-009.
+- Invalid `OPENCLAW_WHATSAPP_WEB_SOCKET_URL` values now fail immediately with a clear configuration error instead of breaking later during socket startup. [#97697](https://github.com/openclaw/openclaw/pull/97697) Thanks @romneyda.
+- Nextcloud Talk startup checks now show a concise bot-admin API failure without buffering an arbitrarily large error body. [#97811](https://github.com/openclaw/openclaw/pull/97811) Thanks @pick-cat.
+- Google Chat agents can now distinguish allowed bot messages through `is_bot: true` and handle automated senders differently from people. [#97825](https://github.com/openclaw/openclaw/pull/97825) Thanks @masatohoshino, @vincentkoc.
+- WhatsApp can now restore a saved linked-device session from a valid credential backup when the primary file is interrupted or corrupted, avoiding an unnecessary QR re-pair. [#99070](https://github.com/openclaw/openclaw/pull/99070) Thanks @leonidaslux.
+- Signal container receives now reject oversized JSON frames before buffering them, limiting memory pressure without affecting normal messages or separately fetched attachments. [#99992](https://github.com/openclaw/openclaw/pull/99992) Thanks @sunlit-deng.
+- iMessage startup warnings now distinguish working sender-allowlisted group setups from truly blocked configurations and point blocked operators to the correct fix. [#100046](https://github.com/openclaw/openclaw/pull/100046)
+- `openclaw channels login --channel whatsapp` now replaces expired QR codes in place so interactive terminals show one current, scannable code. [#100159](https://github.com/openclaw/openclaw/pull/100159)
+- A WhatsApp message interrupted by a temporary reply-session conflict can now be retried instead of being marked delivered and silently ignored on redelivery. [#101106](https://github.com/openclaw/openclaw/pull/101106) Thanks @andersonjeccel.
+- Queued messages now resume at a gentler pace after an outage, restart, or reconnect, reducing avoidable channel and provider rate-limit bursts while keeping recovery bounded. [#101118](https://github.com/openclaw/openclaw/pull/101118) Thanks @zengwen-dt.
+- WhatsApp direct messages blocked by a reachout timelock now fail immediately with an explicit explanation instead of appearing accepted before a later delivery error. [#101264](https://github.com/openclaw/openclaw/pull/101264) Thanks @mcaxtr.
+- iMessage CLI send and action failures caused by broken output pipes now return a controlled error instead of risking a Gateway worker crash. [#101401](https://github.com/openclaw/openclaw/pull/101401) Thanks @cxbasdev.
+- OpenClaw can use a trusted override to point the normal Baileys socket at a compatible local WebSocket endpoint, while normal WhatsApp connections continue using the default path unless explicitly overridden. [#97155](https://github.com/openclaw/openclaw/pull/97155) Thanks @romneyda.
+- Feishu one-to-one chats can receive text, media, card, and fallback replies again instead of losing the response after the incoming message was processed. [#94760](https://github.com/openclaw/openclaw/pull/94760) Thanks @obviyus, @xydigit-zt.
+- An accepted voice message that arrives while OpenClaw is already replying can still receive a voice response when `tts.auto: "inbound"` is configured. [#95596](https://github.com/openclaw/openclaw/pull/95596) Thanks @mcaxtr.
+- Mattermost API calls now stop oversized or endless successful responses before they can consume unbounded memory, while normal requests and uploads continue unchanged. [#96033](https://github.com/openclaw/openclaw/pull/96033) Thanks @alix-007.
+- IRC reconnects now rotate fallback nicknames after a 433 conflict instead of repeatedly retrying the same occupied name. [#96108](https://github.com/openclaw/openclaw/pull/96108) Thanks @wendy-chsy.
+- The Microsoft Teams personal-chat welcome card now displays its greeting with the intended bold, medium emphasis. [#96290](https://github.com/openclaw/openclaw/pull/96290) Thanks @ly-wang19, @vincentkoc.
+- Microsoft Teams thread history now preserves literal entity text such as `<APIKEY>` instead of turning it into different markup before the agent sees it. [#96342](https://github.com/openclaw/openclaw/pull/96342) Thanks @ly-wang19.
+- Long Google Chat approval cards now preserve emoji at the text limit, preventing corrupted approval text or malformed card payloads. [#96573](https://github.com/openclaw/openclaw/pull/96573) Thanks @llagy007, @weeli-009.
+- Long Synology Chat messages and diagnostic previews now truncate without cutting an emoji or other supplementary character in half, keeping downstream text valid. [#96574](https://github.com/openclaw/openclaw/pull/96574) Thanks @weeli-009.
+- QQBot reminders created from long text now receive readable job names even when an emoji falls at the cutoff, rather than storing a broken character. [#96575](https://github.com/openclaw/openclaw/pull/96575) Thanks @llagy007, @weeli-009.
+- Microsoft Teams feedback on long responses now carries intact emoji into reflection processing, preventing a cutoff from corrupting prompts, logs, or encoding. [#96578](https://github.com/openclaw/openclaw/pull/96578) Thanks @llagy007, @weeli-009.
+- Feishu card headers now show a clean agent emoji and name instead of descriptive text from `identity.emoji`, while flags, skin-tone variants, family emoji, and other valid sequences remain intact. [#96587](https://github.com/openclaw/openclaw/pull/96587) Thanks @harjothkhara, @leedongyu1128.
+- Tlon approval notifications now keep emoji intact at the preview limit, preventing malformed message previews. [#97599](https://github.com/openclaw/openclaw/pull/97599) Thanks @llagy007, @weeli-009.
+- IRC outbound text now preserves escaped emoji and keeps invalid surrogate escapes literal instead of silently replacing them with corrupted characters. [#97683](https://github.com/openclaw/openclaw/pull/97683) Thanks @llagy007, @weeli-009.
+- Mattermost API failures with an empty JSON body now produce a clear status-based error instead of an `Unexpected end of JSON input` crash. [#97851](https://github.com/openclaw/openclaw/pull/97851) Thanks @pick-cat.
+- Malformed successful Matrix responses now produce a controlled homeserver error instead of an opaque unhandled JSON parsing failure. [#97973](https://github.com/openclaw/openclaw/pull/97973) Thanks @lsr911.
+- Feishu video messages now show the duration of local and remotely loaded MP4 clips when duration detection is available. [#98235](https://github.com/openclaw/openclaw/pull/98235) Thanks @areslp.
+- Mattermost installations repaired after an upgrade now load and reconnect on Gateway restart without requiring a manual plugin-enable setting, including restrictive allowlist setups. [#98608](https://github.com/openclaw/openclaw/pull/98608) Related [#98564](https://github.com/openclaw/openclaw/issues/98564). Thanks @jacobtomlinson, @shakkernerd.
+- Repeated Nostr profile publishing now clears relay timeout timers after success, reducing stale resource buildup in long-running agents. [#98720](https://github.com/openclaw/openclaw/pull/98720) Related [#98463](https://github.com/openclaw/openclaw/issues/98463). Thanks @wangmiao0668000666, @zhanglei99586.
+- Mattermost teams with more than 200 members can now discover and address valid peers beyond the first page of the team directory. [#98877](https://github.com/openclaw/openclaw/pull/98877) Related [#98871](https://github.com/openclaw/openclaw/issues/98871). Thanks @qingminglong.
+- Long IRC replies now arrive complete when they contain Chinese, Cyrillic, emoji, or other non-ASCII text, while respecting `messageChunkMaxChars`. [#99138](https://github.com/openclaw/openclaw/pull/99138) Thanks @yetval.
+- Zalo gateway startup output now shows the connected bot account name when the Bot Platform supplies it. [#99274](https://github.com/openclaw/openclaw/pull/99274) Thanks @romneyda.
+- Temporary Feishu streaming-card refresh failures are now contained and logged for diagnosis instead of surfacing as unhandled errors. [#99301](https://github.com/openclaw/openclaw/pull/99301) Thanks @lwy-2.
+- QQBot status now reports disconnections and fatal close reasons accurately, then returns to connected only after a READY or RESUMED event. [#100127](https://github.com/openclaw/openclaw/pull/100127) Thanks @masatohoshino, @vincentkoc.
+- Text commands such as `/model fable` now reliably display their confirmation even in flows that suppress ordinary source replies. [#100151](https://github.com/openclaw/openclaw/pull/100151)
+- IRC bots now reconnect and rejoin configured channels after a temporary server or network disconnect instead of staying silent until OpenClaw is restarted. [#100799](https://github.com/openclaw/openclaw/pull/100799) Thanks @zhangguiping-xydt.
+- Feishu direct messages received while the bot identity is temporarily unavailable no longer turn ordinary user mentions into accidental forwarding targets. [#100891](https://github.com/openclaw/openclaw/pull/100891) Thanks @zhangguiping-xydt.
+- Tlon media uploads now stop safely when Memex returns an oversized or malformed response instead of allowing the upload attempt to consume excessive memory. [#101115](https://github.com/openclaw/openclaw/pull/101115) Thanks @cxbasdev.
+- Realtime voice prompts now remain readable when long agent names or injected context containing emoji must be shortened. [#101304](https://github.com/openclaw/openclaw/pull/101304) Thanks @alix-007.
+- Feishu error logs now shorten emoji-containing text at a valid character boundary, making card-action and WebSocket cleanup failures easier to read. [#101364](https://github.com/openclaw/openclaw/pull/101364) Thanks @zengwen-dt.
+- Channel plugins can resume automatic recovery after a long healthy run, so an occasional later disconnect is not blocked by an old restart budget while true rapid crash loops remain capped. [#101413](https://github.com/openclaw/openclaw/pull/101413) Thanks @clintoncodewell.
+- QQBot approval cards, message previews, logs, media paths, and retry warnings now shorten emoji-containing text without broken replacement characters. [#101421](https://github.com/openclaw/openclaw/pull/101421) Thanks @wangmiao0668000666.
+- QQBot previews, errors, commands, speech-to-text messages, media diagnostics, and logs now remain valid when emoji-containing text reaches a length limit. [#101516](https://github.com/openclaw/openclaw/pull/101516) Thanks @vincentkoc, @wangmiao0668000666.
+- Long emoji-containing agent labels now produce clean native channel thread names and introductions instead of broken characters. [#101527](https://github.com/openclaw/openclaw/pull/101527) Thanks @lsr911.
+- Zalo operators can send proactive CLI or scripted messages to valid nonnumeric `chat_id` values without an `Unknown target` rejection. [#101548](https://github.com/openclaw/openclaw/pull/101548) Thanks @goutamadwant.
+- Feishu Drive can now list files beyond the first page of a large shared folder by accepting its returned `next_page_token`, with invalid page sizes rejected clearly before the request. [#101572](https://github.com/openclaw/openclaw/pull/101572) Thanks @zhangguiping-xydt.
+- Google Meet local audio bridges now shut down cleanly and log a warning when a capture or playback command pipe fails, rather than crashing on an unhandled stream error. [#101596](https://github.com/openclaw/openclaw/pull/101596) Thanks @alix-007.
+- Matrix dependency setup now stops its child process predictably and reports the failure when a local command's output pipe breaks. [#101597](https://github.com/openclaw/openclaw/pull/101597) Thanks @alix-007.
+- Telegram destinations genuinely named `current`, `self`, `this`, or `me` can now be reached through configured entries, while accidental bare session words fail closed. [#94107](https://github.com/openclaw/openclaw/pull/94107) Thanks @obviyus, @silver-state, @zhangguiping-xydt.
+- Telegram rich messages using `richMessages: true` and Markdown table mode `block` now display bordered, striped tables with the source column alignment. [#95822](https://github.com/openclaw/openclaw/pull/95822) Thanks @obviyus, @zhangguiping-xydt.
+- Telegram fallback messages now replace invalid numeric Unicode surrogate entities safely instead of emitting malformed text, while valid numeric emoji entities still render. [#96581](https://github.com/openclaw/openclaw/pull/96581) Thanks @llagy007, @weeli-009.
+- Telegram users with `/reasoning on` now receive the model's saved reasoning messages alongside the final answer. [#97875](https://github.com/openclaw/openclaw/pull/97875) Thanks @fuller-stack-dev, @marvinthebored.
+- Telegram groups and forum topics now show a typing indicator as soon as an addressed message is accepted, without signaling activity for ignored chatter. [#99965](https://github.com/openclaw/openclaw/pull/99965) Thanks @moeedahmed.
+- Telegram onboarding now offers both the classic BotFather chat flow and the official web interface for creating a bot and copying its token into OpenClaw. [#100540](https://github.com/openclaw/openclaw/pull/100540)
+- Telegram sends to an `username` now use the account's configured proxy or custom Bot API endpoint for both target resolution and message delivery. [#100868](https://github.com/openclaw/openclaw/pull/100868) Thanks @machine3at.
+- Chinese, Japanese, and Korean bold labels followed immediately by text now render as bold instead of exposing literal `**` markers in Telegram and other shared-Markdown channels. [#101230](https://github.com/openclaw/openclaw/pull/101230) Thanks @nicknmorty.
+- Telegram sends now retry a safe TCP or TLS connection timeout, reducing lost final replies during flaky handshakes without retrying failures that may already have reached Telegram. [#101258](https://github.com/openclaw/openclaw/pull/101258) Thanks @lzw112.
+- The bare `/think` command now shows available thinking levels promptly in Telegram, Slack, and Discord without waiting on slow model discovery. [#101926](https://github.com/openclaw/openclaw/pull/101926) Thanks @vincentkoc.
+- A Telegram reply that has already started is no longer unexpectedly cancelled when another authorized command arrives. [52a3314](https://github.com/openclaw/openclaw/commit/52a331466882ca0b6befa56c883355c758305813) Thanks @vincentkoc.
+- After `/login codex` succeeds in Telegram, retrying the request now uses the newly authenticated OpenAI profile instead of the previous account. [fca0c81](https://github.com/openclaw/openclaw/commit/fca0c81791a5040536d4907913ed975bfcde1642) Thanks @100yenadmin.
+
+
+
+## More model and provider improvements
+
+### Sign-in, model choice, media, and reliability
+
+Across Anthropic and Claude, Gemini, OpenAI and Codex, local models, and other supported routes, [providers](/concepts/model-providers) now handle credentials, catalogs, limits, fallbacks, streaming, and tool calls more consistently. Readers should see fewer requests fail because the selected route used the wrong model metadata, replayed incompatible reasoning, lost authentication state, or interpreted a provider response incorrectly.
+
+The [model catalog](/concepts/models) also reports availability and capability more accurately, while [Codex supervision](/plugins/codex-supervision) keeps connected model choices and session behavior aligned with the backend that was actually selected.
+
+
+
+- Amazon Bedrock users can now analyze images and PDFs with the same AWS profile, role, SSO, environment, or instance credentials already used for chat. [#72092](https://github.com/openclaw/openclaw/pull/72092) Thanks @truffle-dev.
+- Claude CLI replies that streamed successfully are now retained when the final success envelope contains no text, preventing the completed answer from disappearing or triggering an empty-response fallback. [#90450](https://github.com/openclaw/openclaw/pull/90450) Thanks @totobusnello.
+- OpenCode Zen users can browse and run its supported Claude, GPT, Gemini, GLM, DeepSeek, MiniMax, Qwen, and other models without manually defining each route. [#92495](https://github.com/openclaw/openclaw/pull/92495) Thanks @mushuiyu886, @sallyom.
+- Anthropic OAuth token exchange and refresh now reject oversized endpoint responses early instead of reading an unbounded body into memory. [#96644](https://github.com/openclaw/openclaw/pull/96644) Thanks @solodmd.
+- Amazon Bedrock adaptive-thinking Claude and Fable runs now honor configured high output-token limits for longer answers, reasoning, and tool calls. [#97343](https://github.com/openclaw/openclaw/pull/97343) Thanks @lilan0125, @prasithg.
+- Anthropic usage checks now cap unusually large error responses so a CDN, firewall, or proxy page cannot exhaust OpenClaw's memory. [#97614](https://github.com/openclaw/openclaw/pull/97614) Thanks @cxbasdev.
+- Anthropic conversations rejected for a missing tool result now tell users to retry or start a fresh session with `/new` instead of showing only a generic provider failure. [#98163](https://github.com/openclaw/openclaw/pull/98163) Thanks @masatohoshino.
+- Claude native-thinking sessions can now recover automatically after Anthropic rejects a replayed thinking block, without manual compaction or transcript loss. [#98411](https://github.com/openclaw/openclaw/pull/98411) Related [#98308](https://github.com/openclaw/openclaw/issues/98308). Thanks @clearhorizoninvestments, @sunlit-deng.
+- Claude Code 2.1 users can again approve and run Bash, WebFetch, Grep, Glob, AskUserQuestion, and other native tools in claude-cli sessions. [#98665](https://github.com/openclaw/openclaw/pull/98665) Related [#95171](https://github.com/openclaw/openclaw/issues/95171). Thanks @carterdawson, @yetval.
+- Claude Fable 5 now works through Anthropic Vertex for simple-completion tasks such as generated conversation labels instead of failing before the request reaches Vertex. [#98932](https://github.com/openclaw/openclaw/pull/98932)
+- Claude CLI agent runs now fail over instead of presenting provider errors or raw stream data as answers, preserve multilingual and emoji output, and stop runaway one-shot output before it exhausts Gateway memory. [#98942](https://github.com/openclaw/openclaw/pull/98942) Related [#98896](https://github.com/openclaw/openclaw/issues/98896). Thanks @obviyus.
+- Claude CLI users can combine multiple `--mcp-config` files without losing servers or corrupting the prompt, and concurrent Gemini CLI runs are less likely to interfere with shared credential files. [#98983](https://github.com/openclaw/openclaw/pull/98983) Related [#98944](https://github.com/openclaw/openclaw/issues/98944), [#98945](https://github.com/openclaw/openclaw/issues/98945). Thanks @obviyus.
+- Claude CLI-backed agents now show native reasoning in `/reasoning stream` or `/reasoning on`, while `/reasoning off` consistently suppresses it for queued follow-ups too. [#99401](https://github.com/openclaw/openclaw/pull/99401) Thanks @marvinthebored.
+- Bedrock Mantle model discovery now times out and caps oversized catalog responses instead of hanging or consuming excessive memory, while cached models remain available. [#99961](https://github.com/openclaw/openclaw/pull/99961) Thanks @zhangguiping-xydt.
+- Anthropic Opus 4.8 can now run with `tools.profile=coding` without every turn failing with an HTTP 400 schema error before the assistant replies. [#100492](https://github.com/openclaw/openclaw/pull/100492) Thanks @lin-hongkuan, @vincentkoc.
+- Anthropic-compatible requests now fail promptly with a bounded transport error when an upstream stream sends an oversized partial event instead of hanging and consuming memory. [#100686](https://github.com/openclaw/openclaw/pull/100686) Thanks @zhangguiping-xydt.
+- Long, tool-heavy or media-heavy embedded-agent conversations now retain more prompt-cache reuse between turns, reducing repeated token processing, latency, and cost on prefix-cached providers. [#102610](https://github.com/openclaw/openclaw/pull/102610) Thanks @ugiezzz.
+- Anthropic Messages-compatible proxy users no longer see raw antml tool-call XML or arguments leak into visible Claude replies. [b2787a1](https://github.com/openclaw/openclaw/commit/b2787a1c7a7ae1a20d05411bba1dbf9091490c23) Thanks @jerry-xin.
+- Anthropic OAuth subscription requests now carry the Claude Code-style billing identity, helping them use the intended subscription route instead of failing or being treated as the wrong request type. [709be93](https://github.com/openclaw/openclaw/commit/709be93ca8987009540eb56ed1b6bfda136427de) Thanks @vincentkoc.
+- Google Gemini TTS now rejects oversized responses before buffering them into memory, while normal speech results continue through the existing audio workflow. [#96984](https://github.com/openclaw/openclaw/pull/96984) Thanks @mushuiyu886.
+- Gemini streaming can retry with another configured API key after a retryable quota or rate-limit response instead of failing on the first key. [#97328](https://github.com/openclaw/openclaw/pull/97328) Thanks @monkeyleet.
+- Gemini memory-embedding batch uploads, creation, and status checks now fail safely when a compatible endpoint returns an oversized control response. [#97535](https://github.com/openclaw/openclaw/pull/97535) Thanks @hugenshen.
+- Google Gemini CLI sign-in now rejects oversized OAuth, profile, project, and onboarding responses with labeled errors instead of risking excessive memory use. [#97587](https://github.com/openclaw/openclaw/pull/97587) Thanks @hugenshen.
+- Google Gemini CLI OAuth failures now keep oversized or malformed provider responses bounded while preserving useful error details. [#99605](https://github.com/openclaw/openclaw/pull/99605) Thanks @mushuiyu886.
+- Google image generation can now use `models.providers.google.apiKey` and an optional custom `baseUrl` without separate environment credentials or an auth profile. [#100779](https://github.com/openclaw/openclaw/pull/100779) Thanks @amknight.
+- Provider setup now stops reading runaway model-discovery responses before they can stall or exhaust memory, while normal self-hosted server responses continue to work. [#95244](https://github.com/openclaw/openclaw/pull/95244) Thanks @alix-007, @sallyom.
+- Ollama model discovery now stops oversized or never-ending endpoint responses before they can exhaust memory or leave setup hanging. [#96027](https://github.com/openclaw/openclaw/pull/96027) Thanks @alix-007.
+- Replay-safe model timeouts can now advance to the next configured provider, letting agent, chat, and cron runs recover without repeating work that may have side effects. [#96142](https://github.com/openclaw/openclaw/pull/96142) Thanks @brokemac79, @riazrahaman.
+- `openclaw models list` now reports configured local Ollama models as available when they are running and usable. [#97491](https://github.com/openclaw/openclaw/pull/97491) Thanks @lingfeizi, @qingminglong.
+- Ollama Cloud setup now stops oversized or malicious authentication responses before they can consume excessive memory, while normal sign-in remains unchanged. [#97581](https://github.com/openclaw/openclaw/pull/97581) Thanks @hugenshen.
+- Rerunning provider onboarding or refreshing models now preserves operator-owned timeouts, transport settings, MiniMax models, and SecretRef credentials instead of silently erasing them. [#100107](https://github.com/openclaw/openclaw/pull/100107) Thanks @frank-beans.
+- Ollama requests whose native response stream ends early can now continue to a configured fallback model instead of stopping with `LLM request failed`. [#100482](https://github.com/openclaw/openclaw/pull/100482) Thanks @turbotheturtle.
+- Scheduled and CLI Codex runs with an explicit timeout longer than 30 minutes can now use that full budget instead of being stopped by the terminal-idle guard. [#85296](https://github.com/openclaw/openclaw/pull/85296) Thanks @alkor2000, @vincentkoc.
+- OpenAI Realtime voice and transcription sessions now start behind Clash, Surge, sing-box, and similar TUN proxy setups that resolve `api.openai.com` into fake-IP ranges. [#86526](https://github.com/openclaw/openclaw/pull/86526) Thanks @shushushv.
+- Realtime voice sessions now omit an individual custom tool with an invalid provider-specific name and warn about it instead of letting that tool break the entire OpenAI, Azure, or Google session. [#89175](https://github.com/openclaw/openclaw/pull/89175) Thanks @vincentkoc.
+- For Codex-backed OpenAI models, `/status` now identifies ChatGPT login authentication as `oauth (codex-cli)` instead of incorrectly labeling it as an environment API key. [#91240](https://github.com/openclaw/openclaw/pull/91240) Related [#91099](https://github.com/openclaw/openclaw/issues/91099). Thanks @849261680, @ukstem.
+- OpenAI and Codex users authenticated through the app server can again see their five-hour and weekly quota windows in chat, CLI, and JSON status output. [#92520](https://github.com/openclaw/openclaw/pull/92520) Thanks @brokemac79.
+- A missing or hung local Codex tool result no longer switches the active session to another provider that cannot resolve the local failure. [#95543](https://github.com/openclaw/openclaw/pull/95543) Thanks @mikasa0818.
+- Ollama Cloud and other OpenAI-compatible Ollama chats can now continue after a tool call instead of failing the next turn with a provider 400 error. [#96474](https://github.com/openclaw/openclaw/pull/96474) Thanks @849261680.
+- vLLM, Ollama proxies, and other OpenAI-compatible gateways can deliver streamed replies even when they incorrectly label an event stream as JSON, avoiding an early parsing failure that previously ended the agent run. [#96503](https://github.com/openclaw/openclaw/pull/96503) Thanks @zengwen-dt.
+- OpenAI ChatGPT Responses streaming now cancels oversized or endless provider bodies with a clear error before they can consume excessive process memory, while normal responses keep using the existing parser. [#96762](https://github.com/openclaw/openclaw/pull/96762) Thanks @vincentkoc, @wangmiao0668000666.
+- OpenAI-compatible embedding requests now close oversized responses early with a clear provider error instead of buffering until OpenClaw stalls or runs out of memory, while normal embeddings continue working. [#96868](https://github.com/openclaw/openclaw/pull/96868) Thanks @alix-007.
+- OpenAI video generation now stops oversized or endless submission responses with a bounded provider error before they can hang the request or exhaust memory. [#96905](https://github.com/openclaw/openclaw/pull/96905) Thanks @alix-007.
+- OpenAI-compatible provider and proxy streams now stop oversized malformed or never-ending bodies at the affected request instead of letting them destabilize or crash the OpenClaw process. [#96989](https://github.com/openclaw/openclaw/pull/96989) Thanks @vincentkoc, @wangmiao0668000666.
+- OpenAI-compatible Chat Completions now use OpenClaw's guarded network path, adding the same response safety controls used by other protected model calls. [#97228](https://github.com/openclaw/openclaw/pull/97228) Thanks @vincentkoc, @wangmiao0668000666.
+- Azure OpenAI Responses now bound oversized streaming and error bodies, protecting memory while preserving normal errors and cancellation. [#97349](https://github.com/openclaw/openclaw/pull/97349) Thanks @wangmiao0668000666.
+- OpenAI embedding batch polling and Realtime setup now cancel oversized successful responses early and return a bounded error instead of growing memory without limit. [#97533](https://github.com/openclaw/openclaw/pull/97533) Thanks @hugenshen.
+- OpenAI OAuth usage checks now cap oversized WHAM rate-limit responses before they can destabilize the process. [#97702](https://github.com/openclaw/openclaw/pull/97702) Thanks @cxbasdev.
+- GPT-5.5 and other models can send valid streaming events larger than 64 KiB through ChatGPT Responses without failing the request, while malformed unbounded streams remain limited. [#98198](https://github.com/openclaw/openclaw/pull/98198) Thanks @marvinthebored, @obviyus, @peetiegonzalez.
+- Custom Xiaomi MiMo and other OpenAI-compatible models without a known output limit can now complete chats instead of failing with an invented oversized cap. [#98312](https://github.com/openclaw/openclaw/pull/98312) Thanks @peole, @sanjays2402.
+- `openclaw agent --local` now reports a clear first-event timeout when a provider opens a stream but never sends usable output instead of appearing to hang indefinitely. [#98525](https://github.com/openclaw/openclaw/pull/98525) Thanks @osolmaz.
+- OpenAI-compatible embedding batch downloads now process valid large outputs while stopping oversized files or JSONL records before they can exhaust memory. [#98554](https://github.com/openclaw/openclaw/pull/98554) Thanks @sunlit-deng, @vincentkoc.
+- Library and integration developers can now install a version-matched package, create independent AI runtimes, and reuse OpenClaw's supported model transports without embedding the full application. [#99059](https://github.com/openclaw/openclaw/pull/99059)
+- OpenAI and Azure realtime voice connections now close inbound messages above 16 MiB, limiting avoidable gateway memory pressure. [#99450](https://github.com/openclaw/openclaw/pull/99450) Thanks @sunlit-deng.
+- ChatGPT OAuth sign-in and refresh now reject unexpectedly large token responses cleanly instead of risking Gateway memory exhaustion. [#99479](https://github.com/openclaw/openclaw/pull/99479) Thanks @pandah97.
+- OpenAI-compatible providers routed through the GitHub Copilot BYOK harness now retain bearer authentication, reducing false 401 errors for valid credentials. [#99955](https://github.com/openclaw/openclaw/pull/99955) Thanks @hxy91819.
+- A detail-less failure from an OpenAI-compatible provider no longer puts a valid API-key profile into cooldown or forces avoidable fallback traffic. [#100617](https://github.com/openclaw/openclaw/pull/100617) Thanks @fengjikui.
+- OpenAI Realtime voice in Talk, Voice Call, and Discord can now use an existing Codex/OpenAI OAuth login when no explicit API key is configured. [#100671](https://github.com/openclaw/openclaw/pull/100671) Thanks @steipete-oai.
+- OpenAI image generation can now be enabled from `models.providers.openai` with a usable API key and custom base URL, without also requiring `OPENAI_API_KEY` or an auth profile. [#100745](https://github.com/openclaw/openclaw/pull/100745) Thanks @amknight.
+- Codex users can route both `codex/*` and `openai/*` models through the bundled runtime, and older conversations resume without unnecessary context reprojection. [#105034](https://github.com/openclaw/openclaw/pull/105034)
+- The bundled Codex plugin can complete backend requests again after updating its managed app-server runtime, with no model-picker or configuration migration required. [#106098](https://github.com/openclaw/openclaw/pull/106098)
+- OpenAI/Codex and Anthropic OAuth result pages now show OpenClaw branding instead of the legacy Pi logo. [1834592](https://github.com/openclaw/openclaw/commit/1834592be17668cbfc9ea834c57df73e05b71f14)
+- OpenClaw's managed Codex workflow now uses app-server 0.143.0, and self-managed installations must use 0.143.0 or newer for protocol compatibility. [366258d](https://github.com/openclaw/openclaw/commit/366258dee6e4a3ea0bb04b1316e5a0c419c60188) Thanks @vincentkoc.
+- The managed Codex harness now surfaces supported GPT-5.6 Sol, Terra, and Luna models returned by the account catalog and gives self-managed users current version guidance. [f80ce21](https://github.com/openclaw/openclaw/commit/f80ce219fcf0c5cbe9871b9ad05b7570fbfeba6e) Thanks @vincentkoc.
+- Managed Codex users on macOS, Linux, and Windows now receive app-server 0.144.1 instead of 0.144.0. [5dcba9f](https://github.com/openclaw/openclaw/commit/5dcba9fae725c080b62c4b4e19533f5fcd59b964) Thanks @vincentkoc.
+- With `models.mode` set to `replace`, agent startup now uses only explicitly configured providers and skips the slow implicit provider scan. [#82638](https://github.com/openclaw/openclaw/pull/82638) Related [#66957](https://github.com/openclaw/openclaw/issues/66957). Thanks @eldar702, @wangzhengshu.
+- Bundled provider aliases now accept supported overlay settings such as request timeouts without demanding custom-provider fields like `baseUrl` and `models`. [#88400](https://github.com/openclaw/openclaw/pull/88400) Thanks @pluviobyte.
+- Agent runs can move to the next configured model after a provider drops a stream, while genuine cancellations still stop promptly. [#90908](https://github.com/openclaw/openclaw/pull/90908) Thanks @shengting.
+- Switching from thinking-off mode to a reasoning-required model now selects its lowest supported effort rather than silently choosing the most expensive level. [#93335](https://github.com/openclaw/openclaw/pull/93335) Thanks @obuchowski.
+- MiniMax M3 replies, including those routed through Fireworks, no longer expose hidden `mm:` reasoning in visible chat or progress output. [#93767](https://github.com/openclaw/openclaw/pull/93767) Thanks @drhack1, @vincentkoc.
+- Hidden MiniMax reasoning no longer appears as a new iMessage or feeds back into the conversation as an echo-triggering inbound message. [#93820](https://github.com/openclaw/openclaw/pull/93820) Thanks @alix-007.
+- Inworld text-to-speech and voice-list requests now fail safely on oversized, malformed, or never-ending responses instead of hanging or consuming unbounded Gateway memory. [#95416](https://github.com/openclaw/openclaw/pull/95416) Thanks @alix-007, @vincentkoc.
+- Embedded-agent runs can now try the next configured fallback model after a temporary upstream `LLM request failed` error. [#95542](https://github.com/openclaw/openclaw/pull/95542) Thanks @altaywtf, @mikasa0818.
+- LM Studio model discovery and startup now stop pathological server responses at a fixed size and report a clear error instead of buffering them indefinitely. [#96042](https://github.com/openclaw/openclaw/pull/96042) Thanks @alix-007.
+- Isolated cron jobs can now use models supplied by enabled bundled plugins without failing as unknown or silently resolving to the wrong provider. [#96070](https://github.com/openclaw/openclaw/pull/96070) Thanks @sallyom, @sunnyshu0925.
+- MiniMax OAuth device setup now limits authorization response size so a faulty proxied or self-hosted endpoint cannot exhaust Gateway memory. [#96322](https://github.com/openclaw/openclaw/pull/96322) Thanks @lsr911.
+- Image generation now stops with a clear size-limit error when a provider or custom endpoint sends an oversized or endless response, preventing hangs and runaway memory use while valid images and edits continue normally. [#96495](https://github.com/openclaw/openclaw/pull/96495) Thanks @hugenshen, @sallyom.
+- Azure Speech, Microsoft Speech, ElevenLabs, MiniMax TTS, OpenRouter transcription, and xAI transcription now stop oversized or endless responses before they can stall speech work or strain Gateway memory, while ordinary responses remain unchanged. [#96496](https://github.com/openclaw/openclaw/pull/96496) Thanks @hugenshen.
+- GitHub Copilot model discovery and memory search now reject oversized or malformed responses instead of buffering them without limit, while valid catalog and embedding results continue normally. [#96499](https://github.com/openclaw/openclaw/pull/96499) Thanks @hugenshen, @sallyom.
+- Moonshot video understanding now returns a predictable error for oversized or malformed responses instead of hanging or consuming memory indefinitely, including with custom base URLs. [#96502](https://github.com/openclaw/openclaw/pull/96502) Thanks @hugenshen.
+- OpenRouter video model discovery now stops oversized or runaway catalog responses promptly instead of letting them consume memory without limit, while normal discovery behavior is preserved. [#96505](https://github.com/openclaw/openclaw/pull/96505) Thanks @mushuiyu886.
+- Qwen video understanding now stops oversized or malformed endpoint responses with a clear error instead of hanging or reading without limit, while normal descriptions continue unchanged. [#96604](https://github.com/openclaw/openclaw/pull/96604) Thanks @alix-007.
+- Google Veo video generation now ends oversized create or status responses early with a clear bounded error, preventing a broken endpoint from hanging OpenClaw or consuming memory indefinitely. [#96605](https://github.com/openclaw/openclaw/pull/96605) Thanks @alix-007.
+- BytePlus video generation now stops oversized task-submission or status responses with a clear error before they can stall OpenClaw or exhaust memory, while normal responses continue unchanged. [#96606](https://github.com/openclaw/openclaw/pull/96606) Thanks @alix-007.
+- GitHub Copilot usage checks now contain oversized or endless endpoint responses as a usage error instead of buffering them indefinitely, while normal usage data still loads. [#96607](https://github.com/openclaw/openclaw/pull/96607) Thanks @alix-007.
+- Voyage embedding batch jobs now stop oversized status, failure, and error-file responses before they can hang or exhaust worker memory, while oversized diagnostics degrade safely and ordinary responses remain unchanged. [#96608](https://github.com/openclaw/openclaw/pull/96608) Thanks @alix-007.
+- Model aliases and partial names such as `opus` now resolve to the newest matching version even when catalogs reach double-digit versions, preventing silent routing to an older model. [#96609](https://github.com/openclaw/openclaw/pull/96609) Thanks @yetval, @zw-xysk.
+- Chutes login, user lookup, and token refresh now stop unexpectedly large OAuth responses with a bounded error instead of buffering them without limit. [#96777](https://github.com/openclaw/openclaw/pull/96777) Thanks @wangmiao0668000666.
+- Chutes onboarding now fails clearly when token-exchange or user-info responses are oversized, preventing abnormal authentication traffic from causing unbounded memory growth. [#96779](https://github.com/openclaw/openclaw/pull/96779) Thanks @wangmiao0668000666.
+- DashScope-compatible video submission and polling now reject oversized JSON responses with a bounded error instead of risking memory pressure or process instability, while ordinary responses continue normally. [#96782](https://github.com/openclaw/openclaw/pull/96782) Thanks @wangmiao0668000666.
+- OpenRouter video generation now rejects oversized submit and polling responses before they can hang OpenClaw or consume runaway memory, while normal-sized malformed responses retain their established error handling. [#96873](https://github.com/openclaw/openclaw/pull/96873) Thanks @alix-007.
+- Volcengine, BytePlus Seed Speech, and Xiaomi TTS now stop oversized provider responses before one speech request can stall or destabilize OpenClaw. [#96874](https://github.com/openclaw/openclaw/pull/96874) Thanks @alix-007.
+- Vydra image, video, and speech generation now fails with a bounded error on oversized or endless control responses instead of hanging or exhausting memory, while valid responses continue normally. [#96875](https://github.com/openclaw/openclaw/pull/96875) Thanks @alix-007.
+- fal music and video generation now stops oversized successful responses with a clear size-limit error before they can hang or exhaust memory, while normal generation continues as before. [#96886](https://github.com/openclaw/openclaw/pull/96886) Thanks @alix-007.
+- MiniMax video generation now rejects oversized task, status, or file-metadata responses before unbounded memory use or binary download begins, while normal responses continue to work. [#96889](https://github.com/openclaw/openclaw/pull/96889) Thanks @alix-007.
+- xAI video generation now stops oversized create or status responses with a clear size-limit error instead of buffering until OpenClaw hangs or consumes excessive memory. [#96903](https://github.com/openclaw/openclaw/pull/96903) Thanks @alix-007, @vincentkoc.
+- Together and PixVerse video generation now returns a provider-labelled size error for oversized successful responses instead of continuing until severe memory pressure or process failure. [#96904](https://github.com/openclaw/openclaw/pull/96904) Thanks @alix-007.
+- Runway video generation now stops oversized create and status responses instead of continuing to consume memory or stall, while normal polling and provider-specific errors remain intact. [#96907](https://github.com/openclaw/openclaw/pull/96907) Thanks @alix-007.
+- Google audio and video understanding now stops oversized provider responses at the shared 16 MiB limit with a clear error instead of allowing them to consume excessive memory. [#96920](https://github.com/openclaw/openclaw/pull/96920) Thanks @mushuiyu886, @vincentkoc.
+- Comfy image-generation workflows now stop oversized ComfyUI responses with the actual size-limit error instead of risking memory exhaustion or misreporting the response as malformed JSON. [#96927](https://github.com/openclaw/openclaw/pull/96927) Thanks @wangmiao0668000666.
+- ClickClack now stops oversized REST success responses at the provider limit, giving users and operators a predictable failure instead of continued streaming and memory growth. [#96970](https://github.com/openclaw/openclaw/pull/96970) Thanks @mushuiyu886, @vincentkoc.
+- Paginated provider catalogs now expose models beyond the first page, while malformed, endless, or redirected catalogs fail safely instead of caching an incomplete list or forwarding sensitive headers across origins. [#97012](https://github.com/openclaw/openclaw/pull/97012) Thanks @zhangguiping-xydt.
+- Long opencode-go model runs are less likely to be falsely stopped as stalled while valid provider events are still arriving. [#97128](https://github.com/openclaw/openclaw/pull/97128) Thanks @liuwqgit, @vincentkoc, @yetval.
+- Configured Voice Call transcription providers such as xAI remain selectable when another provider registry is active, allowing Talk sessions to start normally. [#97170](https://github.com/openclaw/openclaw/pull/97170) Thanks @solavrc.
+- OpenRouter's DeepSeek V4 Flash and Pro models can answer with thinking enabled without failing with an HTTP 400. [#97208](https://github.com/openclaw/openclaw/pull/97208) Related [#97196](https://github.com/openclaw/openclaw/issues/97196). Thanks @nianjiuzst, @patelmm79.
+- Proxy-backed model streams now fail with bounded, clearer errors when responses are oversized, malformed, incomplete, or idle instead of hanging or consuming unbounded data. [#97235](https://github.com/openclaw/openclaw/pull/97235) Thanks @vincentkoc, @zhangguiping-xydt.
+- xAI and Grok OAuth sign-in now works on SSH hosts, containers, VPS systems, and other headless environments without forwarding a localhost callback port. [#97249](https://github.com/openclaw/openclaw/pull/97249) Thanks @fuller-stack-dev, @jaaneek.
+- Missing official media providers now produce errors with the exact recovery commands needed to restore transcription and other media workflows. [#97484](https://github.com/openclaw/openclaw/pull/97484) Thanks @wangmiao0668000666.
+- DeepInfra video generation now rejects oversized successful responses with a bounded error instead of risking an out-of-memory crash. [#97486](https://github.com/openclaw/openclaw/pull/97486) Thanks @hugenshen.
+- OpenRouter cost tracking now caps unexpectedly large metadata responses and keeps the original streamed estimate instead of disrupting the agent turn. [#97490](https://github.com/openclaw/openclaw/pull/97490) Thanks @hugenshen.
+- GitHub Copilot sign-in, refresh, and model-list checks now fail with labeled size limits when GitHub or a proxy returns an oversized response. [#97499](https://github.com/openclaw/openclaw/pull/97499) Thanks @wangmiao0668000666.
+- Z.AI users can recover a profile that accidentally stored an onboarding command as the API key without wiping all authentication state. [#97520](https://github.com/openclaw/openclaw/pull/97520) Thanks @zhangguiping-xydt.
+- Z.AI endpoint and model detection now fails gracefully on oversized or endless error responses instead of exhausting host memory. [#97540](https://github.com/openclaw/openclaw/pull/97540) Thanks @alix-007.
+- Configured fallback chains now try an alternate model when the primary provider reports `model_not_found`, reducing failures after model availability changes. [#97571](https://github.com/openclaw/openclaw/pull/97571) Thanks @liuhao1024.
+- GitHub Copilot sign-in and token refresh now reject oversized service responses with a clear error before they can exhaust OpenClaw's memory. [#97579](https://github.com/openclaw/openclaw/pull/97579) Thanks @hugenshen.
+- GitHub Copilot device login now fails cleanly on an oversized successful response instead of risking an out-of-memory crash. [#97583](https://github.com/openclaw/openclaw/pull/97583) Thanks @hugenshen.
+- When a configured runtime model is no longer available, chat now explains that a new session will not help and directs operators to choose an available model. [#97611](https://github.com/openclaw/openclaw/pull/97611) Thanks @romneyda.
+- xAI sign-in, token refresh, and device approval now stop oversized OAuth responses before they can consume unbounded memory. [#97615](https://github.com/openclaw/openclaw/pull/97615) Thanks @cxbasdev.
+- Google Meet document processing now rejects oversized Google Drive exports before they can destabilize OpenClaw, while ordinary documents still export as text. [#97620](https://github.com/openclaw/openclaw/pull/97620) Thanks @alix-007, @vincentkoc.
+- Google OAuth sign-in, token exchange, and project discovery now return a bounded error for oversized responses instead of risking a process crash. [#97628](https://github.com/openclaw/openclaw/pull/97628) Thanks @vincentkoc, @wangmiao0668000666.
+- Mistral-compatible endpoints now stop oversized streaming responses with a labeled error before OpenClaw can run out of memory. [#97648](https://github.com/openclaw/openclaw/pull/97648) Thanks @wangmiao0668000666.
+- MiniMax and other shared provider usage checks now fail safely on oversized or malformed replies instead of buffering them without limit. [#97659](https://github.com/openclaw/openclaw/pull/97659) Thanks @cxbasdev, @vincentkoc.
+- Chutes sign-in and token refresh errors now include a useful bounded snippet without allowing an endpoint to stream an unlimited response into memory. [#97808](https://github.com/openclaw/openclaw/pull/97808) Thanks @pick-cat.
+- Microsoft Foundry connection tests now stop oversized or continuously streamed error responses while preserving concise setup diagnostics. [#97812](https://github.com/openclaw/openclaw/pull/97812) Thanks @pick-cat.
+- Z.AI and similar HTTP 429 responses now distinguish temporary service overload from ordinary rate limiting and preserve provider-supplied retry timing. [#98165](https://github.com/openclaw/openclaw/pull/98165) Thanks @sunnyshu0925.
+- OpenRouter model probes and agent requests now use discovered environment or profile API keys correctly instead of failing with a missing-authentication-header error. [#98187](https://github.com/openclaw/openclaw/pull/98187) Related [#97934](https://github.com/openclaw/openclaw/issues/97934). Thanks @laurencebrown, @sunlit-deng.
+- Image and video tools can now automatically select configured provider-plugin models authenticated through environment variables. [#98623](https://github.com/openclaw/openclaw/pull/98623) Thanks @medns.
+- A malformed Inworld voices response now produces a clear provider-specific error instead of an unhelpful parsing exception or process crash. [#98660](https://github.com/openclaw/openclaw/pull/98660) Thanks @solodmd.
+- Nemotron 3 Super now exposes its full 1,048,576-token context budget in OpenClaw's bundled NVIDIA fallback catalog instead of compacting at the stale 262,144-token limit. [#98726](https://github.com/openclaw/openclaw/pull/98726) Thanks @eleqtrizit.
+- Abnormally large Google Meet, Calendar, or OAuth responses now stop with an error before they can consume uncontrolled Gateway memory. [#98850](https://github.com/openclaw/openclaw/pull/98850) Thanks @pandah97.
+- Provider failures now keep fallback error text within the configured size limit, preventing oversized responses from overwhelming logs or visible diagnostics. [#99340](https://github.com/openclaw/openclaw/pull/99340) Thanks @pick-cat.
+- ClawRouter models selected in agent defaults now resolve at runtime when the credential is stored in an auth profile instead of the environment. [#99759](https://github.com/openclaw/openclaw/pull/99759)
+- Automatically configured video understanding now uses provider defaults such as Moonshot's intended video model unless the user selected a model explicitly. [#99791](https://github.com/openclaw/openclaw/pull/99791) Thanks @vincentkoc, @zhangguiping-xydt.
+- Generic provider configurations for official DashScope/Qwen, Moonshot, Z.AI, DeepSeek, Groq, Cerebras, and Chutes endpoints now retain the compatibility behavior those services require even without optional plugins. [#100125](https://github.com/openclaw/openclaw/pull/100125)
+- ChatGPT OAuth-backed Responses sessions now retain backend affinity across turns, improving prompt-cache reuse and reducing repeated processing of the same conversation context. [#100233](https://github.com/openclaw/openclaw/pull/100233) Thanks @marvinthebored, @obviyus, @peetiegonzalez.
+- Google Live voice sessions can now register and call OpenClaw tools instead of rejecting their declarations before a tool-backed turn begins. [#100260](https://github.com/openclaw/openclaw/pull/100260)
+- Direct `mistral-medium-3-5` requests now send the user-selected adjustable reasoning level to Mistral as `reasoningEffort`. [#100688](https://github.com/openclaw/openclaw/pull/100688) Thanks @aniruddhaadak80, @wm0018.
+- MiniMax image understanding now stops oversized or malformed successful responses at a bounded limit, protecting memory while returning a useful diagnostic. [#100694](https://github.com/openclaw/openclaw/pull/100694) Thanks @zhangguiping-xydt.
+- LM Studio embedding preload now respects the configured context limit, reducing GPU out-of-memory failures during memory search on constrained hardware. [#100750](https://github.com/openclaw/openclaw/pull/100750) Thanks @hxz398, @zak-li, @zoowh.
+- Hugging Face model discovery now falls back to the bundled catalog when a provider response is malformed or oversized instead of risking excessive memory use. [#101079](https://github.com/openclaw/openclaw/pull/101079) Thanks @cxbasdev.
+- Featherless AI now has an official provider install and onboarding path, including `FEATHERLESS_API_KEY`, a curated `featherless/Qwen/Qwen3-32B` default, and support for exact Featherless model IDs. [#101092](https://github.com/openclaw/openclaw/pull/101092) Thanks @vincentkoc.
+- Meta Model API is now exposed through the public `meta` provider, with `meta/muse-spark-1.1`, canonical provider docs, and standalone npm or ClawHub installation paths. [#103070](https://github.com/openclaw/openclaw/pull/103070) Thanks @vincentkoc.
+- The bundled Meta provider now uses `https://api.meta.ai/v1`, advertises Muse Spark 1.1's documented 131,072-token output limit, and applies official-host request protections. [#103680](https://github.com/openclaw/openclaw/pull/103680) Thanks @vincentkoc.
+- Trusted official external providers can now show model-specific thinking choices before full runtime activation, including off, low, high, and max for Z.AI GLM 5.2. [b4fce16](https://github.com/openclaw/openclaw/commit/b4fce16971995438ee416eee90569a37d6a592dc) Thanks @vincentkoc.
+- Anthropic agents routed through AWS Bedrock can keep Feishu Bitable write tools enabled without the tool definitions blocking every conversation. [#94990](https://github.com/openclaw/openclaw/pull/94990) Thanks @twinslee, @vincentkoc.
+- Anthropic sign-in now rejects unsupported callback-host overrides, keeps authorization on standard local loopback addresses, and avoids callback failures or exposure through a non-local listener. [#96917](https://github.com/openclaw/openclaw/pull/96917) Thanks @xialonglee.
+- Expired Claude CLI authentication now shows the exact recovery command `claude auth login && openclaw models auth login --provider anthropic --method cli` instead of a generic failure. [#97669](https://github.com/openclaw/openclaw/pull/97669) Thanks @alix-007.
+- Eligible direct API-key requests to Claude Fable 5 now return an Opus 4.8 answer when Anthropic's safety classifier declines Fable, with diagnostics and Opus billing made clear. [#99906](https://github.com/openclaw/openclaw/pull/99906)
+- Claude Fable 5 now uses the expected Anthropic `context1m` stream setup when 1M context is enabled, without affecting similar model IDs. [#100572](https://github.com/openclaw/openclaw/pull/100572) Thanks @zhangguiping-xydt.
+- Anthropic-compatible model requests now consistently use OpenClaw's guarded transport, response normalization, and managed stream cleanup rather than bypassing them through the SDK. [#101357](https://github.com/openclaw/openclaw/pull/101357) Thanks @wangmiao0668000666.
+- Claude conversations through GitHub Copilot can continue after a tool failure with no visible output instead of entering repeated provider-schema failures. [#101373](https://github.com/openclaw/openclaw/pull/101373) Thanks @galiniliev.
+- Anthropic-compatible calls with token caps too small for manual thinking now run normally without thinking instead of failing provider validation. [#101415](https://github.com/openclaw/openclaw/pull/101415) Thanks @pick-cat.
+- Gemini CLI media analysis now returns its description even when the valid response also contains nested usage or other metadata. [#96432](https://github.com/openclaw/openclaw/pull/96432) Thanks @lin-hongkuan.
+- MCP tools that expect arrays or objects can now accept those values when Xiaomi MiMo, Ollama, or another affected provider returns them as JSON strings, avoiding a pre-execution validation failure. [#96922](https://github.com/openclaw/openclaw/pull/96922) Thanks @liuhao1024.
+- Repaired plain-text tool calls from LM Studio, xAI, and Ollama now emit a final completion event so plugins and other streaming consumers can finish them reliably. [#104714](https://github.com/openclaw/openclaw/pull/104714)
+- Status summaries now respect provider-local model aliases, showing the selected alias without a false pinned-model mismatch warning. [1d4e789](https://github.com/openclaw/openclaw/commit/1d4e7899a47f4483d29848eac02e1fb89de2a2ee)
+- Cloudflare 403 challenges on OpenAI or Codex OAuth requests now produce gateway-block guidance instead of incorrectly telling users their authentication failed. [#94440](https://github.com/openclaw/openclaw/pull/94440) Related [#94432](https://github.com/openclaw/openclaw/issues/94432). Thanks @lzyyzznl, @pbm9z95m6z-hue.
+- Configurations using the retired `openai-codex-responses` API ID now receive a validation message naming the supported replacement instead of a generic failure. [#96257](https://github.com/openclaw/openclaw/pull/96257) Thanks @james-16, @yetval.
+- Legacy `openai-codex` references now direct operators to `openclaw doctor --fix` and `openclaw models status` instead of suggesting configuration that fails validation. [#100120](https://github.com/openclaw/openclaw/pull/100120) Thanks @jason-vaughan, @sunnyshu0925, @vincentkoc.
+- OpenAI authentication errors now point ChatGPT/Codex OAuth users to a model compatible with their existing sign-in instead of recommending an outdated default. [#100579](https://github.com/openclaw/openclaw/pull/100579) Thanks @zhangguiping-xydt.
+- Codex app-server runs with an invalid ChatGPT OAuth session now surface the real sign-in error promptly instead of waiting for a misleading ten-second authentication timeout. [#100713](https://github.com/openclaw/openclaw/pull/100713) Thanks @lin-hongkuan.
+- Continued conversations with strict custom OpenAI Responses-compatible endpoints no longer fail on an unsupported `input[n].status` field and needlessly switch to a fallback model. [#100831](https://github.com/openclaw/openclaw/pull/100831) Thanks @chenxiaoyu209.
+- Codex runs stopped by the guardian rejection limit now say why they ended, so operators do not have to mistake the result for a crash, cancellation, or generic interruption. [#101220](https://github.com/openclaw/openclaw/pull/101220) Thanks @darren2030.
+- Codex-native delegation from OpenClaw threads now creates native task records again, while unsupported custom Codex app-server versions fail startup with a clear minimum-version error. [#101221](https://github.com/openclaw/openclaw/pull/101221)
+- Crestodian setup and repair chats on Codex-backed runs can now access the status and repair tool they need instead of stopping with a missing-tool response. [#101281](https://github.com/openclaw/openclaw/pull/101281)
+- Shared Codex app-server clients now keep usage limits, auth cooldowns, thread subscriptions, and resumed connections tied to the account and conversation that actually owns them. [#101376](https://github.com/openclaw/openclaw/pull/101376)
+- OpenAI realtime voice sessions now default to `gpt-realtime-2.1` when no model is specified, while explicit model pins continue to work. [#101390](https://github.com/openclaw/openclaw/pull/101390) Thanks @vincentkoc.
+- Codex sessions using `gpt-5.5-pro` or `gpt-5.4-pro` now clamp unsupported reasoning levels before the first turn, avoiding an immediate request rejection when live metadata is unavailable. [#101484](https://github.com/openclaw/openclaw/pull/101484) Thanks @zhangguiping-xydt.
+- Codex app-server stdout failures now end affected requests cleanly, while a diagnostics-only stderr failure no longer interrupts an otherwise healthy turn. [#101505](https://github.com/openclaw/openclaw/pull/101505) Thanks @mushuiyu886, @vincentkoc.
+- When an OpenAI or OpenAI-compatible chat-completions model refuses a request, users now see the provider's explanation instead of a blank assistant reply. [#102344](https://github.com/openclaw/openclaw/pull/102344) Thanks @wuqxuan, @yetval.
+- OpenAI image generation and reference-image editing no longer crash when credentials or a custom base URL are ready before the provider model catalog finishes loading. [#105518](https://github.com/openclaw/openclaw/pull/105518) Thanks @vincentkoc.
+- After `/model` changes a session's provider, `/status` and `session_status` now report that provider's usage, authentication, runtime, and context details rather than stale defaults. [#93384](https://github.com/openclaw/openclaw/pull/93384) Thanks @obviyus, @osolmaz, @rollingshmily, @samiralibabic, @zhangguiping-xydt.
+- Model-call traces now include prompt-size and per-call token usage details, helping operators investigate cost and prompt growth without capturing raw content. [#95770](https://github.com/openclaw/openclaw/pull/95770) Thanks @amknight.
+- Request-format and schema failures now show the relevant diagnostic without sending users through unnecessary provider login or reconfiguration steps. [#95779](https://github.com/openclaw/openclaw/pull/95779) Thanks @pick-cat.
+- Parallel web search now returns a bounded error when an upstream response is malformed, oversized, or never-ending instead of risking a hang or out-of-memory crash. [#96035](https://github.com/openclaw/openclaw/pull/96035) Thanks @alix-007.
+- Exa searches now reject responses above the supported limit, preventing excessive provider output from hanging OpenClaw or creating memory pressure. [#96038](https://github.com/openclaw/openclaw/pull/96038) Thanks @alix-007.
+- Existing xAI and Grok OAuth sessions using the retired token endpoint can renew after expiry without forcing another browser or SSH-tunneled login. [#96146](https://github.com/openclaw/openclaw/pull/96146) Thanks @fuller-stack-dev, @jaaneek.
+- OpenRouter scans now interpret model names such as `8b-70b` by their larger parameter size, improving minimum-size filters and small-model security warnings. [#96288](https://github.com/openclaw/openclaw/pull/96288) Thanks @ly-wang19.
+- `/model default` now actually returns an active session to its configured model after steering, fallback, or a previous manual selection. [#96318](https://github.com/openclaw/openclaw/pull/96318) Thanks @marsman-lab, @sunnyshu0925.
+- Media-generation catalogs now keep the correct default model marker even when provider metadata includes harmless surrounding whitespace. [#96430](https://github.com/openclaw/openclaw/pull/96430) Thanks @lin-hongkuan.
+- OpenRouter sign-in now fails safely on oversized replies, and Discord webhook sends remain successful when their optional response body is absent, malformed, or too large. [#98098](https://github.com/openclaw/openclaw/pull/98098) Thanks @lwy-2.
+- Reference-image edits through Fal-hosted Grok Imagine and Nano Banana 2 Lite now reach the correct service, while mixed-model fallbacks honor each candidate's supported resolution and reference limits. [#98688](https://github.com/openclaw/openclaw/pull/98688) Thanks @davenicoll, @vincentkoc.
+- Malformed Voyage embedding batches now close their download connections after parsing fails, reducing resource buildup during repeated or large workloads. [#98840](https://github.com/openclaw/openclaw/pull/98840) Thanks @solodmd.
+- Short non-English audio now keeps the configured language hint without an unrelated English prompt, reducing accidental translation when users expect a transcript in the spoken language. [#99023](https://github.com/openclaw/openclaw/pull/99023) Thanks @flyveryhigh, @nianjiuzst.
+- Switching a live Control UI or TUI session through a provider-qualified model alias now saves the canonical provider and model, preventing the next request from being rejected. [#100209](https://github.com/openclaw/openclaw/pull/100209) Thanks @sahilsatralkar.
+- Gateway chat now classifies mixed provider messages as rate limits when throttling is the real failure, giving users recovery guidance that matches the problem. [#100755](https://github.com/openclaw/openclaw/pull/100755) Thanks @pick-cat.
+- Agents created by copying credentials now preserve the source agent's portable provider-profile priority instead of unexpectedly choosing a different credential. [#100833](https://github.com/openclaw/openclaw/pull/100833) Thanks @machine3at.
+- OpenRouter completions that the provider bills at $0 now stay recorded as free in transcripts, summaries, logs, and usage totals instead of being replaced with estimated catalog pricing. [#101177](https://github.com/openclaw/openclaw/pull/101177)
+- New or updated provider credentials entered through the CLI now appear in the running Gateway and Control UI model picker without a manual secrets reload or restart. [#101256](https://github.com/openclaw/openclaw/pull/101256) Thanks @fuller-stack-dev.
+- `openclaw status` and `session_status` now identify when a session is using a fallback model and show the configured primary model beside it. [#101337](https://github.com/openclaw/openclaw/pull/101337) Thanks @lzy3538.
+- MiniMax TTS now accurately explains that volume must be greater than 0 and may be as high as 10 when a directive is invalid. [#101359](https://github.com/openclaw/openclaw/pull/101359) Thanks @quratulain-bilal.
+- MiniMax VLM and native PDF provider errors now remain readable when emoji or other supplementary characters land at the diagnostic snippet limit. [#101728](https://github.com/openclaw/openclaw/pull/101728) Thanks @wings1029.
+- Very long OpenRouter Fusion model IDs now remain valid Unicode in the agent prompt instead of showing a corrupted character when an emoji reaches the display limit. [#104433](https://github.com/openclaw/openclaw/pull/104433) Thanks @zhangguiping-xydt.
+- OAuth-backed models now become available in Gateway model browsing after credentials are renewed from another CLI process, without requiring a Gateway restart. [#104732](https://github.com/openclaw/openclaw/pull/104732) Thanks @fuller-stack-dev.
+- Provider onboarding no longer writes an empty `request` block when no request overrides were supplied. [3a0a736](https://github.com/openclaw/openclaw/commit/3a0a736843af2877d66f5b8b8bcc78786d8f04a0) Thanks @vincentkoc.
+- The diagnostics timeline now shows when provider model calls ran, how long they took, and whether they succeeded without recording prompt or response content. [7253552](https://github.com/openclaw/openclaw/commit/7253552c68d0ac8c6098126d373f185bb6df22a2) Thanks @vincentkoc.
+
+
+
+## Memory and conversations
+
+### Recall, long chats, and session continuity
+
+[Memory](/concepts/memory) indexing, recall, wiki synchronization, and search recover from more malformed pages, stale status, large indexes, transient reads, and provider mismatches without hiding useful stored context or overwriting user notes. When a result is incomplete or a configured memory provider is unavailable, the failure is clearer instead of looking like a complete answer.
+
+[Sessions](/cli/sessions), transcripts, compaction, goals, and routing also retain the intended conversation more consistently through restarts, resets, delayed follow-ups, tool-heavy runs, and client changes. The practical result is less missing history, fewer replies stored against the wrong session, and more dependable continuation of long-running work.
+
+
+
+- Durable memory promotion now keeps OpenClaw's managed dreaming markers and adjacent managed content out of `MEMORY.md` when a recalled range touches a block boundary. [#83718](https://github.com/openclaw/openclaw/pull/83718) Thanks @grifjef.
+- QMD `search` and `vsearch` modes now skip the LLM reranker, reducing latency and avoiding unnecessary GPU failures while full `query` mode keeps reranking. [#88887](https://github.com/openclaw/openclaw/pull/88887) Thanks @potterdigital.
+- Inferred follow-up commitments now return to the queue after temporary model or network extraction failures, reducing missed reminders without duplicate processing. [#89817](https://github.com/openclaw/openclaw/pull/89817) Thanks @masatohoshino.
+- Memory-wiki pages titled `Index` now remain stored, searchable, and retrievable instead of being hidden or overwritten by generated directory pages. [#94326](https://github.com/openclaw/openclaw/pull/94326) Thanks @vincentkoc, @yetval.
+- Active Memory now warns when recalled operational details may be outdated and clearly marks clipped summaries, so old or incomplete status is less likely to look current. [#95888](https://github.com/openclaw/openclaw/pull/95888) Thanks @spencer2211.
+- Memory-wiki pages in subfolders now appear in search, lookup, compiled indexes, digests, and vault counts just like pages at the top level. [#96022](https://github.com/openclaw/openclaw/pull/96022) Thanks @machine3at, @vincentkoc.
+- Large memory indexes can now return filtered matches beyond sqlite-vec's first 4,096 candidates without failing or silently missing valid results. [#96157](https://github.com/openclaw/openclaw/pull/96157) Thanks @itsuzef, @vincentkoc.
+- Repeated QMD-backed `memory_search` and `openclaw memory search` requests can return faster after the first lookup, while diagnostics separate setup time from search time and missing collections still trigger repair. [#96655](https://github.com/openclaw/openclaw/pull/96655) Thanks @bek91.
+- Memory search now works with installed generic embedding plugins such as local llama.cpp, including their default model and connection details. [#97095](https://github.com/openclaw/openclaw/pull/97095) Thanks @849261680.
+- One memory-wiki page with broken YAML no longer blocks healthy pages from being searched, compiled, linted, counted, or updated. [#97177](https://github.com/openclaw/openclaw/pull/97177) Related [#96125](https://github.com/openclaw/openclaw/issues/96125). Thanks @cow11023, @sunnyshu0925.
+- Memory-core light dreaming no longer repeats an unchanged work-summary block in `DREAMS.md`, while genuine daily-note updates can still appear later. [#97446](https://github.com/openclaw/openclaw/pull/97446) Thanks @aaajiao, @qingminglong.
+- Memory Wiki now marks claims with malformed explicit freshness timestamps as unknown instead of masking the bad metadata with the page date. [#97465](https://github.com/openclaw/openclaw/pull/97465) Thanks @ly-wang19.
+- Detailed `/status plugins` now warns when a configured memory embedding provider is unavailable and semantic recall has fallen back to keyword search. [#97968](https://github.com/openclaw/openclaw/pull/97968) Thanks @masatohoshino.
+- Memory Wiki lint now ignores link-looking text inside inline and fenced code while continuing to report genuine broken links in prose. [#98095](https://github.com/openclaw/openclaw/pull/98095) Thanks @durambar, @vincentkoc, @zhangqueping.
+- Memory-wiki source updates now preserve hand-written Notes when a temporary read failure prevents OpenClaw from safely loading the existing page. [#98360](https://github.com/openclaw/openclaw/pull/98360) Related [#98345](https://github.com/openclaw/openclaw/issues/98345). Thanks @qingminglong, @vincentkoc, @yetval.
+- QMD memory recall now turns malformed or warning-filled mcporter output into a clear, filtered error instead of exposing raw subprocess text. [#98381](https://github.com/openclaw/openclaw/pull/98381) Thanks @miorbnli.
+- Memory-wiki source sync can now recover when a page is missing or collides with a non-file, while preserving existing content when a retry remains unsafe. [#99276](https://github.com/openclaw/openclaw/pull/99276) Thanks @obviyus.
+- `memory_get` with `corpus=all` can now return an available wiki supplement when the requested memory file is missing instead of stopping with an empty result. [#100904](https://github.com/openclaw/openclaw/pull/100904) Thanks @mushuiyu886, @vincentkoc.
+- iOS voice notes now stay with the intended chat and recover more reliably across offline queues, app recreation, uncertain sends, and competing microphone use. [#101236](https://github.com/openclaw/openclaw/pull/101236)
+- Memory Wiki imports now continue when a source page collides with a protected vault entry instead of stopping the whole import. [76db9a3](https://github.com/openclaw/openclaw/commit/76db9a3376228db6a6f58cd705fc236aa697446c) Thanks @vincentkoc.
+- With `memorySearch.provider: none`, OpenClaw now starts FTS-only memory without an unnecessary plugin capability scan. [fbf574a](https://github.com/openclaw/openclaw/commit/fbf574ad9db2658652e442aab4be3d597e1a9c14)
+- After `/new` or `/reset`, the previous conversation remains available for daily memory summaries and full-history searches through the session-logs skill. [#71537](https://github.com/openclaw/openclaw/pull/71537) Thanks @injinj.
+- With memory flush enabled, important conversation context now gets a chance to reach durable memory before automatic compaction, reducing silent gaps in saved notes. [#84792](https://github.com/openclaw/openclaw/pull/84792) Thanks @turbotheturtle.
+- Images shared from iOS or through node `agent.request` now remain attached to the correct conversation turn after history reload, so later messages can still use them. [#86936](https://github.com/openclaw/openclaw/pull/86936) Thanks @peterdsp.
+- A group chat or Gateway session can now resume on the next visible request after a failed, timed-out, or killed turn without requiring `/new` or manual session-file edits. [#89045](https://github.com/openclaw/openclaw/pull/89045) Thanks @jerry-xin.
+- Voice Call history now stays with the correct configured agent across Gateway restarts and upgrades, while ambiguous legacy state is left untouched with actionable warnings. [#89884](https://github.com/openclaw/openclaw/pull/89884) Thanks @mushuiyu886.
+- Interactive QMD memory searches with no matches now return an empty result promptly instead of appearing stuck during unnecessary index maintenance. [#90030](https://github.com/openclaw/openclaw/pull/90030) Related [#90023](https://github.com/openclaw/openclaw/issues/90023). Thanks @ruben2000de, @sahibzada-allahyar.
+- Gateway and embedded TUI startup now reclaim old session temporary files left by hard shutdowns, reducing hidden disk growth while preserving fresh or potentially recoverable state. [#90503](https://github.com/openclaw/openclaw/pull/90503) Thanks @sahibzada-allahyar.
+- Shared group and channel transcripts now retain the sender ID, display name, and username for each durable user turn, making later history and memory processing correctly attribute participants. [#90552](https://github.com/openclaw/openclaw/pull/90552) Thanks @pick-cat.
+- `/export-session` now warns when a CLI- or ACP-backed export contains only user messages and points users to the backend transcript for missing assistant, tool, usage, and cost details. [#90867](https://github.com/openclaw/openclaw/pull/90867) Thanks @tank-x3, @vincentkoc, @xydigit-sj.
+- Long-running gateways can clear stale one-shot model-check sessions before they crowd out real conversation history, with dedicated CLI reporting for review. [#91057](https://github.com/openclaw/openclaw/pull/91057) Thanks @jalehman, @wangwllu.
+- `openclaw export-trajectory` and `/export-trajectory` now include redacted messages from older version 1 sessions instead of producing a successful but empty transcript. [#93814](https://github.com/openclaw/openclaw/pull/93814) Thanks @yetval.
+- Session-memory files created around `/new` and `/reset` now keep one copy of each assistant reply instead of duplicating reasoning-model responses. [#94401](https://github.com/openclaw/openclaw/pull/94401) Thanks @sallyom, @sunnyshu0925.
+- Newly promoted long-term memories now omit raw transcript, summary, session-header, flush-prompt, and scoring clutter so useful notes are easier to find. [#94636](https://github.com/openclaw/openclaw/pull/94636) Thanks @josephur, @pinghe-learn, @tayoun.
+- Long CJK-heavy sessions using a context engine such as lossless-claw no longer stop on a false `prompt too large` precheck after the engine has already managed the prompt. [#95342](https://github.com/openclaw/openclaw/pull/95342) Thanks @jalehman, @mpz4life.
+- Large Chinese, Japanese, and Korean tool results are now estimated more accurately, reducing false context-overflow interruptions and premature compaction. [#95447](https://github.com/openclaw/openclaw/pull/95447) Thanks @moguangyu5-design, @vincentkoc.
+- `openclaw doctor --fix` can now carry legacy Memory Core indexes from 2026.6.9 upgrades into the current store without forcing a full re-embed. [#95631](https://github.com/openclaw/openclaw/pull/95631) Thanks @mushuiyu886, @vincentkoc.
+- Aborted or timed-out embedded runs now release their session write lock, so the next message can proceed without minutes of waiting or manual file cleanup. [#96100](https://github.com/openclaw/openclaw/pull/96100) Thanks @richwilson-bloom, @sallyom, @xialonglee.
+- Prompts containing fullwidth East Asian characters now receive more accurate size estimates, allowing context management to start before an oversized request reaches the model. [#96442](https://github.com/openclaw/openclaw/pull/96442) Thanks @lin-hongkuan.
+- Dreaming now keeps deleted or reset transcript archives and cron-created child conversations out of its learned session set, reducing duplicate history and automation noise without removing retained archives from historical search. [#96517](https://github.com/openclaw/openclaw/pull/96517) Thanks @adam-researchh, @jalehman, @xialonglee.
+- Compacted agent history now lists genuine tool failures instead of repeatedly mislabeling successful subagent launches, including when older transcript records contain the incorrect error flag. [#96842](https://github.com/openclaw/openclaw/pull/96842) Thanks @nxmxbbd.
+- Replies that span an automatic daily or idle reset now remain together in one accessible transcript instead of losing later output. [#97164](https://github.com/openclaw/openclaw/pull/97164) Thanks @joshavant, @yetval.
+- Invalid transcript entries now raise a visible write error instead of becoming `undefined` JSONL lines that silently vanish after reload. [#97356](https://github.com/openclaw/openclaw/pull/97356) Thanks @miorbnli.
+- Memory Wiki import summaries now shorten ChatGPT text containing emoji without leaving corrupted replacement characters. [#97362](https://github.com/openclaw/openclaw/pull/97362) Thanks @mushuiyu886.
+- `openclaw sessions cleanup --fix-missing` now preserves fresh cron sessions with valid transcripts and clearly reports repaired entries. [#97495](https://github.com/openclaw/openclaw/pull/97495) Thanks @qingminglong.
+- Long conversations now recover compaction after transient provider disconnects instead of replacing useful history with a degraded placeholder summary. [#97504](https://github.com/openclaw/openclaw/pull/97504) Thanks @hugenshen.
+- Automatic recovery from provider role-ordering conflicts now archives the complete prior transcript as a timestamped JSONL file before replaying a shorter tail. [#97544](https://github.com/openclaw/openclaw/pull/97544) Thanks @yungchentang.
+- Long conversations using `historyLimit` or `dmHistoryLimit` now retain their saved earlier summary after compaction, helping the assistant remember prior context. [#97591](https://github.com/openclaw/openclaw/pull/97591) Thanks @liuhao1024, @yetval.
+- Resuming work from a project now opens only that project's saved agent session, preventing unrelated transcripts from being mixed together. [#97785](https://github.com/openclaw/openclaw/pull/97785) Related [#96542](https://github.com/openclaw/openclaw/issues/96542). Thanks @qingminglong, @yetval.
+- `openclaw memory status` now warns when session transcripts still need indexing instead of incorrectly reporting memory as current. [#97857](https://github.com/openclaw/openclaw/pull/97857) Related [#97814](https://github.com/openclaw/openclaw/issues/97814). Thanks @che10x, @zw-xysk.
+- Compacted group conversations now retain identical long messages from different participants while still removing accidental duplicate retries from the same sender. [#98336](https://github.com/openclaw/openclaw/pull/98336) Thanks @sunnyshu0925, @yetval.
+- Recurring provider-CLI cron jobs and local `openclaw agent` runs now keep their existing provider conversation across the daily reset boundary instead of silently losing context. [#98356](https://github.com/openclaw/openclaw/pull/98356) Thanks @yetval.
+- Transcript summary and import reads now close files reliably after malformed data, preventing long-running processes from gradually exhausting file handles. [#98493](https://github.com/openclaw/openclaw/pull/98493) Related [#98467](https://github.com/openclaw/openclaw/issues/98467). Thanks @wangmiao0668000666, @zhanglei99586.
+- Rerunning memory-wiki synthesis or ChatGPT imports no longer risks erasing handwritten notes, frontmatter, or import state when an existing page cannot be read briefly. [#98787](https://github.com/openclaw/openclaw/pull/98787) Thanks @vincentkoc, @yetval.
+- Discord, WebChat, and other ongoing conversations can keep receiving replies when background activity touches the same session during reply startup, without a false initialization conflict or dropped message. [#98835](https://github.com/openclaw/openclaw/pull/98835) Related [#98672](https://github.com/openclaw/openclaw/issues/98672). Thanks @aaronfaby, @jalehman, @moguangyu5-design.
+- Reopened sessions can now replay older string or single-object tool results correctly instead of treating successful output as empty or failing on its stored shape. [#98891](https://github.com/openclaw/openclaw/pull/98891) Related [#98825](https://github.com/openclaw/openclaw/issues/98825). Thanks @obviyus.
+- Older or imported sessions with plain-string assistant messages now replay correctly across provider and streaming paths instead of sending malformed conversation history. [#98908](https://github.com/openclaw/openclaw/pull/98908) Thanks @obviyus.
+- Agents in long-running WebChat, Discord, and other direct sessions can keep reading fresh command, file, browser, and status output instead of seeing it disappear or turn into an image placeholder. [#98955](https://github.com/openclaw/openclaw/pull/98955) Related [#98874](https://github.com/openclaw/openclaw/issues/98874). Thanks @lamkan0210, @momothemage.
+- Resetting a multi-agent room now restores message delivery promptly instead of blocking most agents' acknowledgement and queued replies for several minutes. [#99091](https://github.com/openclaw/openclaw/pull/99091) Thanks @gorkem2020, @zengwen-dt.
+- Long Codex conversations with heavy tool use can now compact at a real history boundary and continue with relevant tool results summarized instead of retaining the full transcript. [#99391](https://github.com/openclaw/openclaw/pull/99391) Related [#99375](https://github.com/openclaw/openclaw/issues/99375). Thanks @imchloe92, @lzy3538.
+- Rapid follow-ups in the same chat no longer freeze both messages while the first automatic reply is finishing. [#99549](https://github.com/openclaw/openclaw/pull/99549) Thanks @shagrat2.
+- Claude CLI-backed interactive replies now keep their saved session more consistently, preserving continuity and reducing repeated full-history replay. [#99595](https://github.com/openclaw/openclaw/pull/99595) Related [#99372](https://github.com/openclaw/openclaw/issues/99372). Thanks @obviyus.
+- CLI-backed agents in multi-person group chats now retain conversational context when participants alternate, without expanding non-owner tool permissions. [#99640](https://github.com/openclaw/openclaw/pull/99640) Related [#99633](https://github.com/openclaw/openclaw/issues/99633). Thanks @obviyus.
+- Claude CLI chat history reloads no longer display OpenClaw's internal reseed wrapper as if it were a message the user typed. [#99653](https://github.com/openclaw/openclaw/pull/99653) Related [#99646](https://github.com/openclaw/openclaw/issues/99646). Thanks @harjothkhara, @jeehut, @vincentkoc, @zoowh.
+- Local-model sessions now retain auto-compaction bookkeeping, reducing repeated context refills and the unresponsive behavior they could cause. [#99678](https://github.com/openclaw/openclaw/pull/99678) Related [#99677](https://github.com/openclaw/openclaw/issues/99677). Thanks @headbouyjb, @vincentkoc.
+- CLI-backed group agents now keep one warm conversation across mentioned and unmentioned follow-ups instead of resetting and losing context. [#99722](https://github.com/openclaw/openclaw/pull/99722) Related [#99696](https://github.com/openclaw/openclaw/issues/99696). Thanks @obviyus.
+- Long, tool-heavy agent sessions now preserve the newest command, file, or browser result for the model while shortening older history first. [#99756](https://github.com/openclaw/openclaw/pull/99756) Thanks @acosx.
+- CLI-backed agents now keep conversation continuity across prompt-only changes, avoiding needless cold starts while still resetting when security or runtime conditions require it. [#99822](https://github.com/openclaw/openclaw/pull/99822) Related [#99729](https://github.com/openclaw/openclaw/issues/99729). Thanks @obviyus.
+- Imported Claude CLI history now keeps image-only and attachment-bearing turns visible when removing empty legacy reseed text. [#99839](https://github.com/openclaw/openclaw/pull/99839) Thanks @vincentkoc.
+- Claude CLI model fallback now carries the prior tool-call trail alongside tool results, giving the replacement model enough context to continue coherently. [#99851](https://github.com/openclaw/openclaw/pull/99851) Thanks @vincentkoc.
+- Long cached Anthropic tool sessions now compact near the configured context threshold instead of interrupting work early because cumulative cache tokens looked like live context. [#99864](https://github.com/openclaw/openclaw/pull/99864) Thanks @jrex-jooni, @lzy3538, @vincentkoc.
+- Long-lived agents with large context windows now retain fresh tool output, compact under aggregate pressure, and warn users to run `/compact` or `/new` if pressure persists. [#100077](https://github.com/openclaw/openclaw/pull/100077) Thanks @obviyus.
+- Long-running agents can now recover full command output and truncated `web_fetch` content after history cleanup, reducing repeated expensive work and lost page context. [#100135](https://github.com/openclaw/openclaw/pull/100135) Thanks @obviyus.
+- Transcript-backed history now treats a missing file as empty while reporting real access, directory, or stream failures cleanly instead of leaving partial or unhandled results. [#100524](https://github.com/openclaw/openclaw/pull/100524) Thanks @cxbasdev, @zhanglei99586.
+- Temporary memory-maintenance failures no longer replace the agent reply, and persistently oversized sessions can recover in a fresh session while preserving the previous transcript. [#100618](https://github.com/openclaw/openclaw/pull/100618) Thanks @jerry-xin, @rhclaw.
+- Small-context local models can now begin and continue conversations without immediately entering an overflow-compaction loop before useful prompt space is available. [#100621](https://github.com/openclaw/openclaw/pull/100621) Thanks @vincentkoc.
+- Long sessions that compact in stages now preserve clearer older-to-newer ordering when summaries are combined, reducing the chance that stale context appears equally recent. [#100684](https://github.com/openclaw/openclaw/pull/100684) Thanks @vincentkoc, @zw-xysk.
+- Transient transcript read failures no longer destabilize session-log diagnostics or let an incomplete usage scan overwrite the last complete cost cache as though it were current. [#101062](https://github.com/openclaw/openclaw/pull/101062) Thanks @cxbasdev, @vincentkoc.
+- Context-engine plugins can now identify the exact session that continues after compaction while older integrations using `sessionFile` remain compatible. [#101182](https://github.com/openclaw/openclaw/pull/101182) Thanks @jalehman.
+- A first command-only interaction in an auto-reply flow now keeps its session update even when no session row existed beforehand. [76d686c](https://github.com/openclaw/openclaw/commit/76d686cf61f29b4b26ef67066d0b88f405ddfe5c)
+- Memory Core now preserves short standalone concepts such as `kv` and `s3` in tags, improving recall without matching them inside unrelated words. [#96304](https://github.com/openclaw/openclaw/pull/96304) Thanks @ly-wang19.
+- Memory dreaming now records structured success or failure outcomes for light, REM, and deep phases so dashboards and health checks can monitor them reliably. [#97723](https://github.com/openclaw/openclaw/pull/97723) Thanks @lg320531124, @momothemage.
+- `openclaw wiki lint` now ignores wikilink-like patterns inside code examples so real broken Memory Wiki links are easier to spot. [#97954](https://github.com/openclaw/openclaw/pull/97954) Thanks @durambar, @liuhao1024, @vincentkoc.
+- Mac users now get stronger protection for local OpenClaw SQLite data after abrupt power loss or an operating-system crash, with no configuration change. [#99067](https://github.com/openclaw/openclaw/pull/99067) Thanks @ooiuuii.
+- `openclaw wiki lint` now recognizes valid imported Obsidian links by title, slug, fragment-free path, or source-path suffix, reducing false broken-link warnings. [#100017](https://github.com/openclaw/openclaw/pull/100017) Thanks @ishangodawatta, @k-kerrigan, @vincentkoc.
+- Memory-wiki bridge status now returns a usable warning instead of crashing on malformed plugin artifacts, and `readMemoryArtifacts: false` now reliably prevents those reads. [#100900](https://github.com/openclaw/openclaw/pull/100900) Thanks @huveewomg.
+- Wiki search and retrieval now explain when an older or partial memory plugin lacks shared-search support and offer a practical workaround instead of exposing a raw TypeError. [#100902](https://github.com/openclaw/openclaw/pull/100902) Thanks @huveewomg, @vincentkoc, @xuanmingguo.
+- Embedded agents now receive well-formed summaries of long media or JSON values instead of broken characters at Unicode truncation boundaries. [#101311](https://github.com/openclaw/openclaw/pull/101311) Thanks @alix-007.
+- Memories containing emoji or supplementary CJK characters can now be indexed without malformed text stalling the operation. [#101574](https://github.com/openclaw/openclaw/pull/101574) Thanks @jensenwang560-blip.
+- When both a primary memory read and its wiki supplement fail, `memory_get corpus=all` now returns the original structured read error instead of crashing the tool call. [#101902](https://github.com/openclaw/openclaw/pull/101902) Thanks @aniruddhaadak80, @vincentkoc, @zw-xysk.
+- Memory-index debug logs now show whether an embedding batch completed or failed, making indexing problems easier to trace. [#94732](https://github.com/openclaw/openclaw/pull/94732) Thanks @doubleji817-lang, @xydt-tanshanshan.
+- `openclaw memory status --fix` now repairs session-corpus state without mistaking healthy daily-memory records for stale data. [#93389](https://github.com/openclaw/openclaw/pull/93389) Thanks @alix-007, @vincentkoc.
+- `openclaw memory status` no longer shows impossible session indexing totals where the indexed file count exceeds the total file count. [#95452](https://github.com/openclaw/openclaw/pull/95452) Thanks @buyitsydney, @liuhao1024.
+- Malformed transcript rows now produce an aggregate warning with skipped and loaded counts while the remaining usable session history continues to load. [#98669](https://github.com/openclaw/openclaw/pull/98669) Thanks @cxbasdev.
+- Sessions renamed with `/name` now keep that custom name in session lists instead of reverting to an automatic title or UUID-like label. [#98841](https://github.com/openclaw/openclaw/pull/98841) Related [#98742](https://github.com/openclaw/openclaw/issues/98742). Thanks @bsg2000, @sunnyshu0925.
+- Preparing a reset for a long-running session now avoids scanning the entire transcript, reducing startup file activity and memory use as history grows. [#99335](https://github.com/openclaw/openclaw/pull/99335) Thanks @gmschasiepen, @momothemage.
+- Transcript tools can now identify channel delivery mirrors as OpenClaw bookkeeping rather than mistaking them for OpenAI Responses output. [#99855](https://github.com/openclaw/openclaw/pull/99855) Thanks @vincentkoc.
+- A successfully completed main-agent conversation now continues in the same session on the next message instead of unexpectedly resetting and archiving its transcript. [#99985](https://github.com/openclaw/openclaw/pull/99985) Thanks @sunnyshu0925.
+- Debug-proxy ACP runs now shut down cleanly, mark capture sessions finished, and close their capture databases without reporting a spurious database error. [#100827](https://github.com/openclaw/openclaw/pull/100827) Thanks @amknight.
+- Media-provider audit details containing emoji now remain valid and readable when shortened, instead of ending with malformed characters. [#101298](https://github.com/openclaw/openclaw/pull/101298) Thanks @alix-007.
+- Long agent prompt data containing emoji or other paired Unicode characters now stays well-formed when capped, avoiding broken text in agent and automation context. [#101303](https://github.com/openclaw/openclaw/pull/101303) Thanks @alix-007.
+- Archived memories around user messages that begin with `[cron:]` remain searchable after a session reset or deletion, while genuine cron-generated archives stay hidden. [#101322](https://github.com/openclaw/openclaw/pull/101322) Thanks @ly-wang19.
+- `openclaw sessions tail` now rejects oversized trajectory snapshots and updates with a clear limit error before they can exhaust memory. [#101450](https://github.com/openclaw/openclaw/pull/101450) Thanks @cxbasdev, @vincentkoc.
+- Long usage and session log messages now truncate emoji cleanly instead of displaying malformed character artifacts. [#101517](https://github.com/openclaw/openclaw/pull/101517) Thanks @maweibin.
+- Dashboard session labels and display names now remain attached when a session rolls over after a day or idle period. [#101576](https://github.com/openclaw/openclaw/pull/101576) Thanks @merlin-zhou, @zengwen-dt.
+- Session-memory diagnostics now show the correct workspace and memory-file paths for sibling directories whose names merely resemble the user's home path. [#101577](https://github.com/openclaw/openclaw/pull/101577) Thanks @cxbasdev.
+
+
+
+## Agents, background work, and connections
+
+### Keeping work moving and replies delivered
+
+The [Gateway](/gateway) now starts, connects, reloads, and reports health with clearer behavior across configuration, networking, task routing, and result delivery. Agents are less likely to lose their selected workspace or conversation, background work reaches the right destination more consistently, and tool failures can stay out of chat progress when a useful final reply is still available.
+
+The [Gateway protocol](/gateway/protocol) and [restart recovery](/gateway/restart-recovery) paths also reject invalid state more clearly and keep inspection available during common lifecycle failures. Skill loading and prompt overhead are steadier as well, with [skill controls](/cli/skills) avoiding unnecessary work and preserving cache fingerprints for the text providers actually receive.
+
+
+
+- Legacy subagent sessions now follow their actual nesting level, so nested-agent limits and controls no longer fall back to top-level behavior. [#54593](https://github.com/openclaw/openclaw/pull/54593) Thanks @ruanrrn.
+- Timed-out cron jobs, expired agent requests, and disconnected HTTP clients now stop promptly instead of spending more time and provider calls on model fallback. [#62682](https://github.com/openclaw/openclaw/pull/62682) Thanks @altaywtf, @cinapbot, @simonusa.
+- Channel replies can now continue as soon as an embedded-agent turn finishes instead of waiting roughly 50 seconds for post-run authentication bookkeeping. [#85829](https://github.com/openclaw/openclaw/pull/85829) Thanks @turbotheturtle.
+- Provider failures that contain BigInt, circular objects, or other unusual values now produce the intended structured transport error instead of crashing the error-reporting path. [#88401](https://github.com/openclaw/openclaw/pull/88401) Thanks @pluviobyte.
+- Experimental local-model lean mode now offers a smaller default tool menu for constrained models, while operators can explicitly retain media, voice, or PDF tools through allowlists. [#88881](https://github.com/openclaw/openclaw/pull/88881) Thanks @vincentkoc.
+- Embedded agents now retain configured compaction reserve limits when runtime safeguards save settings, reducing unexpected context-budget shrinkage during long work. [#92237](https://github.com/openclaw/openclaw/pull/92237) Thanks @sercada.
+- Subagent completion notices now arrive once instead of being repeated when the requesting session changes during delivery. [#92274](https://github.com/openclaw/openclaw/pull/92274) Related [#91527](https://github.com/openclaw/openclaw/issues/91527). Thanks @fsdwen, @obviyus, @zackchiutw.
+- Isolated cron jobs can announce a cross-session result without feeding the recipient's reply back into the cron run and creating duplicate message loops. [#92283](https://github.com/openclaw/openclaw/pull/92283) Related [#92257](https://github.com/openclaw/openclaw/issues/92257). Thanks @harjothkhara, @nailujac, @vincentkoc.
+- Telling an agent to remember a preference no longer triggers the unrelated warning used for promises to schedule an automatic reminder. [#93862](https://github.com/openclaw/openclaw/pull/93862) Thanks @arkyu2077.
+- Slack and similar channel turns with context-injecting plugins now send each inbound system label to the model once instead of duplicating it. [#95349](https://github.com/openclaw/openclaw/pull/95349) Thanks @gorkem2020, @openperf, @vincentkoc.
+- Anthropic sessions stuck on a thinking-signature replay error can now retry once without invalid thinking blocks and continue without `/new` or transcript repair. [#95430](https://github.com/openclaw/openclaw/pull/95430) Related [#95429](https://github.com/openclaw/openclaw/issues/95429). Thanks @alexelgier, @lzyyzznl, @vincentkoc.
+- Truncated agent logs and diagnostic previews now keep emoji and other extended Unicode characters intact at the cutoff. [#96296](https://github.com/openclaw/openclaw/pull/96296) Thanks @ly-wang19.
+- Embedded `openclaw agent --local` runs using OpenAI-compatible providers now report and save streamed token usage instead of showing zero, improving session, context, cost, and monitoring records. [#96523](https://github.com/openclaw/openclaw/pull/96523) Thanks @ly85206559, @vincentkoc.
+- Successful embedded-agent subagent launches now remain successful in transcripts and later compaction summaries instead of being recorded as tool failures, while real launch failures stay visible. [#96851](https://github.com/openclaw/openclaw/pull/96851) Thanks @neomail2, @parveshsaini.
+- Codex-runtime transcripts and compaction summaries now keep successful subagent launches and goal operations out of failure records, while genuine failures remain visible and accepted-launch hooks can run. [#96856](https://github.com/openclaw/openclaw/pull/96856) Thanks @nxmxbbd.
+- Long agent grep lines now truncate emoji and uncommon CJK characters cleanly instead of ending with corrupted replacement symbols. [#97559](https://github.com/openclaw/openclaw/pull/97559) Thanks @zenglingbiao.
+- Telegram PDFs and other documents now provide agents with a usable local path so normal runner tools can open the attachment. [#97647](https://github.com/openclaw/openclaw/pull/97647) Thanks @gallup007, @joshavant.
+- Agents can now read structured JSON and resource tool results during provider replay instead of receiving an empty result or generic media placeholder. [#97742](https://github.com/openclaw/openclaw/pull/97742) Thanks @obviyus.
+- Sessions with large command output or summaries now compact before exceeding the model context, avoiding failed provider requests and misleading token budgets. [#97861](https://github.com/openclaw/openclaw/pull/97861) Thanks @yetval.
+- Long tool-heavy or compacted sessions now budget the real size of command output and summaries before sending a prompt, reducing context overflow failures. [#97928](https://github.com/openclaw/openclaw/pull/97928) Related [#97927](https://github.com/openclaw/openclaw/issues/97927). Thanks @liuhao1024, @yetval.
+- Claude CLI conversations that exhaust their context now recover into a fresh reseeded session automatically, and timeout retries retain the temporary files they need to complete. [#98934](https://github.com/openclaw/openclaw/pull/98934) Related [#98897](https://github.com/openclaw/openclaw/issues/98897). Thanks @obviyus.
+- Local Ollama-backed CLI agent turns can now continue when the context engine reports an already-compacted transcript, allowing the assistant or MCP tool result to reach the user. [#99136](https://github.com/openclaw/openclaw/pull/99136) Thanks @mushuiyu886, @peterskwang, @pkoserowski, @psedd.
+- Codex-backed runs can now deliver a completed final answer instead of timing out or appearing aborted when the final completion event is missing. [#99217](https://github.com/openclaw/openclaw/pull/99217) Thanks @100yenadmin, @fuller-stack-dev, @sedrak-hovhannisyan.
+- Interactive chat requests that end in a terminal failure now receive one visible error response instead of appearing to be ignored. [#99304](https://github.com/openclaw/openclaw/pull/99304) Thanks @grox2012, @moeedahmed.
+- Successfully started subagents now remain visible in `/subagents list` and `subagents(action="list")`, including when different sessions own control and completion. [#99410](https://github.com/openclaw/openclaw/pull/99410) Related [#75593](https://github.com/openclaw/openclaw/issues/75593). Thanks @aaajiao, @sheyanmin.
+- Codex app-server agents can again list allowed agents, spawn OpenClaw or ACP subagents, and yield during delegated work without resumed heartbeats hitting incompatible tool definitions. [#99561](https://github.com/openclaw/openclaw/pull/99561) Related [#99464](https://github.com/openclaw/openclaw/issues/99464). Thanks @100yenadmin, @joshavant.
+- OpenClaw no longer crashes when a supervised child output stream fails immediately after launch. [#99802](https://github.com/openclaw/openclaw/pull/99802) Thanks @cxbasdev, @vincentkoc.
+- MCP stdio sessions now report stderr pipe failures as transport errors without taking down OpenClaw or losing available diagnostics. [#99803](https://github.com/openclaw/openclaw/pull/99803) Thanks @cxbasdev, @vincentkoc.
+- ACPX MCP proxies now turn closed input or output pipes into a clear proxy failure instead of an uncaught Node stream crash. [#99852](https://github.com/openclaw/openclaw/pull/99852) Thanks @sunlit-deng, @vincentkoc.
+- Images attached to a CLI-backed prompt now survive embedded-model fallback, preserving the visual context needed to answer. [#99891](https://github.com/openclaw/openclaw/pull/99891) Thanks @vincentkoc.
+- Messages mixing inline and offloaded images now preserve every attachment position so model instructions that depend on sequence remain accurate. [#99902](https://github.com/openclaw/openclaw/pull/99902) Thanks @vincentkoc.
+- Requester agents now receive a follow-up when an accepted `sessions_send` delivery later fails because the target session is locked, so they can retry or choose another route. [#99907](https://github.com/openclaw/openclaw/pull/99907) Thanks @849261680, @alex-heyuqing.
+- Operators can now set `OPENCLAW_SANDBOX_IMAGE` to build revision-specific sandbox image tags for controlled rollout and rollback. [#99915](https://github.com/openclaw/openclaw/pull/99915)
+- Agent sessions are less likely to lose output, alter unrelated formatting, stall after temporary provider errors, reject BMP images, or drop longer ChatGPT connections. [#99949](https://github.com/openclaw/openclaw/pull/99949)
+- Images from the current prompt now reach CLI fallback attempts in the right order, without pulling stale image references from earlier retries or history. [#100035](https://github.com/openclaw/openclaw/pull/100035) Thanks @vincentkoc.
+- Long Claude CLI-backed runs now show honest `Thinking... (~N tokens)` activity for direct and queued work instead of appearing stalled when readable reasoning text is unavailable. [#100148](https://github.com/openclaw/openclaw/pull/100148) Thanks @obviyus.
+- Edge-case fixes now preserve literal memory text and valid Unicode, improve voice-call cleanup and port checks, report Claude models and context limits accurately, and retain useful ClickClack connection errors. [#100204](https://github.com/openclaw/openclaw/pull/100204) Thanks @cxbasdev, @harjothkhara, @lilan0125, @lin-hongkuan, @liuhao1024, @mikasa0818, @pandah97, @sunlit-deng, @zoowh.
+- Emoji and other supplementary characters now remain intact when long agent progress or active-memory recall text is shortened. [#100244](https://github.com/openclaw/openclaw/pull/100244) Thanks @vincentkoc, @xialonglee, @zengwen-dt.
+- Sub-agents and other HTTP loopback MCP clients can again receive browser screenshots and valid image or embedded-resource results without schema failures. [#100336](https://github.com/openclaw/openclaw/pull/100336) Thanks @tzy-17.
+- Interactive turns that truly end without visible output now send a clear failure reply, while intentional silence and already-completed actions remain quiet. [#100474](https://github.com/openclaw/openclaw/pull/100474)
+- Batched media replies can now finish successfully after delivery without a misleading session-change failure, while active conversation ownership checks remain enforced. [#100490](https://github.com/openclaw/openclaw/pull/100490) Thanks @scotthuang.
+- Fresh Claude CLI workspaces now run a pending `BOOTSTRAP.md` on the first reply so required identity, memory, and setup steps are completed before normal conversation. [#100560](https://github.com/openclaw/openclaw/pull/100560) Thanks @bill-starfoundry, @kruegerb, @vincentkoc.
+- Completed answers from tool-using tasks now reach the user instead of being replaced by an incomplete-turn error, with run metadata attached to the same final response. [#100655](https://github.com/openclaw/openclaw/pull/100655) Thanks @liuwqgit.
+- Shell snapshot capture and validation no longer crash OpenClaw when an unused helper-process output pipe reports a stream error. [#100744](https://github.com/openclaw/openclaw/pull/100744) Thanks @lsr911, @vincentkoc.
+- A node-host `system.run` stream failure now returns a clear failed result instead of crashing the node host, and a child that will not stop is terminated after one second. [#100849](https://github.com/openclaw/openclaw/pull/100849) Thanks @cxbasdev.
+- Long-running agents are less likely to lose workspace instructions such as `AGENTS.md`, `SOUL.md`, or `MEMORY.md` for a turn during a temporary filesystem error. [#100910](https://github.com/openclaw/openclaw/pull/100910) Thanks @masatohoshino.
+- Docker-backed sandbox file and shell commands now fail promptly with the original input-stream error instead of crashing, hanging, or remaining pending. [#101032](https://github.com/openclaw/openclaw/pull/101032) Thanks @cxbasdev.
+- Existing Codex sessions can resume their bound threads more reliably after upgrades, resets, and compaction without depending on leftover transcript-side JSON files. [#101210](https://github.com/openclaw/openclaw/pull/101210)
+- Lean local-model agents can now choose the familiar `exec` tool directly when policy permits it, while existing allowlists, sandboxing, approvals, and hooks still govern command execution. [#101607](https://github.com/openclaw/openclaw/pull/101607) Thanks @vincentkoc.
+- Shortened text across CLI output, diagnostics, plugin messages, previews, errors, task summaries, and Zalo sends now preserves complete emoji and other supplementary characters. [#101654](https://github.com/openclaw/openclaw/pull/101654) Thanks @lsr911, @maweibin, @wm0018.
+- Long names, labels, summaries, previews, titles, and diagnostics across OpenClaw now truncate without splitting emoji or other supplementary Unicode characters. [#101685](https://github.com/openclaw/openclaw/pull/101685) Thanks @lsr911, @ly85206559, @maweibin, @wings1029.
+- Bounded text in Parallel searches, compaction, telemetry, presence, Workboard, badges, and Control UI metadata now keeps or omits whole Unicode characters instead of leaving malformed fragments. [#101711](https://github.com/openclaw/openclaw/pull/101711)
+- Long streamed replies now split only between complete Unicode characters, preserving emoji in plain text and fenced Markdown even at tight message limits. [#104441](https://github.com/openclaw/openclaw/pull/104441) Thanks @mushuiyu886.
+- Embedded agent runs that omit a session key now retain the intended fallback session context more reliably. [31a65e0](https://github.com/openclaw/openclaw/commit/31a65e0647ae85eb4c9048051145f07003722caf) Thanks @vincentkoc.
+- Long status messages and command output now stay readable when shortened, without splitting emoji or non-English characters into corrupted text. [2e7ffca](https://github.com/openclaw/openclaw/commit/2e7ffca8fff001d1d962611a70d76640c920fc6f) Thanks @vincentkoc.
+- Using `/stop` during a late-aborting prompt no longer leaves a stale session lock that blocks the next turn in the same conversation. [f8016c4](https://github.com/openclaw/openclaw/commit/f8016c44a4ba44ba2865938bcb4f7248a91d76fe)
+- A malformed custom tool in realtime Talk no longer removes the built-in consult tool or other valid custom tools from the session. [170150a](https://github.com/openclaw/openclaw/commit/170150a306e39204ebe1ab7be47450b73005de1f) Thanks @vincentkoc.
+- Busy or slower hosts now give Codex native permission checks and pre-tool hooks more time to finish, reducing dropped policy decisions. [123ec16](https://github.com/openclaw/openclaw/commit/123ec165bb5638ea9587c9e72566c081159bce5c) Thanks @vincentkoc.
+- A yielded Codex native subagent's completion now reaches its parent run before the shared app-server connection is cleaned up. [2f89de8](https://github.com/openclaw/openclaw/commit/2f89de81655accf71f5fac5cdabcdf0c3488eab7) Thanks @vincentkoc.
+- Long agent runs can now resume from a valid conversation boundary after compaction recovery instead of wedging or incorrectly demoting the selected model. [486033b](https://github.com/openclaw/openclaw/commit/486033b18344d134d089e654ab0dbb278ce69008) Thanks @mettlyz11, @neltomw, @obviyus.
+- Embedded agent jobs with an explicitly longer timeout now keep their lane until that requested deadline instead of being recovered at the default limit. [1437512](https://github.com/openclaw/openclaw/commit/143751282c60a34a6e2ad6c5629f421441929993) Thanks @vincentkoc.
+- A successfully delivered heartbeat notification no longer leaves stale recovery state that can block later heartbeat alerts or check-ins. [#83187](https://github.com/openclaw/openclaw/pull/83187) Thanks @agocs.
+- A Codex reply delivered through `sourceReplyDeliveryMode: "message_tool_only"` now completes its turn promptly instead of later ending as an incomplete reply. [#95942](https://github.com/openclaw/openclaw/pull/95942) Thanks @omarshahine.
+- Local-model conversations now retain reusable prompt work when switching between interactive chats and background jobs, avoiding repeated multi-minute warm-up delays. [#98267](https://github.com/openclaw/openclaw/pull/98267) Related [#98261](https://github.com/openclaw/openclaw/issues/98261). Thanks @headbouyjb.
+- Mobile, WebChat, consult, and other `chat.send` clients can apply a one-time thinking level without losing the assistant reply or having the message mistaken for a text command. [#98855](https://github.com/openclaw/openclaw/pull/98855) Thanks @jesse-merhi.
+- Sandboxed auto-replies now wait for remote media copied over SCP to finish and report transfer failures without crashing or cleaning up too early. [#100861](https://github.com/openclaw/openclaw/pull/100861) Thanks @cxbasdev.
+- Codex app-server installations using the retired `on-failure` approval policy now upgrade to the supported `on-request` behavior without losing saved bindings. [70153f7](https://github.com/openclaw/openclaw/commit/70153f7f9c12be2ff025802c019e428047d1f579) Thanks @vincentkoc.
+- Existing Codex app-server conversations with dynamic tools can resume through the tool-fingerprint format upgrade instead of starting an avoidable replacement thread. [3051748](https://github.com/openclaw/openclaw/commit/305174845f38f075bfd5096a0a4912b8d7d2559a) Thanks @vincentkoc.
+- Legacy Codex bindings with large tool or MCP configurations can now migrate without overflowing plugin-state records or copying raw configuration secrets. [23228b6](https://github.com/openclaw/openclaw/commit/23228b67a47bf32fc9b662d13037757f51d329b8) Thanks @vincentkoc.
+- Upgraded Codex installations can now finish legacy binding migration and archive old sidecars instead of repeatedly retaining them after an earlier partial import. [39fac06](https://github.com/openclaw/openclaw/commit/39fac06f48745dcd4d7a840f8261631614bb1926) Thanks @vincentkoc.
+- Codex sessions created in beta 5 can keep their existing conversation after upgrade when the user MCP configuration is unchanged, without retaining its authorization token. [272750d](https://github.com/openclaw/openclaw/commit/272750daed354029c1968dce7cd6747163e0957a) Thanks @vincentkoc.
+- Completed or expired exec approvals no longer add misleading follow-up warnings, making the remaining dispatch warnings more useful for spotting real delivery failures. [#66685](https://github.com/openclaw/openclaw/pull/66685) Thanks @pfrederiksen.
+- Large agent and subagent workloads now place less memory pressure on the Gateway because completed run snapshots are bounded while results still remain available to active waiters. [#77973](https://github.com/openclaw/openclaw/pull/77973) Related [#77976](https://github.com/openclaw/openclaw/issues/77976). Thanks @fede-kamel, @vincentkoc.
+- Local Gateway approval read or write failures now return a consistent `UNAVAILABLE` response instead of a generic handler error. [#79861](https://github.com/openclaw/openclaw/pull/79861) Thanks @martins-oss.
+- Parent sessions waiting on a subagent now receive the subagent's actual hard-timeout phase and timestamps instead of a generic timeout. [#89367](https://github.com/openclaw/openclaw/pull/89367) Thanks @pick-cat.
+- Agent requests with several MCP servers now initialize those servers concurrently, shortening the wait before the model begins while isolating slow or failed servers. [#94230](https://github.com/openclaw/openclaw/pull/94230) Thanks @mmyzwl, @vincentkoc.
+- Restarting the Gateway during a deferred channel reload no longer starts the same channel twice, avoiding webhook port conflicts and repeated restart failures. [#94964](https://github.com/openclaw/openclaw/pull/94964) Related [#79487](https://github.com/openclaw/openclaw/issues/79487). Thanks @lzyyzznl, @tseller.
+- External tools can now receive session-scoped Gateway access without process-wide credentials or permission to impersonate another session, forming the secure base for `openclaw attach`. [#96351](https://github.com/openclaw/openclaw/pull/96351) Thanks @anagnorisis2peripeteia, @obviyus.
+- Malformed cyclic attachments can no longer crash subagent delivery-evidence collection, so the reply handoff completes and still returns reachable media URLs. [#97041](https://github.com/openclaw/openclaw/pull/97041) Thanks @pick-cat.
+- A parent session waiting on several subagents now resumes and returns their combined results when the last outstanding work finishes, without requiring the user to send another message. [#97090](https://github.com/openclaw/openclaw/pull/97090) Thanks @galiniliev.
+- Manually spawned ACP child runs now appear once in the task ledger instead of creating duplicate requester-visible rows. [#97131](https://github.com/openclaw/openclaw/pull/97131) Thanks @moeedahmed.
+- A response interrupted mid-tool-call no longer runs or saves that incomplete action, preventing accidental child sessions and other unintended side effects. [#97140](https://github.com/openclaw/openclaw/pull/97140) Thanks @galiniliev.
+- Operators can inspect the effective tools for global sessions assigned to any configured agent, not only the default one. [#97265](https://github.com/openclaw/openclaw/pull/97265) Thanks @pick-cat.
+- Useful JSON, resource data, and CLI tool results now remain visible in transcripts instead of disappearing behind an attachment placeholder. [#97268](https://github.com/openclaw/openclaw/pull/97268)
+- Codex usage-limit previews and plan status labels now truncate emoji and uncommon Unicode cleanly at their display boundaries. [#97299](https://github.com/openclaw/openclaw/pull/97299) Thanks @zenglingbiao.
+- Cancelling an ACP task from the CLI now reaches the live Gateway-owned run, reports real failures, and avoids duplicate active task rows. [#97352](https://github.com/openclaw/openclaw/pull/97352) Thanks @aliahnaf2013-max.
+- An empty non-image tool result no longer becomes `(see attached image)` in OpenAI-compatible agent context, avoiding misleading follow-up behavior. [#97423](https://github.com/openclaw/openclaw/pull/97423) Thanks @scribe-dandelion-cult.
+- APNs relay pushes now reject oversized response bodies as `RelayResponseTooLarge` instead of exhausting Gateway memory or reporting false delivery. [#97550](https://github.com/openclaw/openclaw/pull/97550) Thanks @alix-007.
+- `/subagents list` now shortens long names and task descriptions containing emoji or uncommon CJK characters without displaying broken glyphs. [#97557](https://github.com/openclaw/openclaw/pull/97557) Thanks @zenglingbiao.
+- Provider-owned CLI conversations now keep the same session and transcript across the daily default reset boundary unless an explicit reset policy or `/reset` applies. [#97931](https://github.com/openclaw/openclaw/pull/97931) Thanks @yetval.
+- New Codex-backed threads now preserve configured plugin apps, can activate remote curated plugins, and run Guardian on the first eligible native OpenAI turn. [#98042](https://github.com/openclaw/openclaw/pull/98042) Thanks @kevinslin.
+- A damaged SQLite delivery-queue entry no longer blocks recovery of every other valid queued session or outbound delivery after restart. [#98354](https://github.com/openclaw/openclaw/pull/98354) Thanks @pick-cat.
+- A stuck Claude CLI startup now fails only the affected turn instead of exiting the Gateway, and heartbeat activity no longer causes the next user turn to lose its CLI conversation history. [#98933](https://github.com/openclaw/openclaw/pull/98933) Related [#98894](https://github.com/openclaw/openclaw/issues/98894), [#98895](https://github.com/openclaw/openclaw/issues/98895). Thanks @obviyus.
+- Claude CLI agent runs now fail clearly when messaging tools are unavailable, recover when Claude exits without a result, retain more long-session continuity, and clean up prompt images and failed preparation files. [#99159](https://github.com/openclaw/openclaw/pull/99159) Related [#98946](https://github.com/openclaw/openclaw/issues/98946). Thanks @obviyus.
+- Gateway startup lock failures now clean up partial files and open handles, allowing a later startup to acquire the lock normally. [#99291](https://github.com/openclaw/openclaw/pull/99291) Related [#98958](https://github.com/openclaw/openclaw/issues/98958). Thanks @chenyangjun-xy, @zhanglei99586.
+- Gateway status now reports unavailable SSH cleanly and promptly instead of crashing or waiting indefinitely when tunnel startup fails. [#99800](https://github.com/openclaw/openclaw/pull/99800) Thanks @cxbasdev, @vincentkoc.
+- Stopping a subagent now clears its running task reliably and prevents late completion races from reviving or overwriting the canceled state. [#99806](https://github.com/openclaw/openclaw/pull/99806) Thanks @masatohoshino, @timofa.
+- Agent runs, Doctor, and Gateway tool views now describe access using the same policy that actually governs the run, reducing confusing permission mismatches. [#99817](https://github.com/openclaw/openclaw/pull/99817)
+- Heartbeat and cron work on macOS and Linux is less likely to fail with `Unknown system error -11` when reconnects overlap session or workspace updates. [#100389](https://github.com/openclaw/openclaw/pull/100389) Thanks @ogarciarevett.
+- Gateway event-delivery failures now produce actionable warnings instead of unexplained process-level promise rejections, while unrelated subscriptions keep running. [#100401](https://github.com/openclaw/openclaw/pull/100401) Thanks @cxbasdev.
+- An ACP Gateway event-handler failure now produces a concise diagnostic instead of terminating the ACP process or corrupting protocol output. [#100558](https://github.com/openclaw/openclaw/pull/100558) Thanks @ajwan8998.
+- Gateway startup no longer performs unsolicited provider-auth discovery across every configured agent, helping channels and local commands remain responsive while authentication loads on demand. [#100667](https://github.com/openclaw/openclaw/pull/100667) Thanks @vincentkoc.
+- Trusted Gateway clients can now browse workspace directories and preview supported files, enabling the iOS and Android apps to inspect and share agent output without SSH. [#100738](https://github.com/openclaw/openclaw/pull/100738)
+- Unexpected SSH tunnel diagnostic-stream closure no longer crashes the Gateway during tunnel checks or shutdown. [#100855](https://github.com/openclaw/openclaw/pull/100855) Thanks @cxbasdev, @vincentkoc.
+- Bounded write-scope clients can now rename, pin, archive, categorize, and mark sessions unread without admin access, while user labels and stable list ordering survive refreshes. [#100964](https://github.com/openclaw/openclaw/pull/100964)
+- A runaway `tool_search_code` subprocess can no longer grow Gateway memory without limit through stderr, while failure reports retain the latest useful diagnostic detail. [#101007](https://github.com/openclaw/openclaw/pull/101007) Thanks @hugenshen, @vincentkoc.
+- Built-in grep stream failures now become ordinary tool errors instead of crashing the agent runtime, hanging the search, or leaving incomplete results unexplained. [#101014](https://github.com/openclaw/openclaw/pull/101014) Thanks @cxbasdev.
+- SSH-backed sandbox commands and uploads now stop cleanly, clean up child processes, and preserve the useful error when an input or output stream fails. [#101031](https://github.com/openclaw/openclaw/pull/101031) Thanks @cxbasdev.
+- A disconnected or failing session-history stream no longer crashes the Gateway and interrupts service for everyone else. [#101571](https://github.com/openclaw/openclaw/pull/101571) Thanks @vincentkoc, @zengwen-dt.
+- Gateway startup can now be retried immediately after a configuration-change rejection instead of being blocked for up to five minutes by a stale migration lease. [#103157](https://github.com/openclaw/openclaw/pull/103157)
+- Discord now presents commentary, reasoning, and tool activity in a clearer sequence across queued turns, while loopback MCP clients can attach to one Gateway session with an expiring, revocable token. [35af831](https://github.com/openclaw/openclaw/commit/35af831fd0bc549d9333a197a90abbecbc55ff35) Thanks @dwc1997, @lsr911, @ooiuuii, @romneyda, @solodmd, @vincentkoc, @wendy-chsy, @yeager, @zenglingbiao.
+- After a Gateway restart, a redirected subagent now continues the user's newest instruction instead of returning to stale work. [7b5d86e](https://github.com/openclaw/openclaw/commit/7b5d86e89a5f74bd4c9bac1453d045e4c415a367) Thanks @amittell.
+- Embedded terminals can now open, resize, stream output, and close consistently across the Gateway, Control UI, and native apps. [6601576](https://github.com/openclaw/openclaw/commit/66015762a39030584d6a7cc91fad09f4709f8d3f)
+- Gateway startup channel warnings now use the same plugin manifests as the running startup process, reducing inconsistent warnings and repeated discovery. [10ca94e](https://github.com/openclaw/openclaw/commit/10ca94ef1a6a98a0033574ba537492453b6b3c4f) Thanks @vincentkoc.
+- A wedged provider call now releases its embedded agent lane on a bounded watchdog instead of indefinitely blocking queued work when run timeouts are disabled. [ec28935](https://github.com/openclaw/openclaw/commit/ec289357a450f50491723a86a8a771f5d512541c) Thanks @arismontclair, @obviyus, @patelmm79.
+- Gateway conversations with an orphaned active task can now recover through diagnostics instead of leaving later turns blocked until restart. [b1da734](https://github.com/openclaw/openclaw/commit/b1da734a1e7d5b608d6fccc4b2c0b3f2c9dc9347) Thanks @arismontclair, @obviyus, @ralf003.
+- An agent no longer stays silent after compaction when a plugin's final-answer hook hangs; OpenClaw times out the hook and still delivers the response. [b2baf79](https://github.com/openclaw/openclaw/commit/b2baf799b41edce512b1945b6dec3ad637b9c814) Thanks @dserious, @obviyus, @villa-feng.
+- Gateway startup now skips unnecessary provider thinking-policy work when an explicit setting or model catalog already determines the banner result. [b18af41](https://github.com/openclaw/openclaw/commit/b18af41f52d401223cad5913ed06650828aacdd6)
+- Developers can build against and consume managed-worktree session results from the Gateway protocol package without duplicate-name failures. [8ce620f](https://github.com/openclaw/openclaw/commit/8ce620f3e675b25111dcbed6d1e124fedd4756a3) Thanks @vincentkoc.
+- The same-release Codex session-continuity work now covers app-server thread start and resume, with binding fingerprints kept bounded throughout. [78edf1c](https://github.com/openclaw/openclaw/commit/78edf1cec15c4a45881386b94e06c71c64f90fa4) Thanks @vincentkoc.
+- Agents running on macOS 26 now receive the macOS product version in their runtime prompt instead of the Darwin kernel version. [#95225](https://github.com/openclaw/openclaw/pull/95225) Thanks @sunlit-deng.
+- Unusual ACP failure causes now produce stable, readable diagnostic details instead of a missing or invalid explanation. [#96270](https://github.com/openclaw/openclaw/pull/96270) Thanks @ly-wang19.
+- ACP run-to-session lookups now return the current active run instead of a stale association from an older run. [#96427](https://github.com/openclaw/openclaw/pull/96427) Thanks @lin-hongkuan.
+- Level directives such as `/verbose` and `/think` no longer remove the first word of the user's message when both are sent together. [#97929](https://github.com/openclaw/openclaw/pull/97929) Thanks @yetval.
+- Successful agent tools that return safe plain text now show that output instead of leaving users with an apparently empty result. [#99526](https://github.com/openclaw/openclaw/pull/99526) Related [#99523](https://github.com/openclaw/openclaw/issues/99523). Thanks @snowzlm.
+- Malformed surrogate HTML entities in provider output no longer corrupt agent tool arguments, transcripts, or URLs, while legitimate entities and emoji still decode normally. [#99564](https://github.com/openclaw/openclaw/pull/99564) Thanks @mikasa0818.
+- Compact subagent lists now keep long labels and task text within their display budget without splitting emoji or breaking alignment. [#100013](https://github.com/openclaw/openclaw/pull/100013) Thanks @qingminglong.
+- Leaving one answer blank in a multi-question prompt no longer shifts the remaining typed answers onto the wrong questions. [#100832](https://github.com/openclaw/openclaw/pull/100832) Thanks @machine3at.
+- Parent sessions no longer repeat an earlier child-agent progress message when the child later reports completion. [#101042](https://github.com/openclaw/openclaw/pull/101042) Thanks @mushuiyu886.
+- ACP runtime controls can now truly clear saved model, thinking, working-directory, permission, timeout, mode, and backend-extra settings so later turns do not reuse stale values. [#101044](https://github.com/openclaw/openclaw/pull/101044) Thanks @mushuiyu886.
+- Very long agent conversations are less likely to loop through failed overflow recovery because compaction now reflects the prompt OpenClaw actually prepared. [#101181](https://github.com/openclaw/openclaw/pull/101181) Thanks @jalehman.
+- Shortened web, media, TTS, status, transport, and voice-call text now preserves complete Unicode characters instead of producing replacement symbols or malformed downstream content. [#101355](https://github.com/openclaw/openclaw/pull/101355) Thanks @alix-007, @vincentkoc.
+- Codex desktop notifications now shorten long assistant previews containing emoji or CJK text without malformed characters. [#101534](https://github.com/openclaw/openclaw/pull/101534) Thanks @lsr911.
+- ACP tool titles, permission prompts, warnings, and errors now keep long emoji or CJK argument previews readable when shortened. [#101535](https://github.com/openclaw/openclaw/pull/101535) Thanks @lsr911.
+- Suppressed auto-reply previews in verbose logs now preserve complete emoji and other supplementary characters instead of showing corrupted text at the length limit. [#101575](https://github.com/openclaw/openclaw/pull/101575) Thanks @wm0018.
+- Normally completed agent and subagent runs no longer appear as error-level log entries, reducing false alarms while genuine failures remain elevated. [#101703](https://github.com/openclaw/openclaw/pull/101703) Thanks @zengwen-dt.
+- Oversized agent tool results now preserve complete emoji and similar Unicode characters when shortened before being sent to the model. [#102087](https://github.com/openclaw/openclaw/pull/102087) Thanks @chengzhichao-xydt.
+- With `messages.suppressToolErrors` enabled, tool failures no longer leak into chat as progress updates while normal progress and final replies continue. [#98063](https://github.com/openclaw/openclaw/pull/98063) Thanks @amittell, @moeedahmed.
+- Skill Workshop sessions now carry a clearer prompt with about 1.8KB less repeated prompt and schema overhead while retaining the same reviewable proposal flow. [#100481](https://github.com/openclaw/openclaw/pull/100481)
+- Prompt caching and cache traces now fingerprint malformed incoming text consistently with the cleaned text providers receive, avoiding needless cache misses and misleading diagnostics. [#101009](https://github.com/openclaw/openclaw/pull/101009) Thanks @qingminglong.
+- Gateway connection failures now identify the last completed handshake phase, helping operators distinguish upgrade, credential, authentication, session, and ready-state stalls. [#93402](https://github.com/openclaw/openclaw/pull/93402) Thanks @849261680, @bzelones, @vincentkoc, @youngting520.
+- Operators now receive `payload.large` or `truncated` diagnostics and an accurate count whenever `chat.history` omits older messages, making hidden history trimming visible without changing client responses. [#96788](https://github.com/openclaw/openclaw/pull/96788) Thanks @zengwen-dt.
+- Gateway logs now reveal when OpenClaw cannot save a terminal session's final lifecycle state, making silent persistence failures diagnosable. [#97839](https://github.com/openclaw/openclaw/pull/97839) Related [#97795](https://github.com/openclaw/openclaw/issues/97795). Thanks @aniruddhaadak80, @lzy3538.
+- Gateway MCP logs are now quieter and identify the responsible tool when schema problems occur, while distinct conflicts remain visible. [#98821](https://github.com/openclaw/openclaw/pull/98821) Thanks @alvelda, @harjothkhara.
+- Malformed Gateway MCP `tools/call` arguments now return a clear invalid-parameters response before any hook or tool can process them. [#99180](https://github.com/openclaw/openclaw/pull/99180) Thanks @vectorpeak.
+- MCP attach requests without a valid session key now return the intended validation error instead of crashing the Gateway with a TypeError. [#99488](https://github.com/openclaw/openclaw/pull/99488) Thanks @zhanglei99586.
+- Control UI and other Gateway clients now show the correct pairing or protocol-version guidance even when detail codes contain extra whitespace. [#99555](https://github.com/openclaw/openclaw/pull/99555) Thanks @ly85206559.
+- Gateway WebSocket failures now keep non-ASCII close reasons readable and within the byte limit instead of cutting characters into garbled text. [#100047](https://github.com/openclaw/openclaw/pull/100047) Thanks @narahariraghava.
+- Discord Code Mode progress no longer fills with repetitive Wait rows from background polling, while ordinary custom and plugin tools remain visible. [#100164](https://github.com/openclaw/openclaw/pull/100164)
+- Gateway override authentication errors now tell CLI and TUI users whether to add a token or password, remove `--url`, or pair the relevant environment variables. [#100418](https://github.com/openclaw/openclaw/pull/100418) Thanks @gmays.
+- Interactive and queued turns that finish without a visible answer now return a clear, sanitized failure message instead of leaving the chat looking stuck. [#100456](https://github.com/openclaw/openclaw/pull/100456) Thanks @mushuiyu886.
+- Starting a new Codex session no longer emits a false history warning before its transcript exists, while genuine history failures remain visible. [#100484](https://github.com/openclaw/openclaw/pull/100484) Thanks @litang9, @vincentkoc.
+- Gateway usage reports now label start and end dates in the requested timezone, including correct calendar-day handling across local daylight-saving transitions. [#100567](https://github.com/openclaw/openclaw/pull/100567) Thanks @nianjiuzst.
+- Session usage details now recover malformed transcript dates from available message timestamps and return finite, consistently ordered values instead of nulls. [#100687](https://github.com/openclaw/openclaw/pull/100687) Thanks @sheyanmin.
+- Standalone ACP clients now close the shared SQLite state database during shutdown so hot reloads and immediate restarts can reopen it without stale locks or callbacks. [#100691](https://github.com/openclaw/openclaw/pull/100691) Thanks @lzy3538.
+- First-run macOS setup now recognizes a successfully saved Codex login and is less likely to finish with a stale Gateway or bundled-skills warning. [#101218](https://github.com/openclaw/openclaw/pull/101218)
+- Voice-call webhook setup through ngrok or Tailscale now fails cleanly on tunnel stream errors instead of crashing the Gateway, and shutdown avoids waiting on an already-ended tunnel. [#101394](https://github.com/openclaw/openclaw/pull/101394) Thanks @cxbasdev.
+
+
+
+## Accounts, devices, and private data
+
+### Credentials, permissions, pairing, and file safeguards
+
+Trust-sensitive actions stop earlier and explain more of what requires attention. The persistent [activity audit](/gateway/audit) can be filtered and exported after restarts, ClawHub installations distinguish blocked releases from releases that need deliberate acknowledgement, and guarded networking supports approved proxy-only paths without weakening destination checks.
+
+Credential resolution and redaction now cover more model and plugin paths, while [sandboxing and approvals](/gateway/sandboxing) enforce clearer device, permission, and workspace boundaries. The [secrets](/gateway/secrets) workflow also avoids exposing resolved model credentials in ordinary request and error paths.
+
+
+
+- ClawHub now checks community plugin and skill releases before download, blocking prohibited releases and requiring explicit acknowledgement for suspicious ones while leaving existing installs in place when an update is skipped. [#81364](https://github.com/openclaw/openclaw/pull/81364) Thanks @jesse-merhi.
+- Authorized operators now have a durable audit history for agent and tool activity, with filters, stable paging, bounded JSON export, configurable recording, and automatic retention limits. [#98704](https://github.com/openclaw/openclaw/pull/98704)
+- Provider, channel, media, and web requests can now reach public destinations through a managed proxy even when local DNS is unavailable or differs from the proxy's DNS. [#98951](https://github.com/openclaw/openclaw/pull/98951) Related [#98925](https://github.com/openclaw/openclaw/issues/98925). Thanks @momothemage, @sandl99.
+- Model-provider keys stored with SecretRefs now receive additional protection against accidental exposure in logs, errors, proxy captures, SDK setup, and runtime inspection, with a compatibility switch for secret sentinels. [#102009](https://github.com/openclaw/openclaw/pull/102009)
+- Operators can use targeted Doctor lint to detect credential residue in historical `config-audit.jsonl` entries and preview redaction before running `openclaw doctor --fix`. [#84450](https://github.com/openclaw/openclaw/pull/84450) Thanks @giodl73-repo.
+- Browser control now requires the same administrator permission through direct node invocation as through the standard browser request path, preventing write-only credentials or third-party plugins from gaining elevated access. [#85916](https://github.com/openclaw/openclaw/pull/85916) Thanks @eleqtrizit, @laphilosophie.
+- Slack rooms that require a mention no longer wake OpenClaw for ordinary messages when the bot identity is missing or untrusted, and setup warnings point operators to a Bot User OAuth Token when needed. [#91584](https://github.com/openclaw/openclaw/pull/91584) Thanks @hiragram.
+- Running a read-only local Gateway check no longer leaves stale pairing permissions that block a later agent, admin, write, or device-approval command. [#96002](https://github.com/openclaw/openclaw/pull/96002) Thanks @vincentkoc.
+- Gateway service regeneration now keeps environment-backed secrets out of Linux unit definitions and preserves resolved provider and channel credentials on macOS. [#96065](https://github.com/openclaw/openclaw/pull/96065) Thanks @darren2030, @obviyus.
+- With `strictInlineEval` enabled, versioned Python and PyPy commands plus additional PHP and R inline forms now require fresh explicit approval rather than inheriting executable trust. [#96216](https://github.com/openclaw/openclaw/pull/96216) Thanks @eleqtrizit.
+- Agents using OpenClaw's cron tools are now limited to their own scheduled jobs and session targets, while operator-managed cron remains unchanged and mixed-version setups fail closed with an `openclaw gateway restart` instruction. [#96883](https://github.com/openclaw/openclaw/pull/96883) Thanks @joshavant.
+- Multi-account Feishu setups can now start the default channel with an environment-backed top-level SecretRef and separate inline secrets for named accounts, without replacing the protected secret with plaintext. [#96965](https://github.com/openclaw/openclaw/pull/96965) Thanks @zw-xysk.
+- `openclaw doctor --fix` now preserves separate OAuth accounts for the same provider, including each account reference and saved display name. [#97541](https://github.com/openclaw/openclaw/pull/97541) Thanks @liuhao1024, @yetval.
+- Only the configured owner can now change whether a group responds to mentions or every message through `/activation`. [#97838](https://github.com/openclaw/openclaw/pull/97838) Thanks @pgondhi987.
+- Cron wake actions started by an agent now remain within that agent's own session lanes, reducing the chance of waking another agent's conversation. [#97949](https://github.com/openclaw/openclaw/pull/97949) Thanks @eleqtrizit.
+- Starting or changing native Codex sessions now requires owner or `operator.admin` access, while other authorized senders retain read-only inspection. [#97952](https://github.com/openclaw/openclaw/pull/97952) Thanks @eleqtrizit.
+- ACP session lifecycle and runtime controls now require an owner or internal Gateway administrator instead of being available to any authorized channel user. [#97953](https://github.com/openclaw/openclaw/pull/97953) Thanks @eleqtrizit.
+- Sandboxed agents with host browser control disabled can no longer reach a signed-in host browser through a paired browser node. [#97958](https://github.com/openclaw/openclaw/pull/97958) Thanks @eleqtrizit.
+- Malformed MCP OAuth failures now return a bounded HTTP-status diagnostic instead of allowing an unbounded error response to exhaust agent memory. [#98143](https://github.com/openclaw/openclaw/pull/98143) Thanks @pick-cat.
+- Bare Fireworks API keys are now masked in logs, provider errors, command details, tool output, and Control UI diagnostics even without a nearby sensitive-field label. [#98226](https://github.com/openclaw/openclaw/pull/98226) Related [#98225](https://github.com/openclaw/openclaw/issues/98225). Thanks @ooiuuii.
+- In shared channels, only the person who started a Claude Code command can approve or deny its tool permission requests. [#98256](https://github.com/openclaw/openclaw/pull/98256) Thanks @eleqtrizit.
+- IRC allowlists now reject host-less `nick!user` entries by default and guide operators toward verified full host masks, reducing impersonation risk. [#98339](https://github.com/openclaw/openclaw/pull/98339) Thanks @yetval.
+- `/pair` now refuses setup codes that point to non-routable `0.0.0.0` or `::` addresses and gives operators secure Gateway URL guidance instead. [#98617](https://github.com/openclaw/openclaw/pull/98617) Thanks @crh-code.
+- Failed OpenAI or Codex credential refreshes now report that reauthentication is required and privately identify the affected profile instead of appearing healthy until model turns fail. [#99134](https://github.com/openclaw/openclaw/pull/99134) Related [#99120](https://github.com/openclaw/openclaw/issues/99120). Thanks @100yenadmin, @fuller-stack-dev.
+- Gateway authentication retries now send stored device tokens only to true loopback endpoints, not remote hostnames that merely resemble `127.*` addresses. [#99859](https://github.com/openclaw/openclaw/pull/99859) Thanks @ly85206559.
+- A temporary output-stream read failure from an exec-based SecretRef provider no longer crashes OpenClaw during credential resolution. [#100521](https://github.com/openclaw/openclaw/pull/100521) Thanks @cxbasdev.
+- Write-scoped Gateway clients can still perform supported message actions but can no longer supply identity fields that masquerade as a trusted requester or owner. [#102031](https://github.com/openclaw/openclaw/pull/102031) Thanks @pgondhi987.
+- Approving a node that can handle sensitive browser traffic now requires administrator permission, matching the security level already required to use that capability. [#104491](https://github.com/openclaw/openclaw/pull/104491) Thanks @yetval.
+- Agent payload logs and cache traces now redact provider keys even when those credentials appear inside free-text diagnostic values. [d8ee630](https://github.com/openclaw/openclaw/commit/d8ee630b203c86fd5d91331156614a441ec9e52c) Thanks @joshavant.
+- Authorized non-owner chat participants can no longer inspect or change owner-controlled MCP server configuration through `/mcp`. [ad5a26c](https://github.com/openclaw/openclaw/commit/ad5a26cf699afd7a387a187aee77bbc7d04793df) Thanks @joshavant.
+- Auto-reply diagnostics now remain owner-only instead of allowing non-owner participants to run the command. [170bf72](https://github.com/openclaw/openclaw/commit/170bf72e64a9b85933e156244cccda7bd0270df4) Thanks @joshavant.
+- Failed cron webhooks no longer forward raw command summaries or diagnostics that may contain setup prompts, codes, or secret-like output. [1d17263](https://github.com/openclaw/openclaw/commit/1d172637d6dda23a0b108c624239264eae0e5042) Thanks @joshavant.
+- Secret target discovery now works consistently for both scoped requests and the full compiled registry instead of failing when no allowed subset is supplied. [e490171](https://github.com/openclaw/openclaw/commit/e490171ff24b4165b68b9835e76c1baf8903a149)
+- Under strict SSRF policy, remote-browser discovery can no longer redirect OpenClaw from the configured CDP endpoint to a different host, port, or security mode. [cbc833a](https://github.com/openclaw/openclaw/commit/cbc833a7f33804db11f11274678770a1b55be3ca) Thanks @vincentkoc.
+- `/login codex` now switches the active chat to the account just authenticated without overwriting a newer manual profile choice, and gives recovery guidance if the switch fails. [02c3de9](https://github.com/openclaw/openclaw/commit/02c3de947169acdafbf60dd5ce76f655c34e37c7) Thanks @vincentkoc.
+- Profile changes made through `/login` now use the standard session save path, preserving newer concurrent selections and existing recovery behavior. [f07c478](https://github.com/openclaw/openclaw/commit/f07c4782fa6a109df7f4345f51a88caa9d8439c9) Thanks @vincentkoc.
+- Codex session bindings now keep large MCP configurations and rotated Authorization credentials in bounded fingerprints without persisting readable bearer values. [491e42e](https://github.com/openclaw/openclaw/commit/491e42e6d5a334f850e2ad790a19c936c8daa07e) Thanks @100yenadmin.
+- Hooks and skills no longer activate from unsafe inherited configuration values, while ordinary configured paths and explicit defaults continue to work. [#59694](https://github.com/openclaw/openclaw/pull/59694) Thanks @yonganzhang.
+- After an agent is removed, its leftover sessions can no longer start new model runs through the Gateway. [#97260](https://github.com/openclaw/openclaw/pull/97260) Thanks @obviyus, @pick-cat.
+- Unsafe, malformed, or unexpectedly large fd and ripgrep helper archives now fail early and clean up after themselves instead of putting agent setup at risk. [#98988](https://github.com/openclaw/openclaw/pull/98988) Thanks @leonidaslux, @vincentkoc.
+- Oversized or malformed Microsoft Teams personal-chat attachment metadata now fails safely with a warning instead of consuming unbounded Gateway memory. [#99125](https://github.com/openclaw/openclaw/pull/99125) Thanks @ly85206559.
+- Config show, set, and unset now operate only on values truly stored in the user's configuration, preventing inherited object state from masquerading as saved settings. [#99846](https://github.com/openclaw/openclaw/pull/99846) Thanks @vincentkoc, @zenglingbiao.
+- Android Canvas content can no longer navigate to device-local web services, while normal remote and Gateway-hosted pages continue to work. [#99874](https://github.com/openclaw/openclaw/pull/99874) Thanks @ly85206559.
+- Oversized or never-ending responses from supported external providers now stop at a fixed limit with a labeled error instead of consuming memory until the full body arrives. [0a14444](https://github.com/openclaw/openclaw/commit/0a14444924e34e031133c997b00d30573353c5a0) Thanks @joshavant.
+- Terminal requests with an unknown agent ID now fail clearly instead of falling back to global defaults and potentially opening a host shell outside the intended agent boundary. [3601dca](https://github.com/openclaw/openclaw/commit/3601dcad24fea8924c52d8abbafb85e50fc247ce)
+- The Windows installer now accepts patched SQLite runtimes, rejects unsafe or unreadable ones, and reports the detected version when another Node.js upgrade is required. [28db140](https://github.com/openclaw/openclaw/commit/28db14005a77ca146c1f10979501dcfd375e8d01) Thanks @vincentkoc.
+- QQBot now avoids accidental reminders, limits exposure of private media details, and requires explicit confirmation before destructive channel or announcement actions. [#98032](https://github.com/openclaw/openclaw/pull/98032) Thanks @patrick-erichsen.
+- Operators using workspace repairs can now run `doctor --fix` to disable policy-denied Gateway HTTP endpoints without removing nested URL-fetch settings. [#99731](https://github.com/openclaw/openclaw/pull/99731) Thanks @giodl73-repo.
+- Web fetch and provider integrations now enforce response-size caps without allocating an entire nonstandard response in memory. [#99884](https://github.com/openclaw/openclaw/pull/99884) Thanks @zenglingbiao.
+- Trusted custom provider hosts are now protected from DNS rebinding into local services; intentional loopback aliases must use an explicit local origin or enable `allowPrivateNetwork`. [#100835](https://github.com/openclaw/openclaw/pull/100835) Thanks @machine3at.
+- Browser-control requests now reject oversized successful JSON responses with a `BrowserServiceError` before they can consume excessive memory, while supported large browser results still work. [#100889](https://github.com/openclaw/openclaw/pull/100889) Thanks @mushuiyu886.
+- The `/pair` mobile setup flow now accepts local IPv6 ULA and link-local Gateway addresses without requiring TLS or a different advertised host, while public cleartext URLs remain blocked. [#101008](https://github.com/openclaw/openclaw/pull/101008) Thanks @zhangguiping-xydt.
+- Running `/prose` now shows operators the transitive remote imports and asks for consent before OpenProse fetches those code dependencies. [259877d](https://github.com/openclaw/openclaw/commit/259877dccf1c6e2e8abce5deb92450af1a8b53a6) Thanks @joshavant.
+- Codex plugin users can allow read-only app actions while requiring a fresh approval for every write or destructive action. [#97123](https://github.com/openclaw/openclaw/pull/97123) Thanks @kevinslin.
+- Codex plugin apps now avoid approval prompts for read-only actions, preserve per-app write policies across recovery, and refresh their app inventory after upgrades. [#97327](https://github.com/openclaw/openclaw/pull/97327) Thanks @kevinslin.
+- Device owners can approve the request ID most recently shown by `openclaw devices list` after a reconnect, without weakening protection against newly expanded scopes. [#98145](https://github.com/openclaw/openclaw/pull/98145) Thanks @romneyda.
+- Windows exact-path execution approvals now launch the approved executable rather than a same-named program from the working directory. [#98260](https://github.com/openclaw/openclaw/pull/98260) Thanks @eleqtrizit.
+- `openclaw security audit` now warns that per-agent skill allowlists do not prevent shell-capable agents from reaching globally configured MCP servers. [#98352](https://github.com/openclaw/openclaw/pull/98352) Thanks @momothemage.
+- The Codex plugin now names per-action destructive approval mode `ask`, making it clear that each write or destructive action remains available but requires confirmation. [#98501](https://github.com/openclaw/openclaw/pull/98501) Related [#98499](https://github.com/openclaw/openclaw/issues/98499). Thanks @kevinslin.
+- Managed deployments can now require entries such as `system.run` in `gateway.nodes.denyCommands`, and Policy doctor warns when configuration drift leaves a privileged node command available. [#99121](https://github.com/openclaw/openclaw/pull/99121) Thanks @giodl73-repo.
+- Managed host tools no longer inherit the active Conda environment from the shell that launched OpenClaw, avoiding unintended Python and package-manager behavior. [#99425](https://github.com/openclaw/openclaw/pull/99425) Related [#99424](https://github.com/openclaw/openclaw/issues/99424). Thanks @krissding, @ooiuuii.
+- Long Discord approval previews now preserve complete emoji and flags when shortened, avoiding broken replacement characters. [#99539](https://github.com/openclaw/openclaw/pull/99539) Thanks @zhangguiping-xydt.
+- Exec approval prompts now display and transmit long command text containing emoji or malformed Unicode without broken characters or encoding failures. [#99566](https://github.com/openclaw/openclaw/pull/99566) Thanks @mikasa0818.
+- `policy check --json` now tells administrators whether each finding is automatically repairable, needs review or manual work, is validation-only, or is unsupported. [#99686](https://github.com/openclaw/openclaw/pull/99686) Thanks @giodl73-repo.
+- Operators who explicitly enable Policy workspace repairs can now automatically narrow several unsafe settings, while OpenClaw remains read-only without that opt-in. [#99690](https://github.com/openclaw/openclaw/pull/99690) Thanks @giodl73-repo, @omarshahine.
+- Policy workspace repairs can now add required tools to the affected deny list while preserving existing entries and avoiding unintended root-policy widening. [#99700](https://github.com/openclaw/openclaw/pull/99700) Thanks @giodl73-repo.
+- Policy workspace repairs can now move reported open channel groups to allowlist mode and require mentions without changing inherited defaults. [#99720](https://github.com/openclaw/openclaw/pull/99720) Thanks @giodl73-repo, @omarshahine.
+- `doctor --fix` now shows the exact `gateway.bind=loopback` or `gateway.nodes.denyCommands` change needed for sensitive findings without applying it automatically. [#99776](https://github.com/openclaw/openclaw/pull/99776) Thanks @giodl73-repo.
+- The Control UI terminal is now explicit opt-in, opens tabs under the selected agent's workspace and policy, and closes affected shells when accepted access restrictions tighten. [#100081](https://github.com/openclaw/openclaw/pull/100081) Thanks @rayncc.
+- Repeated pairing repair attempts now produce one usable macOS approval prompt per device instead of stacking stale alerts that cannot complete approval. [#100976](https://github.com/openclaw/openclaw/pull/100976)
+- Windows companion-node exec policies can now be viewed and updated through node-aware approvals commands and displayed correctly in Control UI. [#101669](https://github.com/openclaw/openclaw/pull/101669) Thanks @vincentkoc.
+- Non-owner Gateway chat users are no longer offered the protected `cron`, `gateway`, or `nodes` control tools, even when those tools are otherwise allowlisted. [#102030](https://github.com/openclaw/openclaw/pull/102030) Thanks @pgondhi987.
+- Using `jq` through exec now requires an explicit trusted allowlist entry or approval instead of being treated as a harmless stdin-only safe binary. [#102032](https://github.com/openclaw/openclaw/pull/102032) Thanks @pgondhi987.
+- Always-allow approvals for `npm exec`, `npx`, `pnpm`, and `yarn` wrappers now apply to the actual command rather than unintentionally trusting different future payloads. [#102035](https://github.com/openclaw/openclaw/pull/102035) Thanks @pgondhi987.
+- OpenShell workspace file operations now stay inside the validated local sandbox mirror, with unsafe symlink, hard-link, cross-root, and changing-directory cases failing cleanly. [c6f5725](https://github.com/openclaw/openclaw/commit/c6f5725906dcaaaeeb0b5942addc844ffc579caf) Thanks @joshavant.
+- Swift native clients now support device-scoped skill approvals, with the reviewer-device field encoded in their generated Gateway models. [1403c64](https://github.com/openclaw/openclaw/commit/1403c64799ae62785e36327b6fc4c5235b10d8ba)
+- Gateway sign-in tracking now keeps bounded memory use during floods of failed attempts from many addresses while preserving existing lockouts. [#96224](https://github.com/openclaw/openclaw/pull/96224) Thanks @eleqtrizit.
+- Copied provider keys and tokens now have hidden terminal control characters removed before request headers are prepared, while intentional spaces remain intact. [#96444](https://github.com/openclaw/openclaw/pull/96444) Thanks @lin-hongkuan.
+- Masked malformed credentials now stay on one safe line in setup and authentication diagnostics even when the original input contains newlines or other control bytes. [#96445](https://github.com/openclaw/openclaw/pull/96445) Thanks @lin-hongkuan.
+- Security audits no longer mistake bundled placeholder keys for LM Studio, Ollama, and other keyless local providers as exposed plaintext credentials. [#97622](https://github.com/openclaw/openclaw/pull/97622) Thanks @xydigit-sj.
+- Trajectory exports from chat now require owner authority, preventing other command-authorized channel users from retrieving sensitive session artifacts. [#97840](https://github.com/openclaw/openclaw/pull/97840) Thanks @pgondhi987.
+- Gateway-wide Active Memory can now be changed only by owners or administrators, while other authorized users retain session-level controls. [#97841](https://github.com/openclaw/openclaw/pull/97841) Thanks @pgondhi987.
+- Only owners and administrative Gateway clients can now turn Memory Core dreaming on or off through `/dreaming`, while status and help remain available to others. [#97869](https://github.com/openclaw/openclaw/pull/97869) Thanks @eleqtrizit.
+- Non-admin Telegram and Discord users can no longer change the Gateway's Talk voice, though they can still view the current and available voices. [#97874](https://github.com/openclaw/openclaw/pull/97874) Thanks @eleqtrizit.
+- Installing or reconfiguring Codex Computer Use resources now requires owner or administrator access, while other authorized senders can still inspect status. [#97955](https://github.com/openclaw/openclaw/pull/97955) Thanks @eleqtrizit.
+- Renaming iMessage groups, changing icons or membership, and leaving groups now require verified owner or administrator authority. [#97961](https://github.com/openclaw/openclaw/pull/97961) Thanks @eleqtrizit.
+- Skills created by agents now remain pending for Skill Workshop review and approval instead of becoming active immediately without the expected safeguards. [#98346](https://github.com/openclaw/openclaw/pull/98346) Related [#96054](https://github.com/openclaw/openclaw/issues/96054). Thanks @momothemage, @xianshishan.
+- Discord read allowlists now block guild metadata, channel details, and thread listings before any provider request when those resources are outside the configured scope. [#98966](https://github.com/openclaw/openclaw/pull/98966) Thanks @pgondhi987.
+- Telegram timeout logs now hide bot tokens embedded in Bot API paths, including custom and proxy roots, while retaining useful endpoint context. [#99428](https://github.com/openclaw/openclaw/pull/99428) Related [#96982](https://github.com/openclaw/openclaw/issues/96982). Thanks @liuhaiyang14, @xialonglee.
+- Control UI Activity previews now conceal API keys stored under dotted configuration names or returned in structured tool output. [#99460](https://github.com/openclaw/openclaw/pull/99460) Related [#99459](https://github.com/openclaw/openclaw/issues/99459). Thanks @ooiuuii.
+- Custom ACP error redactors now keep OpenClaw's built-in secret cleanup, preventing known tokens, credentials, and private-key material from leaking into formatted errors. [#100191](https://github.com/openclaw/openclaw/pull/100191) Thanks @lin-hongkuan.
+- Android SMS commands now clearly distinguish phone permission from the Gateway's separate opt-in, allowing read-only `sms.search` without also enabling `sms.send`. [#100993](https://github.com/openclaw/openclaw/pull/100993) Thanks @narcissus0702.
+- Browser automation now keeps Chrome control traffic tied to the configured or explicitly allowed CDP host, reducing the risk that a discovered debugger address redirects credentials or control elsewhere. [#101171](https://github.com/openclaw/openclaw/pull/101171)
+- Authenticated owners can use their already-granted shell, file, process, Skill Workshop, and plugin tools in WebChat without extending those permissions to guests or external senders. [#101271](https://github.com/openclaw/openclaw/pull/101271) Thanks @fuller-stack-dev.
+- When another OpenClaw process is refreshing OpenAI OAuth credentials, operators now see one useful contention error without duplicated wording or exposed local file paths. [#101573](https://github.com/openclaw/openclaw/pull/101573) Thanks @vincentkoc.
+- On macOS, an explicit `OPENCLAW_STATE_DIR` now stays isolated from the machine's existing App Group pairing identity and device tokens. [#101779](https://github.com/openclaw/openclaw/pull/101779)
+- Telegram bot tokens now remain masked even when they cross internal boundaries inside very large logs or tool-error messages. [#103861](https://github.com/openclaw/openclaw/pull/103861) Thanks @vincentkoc.
+- Hidden control characters can no longer break terminal hyperlink boundaries or inject control behavior through documentation link text. [#96440](https://github.com/openclaw/openclaw/pull/96440) Thanks @lin-hongkuan.
+- MCP include and exclude filters with many wildcard segments now reject nonmatches quickly instead of stalling tool discovery for minutes. [#100330](https://github.com/openclaw/openclaw/pull/100330) Thanks @lsr911.
+- Signal local-file attachments that are oversized or use suspicious paths now fail quickly with a clear error before consuming excessive Gateway memory. [#101391](https://github.com/openclaw/openclaw/pull/101391) Thanks @cxbasdev.
+- Multi-user bridges using `openclaw agent --agent ... --channel ... --to ...` now keep recipients in separate sessions when per-recipient isolation is configured. [#101507](https://github.com/openclaw/openclaw/pull/101507) Thanks @pingfanfan, @vincentkoc.
+- Anthropic and Gemini PDF analysis now blocks unsafe private-network redirects and oversized responses by default while still supporting configured local endpoints. [#97872](https://github.com/openclaw/openclaw/pull/97872) Thanks @eleqtrizit.
+- Anthropic requests through Cloudflare AI Gateway now receive OpenClaw's standard private-address blocking, timeouts, retry guidance, and managed response safeguards. [#98003](https://github.com/openclaw/openclaw/pull/98003) Thanks @wangmiao0668000666.
+- Config recovery now warns when the file was repaired but its final permissions could not be hardened, preserving the recovery while exposing the security issue. [#95348](https://github.com/openclaw/openclaw/pull/95348) Thanks @hugenshen.
+- `openclaw security audit` now reports Browser exposure only when plugin policy actually allows the Browser plugin to run. [#97732](https://github.com/openclaw/openclaw/pull/97732) Thanks @amtellezfernandez.
+- Read-only voice-call status now omits phone numbers, transcripts, routing details, processed event IDs, and raw metadata. [#97870](https://github.com/openclaw/openclaw/pull/97870) Thanks @eleqtrizit.
+- Status and diagnostic tools can now identify stale exec approval follow-ups intentionally suppressed after `/new` or `/reset` instead of treating them as unexplained delivery failures. [#98293](https://github.com/openclaw/openclaw/pull/98293) Thanks @bsniznd.
+- Codex `/btw` side conversations now preserve an ask-mode plugin app's requirement to obtain approval before destructive actions. [#98812](https://github.com/openclaw/openclaw/pull/98812)
+- Android release builds no longer expose detailed `camera.clip` settings, device data, temporary paths, and recording events in production logs. [#99484](https://github.com/openclaw/openclaw/pull/99484) Thanks @nianjiuzst.
+- Long Codex app-server approval details and command previews now preserve emoji and extended Unicode characters instead of showing corrupted text. [#100177](https://github.com/openclaw/openclaw/pull/100177) Thanks @xialonglee.
+- Android notification forwarding now leaves WhatsApp, Telegram, Discord, and Signal messages with their dedicated channel sessions, preventing duplicate or wrong-conversation replies while other selected apps continue to follow forwarding rules. [#101170](https://github.com/openclaw/openclaw/pull/101170)
+- Installing or updating ClawHub skills, plugins, and packages on Linux no longer risks changing shared `/tmp` permissions and disrupting unrelated services. [#101246](https://github.com/openclaw/openclaw/pull/101246) Thanks @ch3ch2cho2021, @yangxiansheng.
+- Strict exec approval now keeps joined or clustered interpreter inline-code commands such as `python3 -xcprint` as one-time approvals rather than reusable allowlist entries. [#101353](https://github.com/openclaw/openclaw/pull/101353) Thanks @pgondhi987.
+- Long exec auto-review explanations containing emoji or supplementary CJK characters now shorten cleanly instead of showing a broken replacement symbol. [#101513](https://github.com/openclaw/openclaw/pull/101513) Thanks @wm0018.
+- Plugin approval titles and descriptions now remain readable when emoji or supplementary CJK characters fall at the Gateway's text limit. [#101580](https://github.com/openclaw/openclaw/pull/101580) Thanks @wm0018.
+
+
+
+## Official app details
+
+### Shared app changes
+
+Across first-party client surfaces, conversation lists, command palettes, notifications, media, connection state, and file or diff views behave more consistently. The TUI stays open with useful errors, Diffs controls remain scoped to the comparison on screen, and shared keyboard, path, status, Talk, and voice behavior is less likely to drift between clients.
+
+The official apps share broader native localization, voice-message workflows, multiple Gateway profiles, cached conversations, and clearer connection state when people switch between installations.
+
+### More iOS, iPadOS, and Apple Watch changes
+
+[iOS](/platforms/ios) adds refreshed navigation and chat, voice notes, workspace files, safer setup recovery, multiple Gateway profiles, and Apple Watch dictation and quick replies.
+
+### More Android changes
+
+[Android](/platforms/android) improves first-run setup, navigation, chat and session tools, voice, permissions, notifications, scheduled work, localization, multiple Gateway profiles, and connection recovery.
+
+### More macOS changes
+
+[macOS](/platforms/macos) improves first-run local-agent setup, native chat and session controls, remote-mode tunnels, app launching, background efficiency, and device identity across upgrades and reconnects.
+
+### Terminal UI and other clients
+
+Terminal conversations remain open with useful errors, session lists preserve readable previews, and Diffs actions stay attached to the comparison currently on screen.
+
+
+
+- Android users in supported languages now see key Gateway setup, connection, trust, shell, and recovery prompts in their device language. [#97111](https://github.com/openclaw/openclaw/pull/97111) Thanks @vincentkoc.
+- The iOS Control, Chat, Talk, Agent, Settings, Gateway, and Overview screens now use clearer navigation, status cues, controls, and a compact expanding chat composer. [#98452](https://github.com/openclaw/openclaw/pull/98452) Thanks @joelnishanth.
+- The iOS Control, Agents, and Settings screens are now easier to scan, with fewer duplicate destinations, more compact controls, standard navigation, and a direct Gateway shortcut from detail views. [#98811](https://github.com/openclaw/openclaw/pull/98811) Related [#98803](https://github.com/openclaw/openclaw/issues/98803).
+- Native iOS Chat now gives the conversation more room, uses a compact composer that grows with longer drafts, and keeps attachment, Talk, and send controls comfortably tappable. [#98953](https://github.com/openclaw/openclaw/pull/98953) Related [#98929](https://github.com/openclaw/openclaw/issues/98929).
+- Chat, Talk, Settings, navigation, and onboarding on iPhone and iPad now use more consistent native controls, appearance, and back behavior. [#99231](https://github.com/openclaw/openclaw/pull/99231) Related [#99195](https://github.com/openclaw/openclaw/issues/99195). Thanks @marvkr.
+- iOS users can record and send a voice note of up to three minutes from the chat composer, optionally add text, and see the recording's duration in chat. [#100946](https://github.com/openclaw/openclaw/pull/100946)
+- Android users can record and send a voice note of up to three minutes from the chat composer without entering live Talk mode. [#101193](https://github.com/openclaw/openclaw/pull/101193)
+- Third-party Android builds can allow Gateway-requested location checks while the app is in the background by selecting Location > Always and granting Android's persistent location permission. [#100967](https://github.com/openclaw/openclaw/pull/100967) Thanks @ioridev.
+- Android can now keep multiple Gateways paired and switch among them without repeating setup, while each Gateway retains its own credentials, chat state, queued messages, and removable local data. [#100947](https://github.com/openclaw/openclaw/pull/100947)
+- iOS users can pair multiple Gateways once and switch among them while keeping credentials, trust, chats, preferences, device access, and push registration attached to the correct Gateway. [#100948](https://github.com/openclaw/openclaw/pull/100948)
+- Android Chat now includes a New chat action and a `/` command browser that filters the current agent's advertised commands without dropping command arguments. [#98796](https://github.com/openclaw/openclaw/pull/98796) Thanks @iwhatsskill, @solvely-colin.
+- Android Chat now lets users choose and verify the configured agent for new messages, with Chat, Talk mode, and the home canvas staying aligned to that selection. [#80422](https://github.com/openclaw/openclaw/pull/80422) Thanks @bcperry.
+- Android chats now render links, lists, quotes, emphasis, code, and plain text consistently through the shared Markdown renderer. [#88899](https://github.com/openclaw/openclaw/pull/88899) Related [#88014](https://github.com/openclaw/openclaw/issues/88014). Thanks @iman-sharif, @pluviobyte.
+- Android notification automations now queue accepted events during Gateway connection or reconnection and deliver them in order once the link is ready. [#92602](https://github.com/openclaw/openclaw/pull/92602) Related [#79552](https://github.com/openclaw/openclaw/issues/79552). Thanks @ashishpatel26, @hectorrp13.
+- Android users can open a scheduled job to inspect its timing, payload, delivery state, recent results, errors, and exact ID. [#95107](https://github.com/openclaw/openclaw/pull/95107) Thanks @tosko4.
+- Android one-shot camera captures now turn the camera and privacy indicator off promptly after success, failure, or cancellation. [#98040](https://github.com/openclaw/openclaw/pull/98040) Thanks @nianjiuzst.
+- Android background push-to-talk requests now return `NODE_BACKGROUND_UNAVAILABLE` instead of attempting a microphone start that the operating system may reject. [#98055](https://github.com/openclaw/openclaw/pull/98055) Thanks @nianjiuzst.
+- Android's selected-photos permission now counts as usable access, allowing `photos.latest` while clearly showing how to manage the limited selection. [#98059](https://github.com/openclaw/openclaw/pull/98059) Thanks @nianjiuzst.
+- Android Gateway actions now stop promptly when their connection closes, while requests started after reconnect are not cancelled by old cleanup. [#98067](https://github.com/openclaw/openclaw/pull/98067) Thanks @nianjiuzst.
+- Android connection recovery now identifies expired setup codes, stale credentials, and missing or invalid authentication with the appropriate next step. [#98094](https://github.com/openclaw/openclaw/pull/98094) Thanks @qingminglong.
+- Android now reports Realtime Talk and Dictation readiness separately, opens setup only for the mode that needs it, and keeps useful provider failure details visible. [#98269](https://github.com/openclaw/openclaw/pull/98269) Related [#98268](https://github.com/openclaw/openclaw/issues/98268). Thanks @solvely-colin.
+- Android can reconnect to the same Gateway without erasing saved access when credential fields are blank, while endpoint and setup-code changes avoid carrying stale credentials silently. [#98277](https://github.com/openclaw/openclaw/pull/98277) Thanks @solvely-colin.
+- Android now gives clearer TLS verification guidance for reachable remote and Tailnet Gateways and allows slow valid handshakes more time to show the trust prompt. [#98366](https://github.com/openclaw/openclaw/pull/98366) Related [#98365](https://github.com/openclaw/openclaw/issues/98365). Thanks @joshavant.
+- Android can now pair with local Gateways advertised by standard cleartext `.local` names while continuing to reject unsafe remote or ambiguous cleartext addresses. [#98439](https://github.com/openclaw/openclaw/pull/98439) Thanks @joshavant.
+- Scanning a valid Gateway setup QR code on Android now starts pairing immediately and advances to recovery or approval instead of leaving users on setup. [#98483](https://github.com/openclaw/openclaw/pull/98483) Thanks @joshavant.
+- Android Gateway setup now replaces a generic authentication warning with specific recovery labels for expired setup codes, missing or invalid credentials, stale saved authentication, and required device identity. [#98698](https://github.com/openclaw/openclaw/pull/98698) Related [#98046](https://github.com/openclaw/openclaw/issues/98046). Thanks @ccaprani, @masatohoshino.
+- Android Back navigation now returns users from Gateway or Talk settings, Sessions, and Providers to the Voice, Chat, or command-palette tab where they started. [#98914](https://github.com/openclaw/openclaw/pull/98914) Thanks @lokimorty.
+- Android onboarding now marks Contacts and Calendar ready only after both read and write access are available, including when those permissions arrive in separate prompts. [#99158](https://github.com/openclaw/openclaw/pull/99158) Thanks @nianjiuzst.
+- Android now reports Contacts and Calendar access as granted only when both reading and adding entries are authorized, preventing misleading setup results. [#99204](https://github.com/openclaw/openclaw/pull/99204) Thanks @nianjiuzst.
+- Android Talk and Dictation now use a connected Bluetooth headset microphone for hands-free capture and fall back cleanly when it disconnects. [#99259](https://github.com/openclaw/openclaw/pull/99259) Related [#96241](https://github.com/openclaw/openclaw/issues/96241). Thanks @gwtaylor.
+- Android users can now read bundled third-party and open-source license notices directly from Settings > Licenses. [#99299](https://github.com/openclaw/openclaw/pull/99299) Thanks @joshavant.
+- Android gateway setup now gives specific recovery actions for expired codes, stale credentials, pending node approval, and terminal authentication failures. [#99414](https://github.com/openclaw/openclaw/pull/99414) Related [#98045](https://github.com/openclaw/openclaw/issues/98045), [#98046](https://github.com/openclaw/openclaw/issues/98046). Thanks @ccaprani.
+- The Android companion no longer forwards OpenClaw's own notifications back to the Gateway, even when older allowlists still include the app package. [#99568](https://github.com/openclaw/openclaw/pull/99568) Thanks @ly85206559.
+- Android manual Gateway setup now defaults blank ports to 18789 for ordinary TLS and cleartext hosts while retaining port 443 for Tailscale MagicDNS. [#99865](https://github.com/openclaw/openclaw/pull/99865) Thanks @ly85206559.
+- Android push-to-talk now takes exclusive microphone control during Talk Mode and resumes the correct realtime listener afterward, preventing duplicate capture. [#99986](https://github.com/openclaw/openclaw/pull/99986) Thanks @nianjiuzst.
+- Android chat now adds light- and dark-mode syntax highlighting to supported fenced code, making code-heavy replies easier to scan without delaying partial or oversized messages. [#100217](https://github.com/openclaw/openclaw/pull/100217)
+- Saved Android Gateway sessions now reconnect promptly when validated internet access returns, without unnecessary retries during captive or partial network changes. [#100347](https://github.com/openclaw/openclaw/pull/100347) Thanks @ly85206559.
+- Android Gateway settings now give connection details, setup fields, and helper text more stable space on phone-sized screens, reducing clipping and crowding. [#100363](https://github.com/openclaw/openclaw/pull/100363) Thanks @iwhatsskill.
+- Android now presents evenly spaced bottom tabs and avoids the chat-cache startup crash that could block entry to the post-onboarding shell. [#100382](https://github.com/openclaw/openclaw/pull/100382) Thanks @iwhatsskill.
+- Android chat now restores an active response with buffered text after reconnecting or reopening, and recovers missed event gaps without duplicating transcript rows. [#100384](https://github.com/openclaw/openclaw/pull/100384)
+- Android now isolates cached conversations and queued commands when users re-pair, sign out, or replace Gateway credentials, preventing a new identity from inheriting the previous one's data. [#100454](https://github.com/openclaw/openclaw/pull/100454)
+- Android chat now keeps sent messages and active replies stable through reconnects, reconciling delayed history without duplicate turns or stale composer activity. [#100551](https://github.com/openclaw/openclaw/pull/100551)
+- Android push-to-talk now cleans up backgrounded, cancelled, or retried captures without reopening the microphone or stopping a newer voice session, and overlapping requests return busy. [#100552](https://github.com/openclaw/openclaw/pull/100552) Thanks @xialonglee.
+- Android users can now long-press an assistant reply and choose Listen, with visible playback status, tap-to-stop, and on-device speech fallback. [#100772](https://github.com/openclaw/openclaw/pull/100772)
+- Android Talk Mode now keeps push-to-talk busy until the active turn is safely handed off, preventing overlapping microphones, stale playback, or the wrong relay resuming. [#100786](https://github.com/openclaw/openclaw/pull/100786)
+- Android chats now keep internal reasoning, tool results, and raw operational details out of both live conversations and reopened offline caches. [#100826](https://github.com/openclaw/openclaw/pull/100826) Thanks @iman-sharif.
+- Android users can long-press a completed chat message to copy all text, select an excerpt, share it, or quote it in a reply without losing their current draft. [#100879](https://github.com/openclaw/openclaw/pull/100879) Thanks @bdhwan.
+- Android chat users can preview a link's destination and summary before opening it, without messages triggering background lookups and with a clear unavailable state when inspection fails. [#100898](https://github.com/openclaw/openclaw/pull/100898)
+- Android onboarding now finishes after permission-triggered node approval instead of trapping users in a loop between the Permissions and approval screens. [#100959](https://github.com/openclaw/openclaw/pull/100959)
+- Android's model picker now stays aligned with the active chat and agent, and a failed model change no longer sends the next message with the previous model. [#100985](https://github.com/openclaw/openclaw/pull/100985)
+- Android hides thinking controls for models that do not support configurable reasoning, prevents unsupported settings from breaking live or queued sends, and restores the user's preference on compatible models. [#101002](https://github.com/openclaw/openclaw/pull/101002)
+- Android users can search sessions by name, label, or key beyond the currently loaded Recent or Archived window, with cached active-session matches still available during a temporary Gateway outage. [#101102](https://github.com/openclaw/openclaw/pull/101102)
+- Android users with a physical keyboard can press Enter to send a chat message while modified Enter combinations remain available for multiline text. [#101321](https://github.com/openclaw/openclaw/pull/101321) Thanks @3ninyt3nin-creator.
+- Android users can now see safe page thumbnails in expanded link previews, while bad or blocked images quietly leave the text preview intact. [#101396](https://github.com/openclaw/openclaw/pull/101396)
+- Android users can now archive a chat session and delete it from the Archived view even with the app's bounded operator permissions. [#101522](https://github.com/openclaw/openclaw/pull/101522)
+- Indonesian Android strings ship under Android's recognized locale; the same prior-release work also prepared the 2026.6.11 Play version and store text. [3412318](https://github.com/openclaw/openclaw/commit/341231831b706df0024d2d9e2096438e3581b5af) Thanks @joshavant.
+- Traditional Chinese users now see localized wording for common native app actions, permissions, connection messages, and mobile states. [f0d2066](https://github.com/openclaw/openclaw/commit/f0d2066787f172079c19f26b72f49ad3950ceea6)
+- Android now explains in the selected language how to keep a saved token or replace an existing Gateway setup. Sources: [32f3eb3](https://github.com/openclaw/openclaw/commit/32f3eb3fa805e776f562ea1af6f7731bf4ce8b48), [6336762](https://github.com/openclaw/openclaw/commit/6336762b68e5cebd44acbda527ba1d964448355a), [eeb0682](https://github.com/openclaw/openclaw/commit/eeb0682409b86dcd956ffe30e45f12c6424d8c05), [ed72b86](https://github.com/openclaw/openclaw/commit/ed72b860a436eb187c9fa2fb4ef91ecb13180760), [e376f28](https://github.com/openclaw/openclaw/commit/e376f285e87bfa07bf3111b446b9e44fcba6cd9e), [a6631fe](https://github.com/openclaw/openclaw/commit/a6631fee6d465b30e116038d8e6e8aa1f041019c), [283bd82](https://github.com/openclaw/openclaw/commit/283bd82eb414f0ba968157aec77eac7701e7ae1e), [6d5a1db](https://github.com/openclaw/openclaw/commit/6d5a1db04859adbf8860376ddbd5ce1b5d5f3efa), [d3087fc](https://github.com/openclaw/openclaw/commit/d3087fcf375c81b81ffb0cf7b65764559b6e836f), [8bab3f7](https://github.com/openclaw/openclaw/commit/8bab3f7dbd8364de93422d064c00c7171139ccf4), [dfb7bc8](https://github.com/openclaw/openclaw/commit/dfb7bc84d8194177988d2870fe17b963912a1c52), [7780e30](https://github.com/openclaw/openclaw/commit/7780e3062dcb547227d90cbd02111910e00e3f6f), [b109b88](https://github.com/openclaw/openclaw/commit/b109b88b5785b22fea0fe20f06b314dbda156d58), [c1b7bf2](https://github.com/openclaw/openclaw/commit/c1b7bf23bc16d641e966ff4de7cbb8b2becfaddc), [dedb17c](https://github.com/openclaw/openclaw/commit/dedb17ceff3c93c938aaff5c3f697d70d06e9dd1), [6f84c10](https://github.com/openclaw/openclaw/commit/6f84c10bdae1f73b112777c9a94d5933171d4b75), [a8358e8](https://github.com/openclaw/openclaw/commit/a8358e8848c8228893a259b36cd6f54139fa18da), [2501ca3](https://github.com/openclaw/openclaw/commit/2501ca340945072642b9bb2ec1348a15de83d4b6), [1b40eb9](https://github.com/openclaw/openclaw/commit/1b40eb9e6a2feb0c436948fbcd113424e85db01e), [d47308f](https://github.com/openclaw/openclaw/commit/d47308f8008ca08c7df983d3932c63d4ede4060c), [3a2baef](https://github.com/openclaw/openclaw/commit/3a2baef0bfc62b0d37b4f7648869e57fabaa3cb3).
+- Android license notices, acknowledgements, empty states, and open-license actions now use the selected language across the translations in this release. Sources: [4b8b60f](https://github.com/openclaw/openclaw/commit/4b8b60f8abc1ae99228fe31bedd31977064062d1), [3b16c41](https://github.com/openclaw/openclaw/commit/3b16c41daa8237f481c2b8061b0f6e00817ffbca), [c4966e8](https://github.com/openclaw/openclaw/commit/c4966e86cbc9403177ccb725d5d1cb87c519b853), [116e9db](https://github.com/openclaw/openclaw/commit/116e9db2a18d5341b5e44844dfefa938fa467e6a), [1617233](https://github.com/openclaw/openclaw/commit/1617233ff141c913def1675aaee33bac3590b1f6), [a598c97](https://github.com/openclaw/openclaw/commit/a598c976d01db50adc35de495a981635c6a38cd4), [3b9e0c8](https://github.com/openclaw/openclaw/commit/3b9e0c86828e0d8f45acafd2908b82191ecfd13f), [eebbf6c](https://github.com/openclaw/openclaw/commit/eebbf6cba5fef565044e556b862f3ce09db2fd86), [4c08ea4](https://github.com/openclaw/openclaw/commit/4c08ea403ad9436d9a8cf0dd02799a441a1bc4db), [21be45c](https://github.com/openclaw/openclaw/commit/21be45c17e845e4027f7a044d2c009423bcd07b7), [b415072](https://github.com/openclaw/openclaw/commit/b415072a2e6a900f382d7e68594b4511bd1a0c5b), [9eec24d](https://github.com/openclaw/openclaw/commit/9eec24df6710308e7a66a7a80bc232f7ee024900), [de23987](https://github.com/openclaw/openclaw/commit/de23987f13b95d71a145218b11f36857a8eefc2c), [898564e](https://github.com/openclaw/openclaw/commit/898564e71aef7abe66112d757eee8db83eaf04d2), [7af800b](https://github.com/openclaw/openclaw/commit/7af800b5be960b595829642b412fce2842017cfc), [a47ec8d](https://github.com/openclaw/openclaw/commit/a47ec8d303e46642d81c8c231786fb0b2fd51045), [fac9e58](https://github.com/openclaw/openclaw/commit/fac9e586685666a9f8159f5132fb18ad2bc37210), [61e4ef0](https://github.com/openclaw/openclaw/commit/61e4ef08f483e9e32eaa6edf6fb391185e462394), [399f9d6](https://github.com/openclaw/openclaw/commit/399f9d696171ec14eafa1d5de64533d2b9670819), [9069f69](https://github.com/openclaw/openclaw/commit/9069f696986ed970565989efacb27024160dbad2), [2e049f5](https://github.com/openclaw/openclaw/commit/2e049f509fad1ba2889186e457e630bad50d7a16).
+- Android Talk, dictation, speech-provider setup, readiness, and failure guidance now use the selected language across the translations in this release. Sources: [c785196](https://github.com/openclaw/openclaw/commit/c785196287d0e929396def1fc0929af672bdc7cf), [9edb906](https://github.com/openclaw/openclaw/commit/9edb9065a8596f8473bea1ae4a626da8f0508724), [da67520](https://github.com/openclaw/openclaw/commit/da67520b8d5fc49775005638425ca2d9317d6ee7), [88f13ca](https://github.com/openclaw/openclaw/commit/88f13cab62999abe7c2650ccd32d55e72ee80046), [e878efe](https://github.com/openclaw/openclaw/commit/e878efe9508edd88166a09eb5a1e503ab405aad9), [662d127](https://github.com/openclaw/openclaw/commit/662d127f60b91aaaec4b5363c73bd00855d9e3f0), [5002a0e](https://github.com/openclaw/openclaw/commit/5002a0e9ea9970e4e270ec029c994dc217549687), [fe57718](https://github.com/openclaw/openclaw/commit/fe57718b419a08a5306e3d195519d3527a07f936), [ebcf8dc](https://github.com/openclaw/openclaw/commit/ebcf8dcaf7120bfdc01d0b83c595895355944b5b), [4e7ca8e](https://github.com/openclaw/openclaw/commit/4e7ca8e6c6afe672da1a40922e67f94e005f9e8b), [9863ceb](https://github.com/openclaw/openclaw/commit/9863cebef12bf2e7b1414ac5f64bc3277a7ca28b), [768da09](https://github.com/openclaw/openclaw/commit/768da09ceb157a1bfd4dd309b8566a2b9ce7668d), [ff5d986](https://github.com/openclaw/openclaw/commit/ff5d98681f7e38043bbc33a87fade6069da9795c), [005ebd1](https://github.com/openclaw/openclaw/commit/005ebd108f4d6ebd663c8cf996634aeaf3e82287), [2824796](https://github.com/openclaw/openclaw/commit/28247960130f88b6ac01d8a392d54d0996212c1a), [4eaec93](https://github.com/openclaw/openclaw/commit/4eaec934e83d0bc4f0d595c37e06356c5b54dc2a), [f99fdc9](https://github.com/openclaw/openclaw/commit/f99fdc9403b49b59a42c8d3522368d64b9168498), [555f601](https://github.com/openclaw/openclaw/commit/555f601230c075185f362c71db518096c3818998), [d2af689](https://github.com/openclaw/openclaw/commit/d2af68965a0cdb3a1ed91c2d1ba8aedd76dcb3ac), [81e92de](https://github.com/openclaw/openclaw/commit/81e92deb089b54ccedbe0c9593b492f6f09b989d), [8ed6c78](https://github.com/openclaw/openclaw/commit/8ed6c78b7891b12fee2b378d79e6888764455486).
+- Android pairing and connection failures now provide localized next steps for expired codes, credentials, approvals, and retries. Sources: [48eae1b](https://github.com/openclaw/openclaw/commit/48eae1b8c96d9e8873ba59ccc6e2493fa847c27e), [f095eb9](https://github.com/openclaw/openclaw/commit/f095eb9fd989020ad1bdd57a57702ce899f98607), [714c2b0](https://github.com/openclaw/openclaw/commit/714c2b07bdf715055205b550018d289e4fb06948), [d2b5bb7](https://github.com/openclaw/openclaw/commit/d2b5bb72e8e3b61dac5ddc7085fb0b5dfe53a18c), [d2551bd](https://github.com/openclaw/openclaw/commit/d2551bdd3cf53973d679a47f3e753fc0d75f3edb), [6b91507](https://github.com/openclaw/openclaw/commit/6b915072208b121055000ef1d3a36578eac4da2e), [f1c4476](https://github.com/openclaw/openclaw/commit/f1c44762771edb9fe2124a15c871dc466b215c43), [5ef6fb4](https://github.com/openclaw/openclaw/commit/5ef6fb4d7cd053e1caa0d1caf27ff93f7bb3311c), [e2e0312](https://github.com/openclaw/openclaw/commit/e2e03127240c1878b3ea6a336fd91bd995a2be83), [7fb70b2](https://github.com/openclaw/openclaw/commit/7fb70b235d1d7d4ece6519b27f2d65d51999272c), [d702f5c](https://github.com/openclaw/openclaw/commit/d702f5c6e6c4f1463c82c4f74d96765b316f76bf), [24e6b9f](https://github.com/openclaw/openclaw/commit/24e6b9fbe1b9449b837fecddf1f9b160ed7bb896), [7cb41cc](https://github.com/openclaw/openclaw/commit/7cb41ccc63f51208630426e08ceef65e78b02bf9), [a6040c3](https://github.com/openclaw/openclaw/commit/a6040c3560c18005b58aed73a687b8c0d06b7d6b), [5e61da3](https://github.com/openclaw/openclaw/commit/5e61da3deb190b16899157ace98aa520b424e085), [18360ac](https://github.com/openclaw/openclaw/commit/18360ac668f82631f61cf48d0816800385f4cf05), [17a1e3b](https://github.com/openclaw/openclaw/commit/17a1e3bbb2b8de1da6569fe4f46a4ea4138c56e6), [adafb56](https://github.com/openclaw/openclaw/commit/adafb56b2eb9207d93896ebf6c5faa9205875833), [5b5fadb](https://github.com/openclaw/openclaw/commit/5b5fadbf0d17c1fddb13d891037767beb64aa144), [9b30570](https://github.com/openclaw/openclaw/commit/9b30570a935ecdae8ee0e2bc45a42ffdd7223948), [d331a36](https://github.com/openclaw/openclaw/commit/d331a36250f8ebb29bda2ae8fa480a2aa5e15193).
+- Android Gateway discovery, QR and manual setup, connection checks, approvals, and permission guidance now use the selected language across the translations in this release. Sources: [28062c8](https://github.com/openclaw/openclaw/commit/28062c868c03e1e6876013d450c8f92bf1fc2faf), [3d43858](https://github.com/openclaw/openclaw/commit/3d438588c5eb0497bdb2fbccf9d6f6cd325d0ec5), [ad74b32](https://github.com/openclaw/openclaw/commit/ad74b322ba80178c1c0f68348a55d5d3e65e64ae), [1b07620](https://github.com/openclaw/openclaw/commit/1b076209c4d2ea37a7178b50f5ba5c54b5753c2b), [4fa4c9e](https://github.com/openclaw/openclaw/commit/4fa4c9e06e39e095a7373390240b3a5a5cf1be79), [1dd5230](https://github.com/openclaw/openclaw/commit/1dd52307fcd74bc25ea31800a4c551bc415f7645), [9db7ec5](https://github.com/openclaw/openclaw/commit/9db7ec5edd62e3f05758a28a6c6acb14f6889ea5), [e6f8788](https://github.com/openclaw/openclaw/commit/e6f8788bf5569e87e9df0d3e404eaef5f86184ab), [e5cf67e](https://github.com/openclaw/openclaw/commit/e5cf67ea1d73d9724a227000eadead902fa606a9), [b52d988](https://github.com/openclaw/openclaw/commit/b52d98861e8c14f30dc459c395fd60281fa99604), [cd3b4ee](https://github.com/openclaw/openclaw/commit/cd3b4eee7d104d266d8514afea2ae53eea435e9d), [c3bcb9f](https://github.com/openclaw/openclaw/commit/c3bcb9fa21ec5f1b98bdb89940e93707b8f9a3e1), [8af3aa0](https://github.com/openclaw/openclaw/commit/8af3aa0b1bfa3f5d2950b053a8d7d2568cbbea31), [c34e79e](https://github.com/openclaw/openclaw/commit/c34e79e7299b19267000a79bb94bcae9608f93a1), [c9c8f6c](https://github.com/openclaw/openclaw/commit/c9c8f6c9f6a9ebf337ff486c15b9cc4d43904ffe), [255e251](https://github.com/openclaw/openclaw/commit/255e2518de492d518cde78617f6c5b220bb1278d), [0e98ba4](https://github.com/openclaw/openclaw/commit/0e98ba4391dddfa9bcd48a978b5cd1df8ae03411), [0cc9927](https://github.com/openclaw/openclaw/commit/0cc9927577c6663a5839a4d2ad3e5708df04157a), [97955d9](https://github.com/openclaw/openclaw/commit/97955d969d83a158a70c23912703e92b69b0883a), [ba449f2](https://github.com/openclaw/openclaw/commit/ba449f240d4e437752be44bef76e93c177454ca4), [0e22e54](https://github.com/openclaw/openclaw/commit/0e22e54431f5740b65ddbfcc307bd6b3c1f43eea), [ae65251](https://github.com/openclaw/openclaw/commit/ae65251fdf5ebfa7213a7d36f64a5bbb8883eb4c), [d957f5a](https://github.com/openclaw/openclaw/commit/d957f5a7900e134b514915cee07c45bb0c2a54be).
+- Android now explains in the selected language when a scoped IPv6 address must be replaced with an unscoped address or LAN hostname. Sources: [5793f73](https://github.com/openclaw/openclaw/commit/5793f731f54f1de387a49e014a632517450f75a2), [066e697](https://github.com/openclaw/openclaw/commit/066e6973b084c62717a2e9ac99b84e99459597b7), [bf35947](https://github.com/openclaw/openclaw/commit/bf35947eb2695740e61cdd180fde44b4308ba472), [3385817](https://github.com/openclaw/openclaw/commit/3385817658496c88166f16cdbcbb0dbd3b8419b5), [a0a5054](https://github.com/openclaw/openclaw/commit/a0a5054b93bf842ff4dd281dac2617129dd9900c), [66cb9a9](https://github.com/openclaw/openclaw/commit/66cb9a99b1d9c30589fcc9b42144c95322bd30ab), [3da73a7](https://github.com/openclaw/openclaw/commit/3da73a77fe51060659a3ad69018a65e19cf21837), [df659ec](https://github.com/openclaw/openclaw/commit/df659eca87253824b5eccaa1939fa38877a87e7e), [57a3975](https://github.com/openclaw/openclaw/commit/57a3975ce14062de887707e38ab580b20ff39421), [141b2cf](https://github.com/openclaw/openclaw/commit/141b2cf4d10cb33a487e62c7e304aba88b135da1), [b043adf](https://github.com/openclaw/openclaw/commit/b043adf192bb64e8ff64bbf6b9631e30a4446f1e), [dcc4fa8](https://github.com/openclaw/openclaw/commit/dcc4fa874683a59f86656be19adfc05b688cc3ea), [eade8f1](https://github.com/openclaw/openclaw/commit/eade8f1c1a142eefa47a2657ef77a352944506cc), [72a8098](https://github.com/openclaw/openclaw/commit/72a809840890575654f7d293631965af0541f9e9), [355fa77](https://github.com/openclaw/openclaw/commit/355fa773f8ac13c433eea42f4e575c895b224863), [8cc1786](https://github.com/openclaw/openclaw/commit/8cc1786f495af1c7c55ac5f2b145ff7df25853dd), [a3ef37b](https://github.com/openclaw/openclaw/commit/a3ef37b991533671eae13ddbd25324bc5f9c4749), [cb9ac50](https://github.com/openclaw/openclaw/commit/cb9ac50f5bc7f8148eeacbf8b921ebaa3bab6680), [cab8147](https://github.com/openclaw/openclaw/commit/cab81470d96126ef92614ba38468e94964429c20), [7cc3cb0](https://github.com/openclaw/openclaw/commit/7cc3cb0d28c807871b2e997a996f4c920fc0b7ae), [ca258fb](https://github.com/openclaw/openclaw/commit/ca258fb9452d6dac7344530fafbcf2939238d9a4).
+- Android command search and New Chat labels now use the selected language across the translations in this release. Sources: [b81c58b](https://github.com/openclaw/openclaw/commit/b81c58bdf6a07894231bc3afcab9a6b12b175bf8), [8929118](https://github.com/openclaw/openclaw/commit/8929118353fce0b8ac8189a95fd4534b39e85903), [1eee853](https://github.com/openclaw/openclaw/commit/1eee853c71e1ddd5c632e49f1e75b18c0837add7), [a5c9662](https://github.com/openclaw/openclaw/commit/a5c9662cd17746a35adf350f55b3f6b7c6cae78c), [9035729](https://github.com/openclaw/openclaw/commit/9035729528a9ae0ed4922728c94fd025cfdd8ea6), [2e359d4](https://github.com/openclaw/openclaw/commit/2e359d49951bf8c786e4c018ef59858743e80386), [91f4d0a](https://github.com/openclaw/openclaw/commit/91f4d0ae25ae86f76cccaac709b84d87990c7ca1), [e785c4a](https://github.com/openclaw/openclaw/commit/e785c4a8f7025ee7a529816a50207c0f925e3a93), [2c5a076](https://github.com/openclaw/openclaw/commit/2c5a07661c153bced0feb10f34e74811f2920831), [02250d9](https://github.com/openclaw/openclaw/commit/02250d957fed2a1e05baac4b33b7315603002732), [bf23194](https://github.com/openclaw/openclaw/commit/bf23194888b626ec4318955d4305197c1c9c4a88), [603502f](https://github.com/openclaw/openclaw/commit/603502f60f54bf9c0e0b7bd8b200ac0a4cc0d5e5), [a837a1a](https://github.com/openclaw/openclaw/commit/a837a1ac6c00c3e71471bcf4ff451b9cecf02f69), [26df1fa](https://github.com/openclaw/openclaw/commit/26df1fa7bca40fbb24f199593ae4bd4de74b2302), [c926610](https://github.com/openclaw/openclaw/commit/c9266107d6c65489b75ae412fe9484d2eca347c6), [c312f9f](https://github.com/openclaw/openclaw/commit/c312f9f0e059b838f4afdbf20f2f1bd8b938ba13), [f4275fa](https://github.com/openclaw/openclaw/commit/f4275fa00b8f89055a8b3a8b23740153750e97af), [69d4657](https://github.com/openclaw/openclaw/commit/69d4657bdb2da553641e34f1b7f85223cfb8c660), [3e66eb9](https://github.com/openclaw/openclaw/commit/3e66eb9de863d333d9f7b7951d2b63eac857df07), [db5057e](https://github.com/openclaw/openclaw/commit/db5057edf935d85b6324bd725506424f2554fc89), [1fee4a5](https://github.com/openclaw/openclaw/commit/1fee4a5daf57a864cd730b9dc2f0bcb19d90c5d8).
+- Supported non-English Android builds now localize offline Gateway queue guidance and the Retry and Delete actions for text messages. [660d752](https://github.com/openclaw/openclaw/commit/660d752b348f740f130610571101db1f0e3ebb53)
+- Supported non-English Android builds now translate more cron inspection, delivery error, copy feedback, default-state, and agent request details. [d83ee4c](https://github.com/openclaw/openclaw/commit/d83ee4c44f9562c4e73fb571016624cf54b538d7)
+- Android model organization, default-model, and pinning controls now use the selected language. Sources: [41bea62](https://github.com/openclaw/openclaw/commit/41bea62b4a28fab24edff319c7cd8807c494cd53), [bdc98f4](https://github.com/openclaw/openclaw/commit/bdc98f482a1ab6f86766041d8c48a16dddde5a96).
+- Android link-preview controls and status messages now appear in the selected language across refreshed locales. [9997c53](https://github.com/openclaw/openclaw/commit/9997c534b8ebd82fb8db0e9a944e75e594facb2d)
+- The Android background-location explanation, settings action, and Not Now choice now appear in the selected language when Always location mode is offered. [4c38d89](https://github.com/openclaw/openclaw/commit/4c38d89c0c948b215dd00603db68a80029364c37)
+- Android users with a hardware keyboard can now send from the chat composer with Enter, while an unaccepted send still preserves the draft. [de8db74](https://github.com/openclaw/openclaw/commit/de8db7405850146199c5f4e6e9efa0704878eea4) Thanks @vincentkoc.
+- Android users can now connect to Gateways behind Cloudflare Access or another authenticating reverse proxy by saving the required credential headers in Advanced manual-connection settings. [#100765](https://github.com/openclaw/openclaw/pull/100765)
+- The Android Files card now lets users browse the active agent workspace, preview text and images, and share output directly from their phone. [#100776](https://github.com/openclaw/openclaw/pull/100776)
+- Android users can switch the current chat's model from the composer, pin favorites, revisit recent choices, and return to the default without leaving the conversation; older pairings may need to be renewed. [#100798](https://github.com/openclaw/openclaw/pull/100798)
+- Android's About screen now clearly identifies OpenClaw and provides direct links to the website, documentation, source repository, and Discord community. [#100994](https://github.com/openclaw/openclaw/pull/100994)
+- Android chat now renders top-level display LaTeX as readable equations while invalid or still-streaming math remains visible as text. [#101435](https://github.com/openclaw/openclaw/pull/101435)
+- Broader native app setup, chat, Talk, permission, connection, session, provider, and status text now uses the selected language across the language packs updated in this release. Sources: [a39b07b](https://github.com/openclaw/openclaw/commit/a39b07bb15f280c6d83522f79b1397104e5e05c4), [f8e1e0c](https://github.com/openclaw/openclaw/commit/f8e1e0c5bfbc1b43339ffaaaddd3ee6e45083c2d), [db27d2e](https://github.com/openclaw/openclaw/commit/db27d2ecfa77666397f841d6c0d47153ff94d822), [28a8414](https://github.com/openclaw/openclaw/commit/28a841472684eed2d98a1a277fcefc30855b580b), [e8e96bf](https://github.com/openclaw/openclaw/commit/e8e96bf7ee03aa251fc196693deb70af81da3d63), [6ea407d](https://github.com/openclaw/openclaw/commit/6ea407d46223ad3336abfc93abfb0345b2a58e75), [0011a18](https://github.com/openclaw/openclaw/commit/0011a184786686e625268f55799bdfbb8c8c7fda), [8c5adbf](https://github.com/openclaw/openclaw/commit/8c5adbfe3ec4f68a49d41a3b313a3b6b059c81d3), [019603d](https://github.com/openclaw/openclaw/commit/019603d336028c31de7c49814b45bb29314174e8), [d3d7282](https://github.com/openclaw/openclaw/commit/d3d7282a8cf4c99a29efa8c58c1980557f1c1abc), [267898c](https://github.com/openclaw/openclaw/commit/267898cddb9804bc2f27f94350e0c2342b48bf4b), [55ed57a](https://github.com/openclaw/openclaw/commit/55ed57a4e39b8e40628b9fcbfc982e9ac5fd86b5), [c54dc67](https://github.com/openclaw/openclaw/commit/c54dc67381933fa6240fe617e414fd6f1933ea38), [fd0355d](https://github.com/openclaw/openclaw/commit/fd0355d5b1a12c263bbd87e01ee88f451d11514b), [49726a5](https://github.com/openclaw/openclaw/commit/49726a5f5cbc013d42d7bf64c3033bbce4af319c), [2ffeedf](https://github.com/openclaw/openclaw/commit/2ffeedf406e741e9f58858c83af06aa763ba1ab6), [#98043](https://github.com/openclaw/openclaw/pull/98043), [beca2b1](https://github.com/openclaw/openclaw/commit/beca2b1749733f4afccf47a780187859e7afce22), [4078dc7](https://github.com/openclaw/openclaw/commit/4078dc78cc79b6a9ab0564f065fe1871a9a0c499), [e7e98f6](https://github.com/openclaw/openclaw/commit/e7e98f6399cd7bffdd5598bb86a48066dd2ce3e3), [3020f78](https://github.com/openclaw/openclaw/commit/3020f7817eb3ecf54057ed2847a0d54d0801d348), [0c82908](https://github.com/openclaw/openclaw/commit/0c82908f78e9eb33a9ad13dd726fa92833a688d9), [8a3935f](https://github.com/openclaw/openclaw/commit/8a3935fe0ba7b06dd76203b4f20b11a74ecbc688), [3f289fd](https://github.com/openclaw/openclaw/commit/3f289fdb4042446042b6cd9a5261a17dc3edf6a0), [203a896](https://github.com/openclaw/openclaw/commit/203a896b27c5c5191823138a4365578e0e77352d), [6afef15](https://github.com/openclaw/openclaw/commit/6afef15100fb402fb747a3543822d33fb9086f68). Thanks @yeager.
+- Native chat controls for jumping to the latest message or reply now use the selected language across the translations in this release. Sources: [e31fa36](https://github.com/openclaw/openclaw/commit/e31fa360d94a0efd6003079271986ad32f0c2f9c), [375def8](https://github.com/openclaw/openclaw/commit/375def86042a938141bed0c635c361df72cf0ab2), [aabe44f](https://github.com/openclaw/openclaw/commit/aabe44f6382206a49855e8b7c7f1848666790f61), [48c3f4b](https://github.com/openclaw/openclaw/commit/48c3f4b10326a890352ba5e7dd51fad897145c38), [3db6fb9](https://github.com/openclaw/openclaw/commit/3db6fb9972768d7b4979a2649f202d8851935dd8), [a4b51e5](https://github.com/openclaw/openclaw/commit/a4b51e58d3627ba4524a98d9aebe2c11115b284e), [a60686d](https://github.com/openclaw/openclaw/commit/a60686dbc376667625e1613aa131af5487e5d8fa), [12e17ec](https://github.com/openclaw/openclaw/commit/12e17ec052982a37c29245d738954488248ea8c7), [6c4ac0c](https://github.com/openclaw/openclaw/commit/6c4ac0c71da53cd99968a976894c7b8def078f67), [bdc6258](https://github.com/openclaw/openclaw/commit/bdc625866b942f8f8d82ecfb72427f7c90992e78), [a775f9f](https://github.com/openclaw/openclaw/commit/a775f9f78e80a76b49cdf259e71ee002ee1da101), [a1f6acc](https://github.com/openclaw/openclaw/commit/a1f6accef457ab9f48adff2975a853e28c291909), [ee9f61d](https://github.com/openclaw/openclaw/commit/ee9f61d724ff265017c93aef0b11c2d5f1a2401b), [f188c66](https://github.com/openclaw/openclaw/commit/f188c664c0e73d455f3bf6c5ac074a5432269c50), [2525078](https://github.com/openclaw/openclaw/commit/2525078b86544143634697a4f46aef850b783025), [ed5ccda](https://github.com/openclaw/openclaw/commit/ed5ccda79c8b0b96c59a6af880bf114997e85414), [a6a4792](https://github.com/openclaw/openclaw/commit/a6a4792098a88953f1be8a81035f06b9bd7ed83a), [0924bee](https://github.com/openclaw/openclaw/commit/0924bee96bcc86715942d11c31b878c323548e90), [0420aef](https://github.com/openclaw/openclaw/commit/0420aefb1d4eeab37bbcf7f50268c41cfb760b26), [d23c4fd](https://github.com/openclaw/openclaw/commit/d23c4fdbb55f06833b9e37675185c003f7b3ea81), [37f0067](https://github.com/openclaw/openclaw/commit/37f006725d3706cfa28922178e123d8ff192f352).
+- New-chat and worktree-chat entry points now appear in the selected language across supported Android and Apple app locales. [24bca38](https://github.com/openclaw/openclaw/commit/24bca38cdaad4a304a5624ef8ddc6cdc9b7d4d5a)
+- Supported non-English native apps now cover more Gateway setup, session, provider, health, messaging, terminal, and device text without English gaps. [52f1e05](https://github.com/openclaw/openclaw/commit/52f1e056006dc3aeca574877d51b942c87fa7cb1)
+- Refreshed native language packs now cover workspace files, sharing actions, folder states, Android SMS guidance, message delivery states, and related branding. [a9b0a9a](https://github.com/openclaw/openclaw/commit/a9b0a9a12b07899d8a0c4638a8521f5865d75bc6)
+- Native app command search now translates loading, unavailable, retry, and no-result states across the languages updated in this release. Sources: [745d2d0](https://github.com/openclaw/openclaw/commit/745d2d09cdbc79a019d2f7491bf04959ead4e51b), [7f7bec7](https://github.com/openclaw/openclaw/commit/7f7bec78445d049ba1d1b7019b2085cc808beb5a), [35be1c8](https://github.com/openclaw/openclaw/commit/35be1c81439c8df99e4de7057344c5bf0d056f56), [7db67ab](https://github.com/openclaw/openclaw/commit/7db67abd9eb01c36c55f3621a1b3521b290131b3), [4bc5766](https://github.com/openclaw/openclaw/commit/4bc57666cd8b0924f5ab15d5d8cafc4ba9b0ddbb), [0672720](https://github.com/openclaw/openclaw/commit/06727207d66ec1aef814664cf1e88da82c100140), [2a8cd44](https://github.com/openclaw/openclaw/commit/2a8cd440d14ae66e41c63140ea0c0067ca033461), [fd648fb](https://github.com/openclaw/openclaw/commit/fd648fbb17575fec3780c7d8fddf13780b083df2), [00b0b40](https://github.com/openclaw/openclaw/commit/00b0b40e284f40c3c8906251bbb202b81caab656), [a67990a](https://github.com/openclaw/openclaw/commit/a67990a180d6915328165dd7dc9975395160a784), [7640f67](https://github.com/openclaw/openclaw/commit/7640f672b407cf28384cbf5396cdf5d20965da6b), [15f4819](https://github.com/openclaw/openclaw/commit/15f481920c079364513b06939edc06aba6caef04), [4d1d720](https://github.com/openclaw/openclaw/commit/4d1d720164dbf3eb46c4d3a4a98814c2a1d2bdc2), [d1d3a27](https://github.com/openclaw/openclaw/commit/d1d3a2724feeca65759f2658c4af6a8350c1f854), [c2737d5](https://github.com/openclaw/openclaw/commit/c2737d55a9ffea741e07687a6eb40eff61fd369d), [bd3263d](https://github.com/openclaw/openclaw/commit/bd3263d713a1dbb299c14392139bab3cc5aed428), [127ce63](https://github.com/openclaw/openclaw/commit/127ce639547ef0f6016c829c31b915d97d4a55df), [0c960cd](https://github.com/openclaw/openclaw/commit/0c960cd8ae6a1553bdef3820b8167376772e7e53), [e6c3ad9](https://github.com/openclaw/openclaw/commit/e6c3ad99637b4f6fba34d9f2d64f7ca5b2413e45), [84c86f7](https://github.com/openclaw/openclaw/commit/84c86f73eb99b716598d031e7dce58ed73fa5d28), [e7aea60](https://github.com/openclaw/openclaw/commit/e7aea605426cfe8e39287b1e07fa23436260c88b).
+- macOS onboarding now translates local Gateway installation, checks, repairs, retries, paused setup, and resume guidance across the languages updated in this release. Sources: [7a717b7](https://github.com/openclaw/openclaw/commit/7a717b777037c6e5152eda24e135e2a64295d256), [85d31e1](https://github.com/openclaw/openclaw/commit/85d31e10d5fcbbeb331e31aa67f8bce520cdbd8e), [27778a7](https://github.com/openclaw/openclaw/commit/27778a7c3de9ba798ae821d5a8dfc3059d4b9af2), [cffc6ad](https://github.com/openclaw/openclaw/commit/cffc6adbce9ca2c8421459a29cfc7bcabb5cf148), [ab0d604](https://github.com/openclaw/openclaw/commit/ab0d604ced35802e8e754ba298b76f5d9a933e1b), [972d394](https://github.com/openclaw/openclaw/commit/972d394c7b008ff278a138c6e1587647e8545c4f), [edbbdf6](https://github.com/openclaw/openclaw/commit/edbbdf6728472f98b92bba22381dd7d70bcb9c0b), [863a054](https://github.com/openclaw/openclaw/commit/863a054576cdeed556bb55c110a451f5c8cab571), [ef5650f](https://github.com/openclaw/openclaw/commit/ef5650f7816433aa5003ebef40019220911bf126), [5f2e51f](https://github.com/openclaw/openclaw/commit/5f2e51fccfc1c700a854cf1b288b16311fd43f87), [5769416](https://github.com/openclaw/openclaw/commit/5769416b6280042684efde75a64ebb36ff27c6d7), [a3aa917](https://github.com/openclaw/openclaw/commit/a3aa917225ecaf87ef83d41f7d23b31dba748722), [2f7bd01](https://github.com/openclaw/openclaw/commit/2f7bd01835c8e7fe28a0aee44d235a6fd521c7f4), [c54a6f3](https://github.com/openclaw/openclaw/commit/c54a6f304e49ba6746e8d92bd96d7ed904352a2c), [9c3ffc5](https://github.com/openclaw/openclaw/commit/9c3ffc5aafbf1075c0f6a00bdd2956a71e8a5f05), [469e707](https://github.com/openclaw/openclaw/commit/469e707970ea5ac0465b83b259f060b13ed2eede), [d066a81](https://github.com/openclaw/openclaw/commit/d066a81d225df29c3f763c62885219991585bea6), [72a3b71](https://github.com/openclaw/openclaw/commit/72a3b712af9b02352d6f2d8d2af3202204480097), [63aa909](https://github.com/openclaw/openclaw/commit/63aa90921602909f19293ba243c344f4d895da6e), [b68e2e7](https://github.com/openclaw/openclaw/commit/b68e2e701ae5f083909e499a84d57ec225cc5ffb).
+- Native prompts for starting work, checking status, using phone and voice controls, pairing, and returning to Chat now use the selected language across the translations in this release. Sources: [dd050bc](https://github.com/openclaw/openclaw/commit/dd050bc5f8151488e080b117714ea9f5cad832b5), [db72ffd](https://github.com/openclaw/openclaw/commit/db72ffd5d47050acb2d4dd72de8087c162876523), [4997802](https://github.com/openclaw/openclaw/commit/4997802eb0051cc83b9da1a06c923f211ff12159), [2dc7bd1](https://github.com/openclaw/openclaw/commit/2dc7bd19cb67742a7908427d2512d7b816f4d96f), [4381c29](https://github.com/openclaw/openclaw/commit/4381c294942b342c0b7df82668fdae7883978ba8), [9eb1a05](https://github.com/openclaw/openclaw/commit/9eb1a05c49082f221547015ad7a69561d113964a), [7838bc8](https://github.com/openclaw/openclaw/commit/7838bc82b6df287946b9d45afd52f507c1e1463c), [4352eaf](https://github.com/openclaw/openclaw/commit/4352eaf6ade181654d5a729e5632a1681385b1e6), [43fe5cc](https://github.com/openclaw/openclaw/commit/43fe5cc890fc98a29af7aacd4030a0c288f76f76), [6bd1a4b](https://github.com/openclaw/openclaw/commit/6bd1a4b89f2f82da1e19b0205c80fc4bd855be6d), [531af42](https://github.com/openclaw/openclaw/commit/531af42246acecc8ee37d0ee189c8d3b8fea3af6), [305715c](https://github.com/openclaw/openclaw/commit/305715c725af26d80c69bc9daa3fad77df330139), [8f9e163](https://github.com/openclaw/openclaw/commit/8f9e1635a1d6351f9ec4a64c2624423e45b5e7a8), [2abad57](https://github.com/openclaw/openclaw/commit/2abad575d250b6e7723a660c92b5ad7fed9ea379).
+- Supported non-English native apps now translate the new Terminal destination, Gateway setup guidance, Back action, connection messages, and OpenClaw branding. [e069cb2](https://github.com/openclaw/openclaw/commit/e069cb26f72a2e6233df8e2bd18a4274e1d53722)
+- Localized macOS builds now translate the new GitHub link label, including its accessibility-facing text, instead of falling back to English. [8be1d36](https://github.com/openclaw/openclaw/commit/8be1d366a1f72936495c3d2b00461c5b58572706)
+- Native app onboarding and AI connection guidance now reflects Crestodian and the current setup flow across supported non-English locales. Sources: [ad4809f](https://github.com/openclaw/openclaw/commit/ad4809f677f531cb00085c1d006db3d46a529ed8), [f0ecc16](https://github.com/openclaw/openclaw/commit/f0ecc16629f018d157345f1c653011f3ec9c97d3).
+- `openclaw tui` now finds the custom port of an active local Gateway automatically, so users usually do not need to repeat its URL with `--url`. [#73338](https://github.com/openclaw/openclaw/pull/73338) Thanks @haishmg, @vincentkoc.
+- Gateway-backed and local TUI sessions now display assistant text as it arrives instead of appearing quiet until the final response. [#83000](https://github.com/openclaw/openclaw/pull/83000) Thanks @flashosophy.
+- The TUI now explains when repeated invalid tool arguments abort a run, giving users a useful correction clue without exposing sensitive inputs. [#91002](https://github.com/openclaw/openclaw/pull/91002) Thanks @taerlandsen, @wsyjh8.
+- The `/usage full` footer is shorter and easier to read on Telegram and other narrow displays, with detailed token information still available through dedicated views. [#92877](https://github.com/openclaw/openclaw/pull/92877) Thanks @marvinthebored.
+- Typing indicators now remain active during long Codex model, tool, command, recovery, and queued follow-up work instead of making the reply appear idle. [#95844](https://github.com/openclaw/openclaw/pull/95844) Thanks @jalehman.
+- Shortened exec and bash summaries now keep emoji and other supplementary characters intact around the ellipsis instead of displaying a broken replacement glyph. [#96963](https://github.com/openclaw/openclaw/pull/96963) Thanks @bartok9, @ly-wang19, @vincentkoc.
+- Replies triggered through Telegram or another external channel now appear only once in the terminal UI after history refreshes, while resets, session switches, delayed events, and in-progress recovery continue normally. [#96980](https://github.com/openclaw/openclaw/pull/96980) Thanks @xialonglee.
+- Long assistant and provider errors now end cleanly when emoji or rare Unicode characters land near the display limit. [#97289](https://github.com/openclaw/openclaw/pull/97289) Thanks @zenglingbiao.
+- The TUI now directs users to the pending device or scope-upgrade approval command instead of incorrectly sending them through chat-DM pairing. [#98144](https://github.com/openclaw/openclaw/pull/98144) Thanks @romneyda.
+- Mobile camera clips and screen recordings longer than 30 seconds can now finish within the existing duration limit without the request expiring early. [#99455](https://github.com/openclaw/openclaw/pull/99455) Thanks @nianjiuzst.
+- Embedded and local TUI sessions now contain event-consumer errors instead of terminating the terminal. [#100117](https://github.com/openclaw/openclaw/pull/100117) Thanks @cxbasdev.
+- TUI users can now submit prompts while an agent is working and receive the configured followup, collect, or interrupt behavior, with Esc and `/stop` canceling only the intended work. [#100123](https://github.com/openclaw/openclaw/pull/100123) Thanks @kevinlp, @sebtardif.
+- TUI `/new` now performs a real session transition with the expected lifecycle hooks and prevents a new session from racing an active turn. [#100241](https://github.com/openclaw/openclaw/pull/100241) Thanks @caopulan.
+- The Diffs viewer now provides a multi-file overview and direct file navigation, while PNG and PDF exports omit controls that cannot be used. [#100753](https://github.com/openclaw/openclaw/pull/100753)
+- Native app status and appearance choices now use the selected language across the translations in this release. Sources: [58d199b](https://github.com/openclaw/openclaw/commit/58d199bbcbd298a3e806bcf5c56eb242759dea5b), [c15348b](https://github.com/openclaw/openclaw/commit/c15348b74f6291282d79b592ec29577b2b871852), [c047a3a](https://github.com/openclaw/openclaw/commit/c047a3a9c669f12c51e3cf0f72606e53e85f7f2b), [e191685](https://github.com/openclaw/openclaw/commit/e191685be93f9a461d6346439ce227419fb41d1d), [b1e173d](https://github.com/openclaw/openclaw/commit/b1e173d4c30419f8c7f7393a9c4977f30a49ddcd), [50fecf8](https://github.com/openclaw/openclaw/commit/50fecf848c405af2902838cecb34771367f3552c), [5211afe](https://github.com/openclaw/openclaw/commit/5211afeb67cc521eb7b55cf19884e1d77c6dbbce), [4c43cf5](https://github.com/openclaw/openclaw/commit/4c43cf5eaba52ab729587c9d4f4a660638770701), [fb394de](https://github.com/openclaw/openclaw/commit/fb394de179ba7b5914b1b886795d67c17aff39e8), [ba8c1fa](https://github.com/openclaw/openclaw/commit/ba8c1fa76fe9031424cc2727c7d0f7b2cd08ecba), [7bee4f6](https://github.com/openclaw/openclaw/commit/7bee4f67d4cd66c78009497f931b8a19e03dda2a), [77ab268](https://github.com/openclaw/openclaw/commit/77ab268f79a5cee110df9ee0014b08f67368ff55), [2417d94](https://github.com/openclaw/openclaw/commit/2417d94663fdfd8770ebf00d67f0a73ae1a904cb), [9b6ef34](https://github.com/openclaw/openclaw/commit/9b6ef34f9deaa6f6fa524b860340d7000eb87ccd), [9c4274f](https://github.com/openclaw/openclaw/commit/9c4274f94570f1f41ee30350eae32255c675c38e), [2671bcc](https://github.com/openclaw/openclaw/commit/2671bcc39f8c17d55ae3e96cabf48e4d474cac19), [b21153b](https://github.com/openclaw/openclaw/commit/b21153b98d6d2bde03cd1979d6db6ecb2ad47bab), [117e8e1](https://github.com/openclaw/openclaw/commit/117e8e1e042709b6eba851fc8d208b98c43b22b9), [cc0d7e1](https://github.com/openclaw/openclaw/commit/cc0d7e1dd4c638034cafc27a93da1bb7c7735694), [e6f3f54](https://github.com/openclaw/openclaw/commit/e6f3f54ad05728d874fdc4ff492e688741785249), [dd64f66](https://github.com/openclaw/openclaw/commit/dd64f66bb981595b8558af907d628fd49322a06f), [4c16e66](https://github.com/openclaw/openclaw/commit/4c16e669b2252724cd6e68bf68d727de3edfedc9), [3a8375c](https://github.com/openclaw/openclaw/commit/3a8375c29a810d923603d9f043e3e0916548bddf), [3e3b6d6](https://github.com/openclaw/openclaw/commit/3e3b6d6669468460959f1c9a57f4cb6a84b00620), [c356245](https://github.com/openclaw/openclaw/commit/c356245fc0d04803f768b6cd0675744728618fcd), [d506201](https://github.com/openclaw/openclaw/commit/d506201c6578e5ae782c4a401cdfd46557a11b1f).
+- Native app license notices, acknowledgements, and unavailable-file explanations now use the selected language across the translations in this release. Sources: [34bf5a9](https://github.com/openclaw/openclaw/commit/34bf5a90b4ae2ff2b987899a44f9c6b10467f6fe), [068088c](https://github.com/openclaw/openclaw/commit/068088c7fc98d6e18d67855abb2c9ad9e6de449a), [a623ac7](https://github.com/openclaw/openclaw/commit/a623ac71eba10364e558490326273cf369d9ee3c), [71374d3](https://github.com/openclaw/openclaw/commit/71374d379b40cd080992955e57587b552e55a5f6), [a9b0de8](https://github.com/openclaw/openclaw/commit/a9b0de803789a9945c12bf37f143ae4cde2faeba), [8f495e2](https://github.com/openclaw/openclaw/commit/8f495e2f805af548d78ee1f3834bde962a86f1a9), [436dd39](https://github.com/openclaw/openclaw/commit/436dd3934328bce7d75d77998212441859a044db), [f917e89](https://github.com/openclaw/openclaw/commit/f917e893a6d3fb2005074b6a1d752cf4fd505497), [2c8b97c](https://github.com/openclaw/openclaw/commit/2c8b97cee9e056f155e2144311eccd5e5a66a6e2), [ace162b](https://github.com/openclaw/openclaw/commit/ace162b95b47d1a16e9b2dd42851af64c731a9f1), [e60cccf](https://github.com/openclaw/openclaw/commit/e60cccf8a9c95d7a158e3fe4b8f47204141fea2e), [359ea4c](https://github.com/openclaw/openclaw/commit/359ea4c19bc9251e225a130d6f9c0fcab71d0ec2), [b7bc860](https://github.com/openclaw/openclaw/commit/b7bc8600e46aca2fbac8e0ddbea1a1084db80c64), [49ea27e](https://github.com/openclaw/openclaw/commit/49ea27ecc230b49b664b594e99758400595fa80f), [99cbc58](https://github.com/openclaw/openclaw/commit/99cbc589536e7309a5f8c468de4d9795addad55f), [204526a](https://github.com/openclaw/openclaw/commit/204526ac0a2a35fd7482cac4c64ecee6ad7de0fa), [3821c36](https://github.com/openclaw/openclaw/commit/3821c36d58cebab82ebf46614413b688930e3b47), [030d184](https://github.com/openclaw/openclaw/commit/030d184254756706af637fb1eeb0a9c31036eb8c), [24f639c](https://github.com/openclaw/openclaw/commit/24f639c66ca9a05a6531d4504971f67434989324), [499feb2](https://github.com/openclaw/openclaw/commit/499feb2e2fd474c7abeff9e87743b720ba03f593), [591d099](https://github.com/openclaw/openclaw/commit/591d099897938a27c6383b17ca36e128abcf098c).
+- Native photo-permission controls now explain limited, selected, and recent-photo access in the selected language across the translations in this release. Sources: [c360f92](https://github.com/openclaw/openclaw/commit/c360f92563fb2221452ae599412ea61f9eee188b), [4dd027e](https://github.com/openclaw/openclaw/commit/4dd027eaa1f14356f4f7740d4258d72adb59d2f2), [9cde1ca](https://github.com/openclaw/openclaw/commit/9cde1ca97141784f89816afd9283b2d7416b9a8c), [328fb70](https://github.com/openclaw/openclaw/commit/328fb70ba730bc7bb4cd3a0eaa5e6d1d089c734c), [71e5fcc](https://github.com/openclaw/openclaw/commit/71e5fccb644b51e50f61e8e3bd6715a0fd717a58), [b11d710](https://github.com/openclaw/openclaw/commit/b11d710e524f7d6d664ea5857f358f4ebbaff6e4), [55a2a9b](https://github.com/openclaw/openclaw/commit/55a2a9b0f0c4c56d03292b930ed116a146322e6c), [c4b40d0](https://github.com/openclaw/openclaw/commit/c4b40d0b2a008c1ba1bae82a180e455bc8656e00), [3a1b983](https://github.com/openclaw/openclaw/commit/3a1b983bc227f67ac0862f1761d53f6a3fee083d), [dea40a5](https://github.com/openclaw/openclaw/commit/dea40a5f96307e9da0862bbc774100f799110d6c), [4b1fab8](https://github.com/openclaw/openclaw/commit/4b1fab8047319bc07e47ef8136a9c83594729ed8), [44ca739](https://github.com/openclaw/openclaw/commit/44ca739f77ab7dfaa1f096627e84bc79e859b849), [d36452c](https://github.com/openclaw/openclaw/commit/d36452cc0bd66722f426c7c686859cbfcb1e9f24), [a50a59e](https://github.com/openclaw/openclaw/commit/a50a59e64802a1263bd8befe6c4bea57e055499e), [49b68e1](https://github.com/openclaw/openclaw/commit/49b68e1039347867c227e992fa7fcfac3e58f932), [122e4ba](https://github.com/openclaw/openclaw/commit/122e4ba3a30f32b8d563d7afa2f60cc4cd6c431b), [4086d35](https://github.com/openclaw/openclaw/commit/4086d35caf54c3a9759b21ad5f83536cdf08c2bc), [547a563](https://github.com/openclaw/openclaw/commit/547a563e4ca3cf6d573cf6210db3ffbedb592175), [538f28a](https://github.com/openclaw/openclaw/commit/538f28abce55949ee0a412da07664092427413d1), [c5afa92](https://github.com/openclaw/openclaw/commit/c5afa92c1f8ac63a9c01b7971acabcfb1d6f948f), [32a986d](https://github.com/openclaw/openclaw/commit/32a986d21c170741b5505870dd0a2e98ec410b1d).
+- iOS location settings now explain Off, While Using, Always, Precise Location, restrictions, and permission mismatches in the selected language across the translations in this release. Sources: [3542585](https://github.com/openclaw/openclaw/commit/3542585de59987dd0b962df3ddb70bde093fa4dd), [261d79a](https://github.com/openclaw/openclaw/commit/261d79a9a42ef45a41c3947caa6e616c92702ad4), [ef1474d](https://github.com/openclaw/openclaw/commit/ef1474dd3d4dfdffd4a47a5f14166dc8e2e97a55), [cc1d61b](https://github.com/openclaw/openclaw/commit/cc1d61bd3c04d86b470f94364b1fe7fc6762c456), [2a1e118](https://github.com/openclaw/openclaw/commit/2a1e1184f5139d300567d0c2437669727dddc821), [748bfee](https://github.com/openclaw/openclaw/commit/748bfee90d16df63b9d89ae7db8c80579c8f7a6f), [e0b2dda](https://github.com/openclaw/openclaw/commit/e0b2ddad6cd7a8a562dd39fd99746557923549a1), [f371a2f](https://github.com/openclaw/openclaw/commit/f371a2f2022f9ef6dd9ee781ccf9cb3ee2cf5d88), [ee00cc7](https://github.com/openclaw/openclaw/commit/ee00cc7c949469612e79a55479c363d62a00f7e6), [27f9ae0](https://github.com/openclaw/openclaw/commit/27f9ae0c0a41f812c872439efdfb05f1df79c17c), [51a07ae](https://github.com/openclaw/openclaw/commit/51a07aec27eee6ff7c75ddc9d2d1d40ce0d74672), [ba9d167](https://github.com/openclaw/openclaw/commit/ba9d167e1a9596eff784716992a1f9885d60e892), [576169e](https://github.com/openclaw/openclaw/commit/576169e6d247308fd92cb8cdd3ba493797fa2f3f), [10500a6](https://github.com/openclaw/openclaw/commit/10500a63fa5837a58d3e9b400daa7f52d20d0fbb), [a344252](https://github.com/openclaw/openclaw/commit/a34425273c4ed1796845f1706d1c3b3974044434), [d7d280f](https://github.com/openclaw/openclaw/commit/d7d280fc78a0e8c51b3404294a6a1958a023eb03), [cb2547f](https://github.com/openclaw/openclaw/commit/cb2547f329109ee0b81a62b12ebea7743cac5905), [2191c2e](https://github.com/openclaw/openclaw/commit/2191c2eb1f77eb24f5c0dc8499630d52ebb55a68), [c63e9f9](https://github.com/openclaw/openclaw/commit/c63e9f9bf8ac0e573cfd32937e11ee0e16248709), [4b1e0de](https://github.com/openclaw/openclaw/commit/4b1e0deb3374012338586f39fa8f064515a50cc8), [525c4c7](https://github.com/openclaw/openclaw/commit/525c4c7ce1b821236a07901d80b14a0e7ed81ded).
+- Native skill availability, Gateway setup, diagnostics, privacy, and access guidance now use the selected language across the translations in this release. Sources: [fdcd5c0](https://github.com/openclaw/openclaw/commit/fdcd5c0eb0c2493f5d3845fcf76a02f4e1a6d6ba), [26f6735](https://github.com/openclaw/openclaw/commit/26f673526e7a6680df175570da67baf6fe5abeed), [5220eff](https://github.com/openclaw/openclaw/commit/5220effc10c92cec20abb6df0c5acdaa40e56ad6), [bb7dbda](https://github.com/openclaw/openclaw/commit/bb7dbda027b9451281f2d81d2f4cbad9a003599c), [952245b](https://github.com/openclaw/openclaw/commit/952245b49c4b6743afc9ad97f6f3e48af407e5ed), [edb1e74](https://github.com/openclaw/openclaw/commit/edb1e74645ebba0b8992863a9d395d80fd10498f), [f7bad57](https://github.com/openclaw/openclaw/commit/f7bad5749b9a441a6b55d1dc34cf9ef037270960), [0602930](https://github.com/openclaw/openclaw/commit/060293056b33ff1a44dd5ab6f44ff8783d612f31), [e779b8f](https://github.com/openclaw/openclaw/commit/e779b8f1bde92173dcaeadd87853a458656dd7b3), [0400be7](https://github.com/openclaw/openclaw/commit/0400be7118c03b6e3c2330fc31d9451e5a2c0151), [851d0ad](https://github.com/openclaw/openclaw/commit/851d0ad7354321ccad43ecf5f7c04abd168da0dc), [1e0dd95](https://github.com/openclaw/openclaw/commit/1e0dd95e5d9a0bb4d62dd72ce451a9902b4eb6d3), [703e1ad](https://github.com/openclaw/openclaw/commit/703e1adadefe213c4fcc312ccb4aead7b120a3a1), [1c93e50](https://github.com/openclaw/openclaw/commit/1c93e509a36673ee8a58b0c1aa6c4b9a9a00a5e8), [37c45f2](https://github.com/openclaw/openclaw/commit/37c45f28fbbdbd768bd7fefa8d8a94274d075aa9), [8fe917b](https://github.com/openclaw/openclaw/commit/8fe917b4f7784e44dabcb6cf7b673da74bf3753e), [da21e4b](https://github.com/openclaw/openclaw/commit/da21e4b8dd47fc174cef6e3373471aba37f851e0), [f4f63b1](https://github.com/openclaw/openclaw/commit/f4f63b187041cd20fe4016ad62d85ad59b94fa66), [3e4febb](https://github.com/openclaw/openclaw/commit/3e4febbe68f82d8ee06977486a0f50ecba933452), [a82cd35](https://github.com/openclaw/openclaw/commit/a82cd35ed5405a5cca392a5272fe898264eaf107), [52323b6](https://github.com/openclaw/openclaw/commit/52323b67c5872f5c396ad2eb5e5749bfa1a63f6e).
+- Native Gateway connection, diagnostics, permissions, onboarding, Chat, and Talk guidance now uses the selected language across the translations in this release. Sources: [3b27bb4](https://github.com/openclaw/openclaw/commit/3b27bb4536a3bdc4b6bdf82fc59f878e478121d0), [e296d14](https://github.com/openclaw/openclaw/commit/e296d1447eb7b7666100e34169b0cd27b07e759c), [5516775](https://github.com/openclaw/openclaw/commit/5516775933a84f3bc88f9a485d7f53ad2d9e5928), [6ec4962](https://github.com/openclaw/openclaw/commit/6ec49620baf962ecbd2c69f0299fd98410f18a8f), [291f2a4](https://github.com/openclaw/openclaw/commit/291f2a477373c01cde9aac0f36438b9073b7677e), [7e2d41b](https://github.com/openclaw/openclaw/commit/7e2d41b94c7a11ba96abe1839819e7c63c3e6c87), [81bc96f](https://github.com/openclaw/openclaw/commit/81bc96f70f9e50fcf7cbbe014d0e6f9b10ff35d0), [574556c](https://github.com/openclaw/openclaw/commit/574556cd32d816436209d006d6744273b82a0276), [8bb44e6](https://github.com/openclaw/openclaw/commit/8bb44e60d0cf740d13663d40a780fa28705eeeed), [ae09908](https://github.com/openclaw/openclaw/commit/ae09908259e163598eea8170640255aa6d8c04ce), [42fc19d](https://github.com/openclaw/openclaw/commit/42fc19d77e93e7a41ce634c43f3317d3e123fd6a), [28bbb43](https://github.com/openclaw/openclaw/commit/28bbb439f6398a3e48fa8a88e67879290bb70ea0), [6ff9185](https://github.com/openclaw/openclaw/commit/6ff9185637fc3ab0fd1f966355fc7cfe505863e8), [4be0be6](https://github.com/openclaw/openclaw/commit/4be0be697fb95444596f9d604cf54ea4ecd12943), [0f1fbbe](https://github.com/openclaw/openclaw/commit/0f1fbbe8779dfbe317bf99de0a45aebcdadec1ea), [d893a72](https://github.com/openclaw/openclaw/commit/d893a724f6f0e91161a93a223d01057c04cd8db4), [f5cb29b](https://github.com/openclaw/openclaw/commit/f5cb29b2881edf85de14569adbfaea44b7b02056).
+- Transcript export controls, chat actions, and export failure messages are now translated across 21 supported native app locales. [45f561a](https://github.com/openclaw/openclaw/commit/45f561ab6c24de9848b70823c80b7ac770531c41)
+- Supported non-English native apps now translate newer app information, support links, and message retry, delete, and waiting-to-send states. [82f5ac1](https://github.com/openclaw/openclaw/commit/82f5ac150ffde0c847696cddcdcb2d300bb44294)
+- Wake Words and Discovery Logs now use current, natural labels across supported non-English native app locales. [de30d2f](https://github.com/openclaw/openclaw/commit/de30d2f5c333d49004f0771f529b578ed1af6f17)
+- Supported non-English native apps now translate workspace file browsing and sharing, image preview failures, offline status, and custom Gateway header controls. [6b99fd9](https://github.com/openclaw/openclaw/commit/6b99fd9a94ce99023c77e733efe7943e4f51c285)
+- Apple native app users across 21 supported non-English locales now see translated Listen and speech-playback status controls. [0146534](https://github.com/openclaw/openclaw/commit/01465340f6dfe6dd51671e3a0c3b33d23c1ff1d7)
+- Swift clients can now decode skill curator actions and status details such as pinned state, use counts, timestamps, archived reasons, and overlaps. [ad833d7](https://github.com/openclaw/openclaw/commit/ad833d788305faeb9c12f3f4c5068674d201ee68)
+- Android and iOS now explain which side needs an update when app and Gateway protocol versions differ and avoid offering reconnect attempts that cannot succeed. [#98385](https://github.com/openclaw/openclaw/pull/98385) Related [#98384](https://github.com/openclaw/openclaw/issues/98384). Thanks @joshavant.
+- Authorized remote clients can now request playable speech for an individual assistant message using the existing Gateway TTS configuration without accessing server-local files. [#100770](https://github.com/openclaw/openclaw/pull/100770)
+- iOS and Android users can create empty session groups, rename them once across their sessions, and remove a group without deleting the conversations inside it. [#101234](https://github.com/openclaw/openclaw/pull/101234)
+- OpenClaw's mascot now uses the same float, blink, antenna, and claw animations across web, iOS, and Android surfaces while respecting reduced-motion preferences. [851156a](https://github.com/openclaw/openclaw/commit/851156af3b35b56c56d8d20fff7fb97104d13d1a)
+- The iOS and Android terminal pages now receive the operator credential from the connected device session, so authenticated users do not land on a terminal that cannot connect. [451190d](https://github.com/openclaw/openclaw/commit/451190d625693153dfdca800fdbb9a05b2c21b6a) Thanks @vincentkoc.
+- iOS and Android can now show the Gateway terminal as a focused full-screen view with stored credentials and a clear unavailable state instead of embedding the full desktop Control UI. [9c78489](https://github.com/openclaw/openclaw/commit/9c7848928f8b7f4104dd3eb4ddc9330d850d1886)
+- On iPad, selecting Overview, Chat, Talk, or another sidebar destination now leaves the current Settings detail and opens the requested screen. [#94991](https://github.com/openclaw/openclaw/pull/94991) Thanks @solvely-colin.
+- Translated Gateway controls on iOS and approval actions on Apple Watch no longer fall back to English in supported locales. [#97112](https://github.com/openclaw/openclaw/pull/97112) Thanks @vincentkoc.
+- Native iOS Chat now follows Larger Text and Dynamic Type settings for messages, the intro, and composer text with less clipping. [#97552](https://github.com/openclaw/openclaw/pull/97552) Thanks @jmcte.
+- iPhone users pairing with a LAN Gateway now stay authenticated after the one-time bootstrap so Chat and the node connection do not immediately disconnect. [#98066](https://github.com/openclaw/openclaw/pull/98066) Related [#98064](https://github.com/openclaw/openclaw/issues/98064). Thanks @ooiuuii.
+- iOS Chat now keeps one final assistant reply per turn instead of briefly showing a duplicate that disappears after history refreshes. [#98117](https://github.com/openclaw/openclaw/pull/98117) Related [#98116](https://github.com/openclaw/openclaw/issues/98116). Thanks @joshavant, @ooiuuii.
+- Paired iOS users can start native ElevenLabs Talk with a SecretRef-backed Gateway key without copying the credential into plaintext mobile configuration. [#98210](https://github.com/openclaw/openclaw/pull/98210) Related [#98209](https://github.com/openclaw/openclaw/issues/98209). Thanks @joshavant, @ooiuuii.
+- After scanning an iOS pairing QR code, users now move to a live connection-progress screen instead of returning to Welcome while pairing continues invisibly. [#98302](https://github.com/openclaw/openclaw/pull/98302) Related [#98297](https://github.com/openclaw/openclaw/issues/98297). Thanks @joelnishanth.
+- iOS Chat now preserves intentional line breaks in assistant responses and other multiline messages without disrupting normal Markdown rendering. [#98304](https://github.com/openclaw/openclaw/pull/98304) Related [#98028](https://github.com/openclaw/openclaw/issues/98028). Thanks @jabato01, @joshavant.
+- The iOS app now opens to Chat for normal launches while preserving direct navigation to Control, Settings, Agent, Talk, and nested destinations. [#98353](https://github.com/openclaw/openclaw/pull/98353) Thanks @bsniznd.
+- iOS Talk's Gateway Default now uses the configured Gateway speech provider, and stopping a reply prevents delayed audio from leaking into later turns. [#98376](https://github.com/openclaw/openclaw/pull/98376) Related [#98153](https://github.com/openclaw/openclaw/issues/98153). Thanks @jraxworthy, @tony-ooo.
+- iOS Control, Talk, and Settings are easier to scan with clearer status emphasis, safer action styling, calmer idle visuals, and improved large-text support. [#98423](https://github.com/openclaw/openclaw/pull/98423) Related [#98397](https://github.com/openclaw/openclaw/issues/98397).
+- iOS now explains secure Gateway connection and certificate-verification failures precisely and reliably presents the fingerprint trust prompt for first-time HTTPS connections. [#98429](https://github.com/openclaw/openclaw/pull/98429) Thanks @joshavant.
+- iOS connection, warning, and information text is now easier to read in light and dark modes, and Appearance settings accurately describe the selected behavior. [#98443](https://github.com/openclaw/openclaw/pull/98443) Related [#98440](https://github.com/openclaw/openclaw/issues/98440).
+- OpenAI Realtime Talk on iPhone now uses native WebRTC by default, recovers continuous sessions from provider disconnects, and respects speaker, Bluetooth, and AirPlay output choices. [#98563](https://github.com/openclaw/openclaw/pull/98563) Thanks @pollybot13.
+- The iOS Talk fallback banner now opens Voice & Talk settings directly instead of sending users to unrelated Gateway settings. [#98602](https://github.com/openclaw/openclaw/pull/98602) Related [#98593](https://github.com/openclaw/openclaw/issues/98593). Thanks @pollybot13.
+- The iPhone app now presents a compact Talk control bar, a cleaner Appearance picker, and a properly aligned realtime-audio button beside the resting Chat composer. [#98736](https://github.com/openclaw/openclaw/pull/98736)
+- New iPhone users now get clearer QR, setup-code, and manual Gateway choices, better nearby and connection status, and a direct handoff to Chat after connecting. [#98868](https://github.com/openclaw/openclaw/pull/98868) Thanks @solvely-colin, @thats2easyyy.
+- iOS users who open Gateway, Voice, or Notifications settings from another screen now return to the Chat, Talk, Agent, Control, or Approvals screen they came from. [#98898](https://github.com/openclaw/openclaw/pull/98898) Thanks @lokimorty.
+- The iOS app now applies OpenClaw's palette consistently across Talk, settings, Gateway, privacy, usage, and workboard views while retaining accessible contrast. [#98930](https://github.com/openclaw/openclaw/pull/98930) Thanks @joelnishanth.
+- Voice Wake on iOS can now pause while Talk, camera audio, or another feature uses the microphone and resume without crashing the app. [#99137](https://github.com/openclaw/openclaw/pull/99137) Thanks @pollybot13.
+- iOS users can correct gateway details after a failed manual setup and retry immediately with the values currently on screen. [#99220](https://github.com/openclaw/openclaw/pull/99220) Related [#99219](https://github.com/openclaw/openclaw/issues/99219). Thanks @abdullahtas0.
+- The iOS chat experience now offers useful starting prompts, clearer pairing and setup actions, better agent placeholders, and steadier message ordering during refreshes. [#99243](https://github.com/openclaw/openclaw/pull/99243) Thanks @jcooley8.
+- iPhone users who open Chat from a Control detail can now return to that same Overview, Activity, Workboard, or Sessions screen without losing their place. [#99245](https://github.com/openclaw/openclaw/pull/99245) Thanks @solvely-colin.
+- OpenClaw now uses consistent branded typography throughout its iOS, Watch, and Live Activity interfaces while retaining Dynamic Type and accessibility support. [#99246](https://github.com/openclaw/openclaw/pull/99246) Thanks @joelnishanth, @joshavant.
+- iOS location settings now show the permission that is actually in effect, including Precise Location and mismatches between OpenClaw's selected mode and the iOS grant. [#99247](https://github.com/openclaw/openclaw/pull/99247) Thanks @pollybot13.
+- iOS users can now read OpenClaw's bundled third-party license acknowledgements from Settings > Licenses. [#99290](https://github.com/openclaw/openclaw/pull/99290) Thanks @joshavant.
+- iOS chat now lets users browse, filter, and select available commands and skills from the composer instead of memorizing exact slash commands. [#99426](https://github.com/openclaw/openclaw/pull/99426) Thanks @solvely-colin, @viczhang6.
+- iOS users can now add contacts and search affected records without crashing the app or disconnecting the node. [#99475](https://github.com/openclaw/openclaw/pull/99475) Thanks @abdullahtas0.
+- iOS Calendar, Reminders, and Contacts commands now return an immediate permission-required result instead of opening a prompt that leaves the agent request waiting. [#99477](https://github.com/openclaw/openclaw/pull/99477) Thanks @nianjiuzst.
+- iOS gateway QR pairing now stays open through trust and approval, avoids scanner crashes, and keeps credentials and pending actions with the correct gateway during switches. [#99572](https://github.com/openclaw/openclaw/pull/99572) Thanks @pollybot13.
+- On iOS 26, affected Settings switches now respond when users tap anywhere on the labeled row, with accessibility labels and values preserved. [#99888](https://github.com/openclaw/openclaw/pull/99888) Thanks @ly85206559.
+- Apple chat now presents fenced code with theme-aware highlighting and GitHub-style tables as aligned native tables on iOS and macOS. [#100207](https://github.com/openclaw/openclaw/pull/100207)
+- Apple chat now restores the visible in-progress state after backgrounding or reconnecting, preventing overlapping sends and reconciling one correct final reply. [#100277](https://github.com/openclaw/openclaw/pull/100277)
+- Repeated iOS Gateway setup links now update the visible settings screen with the newest connection instead of being consumed by a hidden view or replaying stale details. [#100328](https://github.com/openclaw/openclaw/pull/100328)
+- iOS chat now provides tactile feedback for accepted sends and most completed or failed runs, though some abort paths may still omit or misclassify failure feedback. [#100416](https://github.com/openclaw/openclaw/pull/100416)
+- iOS users can export the current conversation as a named, readable Markdown file and save or send it through the system share sheet. [#100417](https://github.com/openclaw/openclaw/pull/100417)
+- Choosing While Using for location access on iOS now remains selected after approval and after the app is relaunched. [#100512](https://github.com/openclaw/openclaw/pull/100512)
+- Talk and Settings rows on iOS now use consistent title sizing and typography, making adjacent options easier to scan. [#100515](https://github.com/openclaw/openclaw/pull/100515)
+- The iOS About screen now presents OpenClaw branding, license information, and direct links to the website, documentation, GitHub repository, and Discord community. [#100531](https://github.com/openclaw/openclaw/pull/100531)
+- Apple Watch pairing and companion status now refresh without restarting the iPhone app, while cold-launch actions wait for readiness or return a clear `WATCH_UNAVAILABLE` error. [#100732](https://github.com/openclaw/openclaw/pull/100732)
+- iPhone and iPad users can now browse an agent workspace, preview generated files, logs, and configuration, and share a file without returning to the host computer. [#100767](https://github.com/openclaw/openclaw/pull/100767)
+- The iOS app can now connect through Cloudflare Access, Basic authentication, and similar proxies by storing per-Gateway credential headers for the next reconnect. [#100768](https://github.com/openclaw/openclaw/pull/100768)
+- iPhone users can now choose Listen on an assistant reply, follow preparation and playback status, stop at any time, and fall back to on-device speech when needed. [#100771](https://github.com/openclaw/openclaw/pull/100771)
+- iOS chat now shows and switches the active model, while iOS and macOS model pickers support pinned favorites and the five most recent choices. [#100774](https://github.com/openclaw/openclaw/pull/100774)
+- Display equations in iOS and macOS chats now appear as readable, accessible typeset math, with horizontal scrolling for wide formulas and raw text retained for malformed expressions. [#100829](https://github.com/openclaw/openclaw/pull/100829)
+- iOS and macOS hide the thinking-level control for models that cannot use it, avoid sending stale unsupported settings, and restore the previous level when a reasoning-capable model is selected again. [#100875](https://github.com/openclaw/openclaw/pull/100875)
+- Streaming replies in iOS and macOS chats now reveal text more smoothly word by word, while reduced-motion users still receive immediate text and completed messages remain unchanged. [#100884](https://github.com/openclaw/openclaw/pull/100884)
+- Offline iOS messages now survive relaunch, remain tied to their original Gateway and conversation, and send once only when delivery can be confirmed, with clear uncertain-delivery status when it cannot. [#100942](https://github.com/openclaw/openclaw/pull/100942)
+- iOS and macOS chat now show a context-usage ring that changes warning color near the limit, helping users anticipate compaction or truncation in long conversations. [#101183](https://github.com/openclaw/openclaw/pull/101183)
+- iOS and macOS users can preview a safe link's title and description inside chat before deciding whether to open it. [#101198](https://github.com/openclaw/openclaw/pull/101198)
+- Expanded link previews on iOS and macOS can now show a safe page thumbnail, with the existing text card retained when image loading fails. [#101387](https://github.com/openclaw/openclaw/pull/101387)
+- Finished iOS and macOS chat replies now typeset inline LaTeX formulas while streaming text, code, currency, and invalid math remain readable as plain text. [#101388](https://github.com/openclaw/openclaw/pull/101388)
+- The iOS `screen.record` command now finishes more reliably with a nonempty MP4 instead of crashing the app and disconnecting the node as recording stops. [#101550](https://github.com/openclaw/openclaw/pull/101550) Thanks @tony-ooo.
+- The iOS app now recovers when a location permission prompt returns without a clear decision instead of waiting indefinitely. [75c8753](https://github.com/openclaw/openclaw/commit/75c8753a2cb52cf14acdc50cfa2d2c99368d0e0e) Thanks @vincentkoc.
+- The Mac About screen now links directly to the OpenClaw website, documentation, GitHub project, and Discord community, matching the other native apps. [6e7ef63](https://github.com/openclaw/openclaw/commit/6e7ef631d2ac41370fc5b14b8e5b5992413a4cd7)
+- iOS pairing codes can now advertise both local and Tailnet Gateway routes, allowing the phone to save the first reachable address when it is away from the private LAN. [#100317](https://github.com/openclaw/openclaw/pull/100317)
+- iOS chat and macOS webchat users can search, pin, rename, archive, restore, and reopen sessions from the in-chat switcher instead of scrolling a simple recent list. [#101053](https://github.com/openclaw/openclaw/pull/101053)
+- macOS remote mode can now connect through explicitly selected managed SSH aliases and recover app-owned tunnels when SSH multiplexing or backgrounding is enabled. [#99661](https://github.com/openclaw/openclaw/pull/99661)
+- Finder-launched macOS sessions can now use SSH aliases backed by common user-installed `ProxyCommand` helpers without losing agent state or failing Gateway readiness checks. [#100214](https://github.com/openclaw/openclaw/pull/100214)
+- Multiple macOS app instances now preserve shared SSH tunnel tracking and clean up stale processes more reliably, reducing port conflicts after a crash. [#100601](https://github.com/openclaw/openclaw/pull/100601)
+- The Mac app now shows the animated OpenClaw mascot in onboarding and About, while Reduce Motion keeps it still. [f052a2f](https://github.com/openclaw/openclaw/commit/f052a2f23b2d2b510686526ce52c6637bca8a4c6)
+- The macOS onboarding and About mascot now more closely matches openclaw.ai with theme-aware colors, glow, hover scaling, and smoother motion that keeps its antennae visible. [05c9dcc](https://github.com/openclaw/openclaw/commit/05c9dccf35ec86ebd41e17fdcc0dbf67d203b54c)
+- The macOS Dashboard now follows a restarted remote SSH tunnel to its new local port automatically and keeps authentication tokens out of logged URLs. [#100488](https://github.com/openclaw/openclaw/pull/100488)
+- After a macOS crash or force quit, OpenClaw now reclaims confirmed orphaned remote-mode SSH tunnels so relaunches can reuse the preferred local Gateway port. [#100489](https://github.com/openclaw/openclaw/pull/100489)
+- When Android Chat cannot reach the Gateway, users can open Gateway Settings or copy connection diagnostics directly from the blocked screen. [#94566](https://github.com/openclaw/openclaw/pull/94566) Thanks @tosko4.
+- Android manual Gateway setup now accepts IPv6 hosts such as `::1` directly instead of rejecting an address that works only when entered as a bracketed WebSocket URL. [#99107](https://github.com/openclaw/openclaw/pull/99107) Thanks @ly85206559.
+- Android manual setup now accepts and preserves complete `ws://`, `wss://`, and HTTP Gateway addresses, including embedded ports, so private-LAN onboarding reaches the intended server. [#99110](https://github.com/openclaw/openclaw/pull/99110) Related [#87216](https://github.com/openclaw/openclaw/issues/87216). Thanks @cursoragent, @ly85206559, @ruben2000de.
+- Android voice features now speak only chat events explicitly identified as assistant replies, preventing user, tool, system, or role-less text from being read aloud. [#99123](https://github.com/openclaw/openclaw/pull/99123) Thanks @ly85206559.
+- Android third-party onboarding now recognizes SMS access when send and read permissions are granted in separate prompts, while genuinely missing permissions remain unauthorized. [#99147](https://github.com/openclaw/openclaw/pull/99147) Thanks @nianjiuzst.
+- Cancelled, timed-out, failed, or interrupted Android `camera.clip` requests now release the camera and remove unfinished temporary files before later camera commands run. [#99153](https://github.com/openclaw/openclaw/pull/99153) Thanks @nianjiuzst.
+- Android's thread picker now prioritizes real conversations, hides internal setup and device sessions, and still makes valid older chats available through All. [#99557](https://github.com/openclaw/openclaw/pull/99557) Thanks @ly85206559.
+- Android setup now rejects gateway URLs with unsupported IPv6 interface zones and directs users to an unscoped address or LAN hostname before saving. [#99570](https://github.com/openclaw/openclaw/pull/99570) Thanks @ly85206559.
+- Android now preserves specific Gateway and A2UI error codes containing numbers, such as `A2UI_HOST_UNAVAILABLE`, instead of replacing them with a generic failure. [#99591](https://github.com/openclaw/openclaw/pull/99591) Thanks @ly85206559.
+- Android Talk now applies supported directive values even when generated or dictated JSON uses different capitalization for keys such as `Voice` or `Language_Code`. [#99592](https://github.com/openclaw/openclaw/pull/99592) Thanks @ly85206559.
+- Android node commands now honor common boolean values such as `yes`, `no`, `1`, and `0` for app filters and camera audio options. [#99873](https://github.com/openclaw/openclaw/pull/99873) Thanks @ly85206559.
+- Android Talk Mode now delivers agent-consult answers even when realtime completion events arrive out of order, preventing sessions from remaining stuck on `Thinking...`. [#100049](https://github.com/openclaw/openclaw/pull/100049) Thanks @qingminglong.
+- Android's Home overview now uses more consistent card, Talk, and recent-session spacing for a calmer, easier-to-tap first screen. [#100059](https://github.com/openclaw/openclaw/pull/100059) Thanks @iwhatsskill.
+- Android Voice and Talk setup text now truncates cleanly on narrow screens and at larger accessibility font sizes instead of appearing clipped. [#100060](https://github.com/openclaw/openclaw/pull/100060) Thanks @iwhatsskill, @solvely-colin.
+- Android Gateway settings now show both setup actions as full-width buttons, keeping `Pair New Gateway` readable and easy to tap. [#100090](https://github.com/openclaw/openclaw/pull/100090) Thanks @iwhatsskill.
+- The Android Voice tab now gives Realtime Talk and Dictation text and controls enough room to remain readable on phones and at larger font sizes. [#100491](https://github.com/openclaw/openclaw/pull/100491) Thanks @iwhatsskill.
+- Android's "New chat in worktree" action is now translated across supported non-English locales instead of appearing with a missing resource. [#100805](https://github.com/openclaw/openclaw/pull/100805) Thanks @amknight.
+- Tapping an Android notification created by `system.notify` now brings OpenClaw to the foreground. [#100888](https://github.com/openclaw/openclaw/pull/100888)
+- Returning to an already loaded Android chat no longer flashes a loading screen, and the Overview recent-session list stays deduplicated and steadier during refreshes. [#100966](https://github.com/openclaw/openclaw/pull/100966) Thanks @solvely-colin.
+- Android's command palette now keeps action and session rows visually aligned, with consistent icons, navigation spacing, and clean truncation for long labels. [#101072](https://github.com/openclaw/openclaw/pull/101072) Thanks @iwhatsskill.
+- Android Home's Recent Sessions section now keeps recently active rows in a stable order, collapses duplicates, and preserves labels and timestamps during partial live refreshes. [#101161](https://github.com/openclaw/openclaw/pull/101161) Thanks @solvely-colin.
+- Android physical-keyboard users can press or hold Enter to send once without leaving a stray newline, while Shift+Enter and in-progress input-method composition keep working. [#101360](https://github.com/openclaw/openclaw/pull/101360) Thanks @3ninyt3nin-creator, @joshavant.
+- Expanded Android link previews now keep thumbnail memory within a byte budget, reducing excessive memory retention during long chats. [#101560](https://github.com/openclaw/openclaw/pull/101560)
+- The Android app now respects a user's disconnect, connect, or gateway-switch choice during startup and reports final disconnect failures to fire-and-forget callers. [#101799](https://github.com/openclaw/openclaw/pull/101799)
+- Opening OpenClaw again from the macOS Dock or Finder now brings up the dashboard or its failure window even when the menu-bar app is already running. [#97637](https://github.com/openclaw/openclaw/pull/97637) Thanks @solvely-colin.
+- Opening Control -> Terminal on iOS now goes directly to the terminal without briefly showing the general Web UI login screen during connection. [#100727](https://github.com/openclaw/openclaw/pull/100727)
+- Realtime Talk consult calls acknowledge as soon as the embedded agent run is accepted, rather than waiting for it to finish. [#101091](https://github.com/openclaw/openclaw/pull/101091) Thanks @romneyda.
+- Terminal Hatch onboarding and other TUI connections now show `starting up` until session loading finishes, with accurate running indicators after reconnects. [#93999](https://github.com/openclaw/openclaw/pull/93999) Thanks @ml12580.
+- After the Diffs viewer is reopened or refreshed, its toolbar controls now act only on the currently displayed diff cards. [#96138](https://github.com/openclaw/openclaw/pull/96138) Thanks @brokemac79, @davinci282828.
+- Session tools now display the correct absolute path for projects beside the home directory instead of turning a shared text prefix into a misleading `~...` path. [#96562](https://github.com/openclaw/openclaw/pull/96562) Thanks @he-yufeng.
+- Codex CLI session lists now shorten long last-message previews without splitting emoji or similar characters into broken text. [#96582](https://github.com/openclaw/openclaw/pull/96582) Thanks @llagy007, @weeli-009.
+- Custom usage footers now render alias and map fallbacks correctly even when model or mode names collide with properties such as `toString` or `constructor`. [#98503](https://github.com/openclaw/openclaw/pull/98503) Related [#98466](https://github.com/openclaw/openclaw/issues/98466). Thanks @chenyangjun-xy, @zhanglei99586.
+- Repeated submits while the TUI agent is busy now update one warning instead of flooding the conversation with duplicate notices. [#99879](https://github.com/openclaw/openclaw/pull/99879) Thanks @vincentkoc.
+- `openclaw tui --local` now explains when a known slash command requires the Gateway instead of sending that command to the model as an unwanted prompt. [#100188](https://github.com/openclaw/openclaw/pull/100188) Thanks @goslingmanagment.
+- Workspace skill approvals started in the TUI now appear in that terminal, so users can review and unblock the run without switching to Telegram. [#100251](https://github.com/openclaw/openclaw/pull/100251) Thanks @vincentkoc.
+- The terminal UI now stays open and shows a safe, useful error when a local shell command, slash command, or message submission fails. [#100340](https://github.com/openclaw/openclaw/pull/100340) Thanks @cxbasdev.
+- iOS Gateway connection errors now appear as one dismissible toast that returns for a later failure and visibly reacts instead of stacking when the same problem repeats. [#98856](https://github.com/openclaw/openclaw/pull/98856) Thanks @lokimorty.
+- Equivalent rows in the iPhone Control and Settings tabs now use the same rounded icon treatment, making both lists easier to scan. [#98936](https://github.com/openclaw/openclaw/pull/98936) Related [#98916](https://github.com/openclaw/openclaw/issues/98916). Thanks @sahilsatralkar.
+- The iOS About screen now shows a concise app, device-family, and iOS summary without duplicated identity or a raw hardware identifier. [#98985](https://github.com/openclaw/openclaw/pull/98985) Related [#98943](https://github.com/openclaw/openclaw/issues/98943). Thanks @sahilsatralkar.
+- The iOS appearance setting now sits in the normal Settings list, shows the current System, Light, or Dark choice at a glance, and behaves consistently on iPad. [#99052](https://github.com/openclaw/openclaw/pull/99052) Related [#98995](https://github.com/openclaw/openclaw/issues/98995). Thanks @sahilsatralkar.
+- Cancelling or interrupting an iOS `screen.record` request now stops the system recorder instead of letting capture continue after the tool call fails. [#99155](https://github.com/openclaw/openclaw/pull/99155) Thanks @nianjiuzst.
+- iOS now recognizes Limited Photos access as usable, offers in-app controls for requesting or managing the grant, and avoids interrupting gateway requests with a surprise prompt. [#99350](https://github.com/openclaw/openclaw/pull/99350) Related [#99046](https://github.com/openclaw/openclaw/issues/99046). Thanks @tony-ooo.
+- The iPhone Control destination list is now denser and easier to scan without changing navigation or status information. [#99468](https://github.com/openclaw/openclaw/pull/99468) Related [#99439](https://github.com/openclaw/openclaw/issues/99439). Thanks @sahilsatralkar.
+- Apple Watch quick replies now survive an unavailable iPhone and reconnect later to the intended Gateway without being lost, duplicated, or misrouted. [#100372](https://github.com/openclaw/openclaw/pull/100372) Thanks @nianjiuzst.
+- Tapping the iPhone status bar now leaves the chat at the top for reading older messages until the user chooses Jump to latest. [#100502](https://github.com/openclaw/openclaw/pull/100502)
+- The iOS QR setup scanner is less likely to crash or become unstable when users open, cancel, or close the camera during onboarding. [#101235](https://github.com/openclaw/openclaw/pull/101235) Thanks @joshavant, @solvely-colin.
+- Already-paired iPhone users now return to Chat, Talk, and Settings instead of being trapped in setup when older onboarding flags are stale. [#101481](https://github.com/openclaw/openclaw/pull/101481)
+- The iOS camera permission prompt now clearly connects access to Gateway setup and assistant-requested photo, video, document, screen, or workspace capture. [e77994e](https://github.com/openclaw/openclaw/commit/e77994ed5adfd5e69c457a5bca82795eff3555bf) Thanks @joshavant.
+- Android and iOS Gateway setup now clearly requires Secure TLS for remote hosts, warns before trusted LAN use without encryption, and offers actionable update guidance for protocol mismatches. [#101325](https://github.com/openclaw/openclaw/pull/101325) Thanks @joshavant.
+- The macOS menu-bar app now uses fewer idle CPU wakeups and less repeated configuration and permission work, reducing background battery use without changing active status behavior. [#100463](https://github.com/openclaw/openclaw/pull/100463)
+- Long-running `system.run` commands on the macOS app node no longer make the node appear offline or block unrelated Gateway traffic. [#100842](https://github.com/openclaw/openclaw/pull/100842) Thanks @lvan185, @vincentkoc.
+- The macOS app no longer mistakes a valid launchd-managed local Gateway for an unexpected listener and terminates active assistant or channel work. [#100867](https://github.com/openclaw/openclaw/pull/100867) Thanks @lsr911, @vincentkoc.
+- The macOS app now keeps the same paired device and node identity across upgrades, restarts, and Gateway reconnects instead of repeatedly asking for approval or creating stale duplicates. [#101105](https://github.com/openclaw/openclaw/pull/101105) Thanks @yetval.
+
+
+
+## Skills, plugins, and installs
+
+### Skills, connected apps, packages, and repairs
+
+[Skills](/cli/skills) can be drafted from a conversation or source, reviewed, pinned, archived, restored, and kept out of future context when stale. [Plugin management](/plugins/manage-plugins) is clearer about discovery, installation, updates, marketplace snapshots, connected Codex apps, approvals, and runtime failures, while [Codex supervision](/plugins/codex-supervision) can give each new thread an explicit bounded app allowlist.
+
+Official packages are easier to obtain through the supported [Docker](/install/docker) and [Android](/platforms/android) paths, and plugin-backed workflows such as Google Meet and [Apple Messages](/channels/imessage) recover from more setup and migration problems. [Doctor](/cli/doctor) also handles damaged migration caches and older plugin or skill layouts without turning a recoverable upgrade into a dead end.
+
+
+
+- Users can turn a conversation, file path, URL, or pasted note into a reviewable Skill Workshop proposal with one message instead of starting from a blank draft. [#100442](https://github.com/openclaw/openclaw/pull/100442)
+- Long-running agents can automatically retire unused Skill Workshop skills from future context, pin important ones, restore archives, and surface possible overlaps without deleting the underlying skills. [#101214](https://github.com/openclaw/openclaw/pull/101214)
+- Operators can run `openclaw plugins marketplace refresh` to verify and save a hosted feed, enforce a SHA-256 match, and see whether live, saved, or bundled data was used. [#96155](https://github.com/openclaw/openclaw/pull/96155) Thanks @giodl73-repo.
+- Owner-operated native Codex agents can now use selected apps already connected to the operator's Codex account, with a bounded per-thread allowlist and existing approval controls preserved. [#100973](https://github.com/openclaw/openclaw/pull/100973) Thanks @pash-openai.
+- Official OpenClaw container images are now available from Docker Hub as well as GHCR, reducing reliance on unofficial mirrors. [#97122](https://github.com/openclaw/openclaw/pull/97122) Thanks @vincentkoc.
+- Android users can sideload the official signed `OpenClaw-Android.apk` from a stable GitHub release and verify it with the published SHA-256 checksums. [#101212](https://github.com/openclaw/openclaw/pull/101212)
+- The opt-in Logbook lets users review a model-organized workday timeline, generate standups, and ask questions about captured activity, with owner-only local storage and configurable retention. [#99930](https://github.com/openclaw/openclaw/pull/99930)
+- Google Meet join, creation, talk-back, transcription, and related automation now work across browser and account languages by using English in OpenClaw-controlled Meet tabs. [#89671](https://github.com/openclaw/openclaw/pull/89671) Thanks @unayung.
+- Discord users can complete approved Codex Computer Use actions such as `get_app_state` and receive the native tool result instead of getting a false timeout while the tool is still running. [#96818](https://github.com/openclaw/openclaw/pull/96818) Thanks @pollybot13, @zhangguiping-xydt.
+- Updated integration runtimes keep Codex, ACP, Copilot, Telegram, and diff rendering aligned with compatible upstream behavior, while reconnect recovery no longer floods operator logs with duplicate messages. [#100027](https://github.com/openclaw/openclaw/pull/100027)
+- Docker users now get a more complete bundled AI runtime, reducing startup and runtime failures caused by package links removed during image trimming. [57ca1b0](https://github.com/openclaw/openclaw/commit/57ca1b02543af9f4ac1d78446951b98cc31fba5a) Thanks @vincentkoc.
+- Declared plugin tools now remain callable in subagent sessions after plugin registry changes, avoiding repeated `plugin tool runtime missing` failures and Gateway restarts. [#82562](https://github.com/openclaw/openclaw/pull/82562) Thanks @luoyanglang, @vincentkoc.
+- Plugin metadata cache hits no longer flood diagnostics with repeated full-scan entries, leaving smaller timelines where real scans are easier to identify. [#86796](https://github.com/openclaw/openclaw/pull/86796) Thanks @galiniliev, @vincentkoc.
+- Plugin loading no longer evaluates OpenClaw's own package code twice, reducing startup work and avoiding duplicate module, class, singleton, or registry identities in one process. [#88384](https://github.com/openclaw/openclaw/pull/88384) Thanks @vincentkoc.
+- Affected npm installations can once again start the Gateway and produce replies because speech now loads only through its supported package-backed TTS path. [#89899](https://github.com/openclaw/openclaw/pull/89899) Thanks @zhangguiping-xydt.
+- Starting QR login without a required official channel plugin now returns the exact installation command or `openclaw doctor --fix` instead of only saying the provider is unavailable. [#90517](https://github.com/openclaw/openclaw/pull/90517) Related [#83277](https://github.com/openclaw/openclaw/issues/83277). Thanks @carol-iung, @tuaran.
+- `openclaw plugins inspect` now shows the bundled document-extract plugin's PDF extractor as an available capability instead of reporting none. [#91597](https://github.com/openclaw/openclaw/pull/91597) Thanks @xydt-tanshanshan.
+- `openclaw plugins init` can now scaffold a model-provider plugin with authentication, model setup, tests, packaging, validation, and ClawHub publishing structure. [#94352](https://github.com/openclaw/openclaw/pull/94352) Thanks @patrick-erichsen.
+- Existing plugin discovery keeps the same bundled official catalog while gaining a versioned, fail-closed fallback format for the hosted marketplace work. [#95846](https://github.com/openclaw/openclaw/pull/95846) Thanks @giodl73-repo.
+- ClawHub marketplace reads now fail back to OpenClaw's bundled plugin catalog when hosted data is unsafe or unusable, providing a guarded base for the new marketplace workflow. [#95868](https://github.com/openclaw/openclaw/pull/95868) Thanks @giodl73-repo.
+- A hosted marketplace can keep serving its last verified catalog when the feed is unchanged or briefly unavailable, without trusting stale or invalid saved data. [#95877](https://github.com/openclaw/openclaw/pull/95877) Thanks @giodl73-repo.
+- The latest verified hosted marketplace catalog can survive a restart and remain available through unchanged responses or temporary feed failures, with persistence still optional. [#95964](https://github.com/openclaw/openclaw/pull/95964) Thanks @giodl73-repo.
+- Hosted marketplace entries become installable only when they match approved local sources and trusted ClawHub packages, preventing unknown or untrusted choices from slipping into installation. [#95969](https://github.com/openclaw/openclaw/pull/95969) Thanks @giodl73-repo.
+- Administrators can configure named hosted marketplace feeds and the trusted local package sources those feeds may reference, while unsupported trust settings are rejected. [#95981](https://github.com/openclaw/openclaw/pull/95981) Thanks @giodl73-repo.
+- Plugin update failures now report the real npm metadata or registry problem instead of disguising it as an unsupported package specification. [#96143](https://github.com/openclaw/openclaw/pull/96143) Thanks @brokemac79, @romneyda, @slideshow-dingo.
+- The new `openclaw plugins marketplace entries` command lists available hosted plugins, versions, and install choices while showing whether results came from live, saved, or bundled data. [#96158](https://github.com/openclaw/openclaw/pull/96158) Thanks @giodl73-repo.
+- Configured context-engine plugins such as lossless-claw now stay active after discovery instead of being silently replaced by the built-in legacy engine. [#96357](https://github.com/openclaw/openclaw/pull/96357) Thanks @vincentkoc.
+- Gateway startup now reports configured channels that failed to load, so operators can fix plugin trust, enablement, or installation before messages go missing. [#96397](https://github.com/openclaw/openclaw/pull/96397) Thanks @849261680.
+- Operators can install a pinned older ClawHub plugin when that version is compatible with their OpenClaw deployment, without the latest release's requirements incorrectly blocking it; incompatible or unverifiable versions remain blocked. [#96506](https://github.com/openclaw/openclaw/pull/96506) Thanks @isaiahstapleton.
+- Plugin-heavy startup and configuration checks, especially on Windows, now repeat fewer package-path lookups while rebuilding installed-plugin fingerprints, making those paths more responsive. [#96710](https://github.com/openclaw/openclaw/pull/96710) Thanks @211-lee, @sheyanmin, @vincentkoc.
+- macOS users can run Codex Computer Use desktop controls through managed installation without a manual `appServer.command`, and an outdated Codex Desktop app-server no longer blocks a supported plugin-local binary. [#96730](https://github.com/openclaw/openclaw/pull/96730) Thanks @bdjben.
+- Official Weixin installs and core-upgrade reconciliation now target plugin version 2.4.6 with its correct compatibility requirement instead of unexpectedly returning users to 2.4.3. [#96801](https://github.com/openclaw/openclaw/pull/96801) Thanks @lin-hongkuan.
+- `openclaw plugins update --all` now realigns trusted official plugins with the current stable or beta catalog after a core upgrade, without manual force installs or overwriting intentional targeted pins. [#96831](https://github.com/openclaw/openclaw/pull/96831) Thanks @ooiuuii, @velvet-shark.
+- Configured and accessible native Codex plugin apps now remain available when a new OpenClaw thread starts during an app-inventory and activation-state transition instead of disappearing silently. [#96872](https://github.com/openclaw/openclaw/pull/96872) Thanks @kevinslin.
+- Google Meet sessions launched through a paired macOS Chrome node now open the intended URL with the configured Chrome profile and audio tools, while unsupported actions and executable overrides are rejected before reaching the node. [#96908](https://github.com/openclaw/openclaw/pull/96908) Thanks @joshavant.
+- Changes made by plugin hooks now reach agent and child-run context, including replacements or removals made by `agent:bootstrap`. [#97281](https://github.com/openclaw/openclaw/pull/97281) Thanks @outdog-hwh.
+- `openclaw plugins update <id> --dry-run` now tells operators when a newer default release exists even if the installed plugin is pinned exactly. [#97282](https://github.com/openclaw/openclaw/pull/97282) Thanks @yungchentang.
+- Embedded context-engine plugins now see the current turn in the transcript during `afterTurn`, preventing missing first messages and duplicate imports. [#97342](https://github.com/openclaw/openclaw/pull/97342) Thanks @gorkem2020, @iwhatsskill, @sgh6688, @udjin79.
+- `/status plugins` now labels a plugin as loaded only when it is actually running, while still showing healthy installed inventory. [#97479](https://github.com/openclaw/openclaw/pull/97479) Thanks @masatohoshino.
+- Windows plugin updates no longer create managed paths so long that official Codex-backed agents fail before they can start and reply. [#97488](https://github.com/openclaw/openclaw/pull/97488) Thanks @ooiuuii.
+- Raising a running Gateway's log level to debug now immediately enables Mattermost, Matrix, Microsoft Teams, IRC, Nextcloud Talk, and other plugin diagnostics without a restart. [#97617](https://github.com/openclaw/openclaw/pull/97617) Thanks @amknight, @vincentkoc.
+- Windows can now load valid inbound media when configured roots and runtime file paths differ only in letter casing. [#97630](https://github.com/openclaw/openclaw/pull/97630) Thanks @vectorpeak.
+- Plugins can now react when a new DM pairing request is created, enabling owner alerts, audit records, tickets, and approval integrations without polling. [#97733](https://github.com/openclaw/openclaw/pull/97733) Thanks @clawsean, @omarshahine, @trupe-rs.
+- Detailed `/status plugins` now flags a plugin that was configured to run but did not load, separating runtime drift from ordinary inactive inventory. [#97878](https://github.com/openclaw/openclaw/pull/97878) Thanks @masatohoshino.
+- `openclaw update` now accepts valid bundle-format marketplace and ClawHub plugins without `package.json`, preventing plugin sync from aborting and leaving the Gateway stopped. [#98010](https://github.com/openclaw/openclaw/pull/98010) Related [#97985](https://github.com/openclaw/openclaw/issues/97985). Thanks @herove, @lilan0125.
+- OpenClaw npm packages are now about 3.18 MB smaller unpacked and 371 KB smaller compressed, with plugin SDK entrypoints and runtime behavior unchanged. [#98758](https://github.com/openclaw/openclaw/pull/98758) Related [#98757](https://github.com/openclaw/openclaw/issues/98757). Thanks @romneyda.
+- Native `/oc_*` Mattermost commands work again in packaged installs using `openclaw/mattermost`, without allowing disabled or denied plugins to bypass Gateway checks. [#98819](https://github.com/openclaw/openclaw/pull/98819) Related [#98740](https://github.com/openclaw/openclaw/issues/98740). Thanks @amknight, @keltech-services.
+- `openclaw/memory-lancedb` can now install and update under normal npm dependency resolution, keeping LanceDB-backed memory active without version pinning or bypass flags. [#99118](https://github.com/openclaw/openclaw/pull/99118) Related [#90295](https://github.com/openclaw/openclaw/issues/90295). Thanks @allenhurff, @joshavant.
+- Installing a managed npm plugin no longer makes workspace plugins from `plugins.load.paths` disappear after startup or restart. [#99196](https://github.com/openclaw/openclaw/pull/99196) Thanks @leonidaslux.
+- Git-backed plugin installs and updates now work when `~/.openclaw` and the system temp directory are on different filesystems, without a `TMPDIR` workaround. [#99896](https://github.com/openclaw/openclaw/pull/99896) Thanks @bartok9, @carelvanheerden, @vincentkoc.
+- Plugin loading now honors operator-configured Jiti native-module exceptions while retaining protection against duplicate OpenClaw package evaluation. [#100344](https://github.com/openclaw/openclaw/pull/100344)
+- Extended-stable users can install, repair, and update eligible official plugins at the exact OpenClaw core version instead of drifting onto the regular stable line. [#100448](https://github.com/openclaw/openclaw/pull/100448) Thanks @kevinslin.
+- Bundled channel setup plugins now load correctly through current-release symlinks and mixed source/dist layouts without false outside-package warnings. [#100758](https://github.com/openclaw/openclaw/pull/100758)
+- Source checkouts with a partial bundled plugin tree now retain complete built-in metadata for plugin health checks and provider endpoint discovery. [26c0285](https://github.com/openclaw/openclaw/commit/26c0285812b4299bcb5d61ae76f374410e39d5c5) Thanks @vincentkoc.
+- `openclaw update` no longer retries a plugin after successfully moving it to ClawHub, preventing a redundant transient failure from disabling the migrated plugin. [3ce26d6](https://github.com/openclaw/openclaw/commit/3ce26d690f627ad07dd1097384e8c71dd1537ac1) Thanks @vincentkoc.
+- Mac users setting up iMessage can install or update `imsg` from the setup flow, receive clearer probe guidance, and recover sessions that still reference the old skill location. [#101407](https://github.com/openclaw/openclaw/pull/101407) Thanks @omarshahine.
+- Source and macOS package builds no longer fail when the tsdown configuration is loaded from a temporary directory that cannot resolve the runtime package. [#100499](https://github.com/openclaw/openclaw/pull/100499)
+- Global npm upgrades can continue as OpenClaw's packaged files grow without hitting `InstalledDistScanLimitError`, while runaway scans remain bounded. [#101206](https://github.com/openclaw/openclaw/pull/101206)
+- When Google Meet's local OAuth callback port is occupied, `openclaw meet auth login` now offers the manual redirect-paste flow instead of stopping sign-in. [#96492](https://github.com/openclaw/openclaw/pull/96492) Thanks @jinduwang1001-max, @yetval.
+- `openclaw doctor` can continue legacy dedupe migration when a retired cache file contains malformed JSON instead of stopping with a parsing error. [#98125](https://github.com/openclaw/openclaw/pull/98125) Thanks @pick-cat.
+- Completed Voice Call status remains available through the Gateway, tool, and CLI after restart or eviction instead of incorrectly appearing missing. [#99797](https://github.com/openclaw/openclaw/pull/99797) Thanks @darren2030.
+- Source builds now work on supported Node.js distributions without native TypeScript stripping, avoiding a late failure tied to `--experimental-strip-types`. [#91262](https://github.com/openclaw/openclaw/pull/91262) Thanks @smoe, @vincentkoc.
+- The GitHub Copilot plugin no longer breaks `openclaw plugins list` or `openclaw status` during metadata-only loading before full runtime state is available. [#95229](https://github.com/openclaw/openclaw/pull/95229) Related [#94516](https://github.com/openclaw/openclaw/issues/94516). Thanks @cuihaijun, @sunlit-deng.
+- When a Telegram plugin approval cannot be routed, operators now receive practical Web UI, terminal UI, and configuration guidance instead of a generic failure or timeout. [#95973](https://github.com/openclaw/openclaw/pull/95973) Related [#95800](https://github.com/openclaw/openclaw/issues/95800). Thanks @chrisbot2026, @monkeyleet.
+- Marketplace diagnostics now show whether refresh and entries commands used a hosted feed, a saved snapshot, or a fallback without logging feed secrets. [#96194](https://github.com/openclaw/openclaw/pull/96194) Thanks @giodl73-repo.
+- Provider plugins that mask text now restore intended values inside tool-call inputs before messages, file operations, and other external actions run. [#97769](https://github.com/openclaw/openclaw/pull/97769) Related [#97761](https://github.com/openclaw/openclaw/issues/97761). Thanks @get-viti, @zoowh.
+- Plugin install and update failures now show whether npm exited, was killed, or timed out instead of presenting a blank error that makes valid packages look invalid. [#98497](https://github.com/openclaw/openclaw/pull/98497) Thanks @sanjays2402, @vincentkoc.
+- Plugin and media workflows now handle malformed or truncated ffprobe output without crashing while continuing to read valid video dimensions normally. [#98613](https://github.com/openclaw/openclaw/pull/98613) Thanks @pick-cat.
+- `/status plugins` now groups disabled plugins by reason, including allowlist, denylist, default, and override decisions, without changing activation behavior. [#99598](https://github.com/openclaw/openclaw/pull/99598) Thanks @masatohoshino.
+- Plugin authors can now import shared `textResult` and `jsonResult` helpers from `openclaw/plugin-sdk/tool-results` instead of recreating common response shapes. [#99740](https://github.com/openclaw/openclaw/pull/99740) Thanks @romneyda.
+- Plugin authors now have a shared `formatByteSize` helper for consistent byte labels, while existing labels across OpenClaw remain unchanged. [#99768](https://github.com/openclaw/openclaw/pull/99768) Thanks @romneyda.
+- Failed plugin installations now show the useful plugin error without adding a false `Also not a valid hook pack` diagnosis, while genuine hook-pack failures remain visible. [#100554](https://github.com/openclaw/openclaw/pull/100554) Thanks @vincentkoc.
+- Bundled channel runtime and setup plugins now load from valid source-only registry roots in mixed source/dist checkouts instead of silently disappearing. [#100737](https://github.com/openclaw/openclaw/pull/100737)
+- Ordinary Lobster run and resume approvals no longer fail TaskFlow-only validation simply because unused default flow fields were present. [#102036](https://github.com/openclaw/openclaw/pull/102036) Thanks @arthurnie, @lilan0125, @vincentkoc.
+- Migration `agentDir` values beginning with `~` now resolve against OpenClaw's effective home. [#99901](https://github.com/openclaw/openclaw/pull/99901)
+- Duplicate plugin-request scopes now normalize consistently, and genuine plugin scan access failures are surfaced. [#99932](https://github.com/openclaw/openclaw/pull/99932)
+- Skill archive validation and upload hashing errors now identify the missing or unreadable file while preserving the original filesystem error. [#101085](https://github.com/openclaw/openclaw/pull/101085) Thanks @cxbasdev, @vincentkoc.
+- The bundled xurl skill now shows a working Node/npm installation path, and the github skill no longer advertises an unsupported Linux apt option. [#102158](https://github.com/openclaw/openclaw/pull/102158) Thanks @not-stbenjam.
+
+
+
+## Setup, maintenance, and tools
+
+### Command-line setup, updates, and administration
+
+Operators can [attach an external coding harness](/cli/attach) to an existing Gateway session and work with compatible [Codex-supervised](/plugins/codex-supervision) threads across native and OpenClaw surfaces. [Status](/cli/status) and [configuration](/cli/config) commands provide clearer diagnostics, safer defaults, and more dependable control of sessions, services, credentials, and runtime behavior.
+
+The supported [installation](/install) and [update](/install/updating) paths preserve working state more carefully across packages, containers, and daemons. [Onboarding](/cli/onboard) and [doctor](/cli/doctor) retain choices through interrupted setup and migrations, surface actionable repair steps, and avoid silently continuing with stale services, missing plugins, or unusable model configuration.
+
+
+
+- `openclaw attach` now launches Claude Code with temporary access to the main or selected Gateway session, keeps credentials out of arguments, and revokes the grant when the session ends. [#96454](https://github.com/openclaw/openclaw/pull/96454) Thanks @anagnorisis2peripeteia, @obviyus.
+- Owner-controlled agents can opt into `appServer.homeScope: "user"` to inspect and safely fork the same Codex threads available in Desktop and the CLI. [#99821](https://github.com/openclaw/openclaw/pull/99821)
+- The bounded `openclaw hooks` commands now return control promptly after printing their output, so terminals, scripts, and CI jobs no longer remain stuck. [#76922](https://github.com/openclaw/openclaw/pull/76922) Thanks @dorukardahan.
+- Non-interactive `openclaw models list` and `openclaw models status` now exit normally after printing their results, allowing scripts and SSH diagnostics to finish without an external timeout. [#77904](https://github.com/openclaw/openclaw/pull/77904) Thanks @dorukardahan, @vincentkoc.
+- `openclaw config` now recommends a Gateway restart only when the changed settings require one, so hot-loadable agent, model, and provider edits no longer prompt unnecessary restarts. [#80823](https://github.com/openclaw/openclaw/pull/80823) Thanks @kiranmagic7.
+- Removing a visible built-in model alias now explains that the alias is automatic and shows how to shadow it, while genuinely absent aliases still report as not found. [#81641](https://github.com/openclaw/openclaw/pull/81641) Thanks @scientificprogrammer, @vincentkoc.
+- `openclaw sessions --json` now includes available subagent lineage and runtime details such as parent linkage, workspace, depth, role, timestamps, and status. [#87917](https://github.com/openclaw/openclaw/pull/87917) Related [#80286](https://github.com/openclaw/openclaw/issues/80286). Thanks @islandpreneur007, @zhangguiping-xydt.
+- `openclaw logs --follow` can bridge a brief local Gateway outage with journal output and automatically return to normal Gateway logs after recovery. [#88159](https://github.com/openclaw/openclaw/pull/88159) Thanks @anyech, @vincentkoc.
+- Built-in `openclaw nodes status`, `openclaw nodes list`, and related node commands now start quickly without unnecessary plugin initialization, while plugin-provided node commands still load when requested. [#96702](https://github.com/openclaw/openclaw/pull/96702) Thanks @erhhung, @qijian-zhang, @zengwen-dt.
+- Debug proxy capture now keeps oversized or endless response bodies from crashing the agent, while retaining useful status and header metadata. [#97551](https://github.com/openclaw/openclaw/pull/97551) Thanks @alix-007.
+- The first Gateway status check after a restart now reports the selected model's actual context window instead of briefly showing a generic 200k limit. [#97576](https://github.com/openclaw/openclaw/pull/97576) Thanks @turbotheturtle.
+- Android node reconnects now point users from a failed `devices approve` attempt to the correct `openclaw nodes approve <requestId>` command, including a reminder to reuse connection flags. [#98115](https://github.com/openclaw/openclaw/pull/98115) Thanks @welfo-beo.
+- `openclaw health` now surfaces permanently failed deliveries with queue counts and oldest-failure age instead of reporting an all-green state. [#99842](https://github.com/openclaw/openclaw/pull/99842) Thanks @masatohoshino.
+- Timing displays now roll rounded sub-second values over to `1s` instead of showing the awkward `1000ms`. [#100006](https://github.com/openclaw/openclaw/pull/100006) Thanks @qingminglong.
+- Repeated configuration warnings are now suppressed between meaningful recurrences, keeping long-running Gateway logs readable without hiding new diagnostics. [#100569](https://github.com/openclaw/openclaw/pull/100569) Thanks @vincentkoc.
+- Gateway settings marked as no-restart now take effect in live and heartbeat-driven turns without requiring a manual restart. [#100586](https://github.com/openclaw/openclaw/pull/100586) Thanks @obviyus, @sedrak-hovhannisyan.
+- TUI links now leave malformed fragments and stray punctuation as plain text while keeping valid parenthetical, IPv6, and line-wrapped URLs clickable at the correct target. [#100780](https://github.com/openclaw/openclaw/pull/100780)
+- `openclaw logs` now reports log-tail stream failures cleanly instead of crashing, hanging, or leaving `journalctl` running. [#100850](https://github.com/openclaw/openclaw/pull/100850) Thanks @cxbasdev, @vincentkoc.
+- Trimmed OpenClaw CLI logs now remain valid UTF-8 when the retained byte range begins inside an emoji or other multibyte character. [#101029](https://github.com/openclaw/openclaw/pull/101029) Thanks @ly85206559.
+- Windows backups now recover more reliably from live-write races by avoiding repeated use of the same locked temporary archive and cleaning stale retry files. [#101449](https://github.com/openclaw/openclaw/pull/101449) Thanks @lilan0125, @vincentkoc.
+- Session cost summaries now estimate a real charge when a transcript records zero dollars despite token use and known model pricing. [c5260a3](https://github.com/openclaw/openclaw/commit/c5260a3c03b0444597f3dc4a80c1f003ca7c4b4a) Thanks @nianjiuzst.
+- Session logs and cached cost views now preserve provider-reconciled zero-dollar totals while recalculating genuinely missing costs from stored provider and model details. [c45124a](https://github.com/openclaw/openclaw/commit/c45124ab8554d70c4564ae1b3a81fc65872ecb9d)
+- LaunchAgent-managed Gateways on permission-constrained macOS volumes now start the generated environment wrapper through `/bin/sh`, preventing immediate background-service exits. [#89967](https://github.com/openclaw/openclaw/pull/89967) Related [#87199](https://github.com/openclaw/openclaw/issues/87199). Thanks @joshdaynard, @zhangguiping-xydt.
+- Windows command lookup now honors the caller's `PATHEXT`, allowing valid PowerShell scripts and executables to resolve in containers, CI, and isolated environments. [#98093](https://github.com/openclaw/openclaw/pull/98093) Thanks @wendy-chsy.
+- Failed `openclaw devices approve` attempts now explain whether to approve a scope upgrade elsewhere or refresh the pending request ID and retry. [#98146](https://github.com/openclaw/openclaw/pull/98146) Thanks @romneyda.
+- `openclaw gateway status` now gives relevant credential, configuration, restart, and log guidance when a running Gateway fails its probe instead of telling operators to wait for warm-up. [#98183](https://github.com/openclaw/openclaw/pull/98183) Thanks @masatohoshino.
+- `openclaw docs` now rejects oversized search responses with a clear error before they can destabilize the CLI or exhaust memory. [#98188](https://github.com/openclaw/openclaw/pull/98188) Thanks @cxbasdev.
+- Gateway `config.patch` now accepts unrelated configuration updates when a bundled provider uses its default endpoint, without saving empty runtime-only provider fields. [#98396](https://github.com/openclaw/openclaw/pull/98396) Related [#98270](https://github.com/openclaw/openclaw/issues/98270). Thanks @momothemage, @weltmaister.
+- OpenClaw update checks now limit malformed or unexpectedly large npm registry responses before they can consume excessive memory. [#98508](https://github.com/openclaw/openclaw/pull/98508) Thanks @lzyyzznl.
+- Several edge cases now preserve transcript and voice text, surface MCP failures, bound oversized responses, show current session time, choose the right Linux package manager, and use port 443 for secure Gateway links without an explicit port. [#100258](https://github.com/openclaw/openclaw/pull/100258) Thanks @connermo, @cxbasdev, @gfaerny, @hailory, @harjothkhara, @ly85206559, @mushuiyu886, @simon-xydt, @sunlit-deng, @uditdewan.
+- Valid `openclaw.json` files with a BOM, PowerShell formatting, or deep indentation can now save authentication, model, repair, and other configuration changes without manual reformatting. [#100591](https://github.com/openclaw/openclaw/pull/100591) Thanks @vincentkoc.
+- `openclaw update` on Windows now prevents the managed Gateway Scheduled Task from relaunching during package replacement, avoiding partially updated or mixed-version processes. [#100757](https://github.com/openclaw/openclaw/pull/100757) Thanks @vincentkoc.
+- Shell-completion repair during `openclaw doctor` and updates now skips expensive plugin-command loading, avoiding unnecessary delays while full user-requested generation still includes plugin commands. [#76235](https://github.com/openclaw/openclaw/pull/76235)
+- Windows Gateway setup now detects when Task Scheduler exits without starting a listener and can use the existing fallback launch without creating a duplicate if startup is merely late. [#76245](https://github.com/openclaw/openclaw/pull/76245)
+- Pressing Ctrl+C during the installer upgrade doctor now stops the flow cleanly and prevents an incomplete or failed installation from opening a stale dashboard. [#76386](https://github.com/openclaw/openclaw/pull/76386) Thanks @sebtardif.
+- `openclaw doctor` now warns when QMD session search is enabled without transcript export and provides commands and documentation to correct the missing recall setup. [#80947](https://github.com/openclaw/openclaw/pull/80947) Thanks @anyech.
+- `openclaw doctor` now gives a missing-transcript preview command that actually shows the entries eligible for removal before users choose to enforce cleanup. [#83630](https://github.com/openclaw/openclaw/pull/83630) Thanks @yuanhanzhong.
+- Operators can inspect stale session write locks with `openclaw doctor --lint --json --only core/doctor/session-locks` and preview which locks a repair would remove or preserve. [#84366](https://github.com/openclaw/openclaw/pull/84366) Thanks @giodl73-repo.
+- `openclaw doctor` now evaluates the default agent's actual per-agent bootstrap limits, producing accurate truncation warnings and remediation guidance. [#84424](https://github.com/openclaw/openclaw/pull/84424) Thanks @kasangyong, @vincentkoc.
+- Gateway-managed skill checks can now find commands installed through pnpm 11 and common npm-global layouts, reducing false missing-tool warnings and unnecessary reinstalls. [#85238](https://github.com/openclaw/openclaw/pull/85238) Thanks @shbernal, @vincentkoc.
+- `status` and `status --json` now build session model labels with less unnecessary normalization, improving readback speed for larger session sets and incident checks. [#87831](https://github.com/openclaw/openclaw/pull/87831) Thanks @acskamloops.
+- `openclaw doctor` on Windows now detects supported Chrome versions accurately instead of warning that a working installation could not be identified. [#87937](https://github.com/openclaw/openclaw/pull/87937) Thanks @mukundakatta.
+- `openclaw doctor` no longer aborts when a configured agent workspace has not been created yet, while real file operations still enforce workspace boundaries. [#89226](https://github.com/openclaw/openclaw/pull/89226) Thanks @sasan1200, @shifengwang333-ai.
+- An invalid `openclaw nodes approve <requestId>` now shows available pending IDs and the `openclaw nodes pending` recovery command instead of a raw client error. [#94452](https://github.com/openclaw/openclaw/pull/94452) Thanks @mushuiyu886.
+- Optional Doctor lint can now report missing, unsafe, unwritable, cloud-synced, removable, volatile, or incomplete OpenClaw state storage with paths and repair guidance. [#95979](https://github.com/openclaw/openclaw/pull/95979) Thanks @giodl73-repo.
+- An opt-in Doctor lint check now explains which configured plugin installation is broken and previews the repair before operators run the existing fix workflow. [#96171](https://github.com/openclaw/openclaw/pull/96171) Thanks @giodl73-repo.
+- When cron command output is truncated, operators can still recover the earlier login or setup instruction they need without exposing its raw secret through notifications. [#96393](https://github.com/openclaw/openclaw/pull/96393) Related [#96346](https://github.com/openclaw/openclaw/issues/96346). Thanks @nz365guy.
+- A timeout while one isolated cron job is setting up no longer restarts the Gateway or interrupts unrelated agent and scheduled work. [#96396](https://github.com/openclaw/openclaw/pull/96396) Thanks @849261680, @brycemurray, @velvet-shark.
+- Operators can run `openclaw doctor --lint --all` to include every opt-in diagnostic check without changing the behavior of existing `doctor --lint` automation. [#96471](https://github.com/openclaw/openclaw/pull/96471) Thanks @giodl73-repo.
+- Default cron failure alerts enabled with `openclaw cron edit <job> --failure-alert` now survive Gateway restarts instead of silently disappearing after reload. [#96615](https://github.com/openclaw/openclaw/pull/96615) Thanks @liuhao1024.
+- Operators can run `openclaw doctor --lint --only core/doctor/gateway-health`, `--only core/doctor/gateway-daemon`, or `--all` for structured, credential-safe warnings about Gateway reachability and local service health without changing service state. [#97075](https://github.com/openclaw/openclaw/pull/97075) Thanks @giodl73-repo.
+- Operators can use the focused auth-profile Doctor lint check to find expired, missing, malformed, cooled-down, disabled, or legacy credentials with structured repair guidance. [#97125](https://github.com/openclaw/openclaw/pull/97125) Thanks @giodl73-repo.
+- A focused memory-search Doctor lint check now reports provider, credential, backend, and QMD setup problems with structured paths and fixes. [#97137](https://github.com/openclaw/openclaw/pull/97137) Thanks @giodl73-repo.
+- The workspace-status Doctor lint check now reports plugin drift, compatibility, loading diagnostics, and recoverable TaskFlow state in machine-readable form. [#97358](https://github.com/openclaw/openclaw/pull/97358) Thanks @giodl73-repo.
+- A focused device-pairing Doctor lint check now provides structured warnings and repair guidance for pending requests, stale authentication, missing scopes, and unreadable stores. [#97366](https://github.com/openclaw/openclaw/pull/97366) Thanks @giodl73-repo.
+- `openclaw onboard` now explains up front what setup covers, why full onboarding can take longer, and which optional steps can be postponed. [#97482](https://github.com/openclaw/openclaw/pull/97482) Thanks @ly85206559.
+- Operators can request a structured Doctor lint check for configured channels whose backing plugins are blocked, including the unmet requirement and suggested fix. [#97496](https://github.com/openclaw/openclaw/pull/97496) Thanks @giodl73-repo.
+- A focused tool-result-cap Doctor lint check now identifies settings below model-aware defaults or above the runtime ceiling with actionable paths. [#97500](https://github.com/openclaw/openclaw/pull/97500) Thanks @giodl73-repo.
+- Linux operators can use the systemd-linger Doctor lint check to learn when logout may stop the Gateway and get the exact `loginctl enable-linger` remedy. [#97514](https://github.com/openclaw/openclaw/pull/97514) Thanks @giodl73-repo.
+- Remote node hosts can now connect to Gateways mounted at reverse-proxy paths such as `/openclaw-gw`, including after daemon installation or reconnect. [#97679](https://github.com/openclaw/openclaw/pull/97679) Related [#97678](https://github.com/openclaw/openclaw/issues/97678). Thanks @wm0018.
+- Local Docker source builds are less likely to run out of memory, and failures that still exhaust memory now suggest the relevant build settings. [#98119](https://github.com/openclaw/openclaw/pull/98119) Related [#98118](https://github.com/openclaw/openclaw/issues/98118). Thanks @zyzo.
+- `openclaw pairing list` now gives a useful device-approval next step when no chat DM pairing channels exist instead of displaying a broken empty-choice error. [#98142](https://github.com/openclaw/openclaw/pull/98142) Thanks @romneyda.
+- `openclaw doctor` now warns when cron jobs target channels whose plugins are inactive, letting operators correct delivery before the next scheduled run fails. [#98184](https://github.com/openclaw/openclaw/pull/98184) Thanks @masatohoshino, @vincentkoc.
+- Docker and bind-mount installations can finish legacy cron migration across filesystem boundaries, with actionable warnings and duplicate-safe retries when cleanup cannot complete. [#98217](https://github.com/openclaw/openclaw/pull/98217) Thanks @masatohoshino.
+- Linux operators now see when systemd has stopped restarting a repeatedly crashing Gateway, and `openclaw gateway restart` can recover the latched failed service. [#98291](https://github.com/openclaw/openclaw/pull/98291) Thanks @masatohoshino.
+- Doctor lint can now identify legacy fenced `HEARTBEAT.md` templates and distinguish files suitable for automatic cleanup from those containing custom content. [#98400](https://github.com/openclaw/openclaw/pull/98400) Thanks @giodl73-repo.
+- Doctor lint can now flag the combination of WhatsApp, a strained Gateway event loop, and active local TUI sessions that is associated with delayed replies. [#98406](https://github.com/openclaw/openclaw/pull/98406) Thanks @giodl73-repo.
+- Control UI, pairing, setup-code, QR, and status links now prefer a reachable LAN address on hosts with VPNs, virtual adapters, WSL, Hyper-V, or multiple networks. [#98482](https://github.com/openclaw/openclaw/pull/98482) Thanks @joshavant.
+- `openclaw doctor` now explains cron jobs that still look in flight after an interrupted Gateway run and how those leftover markers are cleared on the next start. [#98620](https://github.com/openclaw/openclaw/pull/98620) Thanks @masatohoshino.
+- `openclaw gateway status --deep` can now identify Windows Firewall rules blocking LAN devices and suggest practical rule, loopback, Tailscale, or SSH-tunnel remedies. [#98666](https://github.com/openclaw/openclaw/pull/98666) Thanks @joshavant.
+- Structured Doctor lint can now report stale global plugin-runtime symlinks, including the obsolete link, its target, and the `openclaw doctor --fix` cleanup command. [#98729](https://github.com/openclaw/openclaw/pull/98729) Thanks @giodl73-repo.
+- After `openclaw doctor --fix` archives a legacy sidecar, the macOS app no longer recreates it or triggers the same migration conflict warning on every command or Gateway start. [#99039](https://github.com/openclaw/openclaw/pull/99039) Related [#98917](https://github.com/openclaw/openclaw/issues/98917). Thanks @momothemage, @p51moustache.
+- Gateway status, Doctor, and onboarding diagnostics now read large logs within fixed bounds and surface recent useful failures instead of stale noise. [#99407](https://github.com/openclaw/openclaw/pull/99407) Thanks @sunlit-deng.
+- Doctor now warns when enabled cron jobs are stuck in repeated failures without configured alerts, while healthy and below-threshold jobs stay quiet. [#99606](https://github.com/openclaw/openclaw/pull/99606) Thanks @masatohoshino.
+- Managed Gateway updates now allow active work to finish within the configured drain period before timing out the service handoff. [#99695](https://github.com/openclaw/openclaw/pull/99695) Thanks @zoowh.
+- Large session histories now produce smaller `.usage-cost-cache.json` files with less parsing and rewrite work, rebuilding automatically after upgrade. [#99714](https://github.com/openclaw/openclaw/pull/99714) Related [#99511](https://github.com/openclaw/openclaw/issues/99511). Thanks @dexhunter, @wayne524.
+- First-run skill setup on minimal machines now groups missing Homebrew, uv, or Go prerequisites into one clear note while still installing dependencies that can succeed. [#99726](https://github.com/openclaw/openclaw/pull/99726) Thanks @fuller-stack-dev, @sedrak-hovhannisyan.
+- Upgrades from the legacy config-health store no longer repeat a permanent conflict warning, and existing recovery backups remain available without overwriting newer observations. [#99728](https://github.com/openclaw/openclaw/pull/99728) Related [#99280](https://github.com/openclaw/openclaw/issues/99280). Thanks @ccbridle, @jalehman, @joshavant.
+- Installers and runtime checks now reject Node 23.0-23.10 early with supported-version guidance instead of leaving users with a broken OpenClaw CLI. [#99832](https://github.com/openclaw/openclaw/pull/99832) Thanks @fuller-stack-dev, @vincentkoc.
+- Crestodian on Claude Code or Gemini CLI can now hold multi-turn setup conversations, inspect state, request exact approval for changes, and verify writes instead of falling back immediately to a single-turn planner. [#100029](https://github.com/openclaw/openclaw/pull/100029)
+- Crestodian setup and repair chats no longer destabilize the local TUI when a terminal event consumer fails during response delivery. [#100341](https://github.com/openclaw/openclaw/pull/100341) Thanks @cxbasdev, @vincentkoc.
+- Extended-stable Gateways now show a periodic `openclaw update` hint when a newer exact package is verified, without changing the installation automatically. [#100438](https://github.com/openclaw/openclaw/pull/100438) Thanks @kevinslin.
+- Crestodian now distinguishes ordinary questions from operational requests, accepts natural approval phrases, clears stale proposals, and keeps sensitive configuration out of the conversation model. [#100656](https://github.com/openclaw/openclaw/pull/100656)
+- Fresh git installs now lead users through setup, or give the exact command to finish later, before missing configuration or Gateway authentication can break first use. [#101901](https://github.com/openclaw/openclaw/pull/101901) Thanks @fuller-stack-dev.
+- Setup now checks the configured custom agent or auth directory for credentials instead of reporting the wrong bootstrap state from a default location. [0fd69dc](https://github.com/openclaw/openclaw/commit/0fd69dc3d2b864fb7d3a0b5204a7c720b5a19c0d) Thanks @vincentkoc.
+- The CLI and full-screen TUI now open with a clear recovery message when their launch directory has been deleted instead of crashing before startup. [#93636](https://github.com/openclaw/openclaw/pull/93636) Thanks @ml12580.
+- Node status, list, and pending-pairing views now tolerate malformed saved values and show the usable node information instead of crashing. [#93930](https://github.com/openclaw/openclaw/pull/93930) Thanks @ly-wang19.
+- `usage.cost` and `sessions.usage` now reject a start date later than the end date with a clear `INVALID_REQUEST` instead of returning a misleading empty report. [#94096](https://github.com/openclaw/openclaw/pull/94096) Thanks @alix-007.
+- Browser CLI commands now accept `--browser-profile` before or after the subcommand, restoring existing remote-browser and WSL2 command patterns. [#94431](https://github.com/openclaw/openclaw/pull/94431) Thanks @ml12580.
+- Langfuse, OpenTelemetry, and Prometheus can now capture usage, cost, model, provider, timing, and session data for runs started through `/v1/responses` and `/v1/chat/completions`. [#96152](https://github.com/openclaw/openclaw/pull/96152) Thanks @rocke2020, @xialonglee.
+- `openclaw tasks maintenance --apply` now preserves active cron session history even when job IDs contain spaces, capitals, punctuation, or explicit session keys. [#96352](https://github.com/openclaw/openclaw/pull/96352) Thanks @ly-wang19, @vincentkoc.
+- `openclaw cron add` now rejects invalid `--no-output-timeout-seconds` and `--output-max-bytes` values immediately instead of silently creating a command job without the requested limits. [#96516](https://github.com/openclaw/openclaw/pull/96516) Thanks @zhangguiping-xydt.
+- `openclaw config unset` now explains when a visible value is an inherited runtime default that is not stored in the user's config, avoiding an unproductive loop between `config get` and `config unset` while leaving failed attempts unchanged. [#96557](https://github.com/openclaw/openclaw/pull/96557) Thanks @moeghashim.
+- Failed `openclaw --help` and `openclaw --version` startup now returns exit code 1 promptly instead of leaving the terminal process stuck. [#97807](https://github.com/openclaw/openclaw/pull/97807) Thanks @aniruddhaadak80, @maweibin.
+- `gateway run --force` now ignores malformed listener PID records during port cleanup instead of carrying invalid process state into recovery. [#98371](https://github.com/openclaw/openclaw/pull/98371) Thanks @lzyyzznl.
+- Gateway busy-port diagnostics and forced cleanup now ignore malformed listener IDs, avoid phantom processes, and verify that a port is actually free before reporting recovery. [#98505](https://github.com/openclaw/openclaw/pull/98505) Thanks @qiuyuang.
+- CLI tables now shorten only the actual home directory and its descendants, so sibling paths such as `/home/alice2/project` no longer appear as misleading home-relative paths. [#98876](https://github.com/openclaw/openclaw/pull/98876) Related [#98872](https://github.com/openclaw/openclaw/issues/98872). Thanks @qingminglong.
+- `openclaw backup create` now tolerates disposable runtime files disappearing during a live backup, while continuing to protect durable files under the existing inclusion policy. [#98879](https://github.com/openclaw/openclaw/pull/98879) Related [#98865](https://github.com/openclaw/openclaw/issues/98865). Thanks @carterstebbins23-spec, @vincentkoc, @zengwen-dt.
+- File-backed usage-bar templates now keep watcher and file-descriptor use bounded in long-running OpenClaw processes while still reloading templates when needed. [#98990](https://github.com/openclaw/openclaw/pull/98990) Thanks @chenyangjun-xy, @vincentkoc, @zhanglei99586.
+- Configuration and plugin-schema validation hints now show clear allowed values instead of the misleading literal label `undefined`. [#99045](https://github.com/openclaw/openclaw/pull/99045) Thanks @lzyyzznl.
+- Message read, pinned-message, and search commands can now display more than 25 returned rows when a higher `--limit` is requested and warn when additional provider results remain. [#99089](https://github.com/openclaw/openclaw/pull/99089) Thanks @jerrytao-ai, @wm0018.
+- `openclaw health` now warns when gateway configuration hot reload has stopped, so operators know a restart is needed instead of unknowingly running stale settings. [#99267](https://github.com/openclaw/openclaw/pull/99267) Thanks @masatohoshino, @vincentkoc.
+- `openclaw sessions tail --tail` now rejects counts too large to represent safely instead of applying an imprecise history limit. [#99398](https://github.com/openclaw/openclaw/pull/99398) Thanks @qingminglong.
+- A malformed transcript timestamp no longer corrupts session usage and cost records with invalid values. [#99420](https://github.com/openclaw/openclaw/pull/99420) Thanks @krissding.
+- Human-readable `cron list` and `cron show` output now reveals repeated failure streaks such as `error (12x)` while leaving JSON status values unchanged. [#99602](https://github.com/openclaw/openclaw/pull/99602) Thanks @masatohoshino.
+- Windows now detects active Gateway listeners reliably from localized `netstat` output, improving port diagnostics and `gateway --force` cleanup without confusing established connections for listeners. [#100012](https://github.com/openclaw/openclaw/pull/100012) Thanks @qingminglong, @vincentkoc.
+- Session maintenance warnings now say `1 minute`, `1 hour`, or `1 day` at rounded boundaries instead of awkward values such as `60 seconds`. [#100096](https://github.com/openclaw/openclaw/pull/100096) Thanks @narahariraghava, @vincentkoc.
+- Compact `/status` no longer shows the ambiguous `Plugins: OK` row, while warnings and detailed plugin diagnostics remain available. [#100143](https://github.com/openclaw/openclaw/pull/100143)
+- `openclaw --help` now matches command-specific help and completions, with `config patch` and `config schema` visible from the main command list. [#100670](https://github.com/openclaw/openclaw/pull/100670) Thanks @amirf194, @vincentkoc.
+- Terminal-rendered links containing balanced parentheses now remain clickable through the complete intended URL instead of being shortened or misdirected. [#100697](https://github.com/openclaw/openclaw/pull/100697) Thanks @aniruddhaadak80, @zoowh.
+- A Gateway WebSocket 1006 disconnect now gives operators accurate connection-loss guidance instead of implying that a healthy Gateway necessarily crashed. [#101219](https://github.com/openclaw/openclaw/pull/101219) Thanks @darren2030, @vincentkoc.
+- Failed OpenClaw and plugin-harness traces now include useful redacted error details in OpenTelemetry instead of only a generic failure label. [#101244](https://github.com/openclaw/openclaw/pull/101244) Thanks @amknight.
+- Windows Gateway restarts no longer depend on the `findstr` check that could leave a visible or hung command window blocking the handoff. [#101366](https://github.com/openclaw/openclaw/pull/101366) Thanks @deepujain.
+- OpenTelemetry trace viewers can now display captured tool results alongside tool inputs in standard GenAI fields, making failed-run investigation more complete. [#101371](https://github.com/openclaw/openclaw/pull/101371) Thanks @amknight.
+- Timed-out commands on Windows are less likely to leave child processes running when `taskkill.exe` cannot start. [#101392](https://github.com/openclaw/openclaw/pull/101392) Thanks @aniruddhaadak80, @zengwen-dt.
+- `openclaw backup create` on Windows now retries live-file archive races with fresh temporary paths, reducing locked partial backups and leftover retry archives. [#101464](https://github.com/openclaw/openclaw/pull/101464) Thanks @lilan0125, @zoowh.
+- `openclaw status --all` now keeps shortened channel issue messages readable when an emoji falls at the display boundary. [#101503](https://github.com/openclaw/openclaw/pull/101503) Thanks @wm0018.
+- Session maintenance warnings now show more accurate wait estimates near unit boundaries, so a roughly 90-second delay is not inflated to two minutes. [58d707f](https://github.com/openclaw/openclaw/commit/58d707fbed3400292b9d7bf8fe31e6480309a180) Thanks @vincentkoc.
+- `openclaw status`, `status --json`, and `status --all` now respect their timeout on Linux when systemd is unresponsive instead of hanging indefinitely. [#94149](https://github.com/openclaw/openclaw/pull/94149) Related [#84698](https://github.com/openclaw/openclaw/issues/84698). Thanks @zengwen-dt, @zus-assistant.
+- When a local Gateway is listening but unhealthy, `openclaw gateway status --deep` can surface a recent likely cause such as a full disk instead of only reporting a generic disconnect. [#95902](https://github.com/openclaw/openclaw/pull/95902) Thanks @vincentkoc, @wangbyg.
+- Restarting, updating, reinstalling, or repairing a macOS Gateway now preserves active SecretRef-backed channel credentials instead of leaving Telegram and other integrations unable to authenticate. [#99124](https://github.com/openclaw/openclaw/pull/99124) Thanks @mushuiyu886.
+- Gateway configuration updates now reject missing redacted values for keys such as `toString` or `constructor` instead of restoring an inherited JavaScript function. [#99152](https://github.com/openclaw/openclaw/pull/99152) Thanks @zenglingbiao.
+- Generated shell completion now suggests accepted OpenClaw command aliases and continues completing their options and subcommands. [#99419](https://github.com/openclaw/openclaw/pull/99419) Thanks @amirf194, @jack-dev-ops, @vincentkoc.
+- Update and status checks now identify malformed npm metadata as invalid JSON instead of returning only an opaque syntax error. [#100338](https://github.com/openclaw/openclaw/pull/100338) Thanks @cxbasdev.
+- Operators can upgrade the Gateway before N-1 subordinate nodes without losing the normal update, restart, repair, status, and maintenance path for those nodes. [#101109](https://github.com/openclaw/openclaw/pull/101109) Thanks @jtczville.
+- Windows users can launch globally installed Gemini CLI and Claude Code backends through their npm command shims without immediate spawn failures or mangled prompt arguments. [#101378](https://github.com/openclaw/openclaw/pull/101378) Thanks @wendy-chsy.
+- A failed Gateway replacement process during an update no longer causes an additional uncaught crash in the existing parent process. [#101489](https://github.com/openclaw/openclaw/pull/101489) Thanks @aniruddhaadak80, @momothemage, @vincentkoc.
+- Failed CLI installations now clean up their temporary Node staging directories and pnpm workspace rewrite files. [#103725](https://github.com/openclaw/openclaw/pull/103725) Thanks @sebtardif.
+- Git installs now create an `openclaw` launcher that keeps using the intended Node.js runtime even after the user's PATH changes. [be7198f](https://github.com/openclaw/openclaw/commit/be7198f6a2225dd988e707c4ef11c3cf002c14c3)
+- `openclaw agents list` now shows configured external channels even when their plugin is missing and provides the appropriate install or `openclaw doctor --fix` guidance. [#95363](https://github.com/openclaw/openclaw/pull/95363) Thanks @hugenshen.
+- Operators can use targeted Doctor lint to inspect legacy session transcripts and stale snapshot paths, preview the cleanup, and choose whether to apply it. [#95976](https://github.com/openclaw/openclaw/pull/95976) Thanks @giodl73-repo.
+- WhatsApp and Telegram default-account routing warnings are now available through selectable structured Doctor lint while normal Doctor output remains unchanged. [#96147](https://github.com/openclaw/openclaw/pull/96147) Thanks @pick-cat, @vincentkoc.
+- Optional Doctor lint can now identify stale or missing plugin registry data, shadowed bundled plugins, stale install records, and broken OpenClaw peer links. [#96169](https://github.com/openclaw/openclaw/pull/96169) Thanks @giodl73-repo.
+- Terminal and setup documentation links now resolve correctly when relative paths begin with `http` or absolute HTTP schemes use uppercase letters. [#96439](https://github.com/openclaw/openclaw/pull/96439) Thanks @lin-hongkuan.
+- Terminal notes, Doctor output, and diagnostics now wrap long runs of CJK, full-width, or emoji characters within the requested width instead of spilling across columns. [#96746](https://github.com/openclaw/openclaw/pull/96746) Thanks @ly-wang19.
+- Structured Doctor lint can now report low or critical disk space for the OpenClaw state directory, including the affected path, available space, requirement, and remediation. [#98391](https://github.com/openclaw/openclaw/pull/98391) Thanks @giodl73-repo.
+- Manual Gateway setup now rejects port entries such as `1e3` or `0x1000` instead of silently saving a different port, while valid decimal ports remain unchanged. [#98689](https://github.com/openclaw/openclaw/pull/98689) Related [#98681](https://github.com/openclaw/openclaw/issues/98681). Thanks @qingminglong.
+- Plugin operators can run `doctor --lint --only core/doctor/legacy-plugin-manifests` or `--all` to identify legacy manifest keys and see the affected plugin, path, and repair command. [#98695](https://github.com/openclaw/openclaw/pull/98695) Thanks @giodl73-repo.
+- Operators can use `openclaw doctor --lint --only core/doctor/legacy-plugin-dependencies` or `--all` to find stale plugin dependency state and receive a path plus safe repair guidance without changing the installation. [#98725](https://github.com/openclaw/openclaw/pull/98725) Thanks @giodl73-repo.
+- Operators can opt into `core/doctor/legacy-cron-store` to find legacy cron data that needs attention without the lint check changing any stored state. [#99211](https://github.com/openclaw/openclaw/pull/99211) Thanks @giodl73-repo.
+- Channel setup warnings are now available as structured Doctor lint findings with stable paths and repair guidance for operators and automation. [#99238](https://github.com/openclaw/openclaw/pull/99238) Thanks @giodl73-repo.
+- Default `doctor --lint` results now focus on actionable configuration and runtime problems, with optional backup and memory advice available only when requested. [#99249](https://github.com/openclaw/openclaw/pull/99249) Thanks @giodl73-repo.
+- A normal Doctor lint run no longer invokes `crontab -l` for the optional legacy WhatsApp check unless an operator explicitly selects it. [#99250](https://github.com/openclaw/openclaw/pull/99250) Thanks @giodl73-repo.
+- `openclaw doctor --fix` now completes successfully in locked-down environments when only shell-completion installation is blocked, while still reporting genuine write failures. [#99540](https://github.com/openclaw/openclaw/pull/99540) Related [#99237](https://github.com/openclaw/openclaw/issues/99237). Thanks @hunglp6d, @rballiance.
+- `doctor --lint --all` can now explain the path or permission that would block a configuration repair before operators run `doctor --fix`. [#100093](https://github.com/openclaw/openclaw/pull/100093) Thanks @giodl73-repo.
+- OTLP traces, metrics, and logs now follow `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY`, keeping diagnostics exports on the configured network path. [#100616](https://github.com/openclaw/openclaw/pull/100616) Thanks @jesse-merhi.
+- Remote Gateway status checks now fall back to the configured SSH target when local effective-config probing fails instead of crashing or stalling discovery. [#101160](https://github.com/openclaw/openclaw/pull/101160) Thanks @cxbasdev.
+- Windows update and doctor repair now move an owned legacy Startup gateway to Task Scheduler without leaving a stale process, dropping authentication, or removing the fallback too early. [#101213](https://github.com/openclaw/openclaw/pull/101213) Thanks @vincentkoc.
+- `openclaw update` now targets the global Node installation that launched it, avoiding false success when Homebrew, nvm, asdf, or Volta exposes another OpenClaw copy. [#101228](https://github.com/openclaw/openclaw/pull/101228) Thanks @buddyh.
+- Pending exec approval cards now describe only the approval state, and the foreground-fallback warning appears only after a command actually runs that way. [#101561](https://github.com/openclaw/openclaw/pull/101561) Thanks @vincentkoc.
+- `openclaw plugins list` now uses substantially less peak memory on fresh and already-migrated packaged installs while preserving required migration behavior. [#103132](https://github.com/openclaw/openclaw/pull/103132)
+
+
+
+### Documentation and operating guides
+
+Official operating guidance now matches shipped commands, configuration, setup, status output, placeholders, and recovery behavior more closely. Generated documentation maps also preserve literal command parameters, reducing the chance that a reader follows an example whose identifiers were stripped or whose workflow no longer matches the product.
+
+
+
+- The CLI config documentation now clearly distinguishes normal JSON5 value parsing from `--strict-json`, which accepts standard JSON and rejects JSON5-only syntax. [#80981](https://github.com/openclaw/openclaw/pull/80981) Thanks @addu2612.
+- Plugin and channel-status documentation now clarifies that a `MessageReceipt` or durable `sent` result proves platform acceptance, not display or read confirmation on a recipient's device. [#90063](https://github.com/openclaw/openclaw/pull/90063) Thanks @pdurlej.
+- The macOS guide now gives users a clearer path from downloading the app through first-run setup, Gateway selection, and focused troubleshooting. [#97120](https://github.com/openclaw/openclaw/pull/97120) Thanks @romneyda.
+- The Discord setup guide now points users to the correct Developer settings section for enabling Developer Mode and copying required IDs. [#97336](https://github.com/openclaw/openclaw/pull/97336) Thanks @naseemm123.
+- Plugin developers now receive clearer SDK deprecations and migration guidance for session-store and transcript-file helpers ahead of the planned SQLite transition. [#97494](https://github.com/openclaw/openclaw/pull/97494) Thanks @jalehman.
+- OpenClaw's public docs now use shorter, task-first instructions with corrected commands, configuration names, defaults, provider behavior, and troubleshooting steps. [#100142](https://github.com/openclaw/openclaw/pull/100142)
+- Logbook users now have end-to-end guidance for setup, model routing, privacy choices, and troubleshooting missing capture or timeline results. [b6a7898](https://github.com/openclaw/openclaw/commit/b6a7898c7c7f43e4b984c6c62aaa685f6a206f33)
+- Safe-restart guidance now states that the default wait can end after `gateway.reload.deferralTimeoutMs` and explains how to configure an indefinite wait. [#95397](https://github.com/openclaw/openclaw/pull/95397) Thanks @zhangqueping.
+- The agent configuration guide now identifies the current models selected by the built-in `opus` and `gpt` aliases. [#96375](https://github.com/openclaw/openclaw/pull/96375) Thanks @niks999.
+- Docker operators now have an official path to install, authenticate, verify, and persist the `claude-cli` backend across container image upgrades. [#96380](https://github.com/openclaw/openclaw/pull/96380) Thanks @fffrank, @zaidazmi.
+- OpenClaw's Anthropic and Claude CLI documentation now reflects the current subscription-limit treatment for `claude -p` and related usage, with official references for billing and deployment decisions. [#96848](https://github.com/openclaw/openclaw/pull/96848) Thanks @fightingsleep, @tirion-p.
+- The Discord setup guide now separates General Permissions from Text Permissions so bot access choices are easier to read correctly. [#97584](https://github.com/openclaw/openclaw/pull/97584) Thanks @slammajamma28.
+- Telegram's error-reply documentation now lists the supported policies and correct cooldown defaults, avoiding invalid `errorPolicy: "reply"` configurations. [#97635](https://github.com/openclaw/openclaw/pull/97635) Thanks @wm0018.
+- The Feishu documentation no longer suggests the rejected `dmPolicy: disabled` setting, reducing configuration failures copied from the guide. [#97640](https://github.com/openclaw/openclaw/pull/97640) Thanks @wm0018.
+- The public onboarding docs now cover eleven existing non-interactive flags for token auth, Cloudflare AI Gateway, daemon, UI, hooks, and token output. [#97753](https://github.com/openclaw/openclaw/pull/97753) Thanks @vincentkoc, @wm0018.
+- Matrix documentation now explains progress streaming, room-specific mention matching, per-room enablement, and bot-loop safeguards that operators can configure. [#98318](https://github.com/openclaw/openclaw/pull/98318) Thanks @vincentkoc, @wm0018.
+- Telegram channel documentation now correctly states that an unset streaming mode uses partial previews and explains how to choose final-only replies. [#98453](https://github.com/openclaw/openclaw/pull/98453) Thanks @solodmd.
+- OpenClaw's mobile documentation now identifies the iOS and Android apps as official releases and provides consistent App Store, Google Play, and hosted iOS push-relay guidance. [#98843](https://github.com/openclaw/openclaw/pull/98843) Thanks @joshavant.
+- Plugin authors now get clearer packaging guidance for runtime dependencies, built artifacts, `npm-pack:` validation, and trusted official-plugin checks before publication. [#99962](https://github.com/openclaw/openclaw/pull/99962) Thanks @hxy91819.
+- Official plugin package examples now agree on the required `typebox` runtime and `openclaw` peer dependencies, reducing copy-and-paste setup failures. [#99973](https://github.com/openclaw/openclaw/pull/99973)
+- The bundled `imsg` skill now guides agents toward the correct direct or group conversation, stable targets, least-privilege actions, and confirmation before visible or sensitive changes. [#100105](https://github.com/openclaw/openclaw/pull/100105) Thanks @omarshahine.
+- Official OpenClaw docs now help operators and plugin authors handle credentials safely, preflight cron jobs that use local-provider fallbacks, apply Talk timing defaults, configure MiniMax providers and models, and copy a complete minimal plugin package with the required dependency metadata. [#100182](https://github.com/openclaw/openclaw/pull/100182)
+- Android node operators now have an end-to-end guide for securely mirroring and controlling a remote device from macOS, including authorization, troubleshooting, and clean disconnection. [#100398](https://github.com/openclaw/openclaw/pull/100398)
+- The Codex and WhatsApp plugin references now identify their tools contract, making supported plugin capabilities easier to match with OpenClaw workflows. [46ad3f9](https://github.com/openclaw/openclaw/commit/46ad3f9ae94cec1bfa94b14974a3d32b46921080) Thanks @vincentkoc.
+- The onboarding reference now explains that bare `openclaw` starts onboarding for a missing config, opens Crestodian for an invalid config, and launches the agent TUI for a valid config. [d9dbee7](https://github.com/openclaw/openclaw/commit/d9dbee7676fb4a7fcd4617e9fe3bd26f7adf4452)
+- ACP troubleshooting now names `PermissionPromptUnavailableError`, helping operators recognize a non-interactive permission failure and find the right configuration fix. [b3a74cc](https://github.com/openclaw/openclaw/commit/b3a74ccc3aef9d670994baee3b0039e4783d82a2)
+- The onboarding reference now gives accurate signal-cli, Gateway runtime, and channel allowlist guidance, including Windows limits and the IDs expected for direct messages. [aaaa803](https://github.com/openclaw/openclaw/commit/aaaa8030bf4f139d43717731fd3402e06b248d48)
+- Generated documentation navigation now preserves complete headings with command placeholders such as `<id>` and `<deviceId>` instead of hiding required arguments. [#99099](https://github.com/openclaw/openclaw/pull/99099) Thanks @hxy91819.
+
+
+
+### Browser, schedules, files, and coding tools
+
+Agents can read scanned PDFs with vision-capable models, work in isolated coding checkouts, and handle files, media, browser results, and execution failures with more usable output. [Browser control](/tools/browser-control) preserves pairing and download state more reliably, while parallel workspace operations are less likely to collide with one another or the user's current files.
+
+[Scheduled automation](/automation/cron-jobs) retains intended models, timing, state, and delivery across more restarts and edits. Tool calls and results also recover more cleanly from timeouts, malformed content, oversized output, and interrupted work instead of leaving a task looking complete when its usable result was lost.
+
+
+
+- Vision-capable models can now read rendered pages from scanned and image-only PDFs attached through chat channels. [#97354](https://github.com/openclaw/openclaw/pull/97354) Thanks @joshavant.
+- Workboard tasks can now use managed isolated worktrees, with CLI and Control UI tools for creation, cleanup, restoration, and recovery snapshots when work cannot be removed safely. [#100535](https://github.com/openclaw/openclaw/pull/100535)
+- Users can now start a chat in its own managed worktree from the Control UI or mobile app, isolating parallel coding while preserving dirty work and cleaning safe idle checkouts automatically. [#100788](https://github.com/openclaw/openclaw/pull/100788)
+- A stalled remote Chrome or WSL2 browser can no longer hold tab-list requests indefinitely; OpenClaw returns a bounded timeout and can reconnect on the next request. [#80147](https://github.com/openclaw/openclaw/pull/80147) Thanks @hemantsudarshan, @keaneyan.
+- Remote-browser actions now recover from a closed or replaced selected tab by retrying without the stale tab ID, matching local browser behavior. [#89086](https://github.com/openclaw/openclaw/pull/89086) Thanks @rhclaw.
+- CDP-backed browser navigation to CSV, PDF, and other attachment URLs now returns a safely saved managed file with its URL and suggested filename. [#89416](https://github.com/openclaw/openclaw/pull/89416) Thanks @zhangguiping-xydt.
+- Browser downloads now tell the agent the saved filename and path, helping it use the completed download instead of retrying the action. [#93307](https://github.com/openclaw/openclaw/pull/93307) Thanks @sunlit-deng.
+- Updating `browser.profiles.*` connection details can now take effect without an unnecessary Gateway restart or interruption to active sessions. [#93827](https://github.com/openclaw/openclaw/pull/93827) Thanks @goutamadwant.
+- Browser automation can now act on tabs by suggested ID, tab ID, label, or unique prefix without false target-mismatch failures. [#96178](https://github.com/openclaw/openclaw/pull/96178) Thanks @zengwen-dt.
+- Persistent managed-browser logins now survive ordinary Chrome and Gateway restarts, reducing repeated sign-ins and MFA interruptions for unattended browser work. [#98284](https://github.com/openclaw/openclaw/pull/98284) Thanks @malashenia, @turbotheturtle.
+- Oversized browser-control error responses can no longer consume excessive Gateway memory, while ordinary failures still provide useful diagnostics. [#98455](https://github.com/openclaw/openclaw/pull/98455) Thanks @wings1029.
+- Browser `responsebody` requests for a short prefix of a large response now avoid decoding a second full-size text copy while still returning the requested truncated content. [#98940](https://github.com/openclaw/openclaw/pull/98940) Thanks @pandah97.
+- Browser extensions can reconnect with a newly rotated pairing token while Browser control remains running, and old tokens continue to be rejected. [a703183](https://github.com/openclaw/openclaw/commit/a7031832ecd5bb9eba30ce844b1a059c9c3b5395) Thanks @vincentkoc.
+- Cron jobs with a valid future run exactly on a second boundary now keep that scheduled time instead of being incorrectly treated as stale and rebased. [#81731](https://github.com/openclaw/openclaw/pull/81731) Thanks @vincentkoc, @yashkot007.
+- Isolated `agentTurn` cron jobs can recover from temporarily mismatched runtime artifacts instead of failing at startup with a `sourceReplyDeliveryMode` error. [#85249](https://github.com/openclaw/openclaw/pull/85249) Thanks @jerry-xin.
+- `openclaw tasks maintenance --apply` can now repair false lost-task records when durable cron history proves the run completed successfully. [#86088](https://github.com/openclaw/openclaw/pull/86088) Thanks @altaywtf, @liaoandi.
+- Scheduled agent jobs now warn when `ANNOUNCE_SKIP` suppresses a cron completion, making missing reports and partial output easier to diagnose. [#90566](https://github.com/openclaw/openclaw/pull/90566) Related [#68561](https://github.com/openclaw/openclaw/issues/68561). Thanks @mibslee, @sahibzada-allahyar.
+- Catch-up cron jobs deferred briefly after startup are no longer skipped merely because an operator checks cron status before they fire. [#94022](https://github.com/openclaw/openclaw/pull/94022) Related [#93935](https://github.com/openclaw/openclaw/issues/93935). Thanks @richchen01, @vincentkoc, @yetval.
+- Scheduled agent turns using `claude-cli` or another CLI backend now start normally, while explicitly unsupported tool restrictions still fail closed. [#95615](https://github.com/openclaw/openclaw/pull/95615) Thanks @anagnorisis2peripeteia, @obviyus.
+- Timed-out or cancelled isolated cron runs now retain their provider, model, and session details in `cron_run_logs`, making failed jobs easier to trace. [#95943](https://github.com/openclaw/openclaw/pull/95943) Related [#95873](https://github.com/openclaw/openclaw/issues/95873). Thanks @luke-renjoy, @zengwen-dt.
+- A scheduled cloud-model job that opens a response but sends no content can now move to a healthy fallback model before the entire run times out. [#96096](https://github.com/openclaw/openclaw/pull/96096) Thanks @849261680, @velvet-shark.
+- Editing a recurring cron job no longer skips a run that is already due or shifts an unchanged interval schedule to the edit time. [#96159](https://github.com/openclaw/openclaw/pull/96159) Thanks @yetval.
+- Clearing a saved Model or Thinking/Effort override in the Cron Control UI now truly restores inherited defaults, with `--clear-thinking` available from the CLI. [#96293](https://github.com/openclaw/openclaw/pull/96293) Related [#96287](https://github.com/openclaw/openclaw/issues/96287). Thanks @takamasa-aiso, @zengwen-dt.
+- CLI-backed workers from isolated cron jobs now exit after completion instead of accumulating and slowing the host and Gateway. [#97227](https://github.com/openclaw/openclaw/pull/97227) Thanks @vianne-droid, @xialonglee, @yusukeit0.
+- Long cron failure alerts now preserve emoji and other supplementary Unicode characters instead of ending with a broken replacement symbol. [#97298](https://github.com/openclaw/openclaw/pull/97298) Thanks @zenglingbiao.
+- Heartbeat fallback failures no longer send noisy chat messages made only of repeated internal error placeholders. [#97364](https://github.com/openclaw/openclaw/pull/97364) Thanks @turbotheturtle.
+- Failed shell-tool messages now separate the command the agent typed from framework labels and show the exit code, node, and working directory more clearly. [#97511](https://github.com/openclaw/openclaw/pull/97511) Thanks @aditya-vithaldas.
+- Scheduled jobs that permit `web_search` now report that no usable search provider is selected instead of completing with an unusable result. [#97677](https://github.com/openclaw/openclaw/pull/97677) Thanks @lilan0125, @riazrahaman.
+- Scheduled commitment follow-ups now stay focused on their original conversation instead of absorbing unrelated heartbeat instructions, queued context, or recovery work. [#98169](https://github.com/openclaw/openclaw/pull/98169) Thanks @bdjben.
+- Scheduled deliveries to numeric threads such as Telegram forum topics now return to the configured thread after Gateway restarts instead of falling back to the general chat. [#98699](https://github.com/openclaw/openclaw/pull/98699) Thanks @yetval.
+- Scheduled jobs can deliver to a live chat without blocking replies or mixing background work into its transcript, and operators can clear stale childless cron tasks without cancelling active session-backed runs. [#98755](https://github.com/openclaw/openclaw/pull/98755) Related [#98121](https://github.com/openclaw/openclaw/issues/98121). Thanks @ethansk, @obviyus.
+- Recurring cron jobs created for `current` or `session:<id>` once again carry their selected conversation history into later runs, while `isolated` jobs still start clean. [#98947](https://github.com/openclaw/openclaw/pull/98947) Thanks @ethansk, @obviyus.
+- Failed `cron add`, `cron update`, and `cron remove` commands now leave the running scheduler unchanged, so live jobs match the saved configuration and reported result. [#99960](https://github.com/openclaw/openclaw/pull/99960) Thanks @masatohoshino, @vincentkoc.
+- Editing a scheduled job's message no longer accidentally breaks later CLI-backed runs, while explicit tool restrictions remain protected where they cannot be enforced. [#100203](https://github.com/openclaw/openclaw/pull/100203) Thanks @obviyus.
+- Reliability fixes now reject unsafe cron and plugin inputs, preserve skill formatting, surface Gateway and memory failures, fail LSP startup sooner, and prevent stale Android camera results after cancellation. [#100399](https://github.com/openclaw/openclaw/pull/100399) Thanks @849261680, @anyech, @cxbasdev, @lin-hongkuan, @masatohoshino, @nankingjing, @qingminglong, @simon-xydt, @snotty, @xialonglee.
+- A broad reliability pass now replaces stalled child-process work with clear errors, improves sandbox diagnostics, bounds mobile calendar and voice state, normalizes cron fallbacks, and rejects unsafe provider responses. [#100483](https://github.com/openclaw/openclaw/pull/100483) Thanks @aniruddhaadak80, @cxbasdev, @jincheng-xydt, @morluto, @nianjiuzst, @pandah97, @versatagent, @xialonglee, @zenglingbiao, @zengwen-dt.
+- Transient stdout or stderr read errors from `gog gmail watch serve` no longer crash OpenClaw while Gmail watch mode is running. [#100519](https://github.com/openclaw/openclaw/pull/100519) Thanks @cxbasdev.
+- Exec and finished background-session results now include signals, timeout flags, failure kinds, and exit reasons so users can tell why a command stopped. [#89104](https://github.com/openclaw/openclaw/pull/89104) Thanks @yu-xin-c.
+- `openclaw mcp serve` and bare `openclaw acp` now begin with clean machine-protocol output, preventing startup warnings from corrupting JSON-RPC for MCP and ACP clients. [#89997](https://github.com/openclaw/openclaw/pull/89997) Thanks @kenners22, @vincentkoc.
+- Agent commands with an invalid explicit `workdir`, including a literal `~`, now stop clearly instead of running from an unintended fallback directory. [#94441](https://github.com/openclaw/openclaw/pull/94441) Thanks @jesse-merhi, @renaudcerrato.
+- SSH- and OpenShell-backed sandbox commands now clean up remote resources after failed launches, preserve the correct plugin session and channel context, and return a normal tool error for malformed input instead of an internal WeakMap failure. [#96926](https://github.com/openclaw/openclaw/pull/96926) Thanks @jesse-merhi.
+- Windows `autoreview --engine copilot` runs now return a completed review result even when temporary-directory cleanup is briefly delayed. [#97901](https://github.com/openclaw/openclaw/pull/97901) Thanks @paulcam206.
+- Oversized local socket replies now fail promptly without consuming memory until timeout, while large macOS commands still return completion status and bounded recent output. [#98130](https://github.com/openclaw/openclaw/pull/98130) Thanks @pick-cat.
+- Timed-out, aborted, or output-limited extension commands now clean up their child processes instead of leaving background work running after `api.exec()` returns. [#98340](https://github.com/openclaw/openclaw/pull/98340) Related [#98335](https://github.com/openclaw/openclaw/issues/98335). Thanks @ooiuuii.
+- `web_fetch` now reaches provider fallback much faster for shell-style pages with no locally extractable content, cutting the measured fresh-process delay from several seconds to about one. [#98559](https://github.com/openclaw/openclaw/pull/98559) Thanks @vincentkoc.
+- Emoji and other supplementary Unicode characters remain intact when long command output is shortened for polls, completion notices, or approval follow-ups. [#98721](https://github.com/openclaw/openclaw/pull/98721) Thanks @zengwen-dt.
+- A set of failure-path fixes now keeps commands and maintenance tasks running through isolated errors, preserves terminal and model text, improves skill and approval diagnostics, and stops Android voice sessions cleanly after microphone loss. [#100440](https://github.com/openclaw/openclaw/pull/100440) Thanks @cxbasdev, @lavyatandel, @nankingjing, @nianjiuzst, @tzy-17, @wendy-chsy.
+- Agent workflows can now survive transient stdout or stderr read failures from helper processes instead of losing the whole OpenClaw process. [#100522](https://github.com/openclaw/openclaw/pull/100522) Thanks @cxbasdev, @vincentkoc.
+- Docker sandbox commands now return an explicit failure when output cannot be read instead of crashing OpenClaw or reporting an incomplete result as successful. [#100523](https://github.com/openclaw/openclaw/pull/100523) Thanks @cxbasdev.
+- Crestodian setup and local-tool checks no longer terminate OpenClaw when a probed command encounters a rare output-stream read failure. [#100741](https://github.com/openclaw/openclaw/pull/100741) Thanks @lsr911.
+- `web_fetch` now handles malformed or adversarial HTML more predictably, reducing excessive processing and keeping hidden script-like text out of fallback output. [#102033](https://github.com/openclaw/openclaw/pull/102033) Thanks @pgondhi987.
+- Screenshot-style images returned by plugin tools over MCP now reach clients as usable results instead of causing the tool call to fail. [#90902](https://github.com/openclaw/openclaw/pull/90902) Thanks @k-schmidt, @mushuiyu886.
+- After one generated video clip is ready, a different next clip can start immediately instead of waiting several extra minutes behind stale duplicate suppression. [#96018](https://github.com/openclaw/openclaw/pull/96018) Thanks @palomyates516-alt, @vincentkoc.
+- Agent runs now stop cleanly when a `write`, `edit`, or `apply_patch` operation would make no change, preventing repeated false-progress retries while real mutations and valid sibling edits continue normally. [#97044](https://github.com/openclaw/openclaw/pull/97044) Thanks @vincentkoc, @zw-xysk.
+- `openclaw capability video generate` now returns a bounded, actionable error when a provider URL serves an oversized video without `--output`. [#97549](https://github.com/openclaw/openclaw/pull/97549) Thanks @alix-007.
+- `openclaw infer image describe` now tries configured fallback image models after an explicitly selected model fails and reports which model ultimately succeeded. [#98347](https://github.com/openclaw/openclaw/pull/98347) Thanks @momothemage.
+- When a bundled MCP server stops mid-session, users now get a prompt server-specific disconnect message and can clear the dead session by refreshing the catalog. [#98738](https://github.com/openclaw/openclaw/pull/98738) Thanks @masatohoshino, @vincentkoc.
+- Fetching an empty file with an image-style name now returns a clear saved-file path instead of an unusable inline image result. [#99370](https://github.com/openclaw/openclaw/pull/99370) Thanks @2loch-ness6, @vincentkoc.
+- The diffs tool now renders default outputs faster, preserves highlighting for pack-only languages, handles unchanged input clearly, and reports file-render and invalid-patch errors more accurately. [#100487](https://github.com/openclaw/openclaw/pull/100487)
+- Natural-language corrections can now become the right pending Skill Workshop improvement after successful or failed turns without repeating old feedback, duplicating `/learn`, or replacing proposal context. [#100576](https://github.com/openclaw/openclaw/pull/100576) Thanks @vincentkoc.
+- File Transfer folder downloads now either produce a complete verified archive or report a clear read failure instead of crashing or returning partial data. [#101590](https://github.com/openclaw/openclaw/pull/101590) Thanks @sunlit-deng.
+- OpenShell sandbox sessions now start with the intended workspace files in the managed remote directory, avoiding missing-file and wrong-directory failures. [d9034da](https://github.com/openclaw/openclaw/commit/d9034da0a60600cb1d2e081cb80e619ff7d180c5) Thanks @vincentkoc.
+- The optional common sandbox image now includes Node 24 and pnpm so documented Node-based development tasks can run inside it. [eabc12b](https://github.com/openclaw/openclaw/commit/eabc12b7d66687f6829009c103c0f33114e2949e) Thanks @vincentkoc.
+- Agent-side `web_search` now sees the configured provider in the active runtime, so Gateway and channel sessions can keep using providers such as Brave without a restart. [#88684](https://github.com/openclaw/openclaw/pull/88684) Thanks @alexzhu0, @vincentkoc.
+- Malformed draft-2020-12 tool schemas from an MCP server now produce an actionable setup error that identifies the external schema and retains the underlying failure. [#89619](https://github.com/openclaw/openclaw/pull/89619) Thanks @vincentkoc.
+- Failed code-mode tool attempts now show the error type, message, and location, giving the model and operator enough detail to diagnose or correct the problem. [#95906](https://github.com/openclaw/openclaw/pull/95906) Thanks @vincentkoc, @zengwen-dt.
+- Prompt templates now preserve intentionally blank quoted arguments so later positional placeholders receive the correct values. [#96405](https://github.com/openclaw/openclaw/pull/96405) Thanks @lin-hongkuan.
+- OpenTelemetry latency dashboards now provide useful duration and context-size distributions for agent and harness work lasting well beyond 10 seconds, including multi-minute runs, without collector-side bucket customization. [#96592](https://github.com/openclaw/openclaw/pull/96592) Thanks @hcnode, @vincentkoc, @zhiling-chen-20230331.
+- When the edit tool cannot match `oldText`, its error now points to likely nearby lines and explains common indentation, escaping, and whitespace differences, reducing blind retries. [#97038](https://github.com/openclaw/openclaw/pull/97038) Thanks @aocogoal-gethub, @vincentkoc, @zoowh.
+- MCP tools now receive optional null values correctly instead of having them changed into empty strings that can break valid calls. [#97212](https://github.com/openclaw/openclaw/pull/97212) Thanks @vincentkoc, @zw-xysk.
+- Successful Codex thread-goal reads now appear as successful in model context, transcripts, and diagnostics instead of being recorded as failed tool calls. [#98659](https://github.com/openclaw/openclaw/pull/98659) Thanks @yetval.
+- Skill Workshop approval prompts now include the proposal details needed to apply, reject, or quarantine a change, while unanswered requests stay safely pending and return a clear timeout message. [#100498](https://github.com/openclaw/openclaw/pull/100498)
+- When users say things like "next time" or "remember to," OpenClaw can now offer one reviewable Skill Workshop proposal without requiring autonomous capture or repeatedly prompting after dismissal. [#100692](https://github.com/openclaw/openclaw/pull/100692)
+- Legacy task upgrades now restore persisted tasks automatically, preventing linked TaskFlows from falsely reporting them missing or requiring manual SQLite recovery. [#103946](https://github.com/openclaw/openclaw/pull/103946) Thanks @bek91, @theo674.
+- Remote browser CDP connections now accept URL-encoded Basic auth credentials containing spaces, at signs, and other reserved characters. [#97972](https://github.com/openclaw/openclaw/pull/97972) Thanks @vectorpeak.
+- Malformed browser fill data supplied through `--fields` or `--fields-file` now produces a clear actionable error and exits before any browser action starts. [#98861](https://github.com/openclaw/openclaw/pull/98861) Thanks @lsr911.
+- Running `/new` or `/reset` in a direct message now closes that conversation's managed browser tabs while leaving other people's tabs alone, even through a brief browser connection hiccup. [#100792](https://github.com/openclaw/openclaw/pull/100792) Thanks @fmls.
+- Agents can now screenshot a selected background Chromium tab without waiting for the browser command to time out, though capture may bring that tab forward. [#100857](https://github.com/openclaw/openclaw/pull/100857) Thanks @spencer2211.
+- Managed local browser pages can navigate normally under a restrictive `browser.ssrfPolicy.hostnameAllowlist`, while remote CDP endpoints and disallowed destinations remain blocked. [#100986](https://github.com/openclaw/openclaw/pull/100986) Thanks @nianjiuzst, @sarinv.
+- Browser screenshots used privately for visual inspection are no longer attached automatically to channel replies and are shared only when explicitly requested. [#101434](https://github.com/openclaw/openclaw/pull/101434)
+- Browser automation attached to an existing Chrome session now stops with a bounded error when Chrome crashes or a request is cancelled, and later requests can reconnect cleanly. [#101454](https://github.com/openclaw/openclaw/pull/101454) Thanks @aniruddhaadak80.
+- Browser uploads on re-rendering pages now recover more reliably and expose the real stale-reference or action error instead of a generic timeout. [#101465](https://github.com/openclaw/openclaw/pull/101465) Thanks @diwakarrankawat, @m13v, @tigicion.
+- Browser response bodies and page snapshots now stay valid and readable when output is shortened near an emoji. [#101761](https://github.com/openclaw/openclaw/pull/101761) Thanks @mushuiyu886.
+- Browser Control users who are missing Playwright now receive a working documentation pointer for installing or repairing the required browser runtime. [d460635](https://github.com/openclaw/openclaw/commit/d460635185a499ffb96b3ca32df8a05d058c9145)
+- Browser Control can now emulate no explicit color preference with `openclaw browser set media no-preference`, and invalid values list every supported choice. [9133118](https://github.com/openclaw/openclaw/commit/913311845ebdab6faf701ee73e07465f171274e7)
+- Browser POST actions now complete on supported Node 24.16 and newer runtimes after JSON parsing while still cancelling when the client disconnects. [52044e1](https://github.com/openclaw/openclaw/commit/52044e134567ebe3598684b6f968027723dd86a5) Thanks @obviyus, @vincentkoc.
+- Cron job updates can now remove a job-specific fallback model setting so scheduled runs inherit the global defaults again without recreating the job. [#100801](https://github.com/openclaw/openclaw/pull/100801) Thanks @sunnyshu0925.
+- Completed heartbeat tasks remain recorded when the quiet `HEARTBEAT_OK` acknowledgment cannot be delivered, reducing repeated work and duplicate follow-up actions on the next heartbeat. [#100834](https://github.com/openclaw/openclaw/pull/100834) Thanks @machine3at, @vincentkoc.
+- `openclaw cron edit` now finds jobs more reliably and with less delay on Gateways that contain many scheduled jobs, including `--exact` and timeout-only edits. [#100836](https://github.com/openclaw/openclaw/pull/100836) Thanks @machine3at, @vincentkoc.
+- Editing a cron payload with `--no-best-effort-deliver` no longer silently changes the job's delivery mode to announcements. [#100846](https://github.com/openclaw/openclaw/pull/100846) Thanks @machine3at.
+- Using `openclaw cron edit <id> --no-best-effort-deliver` on an older detached job no longer accidentally suppresses its completion announcement. [#101027](https://github.com/openclaw/openclaw/pull/101027)
+- Agent and MCP cron requests using mixed-case command labels now fail closed instead of slipping past the restriction on shell-backed agent cron jobs. [#101350](https://github.com/openclaw/openclaw/pull/101350) Thanks @pgondhi987.
+- Replies now correctly confirm reminders scheduled through commands such as `openclaw cron add` instead of also claiming that no reminder was created. [#101807](https://github.com/openclaw/openclaw/pull/101807) Thanks @bryantegomoh, @vincentkoc.
+- When an installed `fd` or `rg` binary is unusable, agent search can now install a working copy and recover instead of failing repeatedly. [#96361](https://github.com/openclaw/openclaw/pull/96361) Thanks @miorbnli.
+- Link understanding now keeps page fetching available for the slowest configured fallback and applies `tools.links.timeoutSeconds` consistently regardless of model order. [#100731](https://github.com/openclaw/openclaw/pull/100731) Thanks @aniruddhaadak80, @cxbasdev.
+- A failed `find` search now returns one contained tool error and stops its `fd` process instead of risking an agent crash or orphaned search. [#101158](https://github.com/openclaw/openclaw/pull/101158) Thanks @cxbasdev.
+- Stopping a chat through `chat.abort` can now find and terminate its matching embedded run instead of reporting failure while the underlying tool process continues. [#101222](https://github.com/openclaw/openclaw/pull/101222) Thanks @zoowh.
+- Tool Search now fails the affected call cleanly and terminates its unusable child when the diagnostic stream breaks, rather than risking a stranded request or Gateway crash. [#101295](https://github.com/openclaw/openclaw/pull/101295) Thanks @cxbasdev.
+- Broken child-process output, timeouts, and aborts during agent shell commands are now contained instead of causing rare Gateway crashes. [#101370](https://github.com/openclaw/openclaw/pull/101370) Thanks @wings1029.
+- QMD command pipe failures now report a clean memory-operation error instead of taking down the memory host. [#101402](https://github.com/openclaw/openclaw/pull/101402) Thanks @wings1029.
+- Terminal task lists now shorten emoji-heavy summaries without leaving broken replacement characters in the row. [#101600](https://github.com/openclaw/openclaw/pull/101600) Thanks @maweibin.
+- Markdown beginning with text such as `---not` or `----` now remains ordinary content instead of being mistaken for frontmatter and stripped. [#101795](https://github.com/openclaw/openclaw/pull/101795) Thanks @nianjiuzst.
+- OpenShell sandbox uploads now place workspace directories at the requested remote path so sandbox commands can reliably find their files. [#96303](https://github.com/openclaw/openclaw/pull/96303) Thanks @vincentkoc.
+- Multi-page scanned PDFs now keep later pages at a usable image size during fallback extraction, allowing vision models to read the full document. [#96390](https://github.com/openclaw/openclaw/pull/96390) Thanks @cls3389, @vincentkoc, @zengwen-dt.
+- Multi-attachment prompts now keep real captions while removing duplicate transport markers and placeholder-only text that could confuse the model. [#96431](https://github.com/openclaw/openclaw/pull/96431) Thanks @lin-hongkuan.
+- GIF attachments are now recognized despite normal Content-Type parameters, spaces, or mixed casing instead of falling through as another media type. [#96435](https://github.com/openclaw/openclaw/pull/96435) Thanks @lin-hongkuan.
+- Valid inline image data URLs without trailing base64 padding are now accepted, while malformed image payloads remain blocked. [#96437](https://github.com/openclaw/openclaw/pull/96437) Thanks @lin-hongkuan, @vincentkoc.
+- Video inputs near the configured size boundary are now accepted or rejected according to their actual byte size, avoiding unexpected failures for files that are still within the limit. [#96519](https://github.com/openclaw/openclaw/pull/96519) Thanks @lin-hongkuan, @vincentkoc.
+- Requesting nonexistent PDF pages now returns a clear range error instead of accidentally sending the entire document to a native provider. [#97698](https://github.com/openclaw/openclaw/pull/97698) Thanks @zhangguiping-xydt.
+- Message-tool calls with an invalid Gateway timeout now return an immediate validation error instead of appearing to stall. [#98652](https://github.com/openclaw/openclaw/pull/98652)
+- Markdown frontmatter now preserves null-valued fields named `toString`, `constructor`, `valueOf`, or `hasOwnProperty` instead of silently dropping metadata from skills, hooks, or commands. [#99129](https://github.com/openclaw/openclaw/pull/99129) Thanks @vincentkoc, @zenglingbiao.
+- Progress summaries for inline scripts and generated files no longer present heredoc content as extra shell commands that ran. [#99379](https://github.com/openclaw/openclaw/pull/99379) Thanks @zengwen-dt.
+- Fractional PDF page selections such as `1.5` now fail immediately with a clear validation error instead of silently omitting requested content. [#99399](https://github.com/openclaw/openclaw/pull/99399) Thanks @qingminglong.
+- The agent `find` tool now reports an interrupted or failed directory search as an error instead of returning a partial match list as complete. [#99446](https://github.com/openclaw/openclaw/pull/99446) Thanks @zhangguiping-xydt.
+- Failed exact-match edits now show readable current-file context even when truncation falls beside an emoji or other non-BMP character. [#99527](https://github.com/openclaw/openclaw/pull/99527) Thanks @mikasa0818.
+- Invalid plugin approval requests now show the actual validation problem instead of misleading users with a Gateway-unavailable error. [#100337](https://github.com/openclaw/openclaw/pull/100337) Thanks @tzy-17.
+- Skill Workshop now explains when tool policy is hiding `skill_workshop` and shows the exact `allow` or `alsoAllow` change needed to enable manual review calls. [#100654](https://github.com/openclaw/openclaw/pull/100654) Thanks @wangwllu.
+- Oversized ClawHub packages, skills, ClawPacks, resolver archives, and GitHub-source downloads now stop with a clear size-limit error before they can exhaust Gateway memory. [#101176](https://github.com/openclaw/openclaw/pull/101176)
+- Automatic session rotation is less likely to strand the next conversation when a context-engine plugin immediately reads or checkpoints its transcript. [#101192](https://github.com/openclaw/openclaw/pull/101192)
+- Recovered `web_fetch` spill files now keep emoji intact and report the actual safely written length when a long page exceeds the inline limit. [#101312](https://github.com/openclaw/openclaw/pull/101312) Thanks @alix-007.
+- Repeated failed or cancelled agent directory listings now release their cancellation listeners, avoiding listener buildup over time. [#101588](https://github.com/openclaw/openclaw/pull/101588) Thanks @lzw112.
+- Long IDs and scopes no longer push `openclaw commitments` columns out of alignment, keeping the table readable at a glance. [#95923](https://github.com/openclaw/openclaw/pull/95923) Thanks @parveshsaini.
+- `web_fetch` now preserves emoji, mathematical symbols, extended Unicode, and intentionally escaped numeric entity text more faithfully. [#96268](https://github.com/openclaw/openclaw/pull/96268) Thanks @ly-wang19.
+- DuckDuckGo results now preserve intentional entity notation such as `<` and `'` instead of silently changing titles, snippets, or URLs. [#96348](https://github.com/openclaw/openclaw/pull/96348) Thanks @ly-wang19, @vincentkoc.
+- Canvas embed replies now retain their visible message text when a self-closing embed shortcode is followed by an extra closing marker. [#96449](https://github.com/openclaw/openclaw/pull/96449) Thanks @ly-wang19.
+- Bracketed labels in Markdown citations no longer make link understanding fetch display-only URLs that the user did not intend to retrieve. [#96476](https://github.com/openclaw/openclaw/pull/96476) Thanks @ly-wang19, @vincentkoc.
+- DuckDuckGo search pages containing malformed numeric HTML entities no longer crash parsing or inject broken Unicode into titles, URLs, and snippets, while valid emoji entities remain supported. [#96583](https://github.com/openclaw/openclaw/pull/96583) Thanks @llagy007, @weeli-009.
+- Shortened tool descriptions in catalogs and `/tools verbose` no longer split emoji or other Unicode characters into garbled replacement symbols. [#98644](https://github.com/openclaw/openclaw/pull/98644) Thanks @zengwen-dt.
+- Internal hook authors now receive a warning when a likely event-name typo would otherwise leave a hook silently inactive. [#99456](https://github.com/openclaw/openclaw/pull/99456) Thanks @masatohoshino.
+- Codex session tools now honor their requested seconds-based timeout and return their own useful timeout status instead of ending early. [#100722](https://github.com/openclaw/openclaw/pull/100722) Thanks @carterstebbins23-spec, @cxbasdev.
+- Cancelled ACP background tasks now appear as cancelled in task lists, summaries, and parent-run updates rather than being reported as successful. [#101245](https://github.com/openclaw/openclaw/pull/101245) Thanks @masatohoshino.
+- Tool-using Anthropic-family requests can now fail over to OpenAI without a 400 error caused by an incompatible tool format. [#101443](https://github.com/openclaw/openclaw/pull/101443) Thanks @chrisbaker2000.
+
+
+
+
+
+- Modernized internal configuration tracking without changing how configuration updates are detected. [#59695](https://github.com/openclaw/openclaw/pull/59695) Thanks @yonganzhang.
+- Improved bug-report forms so reporters can attach screenshots or recordings while keeping logs readable. [#73649](https://github.com/openclaw/openclaw/pull/73649) Thanks @d1rshan.
+- Strengthened Android gateway authentication coverage by making a timing-sensitive recovery check more reliable. [#83826](https://github.com/openclaw/openclaw/pull/83826) Thanks @neatguycoding.
+- Added clearer policy coverage reporting so maintainers can spot gaps as security-sensitive configuration evolves. [#87081](https://github.com/openclaw/openclaw/pull/87081) Thanks @giodl73-repo.
+- Restored reliable changed-code validation for plugin discovery work without altering plugin behavior. [#87695](https://github.com/openclaw/openclaw/pull/87695) Thanks @vincentkoc.
+- Strengthened coverage for binding Codex conversations without an explicit model, protecting the default workflow from regressions. [#89535](https://github.com/openclaw/openclaw/pull/89535) Thanks @kesslerio.
+- Clarified internal fallback behavior so future maintenance is less likely to mishandle provider errors or older model responses. [#89558](https://github.com/openclaw/openclaw/pull/89558)
+- Documented compaction retry timing behavior to make future maintenance safer without changing runtime behavior. [#89585](https://github.com/openclaw/openclaw/pull/89585)
+- Expanded browser safety coverage on Windows systems that support directory links, improving test portability. [#90365](https://github.com/openclaw/openclaw/pull/90365) Thanks @aniruddhaadak80.
+- Corrected contributor attribution so guanbear's merged work can be credited properly in generated contributor records. [#90547](https://github.com/openclaw/openclaw/pull/90547) Thanks @guanbear.
+- Added earlier validation for channel settings, reducing the chance of configuration changes causing gateway startup errors. [#91134](https://github.com/openclaw/openclaw/pull/91134) Thanks @luoyanglang.
+- Fixed local Python test setup so contributors can run the supported pre-commit checks reliably. [#91276](https://github.com/openclaw/openclaw/pull/91276) Thanks @deepujain.
+- Made the QA maturity scorecard easier to find and clarified how maintainers should update its documentation. [#91483](https://github.com/openclaw/openclaw/pull/91483) Thanks @romneyda.
+- Added repeatable Slack QA coverage for Codex command and file-change approvals. [#91519](https://github.com/openclaw/openclaw/pull/91519) Thanks @kevinslin.
+- Strengthened coverage so GitHub Copilot reasoning choices stay aligned with each account's supported models. [#91728](https://github.com/openclaw/openclaw/pull/91728) Thanks @saju01.
+- Reduced live-test disk usage by avoiding unnecessary copies of large Gemini browser data while preserving required credentials. [#91907](https://github.com/openclaw/openclaw/pull/91907) Thanks @bryantegomoh, @pikaqqqqqq.
+- Expanded automated security review for code that launches local processes, helping catch high-severity risks before merge. [#92667](https://github.com/openclaw/openclaw/pull/92667) Thanks @hxy91819.
+- Improved automated test cleanup and guidance, reducing leftover temporary files and inconsistent test setup. [#93209](https://github.com/openclaw/openclaw/pull/93209) Thanks @hxy91819.
+- Added routine smoke validation that helps maintainers catch and diagnose broad regressions earlier. [#94291](https://github.com/openclaw/openclaw/pull/94291) Thanks @romneyda, @solvely-colin.
+- Strengthened coverage to keep streamed Telegram replies inside the forum topic where the conversation began. [#94526](https://github.com/openclaw/openclaw/pull/94526) Related [#89352](https://github.com/openclaw/openclaw/issues/89352). Thanks @pmika, @xialonglee.
+- Made validation faster and easier to inspect for small extension or script edits while preserving full checks when needed. [#94708](https://github.com/openclaw/openclaw/pull/94708) Thanks @romneyda.
+- Added regression coverage so code identifiers with underscores remain readable in the terminal interface. [#95211](https://github.com/openclaw/openclaw/pull/95211) Thanks @zhangguiping-xydt.
+- Expanded documentation discovery to include MDX pages, preventing real guides from being omitted. [#95230](https://github.com/openclaw/openclaw/pull/95230) Thanks @hugenshen.
+- Made QQBot and Zalo security tests depend on actual symlink support instead of the operating system name. [#95531](https://github.com/openclaw/openclaw/pull/95531) Thanks @aniruddhaadak80, @vincentkoc.
+- Made Control UI localization checks run reliably on Windows without changing translated content. [#95534](https://github.com/openclaw/openclaw/pull/95534) Thanks @ooiuuii.
+- Strengthened WhatsApp QA around messages, reactions, replies, media, polls, approvals, and group behavior. [#95622](https://github.com/openclaw/openclaw/pull/95622) Thanks @mcaxtr.
+- Prevented pre-commit formatting from unexpectedly rewriting files during merges, rebases, cherry-picks, and reverts. [#95842](https://github.com/openclaw/openclaw/pull/95842) Thanks @nxmxbbd, @vincentkoc.
+- Enabled repeatable WhatsApp integration testing against a controlled local service without requiring live credentials. [#95920](https://github.com/openclaw/openclaw/pull/95920) Thanks @romneyda.
+- Added a generated documentation map so contributors can locate relevant guides quickly and detect stale navigation. [#95954](https://github.com/openclaw/openclaw/pull/95954) Thanks @glenn-agent.
+- Improved cleanup and isolation in auto-reply and skill-install tests, reducing temporary-disk buildup. [#96058](https://github.com/openclaw/openclaw/pull/96058) Thanks @xialonglee.
+- Added regression coverage ensuring memory search can recover after a separate reindex without restarting the gateway. [#96094](https://github.com/openclaw/openclaw/pull/96094) Related [#91167](https://github.com/openclaw/openclaw/issues/91167). Thanks @849261680, @kiagentkronos-cell.
+- Prepared conversation checkpoints for future storage changes without changing branch or restore behavior. [#96222](https://github.com/openclaw/openclaw/pull/96222) Thanks @jalehman.
+- Prepared startup-session handling for future storage changes without changing isolation or cleanup behavior. [#96225](https://github.com/openclaw/openclaw/pull/96225) Thanks @jalehman.
+- Added a maintainer runbook for diagnosing and tuning build capacity without confusing it with unrelated failures. [#96302](https://github.com/openclaw/openclaw/pull/96302) Thanks @vincentkoc.
+- Made pull-request smoke testing faster and more predictable while retaining broader release coverage. [#96320](https://github.com/openclaw/openclaw/pull/96320) Thanks @romneyda.
+- Improved QA run logs so maintainers can immediately identify the channel being tested. [#96327](https://github.com/openclaw/openclaw/pull/96327) Thanks @romneyda.
+- Prevented repeated tool calls in QA scenarios from causing false duplicate-identifier failures. [#96338](https://github.com/openclaw/openclaw/pull/96338) Thanks @vincentkoc.
+- Streamlined smoke testing to deliver faster feedback while preserving the intended QA coverage. [#96340](https://github.com/openclaw/openclaw/pull/96340) Thanks @romneyda.
+- Improved cleanup across command tests, reducing leftover temporary data in local and automated runs. [#96359](https://github.com/openclaw/openclaw/pull/96359) Thanks @xialonglee.
+- Strengthened coverage for safely handling oversized or malformed provider usage responses. [#96360](https://github.com/openclaw/openclaw/pull/96360) Thanks @solodmd, @vincentkoc.
+- Prevented valid Codex long-context results from causing false QA failures while still checking that earlier evidence remains available. [#96366](https://github.com/openclaw/openclaw/pull/96366) Thanks @vincentkoc.
+- Improved QA evidence traceability by recording the actual source revision used for each run. [#96434](https://github.com/openclaw/openclaw/pull/96434) Thanks @vincentkoc.
+- Added coverage for command output and warning formatting to reduce future presentation regressions. [#96448](https://github.com/openclaw/openclaw/pull/96448) Thanks @dwc1997.
+- Prepared session status and model selection for future storage changes while preserving current behavior. [#96460](https://github.com/openclaw/openclaw/pull/96460) Thanks @jalehman.
+- Prepared Feishu previews and Mattermost model summaries for future session-storage changes without changing behavior. [#96507](https://github.com/openclaw/openclaw/pull/96507) Thanks @jalehman.
+- Modernized Telegram's internal session handling while preserving polling, lookup, sending, and deletion behavior. [#96524](https://github.com/openclaw/openclaw/pull/96524) Thanks @jalehman.
+- Prepared bundled channel session handling for future storage changes without altering routing, model choices, or user workflows. [#96527](https://github.com/openclaw/openclaw/pull/96527) Thanks @jalehman.
+- Prepared WhatsApp group activation settings for future storage changes while preserving existing activation behavior. [#96530](https://github.com/openclaw/openclaw/pull/96530) Thanks @jalehman.
+- Modernized Voice Call's internal session handling without changing replies or call behavior. [#96539](https://github.com/openclaw/openclaw/pull/96539) Thanks @jalehman.
+- Made the QA maturity scorecard reflect partial coverage more accurately and show what evidence is still missing. [#96543](https://github.com/openclaw/openclaw/pull/96543) Thanks @romneyda.
+- Gave Claude CLI QA runs the appropriate longer time limits for Sonnet and Opus models. [#96567](https://github.com/openclaw/openclaw/pull/96567) Thanks @clawsean.
+- Clarified how maturity is scored while keeping coverage visible as supporting evidence. [#96594](https://github.com/openclaw/openclaw/pull/96594) Thanks @romneyda.
+- Made full QA evidence the default for maturity scorecard updates, preventing incomplete evidence from shaping results. [#96595](https://github.com/openclaw/openclaw/pull/96595) Thanks @romneyda.
+- Reduced repeated processing when the gateway reads metadata from very large transcript records. [#96707](https://github.com/openclaw/openclaw/pull/96707) Thanks @vincentkoc, @yonganzhang.
+- Improved temporary-file cleanup across configuration, gateway, scheduling, and state tests. [#96711](https://github.com/openclaw/openclaw/pull/96711) Thanks @xialonglee.
+- Documented how contributors should route issues, support requests, security reports, and pull requests. [#96714](https://github.com/openclaw/openclaw/pull/96714) Thanks @100yenadmin.
+- Strengthened coverage for verbose command-line logging to reduce future regressions. [#96735](https://github.com/openclaw/openclaw/pull/96735) Thanks @dwc1997, @vincentkoc.
+- Added coverage for terminal output and non-exiting command behavior, improving maintainability without changing the interface. [#96736](https://github.com/openclaw/openclaw/pull/96736) Thanks @dwc1997.
+- Clarified exported-session template code to make future maintenance less error-prone without changing rendered pages. [#96765](https://github.com/openclaw/openclaw/pull/96765) Thanks @qiuyuang.
+- Preserved token and cost totals when oversized exported run records are trimmed. [#96811](https://github.com/openclaw/openclaw/pull/96811) Thanks @aleps001, @joshavant, @lin-hongkuan.
+- Reduced routine build overhead by pausing unused timing-summary collection while keeping it available for future diagnostics. [#96930](https://github.com/openclaw/openclaw/pull/96930) Thanks @romneyda.
+- Reduced repeated browser work in large usage dashboards while preserving filters, totals, charts, and timelines. [#96945](https://github.com/openclaw/openclaw/pull/96945) Thanks @ly-wang19.
+- Reduced repeated work when plugins resolve cached tool calls without changing tool selection. [#96948](https://github.com/openclaw/openclaw/pull/96948) Thanks @ly-wang19.
+- Reduced bookkeeping during updates that encounter many missing plugin files while preserving repair decisions and warnings. [#96950](https://github.com/openclaw/openclaw/pull/96950) Thanks @ly-wang19.
+- Reduced unnecessary processing for local memory installations configured to use shorter embedding vectors. [#96952](https://github.com/openclaw/openclaw/pull/96952) Thanks @ly-wang19, @vincentkoc.
+- Made status reporting more efficient for installations with large session histories while preserving the same recent-session summary. [#96955](https://github.com/openclaw/openclaw/pull/96955) Thanks @ly-wang19.
+- Reduced CPU and temporary memory use when branching or restoring sessions with many saved checkpoints. [#96964](https://github.com/openclaw/openclaw/pull/96964) Thanks @ly-wang19.
+- Published the approved, detailed v2026.6.10 release story with clearer explanations, sources, and contributor attribution. [#97079](https://github.com/openclaw/openclaw/pull/97079) Thanks @hannesrudolph.
+- Recorded previously shipped pagination for inspecting older sections of long session histories. [#97101](https://github.com/openclaw/openclaw/pull/97101) Thanks @galiniliev.
+- Added translation coverage tracking for Android, iOS, and macOS interface text across supported locales. [#97110](https://github.com/openclaw/openclaw/pull/97110) Thanks @vincentkoc.
+- Added a consistent translation workflow for native app text across 21 locales, including safeguards for placeholders and terminology. [#97113](https://github.com/openclaw/openclaw/pull/97113) Thanks @vincentkoc.
+- Clarified macOS release instructions so maintainers use the correct repositories and source revisions for each publishing step. [#97116](https://github.com/openclaw/openclaw/pull/97116) Thanks @romneyda.
+- Adjusted automated build capacity to reduce avoidable Linux queueing while retaining existing safeguards for other platforms. [#97119](https://github.com/openclaw/openclaw/pull/97119) Thanks @vincentkoc.
+- Published the reviewed v2026.6.9 release story in the changelog with clearer grouping, sources, and attribution. [#97124](https://github.com/openclaw/openclaw/pull/97124) Thanks @hannesrudolph.
+- Made Nostr duplicate protection handle invalid timing values safely, preventing events from being forgotten too soon or retained forever. [#97133](https://github.com/openclaw/openclaw/pull/97133) Thanks @zhangguiping-xydt.
+- Connected existing end-to-end tests to the QA maturity inventory for more accurate coverage reporting. [#97150](https://github.com/openclaw/openclaw/pull/97150) Thanks @romneyda.
+- Made macOS packaging logs easier to follow by clearly identifying each product and architecture being built. [#97151](https://github.com/openclaw/openclaw/pull/97151) Thanks @romneyda.
+- Narrowed Matrix's native encryption repair process while preserving the same automatic recovery behavior. [#97181](https://github.com/openclaw/openclaw/pull/97181) Thanks @patrick-erichsen.
+- Added an index for repository scripts so contributors can find the right existing tool without disrupting established paths. [#97250](https://github.com/openclaw/openclaw/pull/97250) Thanks @dboone323, @qingminglong.
+- Aligned a historical changelog heading with the current release-note structure without changing its claims. [#97297](https://github.com/openclaw/openclaw/pull/97297) Thanks @hannesrudolph.
+- Restored the concise v2026.6.9 changelog while a release-page-compatible replacement could be prepared. [#97306](https://github.com/openclaw/openclaw/pull/97306) Thanks @hannesrudolph.
+- Added Cursor's command-line agent as an optional engine for repository code reviews. [#97348](https://github.com/openclaw/openclaw/pull/97348) Thanks @hxy91819.
+- Protected OpenClaw from excessive memory use when an agent proxy returns an unusually large error response. [#97351](https://github.com/openclaw/openclaw/pull/97351) Thanks @zhangguiping-xydt.
+- Made QA coverage reporting more accurately reflect existing OpenAI-compatible provider tests. [#97369](https://github.com/openclaw/openclaw/pull/97369) Thanks @romneyda.
+- Stabilized session migration testing while preserving focused coverage for Voice Call session handling. [#97370](https://github.com/openclaw/openclaw/pull/97370) Thanks @romneyda.
+- Connected existing Tool Search gateway coverage to the standard QA inventory for clearer tracking. [#97374](https://github.com/openclaw/openclaw/pull/97374) Thanks @romneyda.
+- Moved Tool Search gateway validation into the standard QA workflow for consistent execution and evidence collection. [#97478](https://github.com/openclaw/openclaw/pull/97478) Thanks @romneyda.
+- Protected Matrix QA runs from excessive memory use when a homeserver returns an unusually large response. [#97547](https://github.com/openclaw/openclaw/pull/97547) Thanks @alix-007.
+- Protected Discord smoke checks from excessive memory use when the service returns an unusually large response. [#97548](https://github.com/openclaw/openclaw/pull/97548) Thanks @alix-007, @vincentkoc.
+- Refreshed plugin SDK validation limits to match the current public surface while preserving future growth checks. [#97604](https://github.com/openclaw/openclaw/pull/97604) Thanks @romneyda.
+- Improved QA traceability for gateway connection, protocol negotiation, and startup retry behavior used by MCP channel bridges. [#97609](https://github.com/openclaw/openclaw/pull/97609) Thanks @romneyda.
+- Moved WebChat automatic text-to-speech validation into the standard QA workflow for consistent coverage and reporting. [#97632](https://github.com/openclaw/openclaw/pull/97632) Thanks @romneyda.
+- Contributed to the released fix that preserves Discord replies after large skill data is saved. [#97657](https://github.com/openclaw/openclaw/pull/97657) Thanks @joshavant, @wiidz.
+- Restored reliable plugin SDK build validation by removing a conflicting test-only definition. [#97661](https://github.com/openclaw/openclaw/pull/97661) Thanks @vincentkoc.
+- Made existing Docker release and upgrade checks available as structured QA evidence without duplicating the underlying tests. [#97689](https://github.com/openclaw/openclaw/pull/97689) Thanks @romneyda.
+- Clarified why several network and provider paths preserve useful results when secondary cleanup or parsing steps fail. [#97701](https://github.com/openclaw/openclaw/pull/97701) Thanks @zengwen-dt.
+- Brought additional Docker checks into the shared QA inventory, improving release coverage and reducing duplicated validation work. [#97708](https://github.com/openclaw/openclaw/pull/97708) Thanks @romneyda.
+- Added structured QA coverage for ClawHub marketplace listings and packaged plugin installation checks. [#97712](https://github.com/openclaw/openclaw/pull/97712) Thanks @romneyda.
+- Strengthened Firecrawl regression coverage for URL safety, search results, scraping, and response limits. [#97714](https://github.com/openclaw/openclaw/pull/97714) Thanks @solodmd.
+- Strengthened coverage for clear and accurate configuration validation messages. [#97736](https://github.com/openclaw/openclaw/pull/97736) Thanks @solodmd.
+- Added regression coverage for numeric command-line and configuration options, including defaults and boundary values. [#97802](https://github.com/openclaw/openclaw/pull/97802) Thanks @dwc1997.
+- Made intentional exits in tests and wrappers easier to distinguish from real runtime failures. [#97803](https://github.com/openclaw/openclaw/pull/97803) Thanks @maweibin.
+- Added regression coverage for Unicode-safe text slicing, including emoji and split character boundaries. [#97805](https://github.com/openclaw/openclaw/pull/97805) Thanks @dwc1997.
+- Enabled Slack QA flows to run against a local test provider, reducing reliance on live Slack credentials. [#97891](https://github.com/openclaw/openclaw/pull/97891) Thanks @romneyda.
+- Added repeatable release-candidate checks for fresh ClawHub package installation and upgrades before publication. [#97896](https://github.com/openclaw/openclaw/pull/97896) Thanks @romneyda.
+- Clarified the minimum Node.js version for source contributors before they run installation and test commands. [#97898](https://github.com/openclaw/openclaw/pull/97898) Related [#97792](https://github.com/openclaw/openclaw/issues/97792). Thanks @aniruddhaadak80, @lin-hongkuan.
+- Added structured live QA evidence for hosted image and video providers while preserving existing manual checks. [#97900](https://github.com/openclaw/openclaw/pull/97900) Thanks @romneyda.
+- Improved official plugin publishing reliability by adopting corrected ClawHub package-family detection. [#97907](https://github.com/openclaw/openclaw/pull/97907) Thanks @patrick-erichsen.
+- Reduced transient Windows, macOS, and iOS validation failures by retrying timed-out source checkouts. [#97912](https://github.com/openclaw/openclaw/pull/97912) Thanks @romneyda.
+- Prepared more portable channel QA by making each scenario state its requirements before running. [#97915](https://github.com/openclaw/openclaw/pull/97915) Thanks @romneyda.
+- Made Docker-backed QA checks easier to find and maintain in one supported place. [#97937](https://github.com/openclaw/openclaw/pull/97937) Thanks @romneyda.
+- Reduced duplicated Linux CI configuration so checkout behavior can be maintained consistently. [#97940](https://github.com/openclaw/openclaw/pull/97940) Thanks @romneyda.
+- Kept QA Lab compatible with the current Crabline package and clarified local-provider terminology for operators. [#97941](https://github.com/openclaw/openclaw/pull/97941) Thanks @romneyda.
+- Updated CI capacity guidance so maintainers can size hosted runner bursts using current limits. [#97943](https://github.com/openclaw/openclaw/pull/97943) Thanks @vincentkoc.
+- Consolidated repeated workflow checkout configuration, reducing maintenance drift without changing validation behavior. [#97946](https://github.com/openclaw/openclaw/pull/97946) Thanks @romneyda.
+- Consolidated repeated credential checks for live channel QA without changing what is validated. [#97947](https://github.com/openclaw/openclaw/pull/97947) Thanks @romneyda.
+- Consolidated release QA credential checks across channel jobs while preserving the same validation behavior. [#97948](https://github.com/openclaw/openclaw/pull/97948) Thanks @romneyda.
+- Removed duplicated Docker readiness configuration from Crabbox validation, making future updates easier to keep consistent. [#97950](https://github.com/openclaw/openclaw/pull/97950) Thanks @romneyda.
+- Consolidated repeated Docker build preparation in the release workflow to reduce maintenance drift. [#97951](https://github.com/openclaw/openclaw/pull/97951) Thanks @romneyda.
+- Prepared a discoverable documentation home for polished OpenClaw release notes. [#97959](https://github.com/openclaw/openclaw/pull/97959) Thanks @hannesrudolph.
+- Made channel QA scenarios reusable across supported test environments without changing end-user behavior. [#97962](https://github.com/openclaw/openclaw/pull/97962) Thanks @romneyda.
+- Added regression coverage for consistent numeric values in SQLite-backed workflows. [#98009](https://github.com/openclaw/openclaw/pull/98009) Thanks @dwc1997.
+- Added coverage for global and per-agent command-highlighting settings and their fallback behavior. [#98087](https://github.com/openclaw/openclaw/pull/98087) Thanks @solodmd.
+- Prevented completed Tailscale detection checks from leaving unnecessary timers active during gateway setup. [#98134](https://github.com/openclaw/openclaw/pull/98134) Thanks @zhanglei99586.
+- Protected managed Chrome profiles from receiving malformed blank preference entries in an edge case. [#98138](https://github.com/openclaw/openclaw/pull/98138) Thanks @zhanglei99586.
+- Strengthened regression coverage for gateway node wake and reconnect state handling. [#98205](https://github.com/openclaw/openclaw/pull/98205) Thanks @zenglingbiao.
+- Added coverage for splitting lists consistently across normal and edge-case inputs. [#98219](https://github.com/openclaw/openclaw/pull/98219) Thanks @zenglingbiao.
+- Updated official plugin publishing to use corrected ClawHub tooling for package-family handling. [#98233](https://github.com/openclaw/openclaw/pull/98233) Thanks @patrick-erichsen.
+- Allowed four legacy official plugins to be republished without ClawHub rejecting their established package family. [#98249](https://github.com/openclaw/openclaw/pull/98249) Thanks @patrick-erichsen.
+- Published a readable, discoverable release story for OpenClaw v2026.6.11 in the documentation. [#98319](https://github.com/openclaw/openclaw/pull/98319) Thanks @hannesrudolph.
+- Updated generated documentation metadata so the v2026.6.11 release notes could pass deployment checks. [#98325](https://github.com/openclaw/openclaw/pull/98325) Thanks @hannesrudolph.
+- Added regression coverage for SQLite database version reads used during startup and schema checks. [#98369](https://github.com/openclaw/openclaw/pull/98369) Thanks @dwc1997.
+- Added regression coverage for correctly identifying thinking and redacted-thinking response blocks. [#98370](https://github.com/openclaw/openclaw/pull/98370) Thanks @dwc1997.
+- Added coverage to keep channel accounts enabled by default unless they are explicitly turned off. [#98395](https://github.com/openclaw/openclaw/pull/98395) Thanks @dwc1997.
+- Made maintainer bug sweeps support requested batch sizes and specific pull request lists while preserving existing readiness standards. [#98494](https://github.com/openclaw/openclaw/pull/98494) Thanks @vincentkoc.
+- Restored reliable hosted validation by repairing stale test expectations across core and provider checks. [#98533](https://github.com/openclaw/openclaw/pull/98533)
+- Prepared a consistent internal foundation for future conversation-aware access controls without changing current permissions. [#98536](https://github.com/openclaw/openclaw/pull/98536)
+- Restored core test typechecking so valid gateway and provider tests no longer blocked unrelated work. [#98551](https://github.com/openclaw/openclaw/pull/98551) Thanks @romneyda.
+- Restored green lint validation while preserving earlier Tailscale and Feishu safety fixes. [#98598](https://github.com/openclaw/openclaw/pull/98598) Related [#98462](https://github.com/openclaw/openclaw/issues/98462), [#98464](https://github.com/openclaw/openclaw/issues/98464). Thanks @zhanglei99586.
+- Added regression coverage for readable lists in approval notices and other user-facing messages. [#98605](https://github.com/openclaw/openclaw/pull/98605) Thanks @dwc1997, @vincentkoc.
+- Restored the tooling validation pipeline after new transcript coverage changed the expected test plan. [#98610](https://github.com/openclaw/openclaw/pull/98610)
+- Contributed to the fix that keeps long workspace file lists scrollable in the chat sidebar. [#98611](https://github.com/openclaw/openclaw/pull/98611) Related [#98566](https://github.com/openclaw/openclaw/issues/98566). Thanks @645648406-max, @zw-xysk.
+- Made QA credential requests fail cleanly when a shared broker returns an unexpectedly large response. [#98619](https://github.com/openclaw/openclaw/pull/98619) Thanks @zengwen-dt.
+- Prevented message-tool tests from timing out while preserving the plugin behavior they verify. [#98701](https://github.com/openclaw/openclaw/pull/98701)
+- Consolidated repeated provider and utility loading patterns to improve consistency and maintainability. [#98749](https://github.com/openclaw/openclaw/pull/98749) Thanks @romneyda.
+- Strengthened QA proof that native stop commands interrupt the correct active conversation across supported test environments. [#98751](https://github.com/openclaw/openclaw/pull/98751) Thanks @romneyda.
+- Expanded QA coverage for Signal, Mattermost, and Matrix setup and message normalization through Crabline. [#98779](https://github.com/openclaw/openclaw/pull/98779) Thanks @romneyda.
+- Restored documentation and test type checks without changing the attach command's behavior. [#98792](https://github.com/openclaw/openclaw/pull/98792)
+- Placed Telegram reliability guidance where contributors and reviewers will encounter it during future extension work. [#98808](https://github.com/openclaw/openclaw/pull/98808) Thanks @obviyus.
+- Made macOS Swift validation recover from incomplete build caches instead of repeating the same failure. [#98818](https://github.com/openclaw/openclaw/pull/98818)
+- Kept native translation inventory checks responsive when scanning unusual source labels. [#99098](https://github.com/openclaw/openclaw/pull/99098) Thanks @hxy91819.
+- Protected QA Lab Telegram checks from excessive memory use when the Telegram API returns an unexpectedly large response. [#99151](https://github.com/openclaw/openclaw/pull/99151) Thanks @hugenshen.
+- Made QA Lab configuration checks stop early and clearly on unexpectedly large Gateway responses. [#99165](https://github.com/openclaw/openclaw/pull/99165) Thanks @hugenshen.
+- Protected QA Channel workflows from excessive memory use when a QA service returns oversized data. [#99169](https://github.com/openclaw/openclaw/pull/99169) Thanks @hugenshen.
+- Reduced false CI failures in reply-session concurrency coverage by making test coordination more reliable. [#99212](https://github.com/openclaw/openclaw/pull/99212)
+- Prevented test-only proxy assertions from causing false network-safety validation failures. [#99233](https://github.com/openclaw/openclaw/pull/99233) Thanks @joshavant.
+- Established a shared internal foundation for loading runtime modules consistently without changing behavior. [#99261](https://github.com/openclaw/openclaw/pull/99261) Thanks @romneyda.
+- Added QA coverage for Signal message sends through Crabline and their normalized results. [#99262](https://github.com/openclaw/openclaw/pull/99262) Thanks @romneyda.
+- Added QA coverage to ensure Mattermost replies remain tied to the correct group conversation through Crabline. [#99264](https://github.com/openclaw/openclaw/pull/99264) Thanks @romneyda.
+- Added QA coverage to ensure Matrix messages remain tied to the correct room through Crabline. [#99265](https://github.com/openclaw/openclaw/pull/99265) Thanks @romneyda.
+- Consolidated repeated loading patterns across core runtime areas to reduce maintenance drift. [#99278](https://github.com/openclaw/openclaw/pull/99278) Thanks @romneyda.
+- Reduced transient QA smoke timeouts under heavy CI load without changing product behavior. [#99294](https://github.com/openclaw/openclaw/pull/99294) Thanks @romneyda.
+- Consolidated Gateway and stateful runtime loading patterns to improve consistency and maintainability. [#99296](https://github.com/openclaw/openclaw/pull/99296) Thanks @romneyda.
+- Unified repeated loading patterns across Discord, Slack, and Telegram while preserving existing channel behavior. [#99298](https://github.com/openclaw/openclaw/pull/99298) Thanks @romneyda.
+- Unified repeated loading patterns across Matrix and other channels to reduce future maintenance risk. [#99302](https://github.com/openclaw/openclaw/pull/99302) Thanks @romneyda.
+- Added end-to-end QA coverage for Zalo setup, inbound delivery, and outbound message normalization through Crabline. [#99303](https://github.com/openclaw/openclaw/pull/99303) Thanks @romneyda.
+- Restored reliable lint validation for the Memory Wiki extension without changing its behavior. [#99307](https://github.com/openclaw/openclaw/pull/99307) Thanks @romneyda.
+- Made streaming QA evidence prove that a channel shows a preview before the final answer. [#99310](https://github.com/openclaw/openclaw/pull/99310) Thanks @romneyda.
+- Added a guarded monthly npm publication path for release maintainers without moving the normal latest channel. [#99352](https://github.com/openclaw/openclaw/pull/99352) Thanks @kevinslin.
+- Restored CI checks for Telegram context handling and supported plugin SDK boundaries. [#99355](https://github.com/openclaw/openclaw/pull/99355) Thanks @romneyda.
+- Consolidated repeated data-shape checks across core code to improve consistency and maintainability. [#99359](https://github.com/openclaw/openclaw/pull/99359) Thanks @romneyda.
+- Consolidated repeated data-shape checks across bundled plugins to reduce maintenance drift. [#99361](https://github.com/openclaw/openclaw/pull/99361) Thanks @romneyda.
+- Reduced intermittent QA smoke timeouts when several isolated Gateway checks run together on limited CI hardware. [#99368](https://github.com/openclaw/openclaw/pull/99368) Thanks @romneyda.
+- Standardized QA results and diagnostics so release validation is easier to compare and trust. [#99374](https://github.com/openclaw/openclaw/pull/99374) Thanks @romneyda.
+- Restored clean-checkout Gateway validation after a missing test dependency caused false failures. [#99520](https://github.com/openclaw/openclaw/pull/99520) Related [#99513](https://github.com/openclaw/openclaw/issues/99513). Thanks @masatohoshino.
+- Kept explicit Bedrock live checks on the real Bedrock runtime so maintainers can validate AWS-backed behavior reliably. [#99607](https://github.com/openclaw/openclaw/pull/99607) Thanks @brian-bell.
+- Made duplicate QA scenario coverage fail clearly so validation results remain trustworthy. [#99628](https://github.com/openclaw/openclaw/pull/99628) Related [#99627](https://github.com/openclaw/openclaw/issues/99627). Thanks @romneyda.
+- Protected secrets in bounded QA evidence logs and failure details while preserving useful diagnostics. [#99629](https://github.com/openclaw/openclaw/pull/99629) Thanks @romneyda.
+- Simplified channel QA setup and made unsupported test actions fail more clearly. [#99632](https://github.com/openclaw/openclaw/pull/99632) Related [#99622](https://github.com/openclaw/openclaw/issues/99622). Thanks @romneyda.
+- Reduced false cross-platform release-check failures around static server shutdown. [#99642](https://github.com/openclaw/openclaw/pull/99642) Thanks @romneyda.
+- Reduced intermittent Crabline QA failures caused by partially written test output. [#99649](https://github.com/openclaw/openclaw/pull/99649) Related [#99648](https://github.com/openclaw/openclaw/issues/99648). Thanks @romneyda.
+- Reduced false QA failures by giving native stop-command recovery the full expected turn time. [#99656](https://github.com/openclaw/openclaw/pull/99656) Related [#99655](https://github.com/openclaw/openclaw/issues/99655). Thanks @romneyda.
+- Consolidated numeric limit handling across OpenClaw to improve consistency and maintainability. [#99671](https://github.com/openclaw/openclaw/pull/99671) Related [#99667](https://github.com/openclaw/openclaw/issues/99667). Thanks @romneyda.
+- Consolidated repeated string-option handling across commands, configuration, providers, and channels without changing behavior. [#99676](https://github.com/openclaw/openclaw/pull/99676) Related [#99663](https://github.com/openclaw/openclaw/issues/99663). Thanks @romneyda.
+- Made local-provider activity appear promptly and consistently in Crabline-backed QA. [#99679](https://github.com/openclaw/openclaw/pull/99679) Related [#99664](https://github.com/openclaw/openclaw/issues/99664). Thanks @romneyda.
+- Made configured model references more consistent across the catalog, agent runtime, Gateway, and plugins without changing intended behavior. [#99682](https://github.com/openclaw/openclaw/pull/99682) Related [#99674](https://github.com/openclaw/openclaw/issues/99674). Thanks @romneyda.
+- Consolidated internal hashing for identifiers and validation records without changing their outputs. [#99687](https://github.com/openclaw/openclaw/pull/99687) Related [#99675](https://github.com/openclaw/openclaw/issues/99675). Thanks @romneyda.
+- Consolidated tolerant JSON handling across several internal workflows to reduce duplication and future drift. [#99688](https://github.com/openclaw/openclaw/pull/99688) Thanks @romneyda.
+- Unified internal work ordering across account, session, file, message, and plugin paths while preserving existing behavior. [#99691](https://github.com/openclaw/openclaw/pull/99691) Thanks @romneyda.
+- Removed redundant list-cleanup layers across channels, agents, the CLI, and diagnostics to make maintenance clearer. [#99702](https://github.com/openclaw/openclaw/pull/99702) Related [#99697](https://github.com/openclaw/openclaw/issues/99697). Thanks @romneyda.
+- Strengthened release validation for important chat, search, compatibility, and plugin workflows. [#99705](https://github.com/openclaw/openclaw/pull/99705) Thanks @romneyda.
+- Expanded shared live-channel QA coverage for Telegram, Slack, WhatsApp, and Matrix while preserving each channel's existing behavior. [#99707](https://github.com/openclaw/openclaw/pull/99707) Thanks @romneyda.
+- Restored reliable package and Docker preparation from clean checkouts. [#99710](https://github.com/openclaw/openclaw/pull/99710) Thanks @romneyda.
+- Standardized reference-image formatting across media providers to reduce maintenance drift without changing generated-media behavior. [#99715](https://github.com/openclaw/openclaw/pull/99715) Thanks @romneyda.
+- Strengthened validation of the interactive Telegram setup flow, including saving the resulting configuration. [#99717](https://github.com/openclaw/openclaw/pull/99717) Thanks @romneyda.
+- Consolidated internal text cleanup while preserving terminal formatting and outbound-message safety. [#99718](https://github.com/openclaw/openclaw/pull/99718) Thanks @romneyda.
+- Made web and WebSocket address validation more consistent across configuration, proxy, media, webhook, and plugin workflows. [#99719](https://github.com/openclaw/openclaw/pull/99719) Thanks @romneyda.
+- Consolidated common waiting and timeout behavior across core workflows, plugins, tools, and tests without changing intended timing. [#99721](https://github.com/openclaw/openclaw/pull/99721) Thanks @romneyda.
+- Strengthened release coverage for real Gateway and MCP startup, connections, discovery, negotiation, and tool calls. [#99735](https://github.com/openclaw/openclaw/pull/99735) Thanks @romneyda.
+- Made combined release validation more reliable by preventing missing packaged runtime files. [#99736](https://github.com/openclaw/openclaw/pull/99736) Related [#99734](https://github.com/openclaw/openclaw/issues/99734). Thanks @romneyda.
+- Added stronger runtime coverage for voice, media, scheduling, browser cleanup, and telemetry workflows. [#99737](https://github.com/openclaw/openclaw/pull/99737) Thanks @romneyda.
+- Reduced false validation timeouts for native command session targeting under busy conditions. [#99743](https://github.com/openclaw/openclaw/pull/99743) Thanks @romneyda.
+- Unified safeguards for downloading bounded HTTP responses across agents, providers, the Gateway, plugins, documentation, and media. [#99744](https://github.com/openclaw/openclaw/pull/99744) Thanks @romneyda.
+- Centralized credential masking and secure secret comparison to keep authentication behavior consistent across supported workflows. [#99746](https://github.com/openclaw/openclaw/pull/99746) Thanks @romneyda.
+- Made true-or-false setting interpretation consistent across plugins, messaging, media, scheduling, and memory configuration. [#99750](https://github.com/openclaw/openclaw/pull/99750) Thanks @romneyda.
+- Unified cancellation handling so stops and timeouts remain consistent across agent, Gateway, reply, media, and process workflows. [#99753](https://github.com/openclaw/openclaw/pull/99753) Thanks @romneyda.
+- Consolidated repeated internal task handoffs across setup, approvals, agent turns, and plugins without changing behavior. [#99755](https://github.com/openclaw/openclaw/pull/99755) Thanks @romneyda.
+- Consolidated Voice Call route handling while preserving webhook and realtime matching. [#99766](https://github.com/openclaw/openclaw/pull/99766) Thanks @romneyda.
+- Simplified test maintenance by consolidating repeated local network setup. [#99771](https://github.com/openclaw/openclaw/pull/99771) Thanks @romneyda.
+- Simplified maintenance of the paired BytePlus and Volcengine model catalogs without changing provider behavior. [#99777](https://github.com/openclaw/openclaw/pull/99777) Thanks @romneyda.
+- Standardized text-pattern escaping across maintainer automation to reduce duplication and future inconsistencies. [#99778](https://github.com/openclaw/openclaw/pull/99778) Thanks @romneyda.
+- Made primary release validation faster and more reliable while retaining runtime and telemetry coverage. [#99784](https://github.com/openclaw/openclaw/pull/99784) Thanks @romneyda.
+- Consolidated duplicate list-cleanup behavior used in provider resolution and execution authorization. [#99785](https://github.com/openclaw/openclaw/pull/99785) Thanks @romneyda.
+- Unified numeric limit handling across agent workflows while preserving their existing allowed ranges. [#99786](https://github.com/openclaw/openclaw/pull/99786) Thanks @romneyda.
+- Consolidated internal hashing across authentication, sessions, approvals, identifiers, and plugins without changing compatibility. [#99788](https://github.com/openclaw/openclaw/pull/99788) Thanks @romneyda.
+- Extended consistent provider and model reference handling across media, speech, agent policy, and diagnostic workflows. [#99790](https://github.com/openclaw/openclaw/pull/99790) Thanks @romneyda.
+- Improved release-validation reliability by reducing package-build memory pressure. [#99793](https://github.com/openclaw/openclaw/pull/99793)
+- Aligned internal conversation audience labels with verified group context for future access-control work. [#99816](https://github.com/openclaw/openclaw/pull/99816)
+- Improved artifact-build reliability by preventing memory-related validation failures. [#99820](https://github.com/openclaw/openclaw/pull/99820)
+- Consolidated shared channel state and plugin migration maintenance across Slack, Mattermost, Teams, and Matrix without changing workflows. [#99850](https://github.com/openclaw/openclaw/pull/99850)
+- Made Control UI chat styling more predictable to update, with no intended visual change and less risk of regressions. [#99900](https://github.com/openclaw/openclaw/pull/99900)
+- Made QA report command validation substantially faster and less memory-intensive without changing its results. [#99909](https://github.com/openclaw/openclaw/pull/99909)
+- Corrected command output shortening so zero or invalid length limits no longer produce text beyond the requested size. [#99917](https://github.com/openclaw/openclaw/pull/99917) Thanks @super-cabbage.
+- Made plugin development surface validation faster and less memory-intensive without changing what it verifies. [#99940](https://github.com/openclaw/openclaw/pull/99940)
+- Removed an unused Slack download path, reducing security-sensitive maintenance while preserving private-file and image downloads. [#99944](https://github.com/openclaw/openclaw/pull/99944) Thanks @miorbnli.
+- Sped up update-command coverage while retaining validation of managed-service restart failures. [#99945](https://github.com/openclaw/openclaw/pull/99945)
+- Made Crabbox wrapper coverage faster and lighter while preserving the same behavioral checks. [#99969](https://github.com/openclaw/openclaw/pull/99969)
+- Reduced unnecessary waiting in Docker scheduler coverage without changing runtime scheduling behavior. [#99988](https://github.com/openclaw/openclaw/pull/99988)
+- Made lightweight realtime validation tools start faster and use less memory while preserving live smoke behavior. [#100002](https://github.com/openclaw/openclaw/pull/100002)
+- Sped up package-candidate safety validation without changing the protections it provides. [#100008](https://github.com/openclaw/openclaw/pull/100008)
+- Prevented Codex plugin releases from publishing with an outdated embedded runtime, reducing false-green updates. [#100015](https://github.com/openclaw/openclaw/pull/100015) Thanks @100yenadmin, @fuller-stack-dev.
+- Reduced memory use and kept isolated tests within their performance budget for faster, more dependable contributor feedback. [#100019](https://github.com/openclaw/openclaw/pull/100019)
+- Restructured the Control UI for more predictable navigation, cleaner page transitions, and less unnecessary screen updating. [#100024](https://github.com/openclaw/openclaw/pull/100024) Thanks @shakkernerd.
+- Improved Matrix QA evidence so maintainers can diagnose request ordering, retries, errors, and state continuity more easily. [#100039](https://github.com/openclaw/openclaw/pull/100039) Thanks @romneyda.
+- Made validation from isolated development checkouts use the code actually under test, avoiding misleading results. [#100053](https://github.com/openclaw/openclaw/pull/100053)
+- Removed redundant internal type names so maintainers and plugin developers can follow affected code more directly. [#100061](https://github.com/openclaw/openclaw/pull/100061) Thanks @romneyda.
+- Stabilized local macOS validation so maintainers can prepare releases and changes without host-specific false failures. [#100069](https://github.com/openclaw/openclaw/pull/100069)
+- Updated TypeScript linting while avoiding misleading findings and unsafe automated changes. [#100083](https://github.com/openclaw/openclaw/pull/100083)
+- Made the documented web-fetch performance benchmark command work as written. [#100087](https://github.com/openclaw/openclaw/pull/100087) Thanks @vincentkoc.
+- Stabilized Control UI routing coverage to reduce false failures around chat and session layouts. [#100108](https://github.com/openclaw/openclaw/pull/100108) Thanks @vincentkoc.
+- Made qa-channel final answers reliably replace previews even when optional delivery details are absent. [#100114](https://github.com/openclaw/openclaw/pull/100114) Thanks @vincentkoc.
+- Strengthened lint protection against accidentally sharing one mutable value across multiple array entries. [#100122](https://github.com/openclaw/openclaw/pull/100122)
+- Updated documentation regression coverage to match current wording and prevent unrelated validation failures. [#100183](https://github.com/openclaw/openclaw/pull/100183) Thanks @vincentkoc.
+- Aligned documentation for environment protection, scheduled-task fallback checks, and Talk silence defaults without changing behavior. [#100186](https://github.com/openclaw/openclaw/pull/100186)
+- Added repeatable Android chat-streaming coverage for duplicate, missing, stale, timed-out, and malformed messages. [#100200](https://github.com/openclaw/openclaw/pull/100200)
+- Added repeatable Apple-platform chat coverage to catch duplicate, missing, reordered, or malformed streamed replies before release. [#100201](https://github.com/openclaw/openclaw/pull/100201)
+- Strengthened mobile validation so new Gateway events cannot silently go unhandled by iOS or Android. [#100206](https://github.com/openclaw/openclaw/pull/100206)
+- Updated the bundled automated review workflow with current reviewer options, configurable defaults, and stronger execution safeguards. [#100210](https://github.com/openclaw/openclaw/pull/100210)
+- Improved the safety and consistency of maintainer validation for heavy workloads and untrusted contributions. [#100220](https://github.com/openclaw/openclaw/pull/100220)
+- Isolated unit tests from live local configuration and credentials for safer, more consistent results across machines. [#100221](https://github.com/openclaw/openclaw/pull/100221)
+- Let iOS developers keep debug and release apps installed side by side with distinct icons and separate app data. [#100222](https://github.com/openclaw/openclaw/pull/100222)
+- Restored clean localization, documentation, and lint validation for the Crestodian onboarding flow. [#100223](https://github.com/openclaw/openclaw/pull/100223)
+- Streamlined release publishing by carrying clear approval through the same named release while retaining checks for changed risk. [#100239](https://github.com/openclaw/openclaw/pull/100239) Thanks @vincentkoc.
+- Made release preparation more dependable on busy Macs and strengthened full-suite validation. [#100242](https://github.com/openclaw/openclaw/pull/100242)
+- Stabilized OpenClawKit contract and chat coverage under parallel macOS load, reducing false validation failures. [#100243](https://github.com/openclaw/openclaw/pull/100243)
+- Restored complete package artifacts for more reliable source, Docker, and plugin development builds. [#100249](https://github.com/openclaw/openclaw/pull/100249) Thanks @vincentkoc.
+- Reduced interruptions during bounded maintainer cleanup by allowing larger approved batches of stale pull requests. [#100253](https://github.com/openclaw/openclaw/pull/100253)
+- Cleaned up iOS and Apple Watch debug icons by removing an unintended white outer rim. [#100259](https://github.com/openclaw/openclaw/pull/100259)
+- Corrected QA prompt handling so validation responds to the user's actual instruction rather than hidden runtime context. [#100272](https://github.com/openclaw/openclaw/pull/100272) Thanks @marvinthebored, @obviyus, @peetiegonzalez.
+- Strengthened mobile protocol validation so native iOS or Android changes cannot bypass Gateway event coverage. [#100278](https://github.com/openclaw/openclaw/pull/100278)
+- Restored a clean Android formatting baseline so contributors can validate and extend recent mobile chat work. [#100304](https://github.com/openclaw/openclaw/pull/100304)
+- Prevented pull-request landing validation from exhausting shared service limits while preserving trustworthy results. [#100332](https://github.com/openclaw/openclaw/pull/100332)
+- Completed the release record for landed WhatsApp reconnect, quoted-reply, credential-recovery, and delivery-status fixes. [#100346](https://github.com/openclaw/openclaw/pull/100346) Thanks @bartok9, @leonidaslux, @masatohoshino, @vishalj99.
+- Restored compilation of shared Apple-platform tests covering pairing setup results. [#100355](https://github.com/openclaw/openclaw/pull/100355)
+- Prevented iOS startup failures when Voice Wake is disabled, including in Simulator development builds. [#100370](https://github.com/openclaw/openclaw/pull/100370)
+- Stabilized load-sensitive Matrix, WhatsApp, and process coverage to reduce false failures on busy machines. [#100420](https://github.com/openclaw/openclaw/pull/100420)
+- Reduced full-suite memory pressure so local validation is less likely to fail or overwhelm a developer workstation. [#100437](https://github.com/openclaw/openclaw/pull/100437)
+- Completed the release record for several already-landed user-visible fixes and their original contributors. [#100441](https://github.com/openclaw/openclaw/pull/100441)
+- Fixed a release-validation failure that prevented candidate packages from being prepared. [#100459](https://github.com/openclaw/openclaw/pull/100459) Thanks @vincentkoc.
+- Added the missing release credit for the fix to empty interactive replies. [#100464](https://github.com/openclaw/openclaw/pull/100464) Thanks @mushuiyu886.
+- Simplified the iOS development app label while keeping debug and release installations easy to distinguish. [#100466](https://github.com/openclaw/openclaw/pull/100466)
+- Restored release validation for older OpenClaw candidates without weakening checks for current packages. [#100469](https://github.com/openclaw/openclaw/pull/100469) Thanks @vincentkoc.
+- Added repeatable visual evidence that candidate Control UI builds can send a chat message and render the final reply. [#100472](https://github.com/openclaw/openclaw/pull/100472) Thanks @brokemac79.
+- Completed the release record and contributor credit for three already-landed voice fixes. [#100473](https://github.com/openclaw/openclaw/pull/100473)
+- Recorded an already-landed remote browser reliability fix while reducing repeated validation work caused by changelog conflicts. [#100495](https://github.com/openclaw/openclaw/pull/100495) Thanks @hemantsudarshan, @keaneyan.
+- Removed an obsolete macOS onboarding test so the current native test target compiles cleanly. [#100497](https://github.com/openclaw/openclaw/pull/100497) Thanks @steipete-oai.
+- Recorded that persistent logins in new isolated macOS browser profiles survive graceful Browser and Gateway restarts. [#100507](https://github.com/openclaw/openclaw/pull/100507) Thanks @turbotheturtle.
+- Strengthened macOS browser proxy test reliability by removing intermittent failures that caused needless reruns. [#100517](https://github.com/openclaw/openclaw/pull/100517)
+- Added an accurate release record for managed browser attachment downloads and the file details they return. [#100532](https://github.com/openclaw/openclaw/pull/100532) Thanks @zhangguiping-xydt.
+- Recorded four previously shipped Control UI improvements so the release history and contributor credit remained complete. [#100533](https://github.com/openclaw/openclaw/pull/100533) Thanks @evan-ym, @qingminglong, @tiffanychum, @xianshishan.
+- Reduced unnecessary setup work for models that cannot use tools while preserving existing tool-enabled workflows. [#100536](https://github.com/openclaw/openclaw/pull/100536) Thanks @vincentkoc.
+- Clarified and strengthened retry coverage for Telegram message edits without changing their existing behavior. [#100543](https://github.com/openclaw/openclaw/pull/100543) Thanks @lzw112.
+- Completed the release record for three previously shipped reliability fixes and their contributor credit. [#100545](https://github.com/openclaw/openclaw/pull/100545)
+- Documented the shipped Control UI previews that reveal useful GitHub issue and pull request details. [#100555](https://github.com/openclaw/openclaw/pull/100555)
+- Added release-history coverage for Apple chat recovery after reconnecting to an active response. [#100561](https://github.com/openclaw/openclaw/pull/100561)
+- Recorded three landed fixes covering streamed replies, phone identity handling, and bounded Tlon responses. [#100562](https://github.com/openclaw/openclaw/pull/100562) Thanks @hugenshen, @morluto, @totobusnello.
+- Added a traceable release record for safer browser action downloads and preserved user-owned tabs. [#100575](https://github.com/openclaw/openclaw/pull/100575) Thanks @sunlit-deng.
+- Reduced unnecessary repeat validation when concurrent pull requests land without changing the prepared patch. [#100593](https://github.com/openclaw/openclaw/pull/100593)
+- Completed changelog coverage for five shipped Control UI and terminal interface fixes. [#100599](https://github.com/openclaw/openclaw/pull/100599) Thanks @goutamadwant, @haishmg, @ml12580, @ruanrrn, @vincentkoc, @zengwen-dt.
+- Restored documentation validation and indexing for the managed-worktrees guide. [#100603](https://github.com/openclaw/openclaw/pull/100603)
+- Recorded three shipped plugin and configuration fixes so their release coverage remained complete. [#100609](https://github.com/openclaw/openclaw/pull/100609) Thanks @vincentkoc.
+- Corrected Workboard validation so legitimate cleanup behavior no longer caused false failures. [#100611](https://github.com/openclaw/openclaw/pull/100611)
+- Simplified Control UI navigation maintenance while preserving saved sidebar choices and existing behavior. [#100612](https://github.com/openclaw/openclaw/pull/100612)
+- Reduced duplicated and unused internal code across several areas, making future maintenance more consistent. [#100650](https://github.com/openclaw/openclaw/pull/100650) Thanks @vincentkoc.
+- Avoided redundant hosted validation after clean rebases when the prepared change was demonstrably unchanged. [#100663](https://github.com/openclaw/openclaw/pull/100663)
+- Expanded the Android release record to include five previously shipped app improvements. [#100702](https://github.com/openclaw/openclaw/pull/100702)
+- Restored core Gateway and code-quality validation so unrelated changes could proceed reliably. [#100703](https://github.com/openclaw/openclaw/pull/100703)
+- Updated package acceptance coverage to reflect the current pinned Claude CLI setup. [#100723](https://github.com/openclaw/openclaw/pull/100723) Thanks @vincentkoc.
+- Added release coverage for corrected model labels and durable inbound-image previews in the Control UI. [#100740](https://github.com/openclaw/openclaw/pull/100740) Thanks @hyspacex, @sweetcornna.
+- Completed the prerelease record for four previously landed fixes and their contributors. [#100781](https://github.com/openclaw/openclaw/pull/100781)
+- Completed developer support and validation for integrations using managed-worktree session results. [#100793](https://github.com/openclaw/openclaw/pull/100793)
+- Made managed-worktree session results available through the supported developer interface. [#100804](https://github.com/openclaw/openclaw/pull/100804)
+- Removed obsolete internal code and legacy Android artifacts, leaving a smaller maintenance surface. [#100823](https://github.com/openclaw/openclaw/pull/100823) Thanks @vincentkoc.
+- Pruned unused core runtime paths to make ownership and future maintenance easier to understand. [#100856](https://github.com/openclaw/openclaw/pull/100856) Thanks @vincentkoc.
+- Narrowed stale internal UI and provider surfaces, improving the accuracy of maintenance reports. [#100882](https://github.com/openclaw/openclaw/pull/100882) Thanks @vincentkoc.
+- Strengthened regression coverage for setting up Hugging Face local apps with compatible local model servers. [#100887](https://github.com/openclaw/openclaw/pull/100887) Thanks @osolmaz.
+- Improved the consistency of compact Android voice and screen captures used for release review. [#100895](https://github.com/openclaw/openclaw/pull/100895) Thanks @iwhatsskill.
+- Realigned validation with current Codex, Gateway, and Control UI behavior to prevent misleading failures. [#100897](https://github.com/openclaw/openclaw/pull/100897) Thanks @vincentkoc.
+- Restored compilation of shared Apple platform tests used to validate iOS and macOS chat changes. [#100903](https://github.com/openclaw/openclaw/pull/100903)
+- Tightened internal agent code boundaries so maintainers have fewer accidental interfaces to preserve. [#100909](https://github.com/openclaw/openclaw/pull/100909) Thanks @vincentkoc.
+- Reduced the Control UI's internal surface while keeping its visible behavior unchanged. [#100931](https://github.com/openclaw/openclaw/pull/100931) Thanks @vincentkoc.
+- Made focused Control UI end-to-end checks prepare their required media tools automatically. [#100950](https://github.com/openclaw/openclaw/pull/100950) Thanks @vincentkoc.
+- Removed stale and unsupported Control UI development interfaces to reduce accidental dependencies. [#100952](https://github.com/openclaw/openclaw/pull/100952) Thanks @vincentkoc.
+- Prevented routine iOS package resolution from leaving unrelated local file changes behind. [#100961](https://github.com/openclaw/openclaw/pull/100961)
+- Clarified Telegram's internal boundaries so private implementation details are less likely to become dependencies. [#100975](https://github.com/openclaw/openclaw/pull/100975) Thanks @vincentkoc.
+- Simplified Workboard's internal development surface without changing how Workboard behaves. [#100989](https://github.com/openclaw/openclaw/pull/100989) Thanks @vincentkoc.
+- Made plugin registry expectations clearer and easier to validate without changing runtime behavior. [#100990](https://github.com/openclaw/openclaw/pull/100990) Thanks @romneyda.
+- Consolidated duplicated script contracts so maintenance changes are easier to validate consistently. [#100992](https://github.com/openclaw/openclaw/pull/100992) Thanks @romneyda.
+- Simplified Gateway client maintenance by consolidating repeated internal contracts while preserving compatibility. [#101012](https://github.com/openclaw/openclaw/pull/101012) Thanks @romneyda.
+- Reduced unused Control UI development surface and noise in future maintenance reports. [#101013](https://github.com/openclaw/openclaw/pull/101013) Thanks @vincentkoc.
+- Kept private package code clearly internal, improving ownership boundaries and dead-code reporting. [#101041](https://github.com/openclaw/openclaw/pull/101041) Thanks @vincentkoc.
+- Strengthened Docker release validation by proving documented services and packaged installations actually start and run. [#101045](https://github.com/openclaw/openclaw/pull/101045) Thanks @romneyda.
+- Added stronger release evidence for Telegram startup, scheduled activity, and telemetry delivery. [#101051](https://github.com/openclaw/openclaw/pull/101051) Thanks @romneyda.
+- Unified Matrix lifecycle validation across supported test environments, making parity gaps easier to detect. [#101055](https://github.com/openclaw/openclaw/pull/101055) Thanks @romneyda.
+- Centralized channel restart and access-policy scenarios to reduce duplicated QA maintenance. [#101063](https://github.com/openclaw/openclaw/pull/101063) Thanks @romneyda.
+- Unified channel routing coverage so mention, room, allowlist, and reply regressions are easier to catch. [#101076](https://github.com/openclaw/openclaw/pull/101076) Thanks @romneyda.
+- Standardized Telegram and WhatsApp command and session checks across shared and live QA environments. [#101080](https://github.com/openclaw/openclaw/pull/101080) Thanks @romneyda.
+- Restored Android formatting and framework validation, reducing release-blocking maintenance noise. [#101081](https://github.com/openclaw/openclaw/pull/101081) Thanks @vincentkoc.
+- Consolidated Slack and Matrix thread and direct-message coverage for clearer cross-channel validation. [#101112](https://github.com/openclaw/openclaw/pull/101112) Thanks @romneyda.
+- Added changelog coverage for a broad set of previously shipped provider, channel, memory, browser, and configuration fixes. [#101128](https://github.com/openclaw/openclaw/pull/101128)
+- Hardened QA credential administration against oversized service responses, failing clearly without excessive memory use. [#101131](https://github.com/openclaw/openclaw/pull/101131) Thanks @cxbasdev.
+- Cleaned up the Control UI's internal type surface to make maintenance reports more accurate. [#101135](https://github.com/openclaw/openclaw/pull/101135) Thanks @vincentkoc.
+- Kept private Control UI definitions internal, reducing noise and accidental dependencies for maintainers. [#101165](https://github.com/openclaw/openclaw/pull/101165) Thanks @vincentkoc.
+- Corrected QA smoke selection so routine runs could start instead of failing during setup. [#101173](https://github.com/openclaw/openclaw/pull/101173) Thanks @romneyda.
+- Increased parallel test capacity to reduce avoidable wait time during busy validation runs. [#101174](https://github.com/openclaw/openclaw/pull/101174) Thanks @vincentkoc.
+- Added maintainer validation that prevents new code from bypassing the supported session-storage path. [#101178](https://github.com/openclaw/openclaw/pull/101178) Thanks @jalehman.
+- Prepared compaction, scheduled checks, and session forks for future storage changes without altering behavior. [#101179](https://github.com/openclaw/openclaw/pull/101179) Thanks @jalehman.
+- Prepared session routing, goals, delivery, and compaction tracking for safer storage changes without altering workflows. [#101180](https://github.com/openclaw/openclaw/pull/101180) Thanks @jalehman.
+- Reverted a temporary QA smoke selection change that was not intended to ship. [#101184](https://github.com/openclaw/openclaw/pull/101184) Thanks @romneyda.
+- Temporarily removed an unreliable QA smoke requirement so unrelated contributions were not blocked. [#101185](https://github.com/openclaw/openclaw/pull/101185) Thanks @romneyda.
+- Restored reliable automatic smoke coverage for Matrix and Telegram channel changes. [#101186](https://github.com/openclaw/openclaw/pull/101186) Thanks @romneyda, @vincentkoc.
+- Kept native release validation available when the usual hosted runner capacity was unavailable. [#101196](https://github.com/openclaw/openclaw/pull/101196)
+- Stabilized Windows startup fallback coverage and ensured scheduler changes reach the appropriate validation. [#101223](https://github.com/openclaw/openclaw/pull/101223)
+- Refreshed native localization tracking after source movement to prevent false validation failures. [#101232](https://github.com/openclaw/openclaw/pull/101232)
+- Corrected native localization references so app-related validation remains accurate. [#101233](https://github.com/openclaw/openclaw/pull/101233) Thanks @vincentkoc.
+- Updated the generated documentation index to match the Claude Mythos 5 guidance. [#101242](https://github.com/openclaw/openclaw/pull/101242)
+- Reduced accidental internal API exposure and improved the signal from dead-code reviews. [#101243](https://github.com/openclaw/openclaw/pull/101243) Thanks @vincentkoc.
+- Simplified the Control UI's internal module surface while preserving pairing guidance and visible behavior. [#101262](https://github.com/openclaw/openclaw/pull/101262) Thanks @vincentkoc.
+- Made Android development commands find a standard local SDK automatically in fresh checkouts. [#101273](https://github.com/openclaw/openclaw/pull/101273)
+- Added automatic Android formatting enforcement to prevent cleanup drift from reaching the main codebase. [#101275](https://github.com/openclaw/openclaw/pull/101275)
+- Kept the local debug proxy available and its errors honest when an upstream server ends a response early. [#101315](https://github.com/openclaw/openclaw/pull/101315) Thanks @sebtardif.
+- Prevented Gateway reload and startup tests from hanging when run together. [#101331](https://github.com/openclaw/openclaw/pull/101331) Thanks @obviyus.
+- Narrowed Control UI module boundaries and reduced noise in unused-code checks. [#101339](https://github.com/openclaw/openclaw/pull/101339) Thanks @vincentkoc.
+- Modernized Android build dependencies and validation while keeping the app's target behavior unchanged. [#101356](https://github.com/openclaw/openclaw/pull/101356)
+- Reduced unsupported memory SDK surface so developers are less likely to depend on private internals. [#101362](https://github.com/openclaw/openclaw/pull/101362) Thanks @vincentkoc.
+- Restored compilation of shared Apple platform tests used for local validation. [#101372](https://github.com/openclaw/openclaw/pull/101372)
+- Clarified the Copilot plugin's internal boundaries without changing its runtime behavior. [#101379](https://github.com/openclaw/openclaw/pull/101379) Thanks @vincentkoc.
+- Reduced accidental API exposure in the GitHub Copilot provider, making its supported boundaries clearer. [#101393](https://github.com/openclaw/openclaw/pull/101393) Thanks @vincentkoc.
+- Kept private plugin details internal, improving dead-code reports and future cleanup. [#101406](https://github.com/openclaw/openclaw/pull/101406) Thanks @vincentkoc.
+- Clarified supported boundaries for the Brave, Firecrawl, and DeepInfra provider plugins. [#101425](https://github.com/openclaw/openclaw/pull/101425) Thanks @vincentkoc.
+- Kept OpenCode Go streaming and catalog internals private so extension developers see clearer integration boundaries. [#101440](https://github.com/openclaw/openclaw/pull/101440) Thanks @vincentkoc.
+- Cleaned up private OpenRouter and SMS plugin definitions to improve internal API accuracy. [#101452](https://github.com/openclaw/openclaw/pull/101452) Thanks @vincentkoc.
+- Enabled release operators to validate an exact extended-stable candidate before its final tag exists. [#101466](https://github.com/openclaw/openclaw/pull/101466) Thanks @kevinslin.
+- Removed an obsolete Android cache-cleanup path, leaving one clearer ownership model. [#101470](https://github.com/openclaw/openclaw/pull/101470) Thanks @vincentkoc.
+- Narrowed the private memory SDK surface and improved the accuracy of maintenance reports. [#101508](https://github.com/openclaw/openclaw/pull/101508) Thanks @vincentkoc.
+- Stabilized Android saved-gateway reconnect coverage to reduce intermittent validation failures. [#101519](https://github.com/openclaw/openclaw/pull/101519)
+- Narrowed internal execution-timeout code without changing timeout behavior. [#101523](https://github.com/openclaw/openclaw/pull/101523) Thanks @vincentkoc.
+- Removed stale Control UI maintenance surfaces while preserving visible behavior. [#101549](https://github.com/openclaw/openclaw/pull/101549) Thanks @vincentkoc.
+- Added release-history coverage for the shipped Discord thread-title prompt fix. [#101566](https://github.com/openclaw/openclaw/pull/101566) Thanks @alix-007.
+- Simplified the private memory SDK surface by removing one-use layers and unused interfaces. [#101568](https://github.com/openclaw/openclaw/pull/101568) Thanks @vincentkoc.
+- Contributed to the fix that keeps plugin approval text readable when emoji appear near length limits. [#101579](https://github.com/openclaw/openclaw/pull/101579) Thanks @wm0018.
+- Reduced unused internal memory interfaces, making that code easier to maintain without changing user behavior. [#101583](https://github.com/openclaw/openclaw/pull/101583) Thanks @vincentkoc.
+- Simplified internal Windows process-launching code for memory features without changing how they work. [#101594](https://github.com/openclaw/openclaw/pull/101594) Thanks @vincentkoc.
+- Trimmed unused internal memory interfaces to reduce maintenance overhead while preserving existing behavior. [#101604](https://github.com/openclaw/openclaw/pull/101604) Thanks @vincentkoc.
+- Consolidated unused and duplicate Control UI code to improve maintainability with no intended visual change. [#101632](https://github.com/openclaw/openclaw/pull/101632) Thanks @vincentkoc.
+- Consolidated duplicate Control UI utilities so future changes have fewer paths to keep aligned. [#101647](https://github.com/openclaw/openclaw/pull/101647) Thanks @vincentkoc.
+- Clarified internal boundaries across reply handling and bundled plugins without changing runtime behavior. [#101666](https://github.com/openclaw/openclaw/pull/101666) Thanks @vincentkoc.
+- Removed superseded Android screens and translations, reducing maintenance work while leaving active app flows unchanged. [#101680](https://github.com/openclaw/openclaw/pull/101680) Thanks @vincentkoc.
+- Updated Control UI chat tests to reflect current avatar behavior and reduce stale test assumptions. [#101682](https://github.com/openclaw/openclaw/pull/101682) Thanks @shakkernerd.
+- Prepared chat history handling for future storage changes while preserving existing message and transcript behavior. [#101688](https://github.com/openclaw/openclaw/pull/101688) Thanks @jalehman.
+- Restored reliable Android translation validation after an obsolete app string was removed. [#101689](https://github.com/openclaw/openclaw/pull/101689)
+- Prepared conversation branching for future storage changes without changing how parent sessions are copied. [#101699](https://github.com/openclaw/openclaw/pull/101699) Thanks @jalehman.
+- Reduced accidental internal interfaces across core, plugins, and the Control UI to simplify ongoing maintenance. [#101701](https://github.com/openclaw/openclaw/pull/101701) Thanks @vincentkoc.
+- Strengthened compatibility checks for the bundled Codex integration to catch request mismatches before release. [#101726](https://github.com/openclaw/openclaw/pull/101726) Thanks @vincentkoc.
+- Kept private implementation details from appearing as supported integration points, improving codebase maintainability. [#101731](https://github.com/openclaw/openclaw/pull/101731) Thanks @vincentkoc.
+- Expanded release preflight coverage so official plugin packages can be built and inspected before an extended-stable npm release. [#101757](https://github.com/openclaw/openclaw/pull/101757) Thanks @kevinslin.
+- Reduced unused internal declarations across core, plugins, and the Control UI without changing product behavior. [#101758](https://github.com/openclaw/openclaw/pull/101758) Thanks @vincentkoc.
+- Restored Control UI translation validation for the existing native approval interface. [#101771](https://github.com/openclaw/openclaw/pull/101771)
+- Narrowed internal code boundaries so maintenance tools can identify unused code more accurately. [#101831](https://github.com/openclaw/openclaw/pull/101831) Thanks @vincentkoc.
+- Added consistent OpenClaw identification to requests sent through the official Google Gemini API. [#101834](https://github.com/openclaw/openclaw/pull/101834) Thanks @vishal-dharm.
+- Cleaned up unused internal declarations across UI and maintenance tools to make code ownership clearer. [#101858](https://github.com/openclaw/openclaw/pull/101858) Thanks @vincentkoc.
+- Reduced accidental internal interfaces in bundled extensions without changing plugin behavior. [#101860](https://github.com/openclaw/openclaw/pull/101860) Thanks @vincentkoc.
+- Tightened internal core boundaries to reduce dead-code noise and simplify future maintenance. [#101869](https://github.com/openclaw/openclaw/pull/101869) Thanks @vincentkoc.
+- Simplified internal test and tooling interfaces, making maintenance and code searches less noisy. [#101875](https://github.com/openclaw/openclaw/pull/101875) Thanks @vincentkoc.
+- Clarified which internal utilities are private, reducing the risk of accidental dependencies during maintenance. [#101886](https://github.com/openclaw/openclaw/pull/101886) Thanks @vincentkoc.
+- Simplified the private surface of Parallels validation tooling without changing its behavior. [#101889](https://github.com/openclaw/openclaw/pull/101889) Thanks @vincentkoc.
+- Reduced unnecessary internal script interfaces to make repository automation easier to understand and maintain. [#101892](https://github.com/openclaw/openclaw/pull/101892) Thanks @vincentkoc.
+- Narrowed Control UI internals to improve dead-code analysis without changing the interface users see. [#101894](https://github.com/openclaw/openclaw/pull/101894) Thanks @vincentkoc.
+- Made plugin tests more portable across common developer and hosted environments. [#101896](https://github.com/openclaw/openclaw/pull/101896)
+- Clarified the browser plugin's supported surface by keeping implementation details private. [#101898](https://github.com/openclaw/openclaw/pull/101898) Thanks @vincentkoc.
+- Clarified Microsoft Teams plugin boundaries by keeping private implementation details internal. [#101903](https://github.com/openclaw/openclaw/pull/101903) Thanks @vincentkoc.
+- Simplified internal release and validation tooling interfaces while preserving existing commands. [#101904](https://github.com/openclaw/openclaw/pull/101904) Thanks @vincentkoc.
+- Narrowed internal AI provider interfaces without changing provider behavior or supported entry points. [#101907](https://github.com/openclaw/openclaw/pull/101907) Thanks @vincentkoc.
+- Kept Canvas implementation details private so its supported developer surface remains clear. [#101915](https://github.com/openclaw/openclaw/pull/101915) Thanks @vincentkoc.
+- Reduced unused internal types in repository automation, improving maintainability without changing commands. [#101917](https://github.com/openclaw/openclaw/pull/101917) Thanks @vincentkoc.
+- Clarified internal boundaries in the ClickClack and Logbook plugins without changing their behavior. [#101922](https://github.com/openclaw/openclaw/pull/101922) Thanks @vincentkoc.
+- Kept OC Path implementation details private while preserving its commands and file-editing behavior. [#101925](https://github.com/openclaw/openclaw/pull/101925) Thanks @vincentkoc.
+- Reduced unused internal Memory Wiki interfaces to make future maintenance and dead-code checks clearer. [#101931](https://github.com/openclaw/openclaw/pull/101931) Thanks @vincentkoc.
+- Clarified the iMessage plugin's internal boundaries without changing its capabilities or behavior. [#101936](https://github.com/openclaw/openclaw/pull/101936) Thanks @vincentkoc.
+- Narrowed internal terminal interfaces in the gateway while preserving existing terminal behavior. [#101941](https://github.com/openclaw/openclaw/pull/101941) Thanks @vincentkoc.
+- Reduced accidental internal interfaces in the Discord plugin without changing messaging or voice behavior. [#101945](https://github.com/openclaw/openclaw/pull/101945) Thanks @vincentkoc.
+- Clarified which Feishu integration details are private, making the code easier to maintain. [#101949](https://github.com/openclaw/openclaw/pull/101949) Thanks @vincentkoc.
+- Narrowed Matrix integration internals without changing user behavior or documented configuration. [#101954](https://github.com/openclaw/openclaw/pull/101954) Thanks @vincentkoc.
+- Clarified the WhatsApp integration's supported type surface while preserving messaging behavior. [#101959](https://github.com/openclaw/openclaw/pull/101959) Thanks @vincentkoc.
+- Reduced accidental internal interfaces in the Policy extension without changing its checks or reports. [#101963](https://github.com/openclaw/openclaw/pull/101963) Thanks @vincentkoc.
+- Tightened memory-core boundaries to reduce maintenance risk without changing storage or search behavior. [#101969](https://github.com/openclaw/openclaw/pull/101969) Thanks @vincentkoc.
+- Simplified QA Matrix internals while preserving the existing validation workflow. [#101974](https://github.com/openclaw/openclaw/pull/101974) Thanks @vincentkoc.
+- Narrowed QA confidence-report internals to keep the supported maintenance surface clear. [#101980](https://github.com/openclaw/openclaw/pull/101980) Thanks @vincentkoc.
+- Kept QA evidence-summary internals private without changing validation behavior. [#101987](https://github.com/openclaw/openclaw/pull/101987) Thanks @vincentkoc.
+- Reduced unused QA utility types to discourage reliance on unsupported internal details. [#101990](https://github.com/openclaw/openclaw/pull/101990) Thanks @vincentkoc.
+- Clarified the supported QA Lab surface by keeping internal coordination details private. [#102005](https://github.com/openclaw/openclaw/pull/102005) Thanks @vincentkoc.
+- Narrowed Google Meet integration internals without changing setup, authentication, or call behavior. [#102010](https://github.com/openclaw/openclaw/pull/102010) Thanks @vincentkoc.
+- Clarified internal boundaries in the Diffs and File Transfer plugins without changing their behavior. [#102021](https://github.com/openclaw/openclaw/pull/102021) Thanks @vincentkoc.
+- Kept Google Chat implementation details private while preserving all existing integration behavior. [#102029](https://github.com/openclaw/openclaw/pull/102029) Thanks @vincentkoc.
+- Narrowed LINE integration internals without changing messages, webhooks, or configuration. [#102037](https://github.com/openclaw/openclaw/pull/102037) Thanks @vincentkoc.
+- Clarified Mattermost integration boundaries by keeping implementation-only details private. [#102040](https://github.com/openclaw/openclaw/pull/102040) Thanks @vincentkoc.
+- Reduced accidental internal interfaces in the Signal plugin without changing how Signal works. [#102042](https://github.com/openclaw/openclaw/pull/102042) Thanks @vincentkoc.
+- Narrowed Slack plugin internals while preserving messaging and delivery behavior. [#102044](https://github.com/openclaw/openclaw/pull/102044) Thanks @vincentkoc.
+- Clarified QQBot's supported integration surface without changing runtime behavior. [#102048](https://github.com/openclaw/openclaw/pull/102048) Thanks @vincentkoc.
+- Kept voice-call implementation details private while preserving the plugin's existing behavior. [#102059](https://github.com/openclaw/openclaw/pull/102059) Thanks @vincentkoc.
+- Narrowed Zalo integration internals without changing messaging, webhooks, media, or configuration. [#102065](https://github.com/openclaw/openclaw/pull/102065) Thanks @vincentkoc.
+- Made remote validation more resilient when a newly started or busy validation environment responds slowly. [#102159](https://github.com/openclaw/openclaw/pull/102159)
+- Kept unreliable automated QA from blocking unrelated contributions while focused manual validation remained available. [#102256](https://github.com/openclaw/openclaw/pull/102256) Thanks @romneyda.
+- Reduced false release-validation failures after successful tool-only OpenAI turns while keeping real errors strict. [#102600](https://github.com/openclaw/openclaw/pull/102600)
+- Strengthened Telegram authorization coverage by verifying that denied commands receive the expected reply. [#102732](https://github.com/openclaw/openclaw/pull/102732)
+- Updated Meta provider validation and guidance for the deployed Muse Spark 1.1 model. [#103163](https://github.com/openclaw/openclaw/pull/103163)
+- Improved the reliability and security of documentation translation checks. [#103244](https://github.com/openclaw/openclaw/pull/103244)
+- Restored reliable Codex plugin release validation after its connection records moved to a new storage system. [#103467](https://github.com/openclaw/openclaw/pull/103467) Thanks @vincentkoc.
+- Strengthened installer validation so incomplete packages missing the bundled AI runtime are rejected early. [#103556](https://github.com/openclaw/openclaw/pull/103556) Thanks @vincentkoc.
+- Ensured release update checks include and verify the bundled AI runtime before accepting a candidate package. [#103564](https://github.com/openclaw/openclaw/pull/103564)
+- Improved QA accuracy so scenarios that recover successfully on retry are not reported as final failures. [#103635](https://github.com/openclaw/openclaw/pull/103635)
+- Made token-usage validation more accurate by excluding scenarios that intentionally never produce an assistant reply. [#103650](https://github.com/openclaw/openclaw/pull/103650)
+- Restored reliable manual runs of focused live-provider release validation. [#103654](https://github.com/openclaw/openclaw/pull/103654)
+- Updated gateway restart validation to recognize current successful restart and cancellation outcomes. [#103681](https://github.com/openclaw/openclaw/pull/103681)
+- Strengthened web-access validation by requiring a real fetch rather than merely discovering the capability. [#103685](https://github.com/openclaw/openclaw/pull/103685)
+- Made webchat validation wait for saved replies and usage data before declaring success. [#103718](https://github.com/openclaw/openclaw/pull/103718)
+- Protected release approvals from silently changing when validation is rerun, preserving the exact evidence operators reviewed. [#103906](https://github.com/openclaw/openclaw/pull/103906)
+- Restored Chinese documentation validation for Meta provider and plugin reference pages. [#103923](https://github.com/openclaw/openclaw/pull/103923)
+- Allowed release managers to reuse trustworthy validation for an unchanged candidate while still rejecting stale evidence. [#104162](https://github.com/openclaw/openclaw/pull/104162) Thanks @vincentkoc.
+- Allowed package-based QA to run between a version bump and finalized release notes without weakening release checks. [#104186](https://github.com/openclaw/openclaw/pull/104186)
+- Kept Discord voice error details bounded and readable when failures contain multibyte text. [#104684](https://github.com/openclaw/openclaw/pull/104684) Thanks @qingminglong.
+- Backported protection against newly returned tool output being lost when long conversations are compacted. [#104702](https://github.com/openclaw/openclaw/pull/104702) Thanks @acosx, @solvely-colin.
+- Aligned plugin prerelease validation with the current GPT-5.6 model defaults. [#104722](https://github.com/openclaw/openclaw/pull/104722)
+- Updated live-provider validation to use the intended July GPT-5.6 model by default. [#104750](https://github.com/openclaw/openclaw/pull/104750)
+- Backported fixes for startup recovery, Discord reconnection, readable refusal messages, and lighter plugin listing. [#104794](https://github.com/openclaw/openclaw/pull/104794) Thanks @wuqxuan.
+- Reduced false GPT-5.6 release-validation failures by retrying a small set of incorrect validation responses. [#104939](https://github.com/openclaw/openclaw/pull/104939)
+- Restored the self-contained package artifact needed for Parallels release validation. [#104975](https://github.com/openclaw/openclaw/pull/104975)
+- Reduced false Control UI browser-validation failures around timestamp hover behavior. [#105133](https://github.com/openclaw/openclaw/pull/105133)
+- Made Telegram release validation work reliably with model selections from older compatible candidates. [#105401](https://github.com/openclaw/openclaw/pull/105401)
+- Preserved reproducible Codex QA coverage for model switching and image generation. [#105444](https://github.com/openclaw/openclaw/pull/105444)
+- Kept offline memory-isolation QA fully local, preventing accidental calls to the live embeddings service. [#105488](https://github.com/openclaw/openclaw/pull/105488)
+- Improved Codex model-switch validation so conversation compaction no longer causes a false failure. [#105493](https://github.com/openclaw/openclaw/pull/105493)
+- Made image-generation comparison results more accurate without hiding genuinely missing or ambiguous results. [#105500](https://github.com/openclaw/openclaw/pull/105500)
+
+
diff --git a/docs/releases/index.md b/docs/releases/index.md
index 828b1b8b5d0..c557e7ed0d5 100644
--- a/docs/releases/index.md
+++ b/docs/releases/index.md
@@ -12,6 +12,8 @@ without making you scan the raw changelog first.
## Releases
+- [v2026.7.1](/releases/2026.7.1) - Control UI and onboarding overhauls,
+ major iOS and Android updates, expanded model support, and Gateway recovery.
- [v2026.6.11](/releases/2026.6.11) - Reliability fixes for replies, sends,
reconnects, model setup, sessions, and safer admin defaults.