---
title: v2026.10.10
summary: Chat Details, experimental Advisor and split mode for browser Talk.
description: OpenClaw v2026.10.10 release notes with features, quality-of-life improvements, fixes and linked sources.
keywords:
  - OpenClaw
  - release notes
  - v2026.10.10
---

# v2026.10.10

AI agents and tools can read these release notes as [plain Markdown](https://raw.githubusercontent.com/openclaw/openclaw/main/CHANGELOG/2026.10.10.md).

OpenClaw v2026.10.10 brings Chat Details beside the conversation, an Advisor that can suggest course corrections during a task, and split speech mode for browser Talk.

There’s plenty beyond those highlights, with hundreds of improvements and fixes for everyday chats, memory search, automations, coding agents and connected devices.

**3,028 source PRs · 1,064 direct commits · 454 contributors**

## Chat Details Panel

The main chat view now gathers session information and task progress in [Details](/web/control-ui/chat#session-details), moving the old progress and pull-request bars away from the space above the message box. On wide chat panes, Details opens beside the conversation without covering it; when it has opened automatically, it hides as the pane narrows. It can also be manually toggled with the Details button.

<details class="release-source-toggle">
<summary>Sources and details</summary>

- Details brings session information and progress together and frees space above the message box. [#161674](https://github.com/openclaw/openclaw/pull/161674), closing [#161650](https://github.com/openclaw/openclaw/issues/161650). Contributions from [@steipete](https://github.com/steipete) and [@vyctorbrzezowski](https://github.com/vyctorbrzezowski). See [chat Details](/web/control-ui/chat) and [progress cards](/tools/progress-card).
- Details groups the available session information and actions into sections you can open as needed. [#172436](https://github.com/openclaw/openclaw/pull/172436) addresses [#172429](https://github.com/openclaw/openclaw/issues/172429). Requested and design-reviewed by [@steipete](https://github.com/steipete). See [Control UI](/web/control-ui).
- Details opens automatically beside a wide conversation; an automatically opened panel hides when the chat pane narrows, but you can open it manually over a narrow conversation. [#170707](https://github.com/openclaw/openclaw/pull/170707), co-authored by [@steipete](https://github.com/steipete).
- A session's sidebar hovercard now lets you inspect its attached automations and open a selected job without changing it. [#172240](https://github.com/openclaw/openclaw/pull/172240), closing [#172236](https://github.com/openclaw/openclaw/issues/172236). Contribution from [@steipete](https://github.com/steipete).
- The Subagents panel now shows running and finished swarm workers, including older children, and lets you read their transcripts without editing them. [#168162](https://github.com/openclaw/openclaw/pull/168162). Thanks [@steipete](https://github.com/steipete).
- The Layout menu now collects pane controls, and the wait indicator opens the active subagents. [PR #168845](https://github.com/openclaw/openclaw/pull/168845). Thanks to [@steipete](https://github.com/steipete).
- Open Session Details from the chat header without losing access to message actions. [PR #168494](https://github.com/openclaw/openclaw/pull/168494). Thanks to [@steipete](https://github.com/steipete).
- Expanded activity shows nested tool calls again, and image or video previews continue working after their pane is parked and reopened. [#169468](https://github.com/openclaw/openclaw/pull/169468), thanks [@obviyus](https://github.com/obviyus).
- Switching agents resumes that agent's newest loaded personal conversation when one is available, and its activity indicator stays accurate ([#170134](https://github.com/openclaw/openclaw/pull/170134)). Thanks to [@steipete](https://github.com/steipete).
- The composer no longer repeats the working indicator; progress remains in the transcript and Stop remains available ([#170211](https://github.com/openclaw/openclaw/pull/170211)). Thanks to [@steipete](https://github.com/steipete) for the co-authorship.
- Subagent activity shows total request time when its start is known, without an extra wait line above the message box ([#170325](https://github.com/openclaw/openclaw/pull/170325)). Thanks to [@steipete](https://github.com/steipete).
- After a parent update or reload, the wait timer reflects the latest completed parent turn ([#170397](https://github.com/openclaw/openclaw/pull/170397)). Thanks to [@steipete](https://github.com/steipete).
- If a run ends after using tools but without a final reply, its saved progress remains visible with an Interrupted label. [#170705](https://github.com/openclaw/openclaw/pull/170705) Thanks [@steipete](https://github.com/steipete). Related changes cover [saved streamed answers](https://github.com/openclaw/openclaw/pull/170697) and [recovery markers](https://github.com/openclaw/openclaw/pull/170699).
- See retry and fallback progress while a reply is running, then a failure notice with recovery actions if it ends unsuccessfully ([#170820](https://github.com/openclaw/openclaw/pull/170820), [reported issue](https://github.com/openclaw/openclaw/issues/170798)). Thanks [@steipete](https://github.com/steipete).
- A failure notice and its recovery actions return after a reload or reconnect during the run ([#170971](https://github.com/openclaw/openclaw/pull/170971)). Thanks [@steipete](https://github.com/steipete).
- Subagents stays closed until you open it, while child activity remains visible in the conversation ([#171167](https://github.com/openclaw/openclaw/pull/171167)). Thanks [@steipete](https://github.com/steipete).
- Details opens sections with pull requests or automations, omits sections confirmed empty and remembers sections you collapsed. [#171533](https://github.com/openclaw/openclaw/pull/171533) Thanks to [@steipete](https://github.com/steipete).
- Activity summaries keep the same description when expanded, with source links available even while collapsed. [#172573](https://github.com/openclaw/openclaw/pull/172573). Thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- Saved agent progress remains visible while tools run and after reloading an active conversation. [#172585](https://github.com/openclaw/openclaw/pull/172585). Thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- Chat status and the completed-turn recap now put token counts before elapsed time. [#172549](https://github.com/openclaw/openclaw/pull/172549). Thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- Sessions awaiting approval fit on one sidebar line without hiding the approval indicator. [#172618](https://github.com/openclaw/openclaw/pull/172618). Thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- Details shows the supplied workspace label or, without one, its directory name; Copy path still gives you the full path. [#172657](https://github.com/openclaw/openclaw/pull/172657). Thanks to [@steipete](https://github.com/steipete).
- Details leaves transcript actions and the question footer reachable, with less empty space beneath the conversation ([commit 320b088](https://github.com/openclaw/openclaw/commit/320b0884c23e40c8765e5417c42b9636d7133a4b), [commit dc0ef48](https://github.com/openclaw/openclaw/commit/dc0ef48154f58877a50b29d2f9bc575420fccbb7), [commit 7e256f7](https://github.com/openclaw/openclaw/commit/7e256f7302d401bcbfa41347bf3fe2b88a729090)).
- Opt-in failure narration keeps the task's title for OpenClaw MCP commands, [#168132](https://github.com/openclaw/openclaw/pull/168132). Thanks to [ly85206559](https://github.com/ly85206559).
- Control UI chat no longer shows raw command-completion notices, while the agent still receives them, [#168236](https://github.com/openclaw/openclaw/pull/168236). Thanks to [RomneyDa](https://github.com/RomneyDa).
- Claude CLI no longer reports a tool as started when interrupted input becomes plain text, [#168578](https://github.com/openclaw/openclaw/pull/168578). Thanks to [steipete](https://github.com/steipete).
- With model-call diagnostics enabled, request counts and timing now include background titles, activity recaps and plugin model calls, [#168411](https://github.com/openclaw/openclaw/pull/168411). Thanks to [obviyus](https://github.com/obviyus).
- Completed global-scope commands remain visible to their owner in Processes in [#169302](https://github.com/openclaw/openclaw/pull/169302). Thanks [@steipete](https://github.com/steipete).
- Subagent wait indicators and controls stay accurate while the Control UI loads overlapping child lists. [#167672](https://github.com/openclaw/openclaw/pull/167672). Thanks to [shakkernerd](https://github.com/shakkernerd).
- Claude CLI can show how many edits are being prepared while tool input streams, before execution begins. [#167789](https://github.com/openclaw/openclaw/pull/167789), [#167742](https://github.com/openclaw/openclaw/issues/167742). Thanks to [ZengWen-DT](https://github.com/ZengWen-DT), [obviyus](https://github.com/obviyus) and reporter [umeranjum17](https://github.com/umeranjum17).
- Running subagent rows now show current tool activity and an available count of calls. [PR #169719](https://github.com/openclaw/openclaw/pull/169719). Thanks to [steipete](https://github.com/steipete).
- A built-in session fork shows unfinished tool calls as pending and retains finished results in later forks. [#171580](https://github.com/openclaw/openclaw/pull/171580), thanks to [obviyus](https://github.com/obviyus).
- Long streamed file writes and edits through OpenAI-compatible models show live progress again. [#168614](https://github.com/openclaw/openclaw/pull/168614). Thanks to [@steipete](https://github.com/steipete).

Related Details fixes cover widget actions in narrow panes ([#168328](https://github.com/openclaw/openclaw/pull/168328), thanks to [@obviyus](https://github.com/obviyus)) and wrapping long project labels ([#171995](https://github.com/openclaw/openclaw/pull/171995), thanks to [@jacobtomlinson](https://github.com/jacobtomlinson)).

</details>

## Advisor

[Advisor](/web/control-ui/feature-reference) can check an agent’s ongoing work and suggest a correction if it finds a clear wrong turn, such as repeating an unsuccessful approach or drifting from your request. It uses extra model calls when it reviews a task and can miss a problem or suggest an unnecessary change. This experimental feature can be enabled in **Settings → System → Labs**.

<details class="release-source-toggle">
<summary>Sources and details</summary>

Enable Advisor in Settings → System → Labs. You can adjust its review intervals in Configure. Advice does not run tools, approve actions or guarantee that the agent's work is correct.

- When enabled, experimental Advisor checks ongoing work and may offer a brief correction when a review finds a clear wrong turn. [#169564](https://github.com/openclaw/openclaw/pull/169564) Thanks [@obviyus](https://github.com/obviyus).

Supporting work for Advisor's task reviews and corrections is tracked in [#170146](https://github.com/openclaw/openclaw/pull/170146), [#170152](https://github.com/openclaw/openclaw/pull/170152), [#171307](https://github.com/openclaw/openclaw/pull/171307), [#171534](https://github.com/openclaw/openclaw/pull/171534), [#171580](https://github.com/openclaw/openclaw/pull/171580), [#171610](https://github.com/openclaw/openclaw/pull/171610), [#171651](https://github.com/openclaw/openclaw/pull/171651), [#171661](https://github.com/openclaw/openclaw/pull/171661) and [#169558](https://github.com/openclaw/openclaw/pull/169558). Thanks [@obviyus](https://github.com/obviyus). Further review-context support comes from [#170973](https://github.com/openclaw/openclaw/pull/170973), thanks to [@steipete](https://github.com/steipete), and catalog and chat activity artwork from [#172716](https://github.com/openclaw/openclaw/pull/172716), thanks to [@RomneyDa](https://github.com/RomneyDa).

</details>

<a id="talk" />

## Split speech voice mode

There is now an additional [voice option](/nodes/talk/realtime-sessions#split-speech-in-the-browser) that uses the same AI model that answers your typed messages, while using separately configured services for transcription and speech generation.

<details class="release-source-toggle">
<summary>Sources and details</summary>

Configure speech output and transcription before using split Talk, and allow microphone access in a secure browser context. Split mode has no realtime voice switching or camera input; leaving it unset keeps existing realtime Talk.

- Read aloud and dictation now use configured speech services, while split browser Talk sends spoken requests to the current chat agent. [#170343](https://github.com/openclaw/openclaw/pull/170343), [#45508](https://github.com/openclaw/openclaw/issues/45508), [#113049](https://github.com/openclaw/openclaw/issues/113049). Thanks [@steipete](https://github.com/steipete), [@mcfex](https://github.com/mcfex) for the self-hosted speech report and [@mike-nott](https://github.com/mike-nott) for the browser Talk report.
- If Control UI Talk using the Gateway relay loses its voice connection after an agent request was accepted, the answer can still finish and appear in the conversation; pressing Stop still cancels it. [#171377](https://github.com/openclaw/openclaw/pull/171377), [#171310](https://github.com/openclaw/openclaw/issues/171310). Thanks [@steipete](https://github.com/steipete) for the fix and [@jonathanlindsay](https://github.com/jonathanlindsay) for the report.
- Authenticated Talk follows ordinary tool permissions and approvals instead of adding a second spoken confirmation for actions already permitted. [#159697](https://github.com/openclaw/openclaw/pull/159697). Thanks [@brokemac79](https://github.com/brokemac79).
- Spoken Talk requests no longer stop immediately just because the voice connection finished setting up. [#170083](https://github.com/openclaw/openclaw/pull/170083). Thanks [@brokemac79](https://github.com/brokemac79).
- A second Talk question after tool use no longer hits the identified message-ordering error on affected Anthropic routes, while updated instructions remain available. [#171267](https://github.com/openclaw/openclaw/pull/171267), [#171227](https://github.com/openclaw/openclaw/issues/171227). Thanks [@LiuwqGit](https://github.com/LiuwqGit), [@steipete](https://github.com/steipete) and [@marleyman5000-boop](https://github.com/marleyman5000-boop).
- Browser Talk now keeps new spoken questions from Gemini 3.8 Live and Extended Thinking alongside their answers after Stop and reload; previously lost speech cannot be recovered by this fix. [#171506](https://github.com/openclaw/openclaw/pull/171506), [#171505](https://github.com/openclaw/openclaw/issues/171505). Thanks [@masatohoshino](https://github.com/masatohoshino) and [@steipete](https://github.com/steipete).
- Silence that produces an empty transcript no longer appears as a transcription-service error, and configured fallbacks can continue. [#171514](https://github.com/openclaw/openclaw/pull/171514), [#171512](https://github.com/openclaw/openclaw/issues/171512). Thanks [@masatohoshino](https://github.com/masatohoshino) and [@steipete](https://github.com/steipete).

Talk's conversation routing is also covered by [#188772](https://github.com/openclaw/openclaw/pull/188772). Thanks [@RomneyDa](https://github.com/RomneyDa).

</details>

<a id="folder-linking" />

## Bring your agent to your files

You can now [work directly in a folder](/nodes/session-hosting#work-in-an-existing-device-folder) on another computer connected to OpenClaw. For example, OpenClaw can run on a server while your agent works with a project or documents on your laptop, without copying the folder to the server. Attachments and the Files panel aren’t available for these conversations.

<details class="release-source-toggle">
<summary>Sources and details</summary>

- The paired computer's `nodeHost.workerRuns.folders` setting controls access. Leave it unset for existing directories, specify permitted roots to limit selection, or use an empty list to disable device-folder sessions. [#169722](https://github.com/openclaw/openclaw/pull/169722) · Thanks [@obviyus](https://github.com/obviyus).

</details>

<a id="chatgpt-and-claude-connections" />

## Control from ChatGPT and Claude

The optional [MCP Relay](/plugins/mcp-relay) lets you connect ChatGPT or Claude to your OpenClaw conversations without opening an internet-facing Gateway port or handing the app your Gateway password. Choose each app's access in Connected apps and revoke it there when needed. The relay can read content passing through it, so grant access only to apps and a relay you trust.

<details class="release-source-toggle">
<summary>Sources and details</summary>

The plugin is off by default. Pair through Gateway sign-in or a single-use code. ChatGPT can also open the full OpenClaw interface when the Gateway and relay support it. Full role access can include administration and approvals. See [MCP Relay setup](/plugins/mcp-relay).

- The relay adds opt-in pairing and a Connected apps grant, while trusted plugins provide remote Control UI access under that person's permissions without sharing Gateway credentials. [#168233](https://github.com/openclaw/openclaw/pull/168233), [#170540](https://github.com/openclaw/openclaw/pull/170540). Thanks [@steipete](https://github.com/steipete).

Supporting relay work covers setup and connected-app controls ([#171575](https://github.com/openclaw/openclaw/pull/171575), [#184213](https://github.com/openclaw/openclaw/pull/184213)), longer accepted tasks ([#181863](https://github.com/openclaw/openclaw/pull/181863)), error reporting ([#183361](https://github.com/openclaw/openclaw/pull/183361)) and catalog/activity artwork ([#172299](https://github.com/openclaw/openclaw/pull/172299)). Thanks to [@steipete](https://github.com/steipete), [@crwohlfeil](https://github.com/crwohlfeil), [@obviyus](https://github.com/obviyus) and [@Leon-SK668](https://github.com/Leon-SK668). Message-handling improvements are in [#171983](https://github.com/openclaw/openclaw/pull/171983), thanks to [@vincentkoc](https://github.com/vincentkoc).

</details>

## Event-triggered automations

An automation can now start when a connected MCP server reports a [supported event](/automation/mcp-events#create-an-event-automation), rather than waiting for a timer to check for changes. Give the event instructions for your agent and the connected app need not stay open. This opt-in integration supports an experimental MCP Events profile and needs a public HTTPS callback; expose only its callback route, not the rest of OpenClaw.

<details class="release-source-toggle">
<summary>Sources and details</summary>

[MCP Events setup](/automation/mcp-events) covers supported servers and callback routing. Only the OpenAI webhook profile is supported, not every draft Events feature. A received event is not a completed agent task, and an event lost upstream may not be recoverable. Before downgrading, remove event jobs and check database compatibility; you may need a compatible pre-upgrade backup.

- Supported MCP events can start an automation with its existing instructions. Forward only `/plugins/mcp-events/callback/` to the Gateway. [#165399](https://github.com/openclaw/openclaw/pull/165399), thanks to [steipete](https://github.com/steipete).

Related support for completed event requests and failure reporting is in [#172613](https://github.com/openclaw/openclaw/pull/172613), thanks to [@steipete](https://github.com/steipete). Catalog and chat activity artwork is covered by [#172716](https://github.com/openclaw/openclaw/pull/172716), thanks to [@RomneyDa](https://github.com/RomneyDa).

</details>

## Quality-of-life improvements

### Conversations and navigation

- Conversation owners can now set [separate send and receive choices](/concepts/session-tool#communication-preferences) for messages between conversations. Choose Always, Ask to approve each new message, or Never to block new messages in either direction. Both default to Always, and older OpenClaw versions will not enforce these choices if you downgrade.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  These choices govern new messages between conversations, not messages from people or external channels. Already accepted messages, requested replies and delegated work still complete under their existing obligations, and other access restrictions still apply. See [conversation communication preferences](/concepts/session-tool#communication-preferences).

  - Session settings now let you allow, individually approve or block new messages sent to and received from other conversations. Human input and external-channel messages are unchanged. [#162316](https://github.com/openclaw/openclaw/pull/162316). Thanks [@steipete](https://github.com/steipete).

  </details>

- Worktrees tabs support keyboard navigation and keep the selected tab and keyboard focus visible in high-contrast mode.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Worktrees tabs support keyboard navigation and visible selection and focus in forced-colors mode. [#170446](https://github.com/openclaw/openclaw/pull/170446) by [@steipete](https://github.com/steipete).

  </details>

- Agents can now react to your WebChat messages.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Adds agent reactions on WebChat prompts and the optional speech-bubble layout. [PR #168861](https://github.com/openclaw/openclaw/pull/168861). Thanks to [@steipete](https://github.com/steipete).

  </details>

- Pin and reorder [pages and conversations](/web/control-ui/sessions-and-sidebar#personal-navigation-storage) in your sidebar. After upgrading, add any old personal shortcuts again because they do not carry over.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Pin personal shortcuts in the navigation rail and switch between your conversations and all conversations you can access. [PR #168325](https://github.com/openclaw/openclaw/pull/168325), [design issue #168053](https://github.com/openclaw/openclaw/issues/168053). Thanks to [@steipete](https://github.com/steipete).
  - Personalize the rail with draggable shortcuts and a single Sessions owner filter. [#168997](https://github.com/openclaw/openclaw/pull/168997) Thanks [@steipete](https://github.com/steipete).
  - Give unloaded shortcuts useful labels and distinguish a missing session from a lookup that can be retried. [#169068](https://github.com/openclaw/openclaw/pull/169068) Thanks [@steipete](https://github.com/steipete).
  - Older personal shortcuts do not appear in the new rail after upgrading, but your unrelated settings remain in place. [#169447](https://github.com/openclaw/openclaw/pull/169447), thanks [@steipete](https://github.com/steipete).
  - Saved pin names stay visible while their details refresh; unavailable shortcuts remain saved but are hidden. [#169680](https://github.com/openclaw/openclaw/pull/169680), thanks [@steipete](https://github.com/steipete).
  - Clear the selected rail indicator when its sidebar panel is collapsed ([#171163](https://github.com/openclaw/openclaw/pull/171163)). Thanks [@steipete](https://github.com/steipete).
  - Pinned Pages remain visible, and row highlights extend across the pin control. [#171515](https://github.com/openclaw/openclaw/pull/171515) Thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
  - Pinned rail pages match adjacent controls and show hover and active states. [#171517](https://github.com/openclaw/openclaw/pull/171517) Thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
  - Keep sidebar page links and keyboard focus stable during unrelated updates. [#172332](https://github.com/openclaw/openclaw/pull/172332), thanks to [fuller-stack-dev](https://github.com/fuller-stack-dev).
  - The sidebar integration includes reopening collapsed navigation from the rail and returning focus to the rail after collapse. [Merge](https://github.com/openclaw/openclaw/commit/252cd8917390769f2073faee624e9ac0f77d5f38)

  </details>

- Move a nested conversation without moving its parent, or archive a conversation and its children together. Archiving the whole tree warns you about active work and reports any partial failure; Undo restores only the conversations it still can.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Move a nested conversation on its own, or archive its whole tree and see which conversations could not be archived. [#168076](https://github.com/openclaw/openclaw/pull/168076), with a contribution from [@steipete](https://github.com/steipete). See [sessions and sidebar](/web/control-ui/sessions-and-sidebar).

  </details>

- Reuse a custom snooze time from another conversation's menu without entering it again.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Custom snooze times are remembered for the connected Gateway and account. [#171255](https://github.com/openclaw/openclaw/pull/171255), co-authored by [@jacobtomlinson](https://github.com/jacobtomlinson).

  </details>

- Find Copy link near the top of a conversation's menu, and start a new conversation from any sidebar view, including on mobile.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Session menus bring Copy link and eligible owner assignment to the top and group less-used actions under Advanced. [PR #168616](https://github.com/openclaw/openclaw/pull/168616), [broader menu issue #132846](https://github.com/openclaw/openclaw/issues/132846). Thanks to [@steipete](https://github.com/steipete).
  - Keep the new conversation action available across sidebar views and on mobile. [#170771](https://github.com/openclaw/openclaw/pull/170771), [request #170744](https://github.com/openclaw/openclaw/issues/170744). Thanks [@steipete](https://github.com/steipete) for the design direction and request.

  </details>

- New conversations get a suggested name sooner, while names you choose yourself stay unchanged.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Start automatic session naming earlier while preserving explicit names and manual renames. [#170794](https://github.com/openclaw/openclaw/pull/170794) Thanks [@steipete](https://github.com/steipete).

  </details>

- Open the [command palette](/web/control-ui/sessions-and-sidebar#command-palette) with Cmd+P on Mac or Ctrl+P on other keyboards, alongside the existing shortcut.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - The command palette accepts platform-specific P and Shift+P shortcuts alongside the existing K shortcut. [#169943](https://github.com/openclaw/openclaw/pull/169943), thanks [@jacobtomlinson](https://github.com/jacobtomlinson).

  </details>

- A conversation that does not fill the chat pane now loads older messages automatically. You can still load more history yourself.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Older messages load automatically when the conversation does not fill the visible chat pane. [#171529](https://github.com/openclaw/openclaw/pull/171529) Thanks to [@steipete](https://github.com/steipete).
  - Automatic loading stops after three older pages per opening; you can load more yourself. [#171593](https://github.com/openclaw/openclaw/pull/171593) Thanks to [@steipete](https://github.com/steipete).
  - Reduce history-read work on long, marker-heavy conversations. [#172566](https://github.com/openclaw/openclaw/pull/172566). Thanks to [@steipete](https://github.com/steipete).

  </details>

- Switch the Users sidebar between Online and All when you want to see more than the people currently connected.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Switch the Users sidebar between Online and All users. [#172243](https://github.com/openclaw/openclaw/pull/172243), thanks to [steipete](https://github.com/steipete).

  </details>

- Choose where a personal background appears and adjust how strongly it shows through. Hiding your image keeps it for later; Remove deletes it.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Appearance offers placement, presentation and visibility controls for personal backgrounds. Hiding an image keeps it; Remove deletes it. Contrast accessibility settings suppress decorative artwork. [#168301](https://github.com/openclaw/openclaw/pull/168301), closing [#153797](https://github.com/openclaw/openclaw/issues/153797). Contributions from [@vyctorbrzezowski](https://github.com/vyctorbrzezowski) and [@steipete](https://github.com/steipete). See [Appearance settings](/web/control-ui/settings).

  </details>

- Choose Swedish for the Control UI, with English shown wherever a translation is not yet available.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Select Swedish in the Control UI or use a Swedish browser locale. Untranslated interface text falls back to English, and the docs translation pipeline is prepared for Swedish. [#62063](https://github.com/openclaw/openclaw/pull/62063), [docs #270](https://github.com/openclaw/docs/pull/270). Thanks [@yeager](https://github.com/yeager) and [@vincentkoc](https://github.com/vincentkoc).

  </details>

- Enable experimental speech bubbles in Settings → Labs, then use View → Speech bubbles to choose the layout for each conversation. The setting is off by default, and your per-conversation choice is remembered in that browser.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Enable speech bubbles in Settings → Labs, then choose the view separately for each conversation. Commentary and tool activity have distinct presentation in bubble view. [#169347](https://github.com/openclaw/openclaw/pull/169347). Thanks [@steipete](https://github.com/steipete) and [@vyctorbrzezowski](https://github.com/vyctorbrzezowski).

  </details>

- [Publicly shared conversation pages](/web/urls#public-session-transcripts) now look more like a chat, with clearer previews when you share an eligible link.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Refresh the existing public conversation page with a chat-style layout, light and dark themes, and copy controls. [#168156](https://github.com/openclaw/openclaw/pull/168156). Thanks [@steipete](https://github.com/steipete).
  - Eligible public links show a session preview or recorded work receipt, with a generic fallback when the publication is unavailable. [#169527](https://github.com/openclaw/openclaw/pull/169527), thanks [@steipete](https://github.com/steipete).

  </details>

- Find document downloads in both chat and Files. File details you expanded stay open when you switch tabs.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Visible document downloads in the chat transcript and Files panel. [PR #171171](https://github.com/openclaw/openclaw/pull/171171), [issue #171098](https://github.com/openclaw/openclaw/issues/171098). Thanks [LiuwqGit](https://github.com/LiuwqGit), [steipete](https://github.com/steipete), and reporter [arquiteto-raiz](https://github.com/arquiteto-raiz).
  - Preserve reader file disclosure state across tab changes ([commit](https://github.com/openclaw/openclaw/commit/0ed829e7fe4e178ea9e4693427c70e73139290d8)).

  </details>

### Performance and diagnostics

- Checking on helpers or recovering their runs no longer has to scan every unrelated saved run.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Checking or waiting for a helper no longer scans unrelated saved runs. [#170998](https://github.com/openclaw/openclaw/pull/170998). Thanks [@steipete](https://github.com/steipete).
  - Restart recovery selects the relevant subagent children without repeatedly scanning the full registry. [#171067](https://github.com/openclaw/openclaw/pull/171067), with related startup work in [#171046](https://github.com/openclaw/openclaw/pull/171046). Thanks [@steipete](https://github.com/steipete).

  </details>

- A helper can tell you it finished without waiting for its token count; the completion report marks missing usage as unknown.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - A helper can report completion even if its token usage has not arrived yet. If a helper started during a parent reset cannot access memory, start it again from the current parent session. [#170400](https://github.com/openclaw/openclaw/pull/170400), thanks to [@steipete](https://github.com/steipete).

  </details>

- When enabled for a model, your active conversation and manual compaction get priority over background work.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Interactive turns and manual compaction receive higher priority than background work when the per-model option is enabled. [PR #129434](https://github.com/openclaw/openclaw/pull/129434). Thanks to [m888m](https://github.com/m888m) and [steipete](https://github.com/steipete).

  </details>

- [Troubleshooting tools](/gateway/diagnostics) now show where slow requests spend time and give clearer clues when something fails. If you enabled content tracing, review that setting before upgrading because traces can include additional redacted conversation data.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Add preparation-stage timings to slow chat-send diagnostics and skip redundant skill inventories for recently attested workspaces. [#169307](https://github.com/openclaw/openclaw/pull/169307) Thanks [@steipete](https://github.com/steipete).
  - Analyze saved CPU profiles from a source checkout, including the JavaScript callers of native work, in [#170904](https://github.com/openclaw/openclaw/pull/170904). Thanks [@steipete](https://github.com/steipete).
  - CLI backend plugin registration warns when `modelProvider` is missing and explains how to bind a provider. Standalone backends remain supported. See the [plugin guide](/plugins/cli-backend-plugins). [PR #173000](https://github.com/openclaw/openclaw/pull/173000), [issue #172969](https://github.com/openclaw/openclaw/issues/172969). Thanks [steipete](https://github.com/steipete) and reporter [xtimor](https://github.com/xtimor).
  - Shows labeled provider request time per credential in model connection checks and avoids creating an agent session for the check. [#169554](https://github.com/openclaw/openclaw/pull/169554), [issue #169066](https://github.com/openclaw/openclaw/issues/169066). Thanks [@obviyus](https://github.com/obviyus) and [@dabase](https://github.com/dabase).
  - Adds paired request and response metadata to prompt-cache drop diagnostics without including prompt content or raw keys. Available fields depend on the transport. [#169630](https://github.com/openclaw/openclaw/pull/169630) Thanks [@steipete](https://github.com/steipete).
  - Give response callbacks the HTTP status and headers of rejected OpenAI and Azure SDK requests. [PR #169688](https://github.com/openclaw/openclaw/pull/169688). Thanks to [steipete](https://github.com/steipete).
  - Processing and estimated wait are available in model-call diagnostics and Gateway stability output when the provider supplies valid final statistics. [#170369](https://github.com/openclaw/openclaw/pull/170369), thanks to [@steipete](https://github.com/steipete) and [@Uraroga](https://github.com/Uraroga) for the [report](https://github.com/openclaw/openclaw/issues/137557).
  - OpenAI tier downgrade logs include response and account-route details that can be matched with cache-drop warnings. [#170949](https://github.com/openclaw/openclaw/pull/170949). Thanks [@steipete](https://github.com/steipete).
  - Distinguish steering and queued follow-up waits from startup in slow `chat.send` logs and Prometheus metrics. [#169006](https://github.com/openclaw/openclaw/pull/169006), thanks [@steipete](https://github.com/steipete).
  - Worktree preparation reports why template reuse falls back. The first template still needs to be built. [#169239](https://github.com/openclaw/openclaw/pull/169239). Thanks [@steipete](https://github.com/steipete).
  - Include a bounded, redacted error tail when spawn-broker shutdown fails ([#170829](https://github.com/openclaw/openclaw/pull/170829)). Thanks [@steipete](https://github.com/steipete).
  - Slow pre-acknowledgement chat requests log admission and persistence subphase timings to help operators locate waits. [#171250](https://github.com/openclaw/openclaw/pull/171250), thanks to [steipete](https://github.com/steipete).
  - Opted-in tracing can include the user's message even if no model call follows, and the model's final answer when one is available. Gemini CLI does not provide its composed prompt on run-level traces. [#156603](https://github.com/openclaw/openclaw/pull/156603), [related request #144294](https://github.com/openclaw/openclaw/issues/144294). Thanks to [ryan-dyer-sp](https://github.com/ryan-dyer-sp).
  - Extend OpenTelemetry message-duration histogram buckets through one hour. [#128785](https://github.com/openclaw/openclaw/pull/128785). Thanks to [patrick-erichsen](https://github.com/patrick-erichsen).
  - Identify a confirmed foreign process holding the Gateway port in status and channel diagnostics, with guidance for resolving the conflict. [#161106](https://github.com/openclaw/openclaw/pull/161106), [reported in #161024](https://github.com/openclaw/openclaw/issues/161024). Thanks to [yashas-13](https://github.com/yashas-13), [steipete](https://github.com/steipete), and [altaywtf](https://github.com/altaywtf).
  - Routine successful Gateway activity moves to debug logs, and Prometheus gains egress and tool-catalog counters. [#170509](https://github.com/openclaw/openclaw/pull/170509). Thanks to [steipete](https://github.com/steipete).
  - Avoid another Gateway-blocking heap scan when starting an operator CPU capture on Node 26 with the stall flight recorder already active. Other captures can still scan, and Bun uses the inspector backend. [#170932](https://github.com/openclaw/openclaw/pull/170932) by [@steipete](https://github.com/steipete).
  - Add finer Prometheus histogram buckets for Gateway RPC latency estimates. The additional series increase scrape and render cost. [#171062](https://github.com/openclaw/openclaw/pull/171062) by [@steipete](https://github.com/steipete).
  - Expose SQLite writer request phases in Prometheus, including time spent transferring framed requests and results. [#171082](https://github.com/openclaw/openclaw/pull/171082) by [@vincentkoc](https://github.com/vincentkoc).
  - Attribute more Git launches and count streaming workspace inventory launches in the child-process metric. [#171465](https://github.com/openclaw/openclaw/pull/171465) by [steipete](https://github.com/steipete).
  - Identify more child-process launch owners, including agent execution and helpers. [#171582](https://github.com/openclaw/openclaw/pull/171582) by [steipete](https://github.com/steipete).
  - Include collected objects in a Gateway heap profile with `includeCollected`. [#171686](https://github.com/openclaw/openclaw/pull/171686) by [steipete](https://github.com/steipete).
  - Garbage collection metrics include collection kind and main-thread or instrumented worker labels. Workers without the telemetry connection and other unregistered isolates are outside this coverage. [#171923](https://github.com/openclaw/openclaw/pull/171923) by [steipete](https://github.com/steipete).
  - Include underlying causes and storage codes in post-ready Gateway maintenance warnings. [#172138](https://github.com/openclaw/openclaw/pull/172138). Thanks to [@steipete](https://github.com/steipete).
  - Include queue wait and available holder information in slow agent database reservation warnings. [#172459](https://github.com/openclaw/openclaw/pull/172459). Thanks to [@steipete](https://github.com/steipete).
  - Gateway and node service stop and uninstall errors include status and recovery hints in text and JSON output. [#176335](https://github.com/openclaw/openclaw/pull/176335). Thanks [@555aaditya](https://github.com/555aaditya) and [@obviyus](https://github.com/obviyus).
  - Stale Gateway cleanup warnings include the reason cleanup failed. [#174590](https://github.com/openclaw/openclaw/pull/174590). Thanks [@shoaibulhaque](https://github.com/shoaibulhaque) and [@altaywtf](https://github.com/altaywtf).

  - Provide a source-checkout report for slow session updates. [#171148](https://github.com/openclaw/openclaw/pull/171148) by [@steipete](https://github.com/steipete).
  - Show phase timings for slow cloud worker dispatch when diagnostics are enabled. [#171749](https://github.com/openclaw/openclaw/pull/171749) by [@steipete](https://github.com/steipete).
  - Expose worker message counts and known payload bytes by direction and kind in Prometheus. [#171940](https://github.com/openclaw/openclaw/pull/171940) by [@steipete](https://github.com/steipete).

  </details>

- Usage reports and conversation lists can return available results without waiting for unrelated histories or background work.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Cold Usage partial reports leave uncached sessions pending without waiting for transcript scans ([#170093](https://github.com/openclaw/openclaw/pull/170093)). Thanks to [@steipete](https://github.com/steipete).
  - Use less temporary memory for fresh ordered session pages. [#171968](https://github.com/openclaw/openclaw/pull/171968), thanks to [steipete](https://github.com/steipete).
  - Kept an empty usage refresh from creating an unused agent database and disturbing a session event handoff. [Commit](https://github.com/openclaw/openclaw/commit/927c8b25d016f4fb54ff55c9d6fa3fc004c23716) Thanks [@steipete](https://github.com/steipete).
  - Usage history rebuilds use compact monthly projections and yield to foreground writes. [#169816](https://github.com/openclaw/openclaw/pull/169816), thanks [@steipete](https://github.com/steipete).
  - Usage reports can catch up after startup database preparation without another transcript update. [#169846](https://github.com/openclaw/openclaw/pull/169846), thanks [@steipete](https://github.com/steipete).
  - Background usage totals refresh after a quiet period, while explicit usage and cost reads flush pending data. [#171378](https://github.com/openclaw/openclaw/pull/171378) Thanks to [@steipete](https://github.com/steipete).
  - Requested session totals refresh ahead of subsequent unrelated bulk work. [#171480](https://github.com/openclaw/openclaw/pull/171480) Thanks to [@steipete](https://github.com/steipete).
  - Concurrent usage refreshes can commit while a report is being prepared. [#171433](https://github.com/openclaw/openclaw/pull/171433) Thanks to [@steipete](https://github.com/steipete).
  - Reduce cold usage-refresh overhead for large session inventories and add more useful database worker diagnostics. [#171868](https://github.com/openclaw/openclaw/pull/171868), thanks to [steipete](https://github.com/steipete).
  - Refresh background usage and estimated-cost totals according to elapsed time after a clock correction ([#184212](https://github.com/openclaw/openclaw/pull/184212)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@obviyus](https://github.com/obviyus).
  - Batch large session usage reads to reduce failures from worker input pressure during concurrent reports ([#183407](https://github.com/openclaw/openclaw/pull/183407)). Thanks [@steipete](https://github.com/steipete).
  - Reuse transcript preview facts for session lists and remember the next cron-session expiry. [#171449](https://github.com/openclaw/openclaw/pull/171449) by [steipete](https://github.com/steipete).
  - Reuse unaffected session rows after unrelated plugin reloads while refreshing agents whose relevant settings changed. [#171519](https://github.com/openclaw/openclaw/pull/171519) by [steipete](https://github.com/steipete).
  - Reuse session and catalog display data during repeated requests. [#171724](https://github.com/openclaw/openclaw/pull/171724) by [steipete](https://github.com/steipete).
  - Avoid loading chat presentation code at session maintenance worker startup until it is needed. [#171697](https://github.com/openclaw/openclaw/pull/171697) by [steipete](https://github.com/steipete).
  - Encode transcript messages once for broadcasts to multiple subscribers. [#171701](https://github.com/openclaw/openclaw/pull/171701) by [steipete](https://github.com/steipete).
  - Improves health and status responsiveness while large fleets prepare session information. [#168649](https://github.com/openclaw/openclaw/pull/168649) by [@steipete](https://github.com/steipete), with thanks to [@609NFT](https://github.com/609NFT).
  - Moves agent-session preparation reads off the Gateway's main thread during concurrent requests. [#168755](https://github.com/openclaw/openclaw/pull/168755) by [@steipete](https://github.com/steipete).
  - Reduces database writer contention during transcript maintenance and names known long-running tasks in stall warnings. [#168801](https://github.com/openclaw/openclaw/pull/168801) by [@steipete](https://github.com/steipete).
  - Release superseded session-list presentation data sooner to reduce retained Gateway memory during session changes. [#169056](https://github.com/openclaw/openclaw/pull/169056), thanks [@steipete](https://github.com/steipete).
  - Resolve session targets without waiting for unrelated display rows to rebuild or succeed. [#169082](https://github.com/openclaw/openclaw/pull/169082), thanks [@steipete](https://github.com/steipete).
  - Resolve full session IDs and labels from matching metadata without waiting for unrelated sessions. [#169148](https://github.com/openclaw/openclaw/pull/169148), thanks [@steipete](https://github.com/steipete).
  - Catalog updates refresh affected agents' session information without rematerializing unrelated agents' sessions. [#169210](https://github.com/openclaw/openclaw/pull/169210). Thanks [@steipete](https://github.com/steipete).
  - Session-list polling and creation reuse roster and model information where appropriate. [#169263](https://github.com/openclaw/openclaw/pull/169263). Thanks [@steipete](https://github.com/steipete).
  - Committed session-list notifications can finish after their producing task ends, including queued Swarm launches. [PR #170231](https://github.com/openclaw/openclaw/pull/170231). Thanks [@steipete](https://github.com/steipete).
  - Connected clients can receive committed session rows after the request that changed them finishes or is cancelled, instead of falling back to a list refresh. [PR #170281](https://github.com/openclaw/openclaw/pull/170281). Thanks [@steipete](https://github.com/steipete).
  - Project, sharing-member, and GitHub option pickers avoid redundant reads and overlap independent work. [PR #170324](https://github.com/openclaw/openclaw/pull/170324). Thanks [@steipete](https://github.com/steipete).
  - Session lists and activity recaps retain less data for large session inventories. [#170517](https://github.com/openclaw/openclaw/pull/170517). Thanks to [steipete](https://github.com/steipete).
  - Return retained observed-project snapshots while discovery refreshes in the background. On a cold listing, session-only repositories appear after discovery ([#170887](https://github.com/openclaw/openclaw/pull/170887)). Thanks [@steipete](https://github.com/steipete).
  - Previously discovered session catalogs return available pages while providers refresh. Cold discovery retains its wait budget. [#171263](https://github.com/openclaw/openclaw/pull/171263), thanks to [steipete](https://github.com/steipete).
  - Session ID lookup loads only the selected saved entry and checks that it has not been replaced. [#171326](https://github.com/openclaw/openclaw/pull/171326), thanks to [steipete](https://github.com/steipete).
  - Session listing avoids redundant validation work on prepared rows. [#171731](https://github.com/openclaw/openclaw/pull/171731) by [steipete](https://github.com/steipete).
  - Sidebar session-list packing uses fewer temporary allocations, following earlier list work in [#171724](https://github.com/openclaw/openclaw/pull/171724) and [#171731](https://github.com/openclaw/openclaw/pull/171731). [#171860](https://github.com/openclaw/openclaw/pull/171860) by [steipete](https://github.com/steipete).
  - Reuse agent roster and row-target work during sidebar session-list selection. [#172474](https://github.com/openclaw/openclaw/pull/172474). Thanks to [@steipete](https://github.com/steipete).
  - Reduce repeated allocations in session-list readiness checks. [#172485](https://github.com/openclaw/openclaw/pull/172485). Thanks to [@steipete](https://github.com/steipete).
  - Saved-session `chat.metadata` requests with `includeModels=false` avoid waiting for unused worker placement information. [#175606](https://github.com/openclaw/openclaw/pull/175606). Thanks [@vincentkoc](https://github.com/vincentkoc).
  - Handle unreadable rows in session listings and release queued collector holds after their parent ends ([#187589](https://github.com/openclaw/openclaw/pull/187589)). Thanks to [@RomneyDa](https://github.com/RomneyDa) and [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).

  </details>

- Typing the first message in New Session stays responsive even with a large model catalog.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Reduce repeated work in the New Session cloud environment picker. [#170651](https://github.com/openclaw/openclaw/pull/170651) Thanks [@steipete](https://github.com/steipete).
  - New Session typing avoids repeated work while editing a draft. [#171511](https://github.com/openclaw/openclaw/pull/171511) Thanks to [@steipete](https://github.com/steipete).
  - New Session typing avoids repeated model work after the catalog loads. [#171530](https://github.com/openclaw/openclaw/pull/171530) Thanks to [@obviyus](https://github.com/obviyus).
  - Reduce typing lag in New Session when a large model catalog is loaded. [#171769](https://github.com/openclaw/openclaw/pull/171769), thanks to [vincentkoc](https://github.com/vincentkoc).

  </details>

- Side chat and project choices can open while unrelated conversations are still being prepared.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Restore Side chat without waiting for unrelated session writes ([#170968](https://github.com/openclaw/openclaw/pull/170968)). Thanks [@steipete](https://github.com/steipete).
  - Let project listings proceed during unrelated state writes ([#171069](https://github.com/openclaw/openclaw/pull/171069)). Thanks [@steipete](https://github.com/steipete).
  - Let project and session-catalog pickers respond without waiting for unrelated session row preparation after a restart. [#171714](https://github.com/openclaw/openclaw/pull/171714), thanks to [steipete](https://github.com/steipete).
  - Gateway client documentation explains how to reconcile an optional in-flight run snapshot after replaying cursor catch-up messages. [#171183](https://github.com/openclaw/openclaw/pull/171183), thanks to [vincentkoc](https://github.com/vincentkoc) and [NianJiuZst](https://github.com/NianJiuZst).
  - Git repository identity workers avoid loading unrelated preparation code, reducing retained memory in the measured workload. [#171926](https://github.com/openclaw/openclaw/pull/171926) by [steipete](https://github.com/steipete).
  - Defer Git and package-manager installation discovery until a scheduled update check or explicit request, respecting update-check opt-outs ([#181983](https://github.com/openclaw/openclaw/pull/181983)). Thanks [@steipete](https://github.com/steipete), [@jonathanlindsay](https://github.com/jonathanlindsay), [@ruel225](https://github.com/ruel225) and [@Card4Philippe](https://github.com/Card4Philippe).

  </details>

- [Memory indexing](/concepts/memory-builtin#how-indexing-works) now batches conversation updates after a quiet period instead of repeatedly working during active turns. Recent conversation text may therefore take longer to appear in memory search.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Growing session transcripts retain unchanged indexed chunks and only embed and write changed content. [#103201](https://github.com/openclaw/openclaw/pull/103201), with thanks to [wr-web](https://github.com/wr-web), [steipete](https://github.com/steipete), [wangbaobisheng](https://github.com/wangbaobisheng) and [Hawkeye2611](https://github.com/Hawkeye2611). See [#40919](https://github.com/openclaw/openclaw/issues/40919).
  - Managed local non-batch indexing limits concurrent file jobs to one. [#137484](https://github.com/openclaw/openclaw/pull/137484), with thanks to [shojikumaru](https://github.com/shojikumaru), [steipete](https://github.com/steipete) and [wtom](https://github.com/wtom). See [#136175](https://github.com/openclaw/openclaw/issues/136175).
  - Targeted session updates avoid loading unrelated forgotten-session records. [#168098](https://github.com/openclaw/openclaw/pull/168098), with thanks to [steipete](https://github.com/steipete). See the separate related report [#167838](https://github.com/openclaw/openclaw/issues/167838) from [nkarkare](https://github.com/nkarkare).
  - Index setup and rebuilds move more database work away from the Gateway thread. [#168860](https://github.com/openclaw/openclaw/pull/168860), with thanks to [steipete](https://github.com/steipete) and [RomneyDa](https://github.com/RomneyDa).
  - Completed agent database opening requests no longer remain unnecessarily in memory. [#168349](https://github.com/openclaw/openclaw/pull/168349), with thanks to [steipete](https://github.com/steipete).
  - Session transcripts are indexed after a quiet period, with pending work deferred while turns are running. Searches use the published index and do not force pending transcripts to be indexed. [#170404](https://github.com/openclaw/openclaw/pull/170404), thanks to [steipete](https://github.com/steipete).
  - Handled session indexing failures are retried during idle periods, with older pending changes retained. [#170719](https://github.com/openclaw/openclaw/pull/170719), thanks to [steipete](https://github.com/steipete).
  - A failed rebuild gets its final automatic retry after the rebuild cooldown, while memory maintenance avoids redundant cache and index reads. [#170792](https://github.com/openclaw/openclaw/pull/170792), thanks to [steipete](https://github.com/steipete).
  - Fresh agents can initialize indexing so later session turns become searchable. [#170220](https://github.com/openclaw/openclaw/pull/170220), thanks to [steipete](https://github.com/steipete).
  - Recurring memory sync reuses committed index information to reduce database work on the Gateway thread. [#169058](https://github.com/openclaw/openclaw/pull/169058), thanks to [steipete](https://github.com/steipete).
  - Memory searches reuse read-only connections to reduce setup work. [#170183](https://github.com/openclaw/openclaw/pull/170183), thanks to [steipete](https://github.com/steipete).
  - Session indexing batches changes and preserves unrelated session caches. [#170302](https://github.com/openclaw/openclaw/pull/170302), thanks to [steipete](https://github.com/steipete).
  - Published memory-index reads reduce contention with concurrent writes. [#170407](https://github.com/openclaw/openclaw/pull/170407), thanks to [steipete](https://github.com/steipete).
  - Memory startup and built-in status do less database work on the main thread. [#171322](https://github.com/openclaw/openclaw/pull/171322), thanks to [steipete](https://github.com/steipete).
  - Large, mostly unchanged memory sources reuse unchanged vectors, avoiding work that can delay conversation writes. [#171402](https://github.com/openclaw/openclaw/pull/171402), thanks to [salad-maker](https://github.com/salad-maker).
  - Memory retrieval workers retain less memory while preserving search and Forget behavior. [#172392](https://github.com/openclaw/openclaw/pull/172392), thanks to [steipete](https://github.com/steipete) and [RomneyDa](https://github.com/RomneyDa).
  - Bounded temporary embedding-cache growth during full rebuilds while preserving cache reuse ([#183089](https://github.com/openclaw/openclaw/pull/183089), [issue #182886](https://github.com/openclaw/openclaw/issues/182886)). Thanks [@steipete](https://github.com/steipete) and reporter [@etzelm](https://github.com/etzelm).
  - Background memory indexing waits until its agent database is ready and checks access before proceeding ([commit 51d97ef](https://github.com/openclaw/openclaw/commit/51d97efee0de2bdf39d76278a24d30c7d343317c)).
  - Kept pending indexing work after an expected background rebuild interruption without consuming an error retry ([commit 71692b0](https://github.com/openclaw/openclaw/commit/71692b03a277790e5781705dcdfeb6f4ba0c810f)).
  - Reduced unnecessary memory retention after native agent database opening ([commit 06e6524](https://github.com/openclaw/openclaw/commit/06e6524335e7eed5f44dbd3521c0bb5b60a8322d)).

  </details>

- Project lists and workspace preparation avoid waits on unrelated conversations creating or archiving worktrees.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Return a conflict instead of overwriting a session created by a competing request. [#169625](https://github.com/openclaw/openclaw/pull/169625) by [@steipete](https://github.com/steipete).
  - Let ordinary session and transcript reads proceed while an unrelated write is busy. [#169838](https://github.com/openclaw/openclaw/pull/169838) by [@steipete](https://github.com/steipete).
  - Project listings and the project picker no longer fail just because an unrelated session changes during discovery. [#170824](https://github.com/openclaw/openclaw/pull/170824) by [@steipete](https://github.com/steipete).
  - Managed-worktree branch suggestions can remain cached for up to 30 seconds. The chosen ref is validated when a worktree is created. [#170626](https://github.com/openclaw/openclaw/pull/170626) by [@steipete](https://github.com/steipete). The related [#138555](https://github.com/openclaw/openclaw/issues/138555), reported by [@aleps001](https://github.com/aleps001), concerned a child-answer problem fixed earlier.
  - Concurrent sessions can read an actively retained warm worktree template without waiting for a mutation lock. [#170903](https://github.com/openclaw/openclaw/pull/170903) by [@steipete](https://github.com/steipete).
  - Managed repository maintenance can remove redundant Git packs, including duplicates previously skipped by consolidation limits. [#170935](https://github.com/openclaw/openclaw/pull/170935) by [@steipete](https://github.com/steipete).
  - Worktree creation errors include redacted timing details when preparation stalls. [#170835](https://github.com/openclaw/openclaw/pull/170835) by [@steipete](https://github.com/steipete).
  - Slow session update logs distinguish archive and other request phases. [#170961](https://github.com/openclaw/openclaw/pull/170961) by [@steipete](https://github.com/steipete).
  - Avoid redundant history downloads when preparing pinned commits in existing partial clones. [#170970](https://github.com/openclaw/openclaw/pull/170970) by [@steipete](https://github.com/steipete). Related pack consolidation work in [#170935](https://github.com/openclaw/openclaw/pull/170935).
  - Reduce capacity admission waits for concurrent repository-backed worktree creation. [#170983](https://github.com/openclaw/openclaw/pull/170983) by [@steipete](https://github.com/steipete).
  - Share pending template preparation waits among concurrent creates in the same process. [#171075](https://github.com/openclaw/openclaw/pull/171075) by [@steipete](https://github.com/steipete).
  - Reuse unchanged branch inventories in repositories with large pack directories. [#171604](https://github.com/openclaw/openclaw/pull/171604) by [@steipete](https://github.com/steipete).
  - Limit repeated Git housekeeping during frequent worktree archives while cleanup continues. [#171680](https://github.com/openclaw/openclaw/pull/171680) by [@steipete](https://github.com/steipete).
  - Keep Gateway Git inspection local in partial clones. Optional facts may be unavailable when their objects are missing, while explicit transfers remain available. [#171799](https://github.com/openclaw/openclaw/pull/171799) by [@steipete](https://github.com/steipete).
  - Allow eligible partial-clone pack consolidation after a deferred snapshot without fetching promised objects. [#171841](https://github.com/openclaw/openclaw/pull/171841) by [@steipete](https://github.com/steipete).
  - Detect the Git object format directly during source-only worktree preparation, including repositories without a HEAD commit. [#171856](https://github.com/openclaw/openclaw/pull/171856) by [@steipete](https://github.com/steipete).

  - Let unrelated sessions write between commands in an append batch. [#171225](https://github.com/openclaw/openclaw/pull/171225) by [@steipete](https://github.com/steipete).

  </details>

- Agent preparation and long conversations use less memory and repeat less work, especially when many agents or models are configured.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Move bundled inference and Models logout authentication storage work off the Gateway thread. If the same profile reconnects while logout cleanup is still running, you may need to select that account again. [#171510](https://github.com/openclaw/openclaw/pull/171510), thanks to [steipete](https://github.com/steipete).
  - Avoid copying stored session metadata that is excluded from model context when preparing follow-up turns. [#171574](https://github.com/openclaw/openclaw/pull/171574), thanks to [joshavant](https://github.com/joshavant).
  - Reduce memory used to prepare optional session forks for long conversations. If fork capture fails, the parent request can continue. [#171683](https://github.com/openclaw/openclaw/pull/171683), thanks to [steipete](https://github.com/steipete).
  - Keep lean local-model Tool Search directories compact while leaving full descriptions and schemas searchable. [#171588](https://github.com/openclaw/openclaw/pull/171588), thanks to [steipete](https://github.com/steipete) and [chitowntony](https://github.com/chitowntony).
  - Avoid loading unrelated memory and context plugins for simple completions, image descriptions and one-shot decisions. [#171822](https://github.com/openclaw/openclaw/pull/171822), thanks to [htuyer121](https://github.com/htuyer121) and [steipete](https://github.com/steipete), [gorkem2020](https://github.com/gorkem2020) for tracing the affected paths, and [Cyb3rb1ade](https://github.com/Cyb3rb1ade) for the [related report](https://github.com/openclaw/openclaw/issues/163029).
  - Move full Linux Codex cleanup process scans off the Gateway thread. [#171865](https://github.com/openclaw/openclaw/pull/171865), thanks to [steipete](https://github.com/steipete).
  - Reduce agent roster and related chat-read work for large model and agent configurations ([#169123](https://github.com/openclaw/openclaw/pull/169123)). Thanks [@steipete](https://github.com/steipete).
  - Moves GitHub discovery into the background so repository-backed agent turns can reach the provider sooner. Tool visibility may briefly reflect the previous account during a refresh. [#169488](https://github.com/openclaw/openclaw/pull/169488) Thanks [@steipete](https://github.com/steipete).
  - Warm turns reuse a session settings snapshot and local computer discovery facts. [#170185](https://github.com/openclaw/openclaw/pull/170185), thanks to [@steipete](https://github.com/steipete).
  - Large agent fleets avoid repeated session-path and configuration work after Gateway readiness. [#170612](https://github.com/openclaw/openclaw/pull/170612), thanks to [@steipete](https://github.com/steipete) and [@609NFT](https://github.com/609NFT).

  - Reuse validation results for unchanged plugin settings across configuration revisions. [#171592](https://github.com/openclaw/openclaw/pull/171592) by [steipete](https://github.com/steipete).

  - [Code Mode](/tools/code-mode/quickstart) uses less processing time and temporary memory to prepare its tools across repeated turns. [#187161](https://github.com/openclaw/openclaw/pull/187161). Thanks [@steipete](https://github.com/steipete).
  - Cached conversation lists no longer keep obsolete lists in memory after conversation details change. [#187111](https://github.com/openclaw/openclaw/pull/187111). Thanks [@steipete](https://github.com/steipete).
  - Model catalogs use less memory when many workspaces and provider models are configured. [#187179](https://github.com/openclaw/openclaw/pull/187179). Thanks [@vincentkoc](https://github.com/vincentkoc).

  </details>

- Publish PR now points to the credential, verification or workspace problem that is stopping your pull request.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Distinguish credentials, verification and workspace problems in Publish PR, [#168223](https://github.com/openclaw/openclaw/pull/168223). Thanks to [steipete](https://github.com/steipete).

  </details>

### Cloud workspaces

- Cloud projects can use supported setup commands from a [Dev Container file committed with the project](/gateway/cloud-workers/environment-file). The worker also recognizes common JavaScript lockfiles when installing dependencies.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  Only selected Dev Container setup commands are supported; values in the recipe do not become environment variables for your conversation.

  - Cloud recipes support selected Dev Container setup and lifecycle commands, plus pnpm, Yarn, npm and available Bun lockfile detection. Recipe environment values do not propagate to session processes. [#170862](https://github.com/openclaw/openclaw/pull/170862) · [Environment file guide](https://github.com/openclaw/openclaw/blob/7e15622f37bd0ced194a3b0fccacb4ad6bc78d85/docs/gateway/cloud-workers/environment-file.md) · Thanks [@steipete](https://github.com/steipete).

  </details>

- A later empty-workspace cloud session can start on a [prepared worker](/gateway/cloud-workers/warm-images#ready-workers) when a compatible one is ready. The first still needs a new machine, and keeping ready workers running incurs provider charges.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  A prepared worker must already be available within your configured pool limits.

  - Ready-worker reuse for empty workspaces follows the configured pool limits and requires a compatible reserve to be ready. [#170929](https://github.com/openclaw/openclaw/pull/170929) · Related work [#168371](https://github.com/openclaw/openclaw/pull/168371) · Thanks [@steipete](https://github.com/steipete).

  </details>

- Linux cloud workers can install the [Node version a project needs](/gateway/cloud-workers/setup-and-bundle-installation#automatic-linux-node-toolchains) during setup. Package-manager preparation also handles more pinned projects.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Linux workers can install a checksum-verified Node runtime and select a repository-declared version. Linux images need compatible system tools and HTTPS access to nodejs.org, while macOS and Windows still need Node supplied by the image or setup. [#170796](https://github.com/openclaw/openclaw/pull/170796) by [@steipete](https://github.com/steipete).
  - Use global Crabbox settings for cloud worker discovery and suppress Corepack download prompts in detected pnpm and Yarn preparation. Project-scoped commands retain their workspace. [#171706](https://github.com/openclaw/openclaw/pull/171706) by [@steipete](https://github.com/steipete).
  - Run fallback Corepack and its package manager on the worker Node for affected pinned repositories while keeping the requested Node for repository scripts. Package manager engine checks see the worker Node. [#171147](https://github.com/openclaw/openclaw/pull/171147) by [@steipete](https://github.com/steipete).
  - Clarify cloud setup, repository preparation, snapshots and reuse in the documentation. [#171767](https://github.com/openclaw/openclaw/pull/171767) by [@steipete](https://github.com/steipete).
  - Correct the worker placement reference to explain that a concurrent placement change can reject a turn without an automatic retry. [#171205](https://github.com/openclaw/openclaw/pull/171205) by [@steipete](https://github.com/steipete).

  </details>

- Cloud setup can use [operator-approved secrets](/gateway/cloud-workers/environment-file#setup-secrets) to reach trusted services without putting credentials in the repository or its saved worker image. Bind only trusted destinations because a service can return a credential in its response. Existing `setupEnv` profiles need `openclaw doctor --fix` and destination-bound stored secrets before new provisioning; this requires supported Linux workers and clients.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Approved cloud setup integrations can send credentials only to their bound destinations, including services that use HTTP Basic authentication. [#170810](https://github.com/openclaw/openclaw/pull/170810) by [@steipete](https://github.com/steipete).
  - Repositories can request an approved secret name, but cannot choose its value or destination. Missing bindings fail rather than exposing plaintext. The feature needs a supported Linux coordinator and compatible Crabbox helper and proxy-aware clients; bind only trusted services because a response can return credentials. [#171073](https://github.com/openclaw/openclaw/pull/171073) · Related work [#170810](https://github.com/openclaw/openclaw/pull/170810) · Thanks [@steipete](https://github.com/steipete).

  </details>

### Setup, updates and documentation

- On a fresh supported desktop install, [setup](/start/onboarding-overview) now guides you through running OpenClaw locally or connecting to a remote Gateway.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Fresh Linux and Windows desktop setup prepares a local Gateway and opens onboarding, with manual recovery choices when needed. [#169512](https://github.com/openclaw/openclaw/pull/169512) by [@steipete](https://github.com/steipete).
  - Windows x64 desktop builds support local CLI and Gateway setup, a regular installer and the Windows stable update channel. Remote connections remain available if the signed runtime is missing. [#169522](https://github.com/openclaw/openclaw/pull/169522) by [@steipete](https://github.com/steipete).
  - Fresh Mac setup shows progress and offers guided dashboard onboarding when the Gateway supports automatic setup, with a manual fallback. [#169568](https://github.com/openclaw/openclaw/pull/169568) by [@steipete](https://github.com/steipete).
  - Mac setup follows the dashboard through window changes and keeps the native setup page visible when an installation step is removed. [#170613](https://github.com/openclaw/openclaw/pull/170613) by [@steipete](https://github.com/steipete).
  - Mac setup and status messages gain translations across 21 locales. [#170221](https://github.com/openclaw/openclaw/pull/170221).
  - Local app-hosted setup saves a usable Gateway token and reduces runtime preparation and connection delays. If a required token cannot be saved, setup stops with a retryable error. [#169403](https://github.com/openclaw/openclaw/pull/169403). Thanks [steipete](https://github.com/steipete).
  - Fresh Macs can show AI setup choices sooner. [#169472](https://github.com/openclaw/openclaw/pull/169472). Thanks [steipete](https://github.com/steipete).
  - Standalone macOS Bun reports missing or incompatible SQLite libraries with setup guidance. [#168564](https://github.com/openclaw/openclaw/pull/168564). Thanks [steipete](https://github.com/steipete).
  - Fresh macOS profiles can start the Gateway and continue automatic setup through supervised retries. [#173246](https://github.com/openclaw/openclaw/pull/173246) Thanks [@steipete](https://github.com/steipete).
  - Fresh Windows setup no longer mistakes its own state initialization for another process performing offline maintenance. [#176174](https://github.com/openclaw/openclaw/pull/176174), [issue #176163](https://github.com/openclaw/openclaw/issues/176163) Thanks [@steipete](https://github.com/steipete) and [@tjarrau-dev](https://github.com/tjarrau-dev).
  - Fresh local setup in non-release Linux and Windows desktop builds uses matching staged core and Codex packages without npm on the user's machine. The first verified copy can take several minutes. [#171117](https://github.com/openclaw/openclaw/pull/171117) Thanks to [@steipete](https://github.com/steipete).
  - Linux and Windows desktop apps reclaim unreferenced runtime files after a healthy activation while retaining current and previous selections and active references. [#171489](https://github.com/openclaw/openclaw/pull/171489) Thanks to [@steipete](https://github.com/steipete).
  - Bundled desktop runtimes omit unused development files. The measured signed Apple Silicon Mac bundle was 62.5 MB smaller; the same staging change applies to bundled Linux and Windows desktop packages. [#172054](https://github.com/openclaw/openclaw/pull/172054) Thanks to [@steipete](https://github.com/steipete).
  - Windows desktop setup guides recommend Windows Hub and document Tauri as an alternative. [#171114](https://github.com/openclaw/openclaw/pull/171114) Thanks to [@steipete](https://github.com/steipete).
  - The Mac installation guide includes architecture-specific installer links pinned to version 2026.10.3 and the releases index for newer builds. [#171560](https://github.com/openclaw/openclaw/pull/171560) Thanks to [@brianmcguire](https://github.com/brianmcguire) and [@lkanowski](https://github.com/lkanowski).
  - Packaged non-release Mac builds use same-commit official plugins for setup, avoiding Codex plugin and core version mismatches. Large plugin bundles can fall back to staging Codex alone, and explicit source choices remain respected. [#170776](https://github.com/openclaw/openclaw/pull/170776) by [@steipete](https://github.com/steipete).

  </details>

- You can make supported settings and [provider changes](/concepts/model-providers/control-ui-and-keys#configure-providers-in-the-control-ui) without stopping the local Gateway. Some first-time setup and CLI credential commands still require it to be stopped, and saved changes may need a reload or restart before they take effect.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Protects CLI model-auth and MCP configuration changes from conflicting writes while the Gateway is running. Commands without a supported live path require stopping it first. [#168135](https://github.com/openclaw/openclaw/pull/168135). Thanks to [steipete](https://github.com/steipete).
  - Route basic agent creation through the running Gateway and protect direct state writes from conflicting owners. Later provider, configuration and baseline-setup changes add their supported live routes. [#168417](https://github.com/openclaw/openclaw/pull/168417). Thanks to [steipete](https://github.com/steipete).
  - Debug proxy captures follow the active Gateway or exclusive offline owner, [#168459](https://github.com/openclaw/openclaw/pull/168459). Update an older Gateway or stop it before offline capture. Run the Gateway when proxy child commands change other OpenClaw state. Thanks to [steipete](https://github.com/steipete).
  - Supported CLI settings changes can be saved while the Gateway runs. An updated CLI talking to an older v2026.10.7 Gateway may report failure even after saving a reload-off change, so check the saved setting before retrying. [#182951](https://github.com/openclaw/openclaw/pull/182951). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Allow affected `session.store` configuration writes ([commit](https://github.com/openclaw/openclaw/commit/943da4fc9366e2acc1710542897b4e229064c6c1)).
  - Apply agent creation and updates while another agent is being deleted, without requiring another save or restart. [#171459](https://github.com/openclaw/openclaw/pull/171459), thanks to [steipete](https://github.com/steipete).
  - CLI secret changes use the running local Gateway, or work offline when it is stopped. If that Gateway cannot be reached or is too old, the write is refused. Stop it before a manual model catalog refresh. [#168108](https://github.com/openclaw/openclaw/pull/168108). Thanks to [steipete](https://github.com/steipete).
  - Reject malformed UTF-8 piped into model token and API-key commands before it can overwrite saved credentials. [#167251](https://github.com/openclaw/openclaw/pull/167251). Thanks to [Alix-007](https://github.com/Alix-007) and [steipete](https://github.com/steipete).
  - Disable external HTTP hooks at startup when their secret cannot be resolved, while letting the Gateway start. A rejected reload keeps the previous valid hook settings. Supply the secret to the Gateway service and reload or restart, or disable the hooks. [Hook configuration](/gateway/config-hooks), [#165019](https://github.com/openclaw/openclaw/pull/165019). Thanks to [eleqtrizit](https://github.com/eleqtrizit).
  - Show or hide a secret without submitting the prompt, while keeping the typed value. [#169925](https://github.com/openclaw/openclaw/pull/169925). Thanks [@jacobtomlinson](https://github.com/jacobtomlinson).
  - Config and root-level private writes preserve existing shared state-root permissions while keeping sensitive files and private child directories private. [#171869](https://github.com/openclaw/openclaw/pull/171869), following the report in [#169011](https://github.com/openclaw/openclaw/issues/169011). Thanks to [steipete](https://github.com/steipete).
  - Config saves involving secret references can acknowledge a change already applied by the watcher instead of waiting for a timeout. [#171922](https://github.com/openclaw/openclaw/pull/171922) by [steipete](https://github.com/steipete), following work in [#109792](https://github.com/openclaw/openclaw/pull/109792) and [#169249](https://github.com/openclaw/openclaw/pull/169249).
  - Preserve provider setup results and activation guidance when temporary credential cleanup fails. [#172379](https://github.com/openclaw/openclaw/pull/172379), reported in [#172368](https://github.com/openclaw/openclaw/issues/172368). Thanks to [@skyzhao1223](https://github.com/skyzhao1223), [@steipete](https://github.com/steipete) and [@giannis88](https://github.com/giannis88).
  - CLI configuration writes with reload off save without directly restarting an updated Gateway. Older Gateways may still restart. [#184392](https://github.com/openclaw/openclaw/pull/184392) Thanks [@romneyda](https://github.com/romneyda).
  - CLI settings writes accepted for restart now report success and a restart message; the new setting is active only after that restart. [#184532](https://github.com/openclaw/openclaw/pull/184532) Thanks [@romneyda](https://github.com/romneyda).

  </details>

- An update can bring the Gateway back up before optional Doctor checks finish; repairs needed for startup still happen first.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Adopted update candidates defer eligible optional Doctor checks until after readiness. Required repairs remain before startup, and unusable selectors fall back to inline lint. [#171374](https://github.com/openclaw/openclaw/pull/171374), thanks to [steipete](https://github.com/steipete).
  - Update reports retain optional Doctor information and warnings, and deferred-check advice includes `openclaw doctor --lint --all --severity-min info`. Readiness errors remain errors. [#171420](https://github.com/openclaw/openclaw/pull/171420), thanks to [steipete](https://github.com/steipete).
  - Online schema checks avoid a full staging copy for eligible databases. Recovery and incomplete WAL cases can still need a snapshot. [#171984](https://github.com/openclaw/openclaw/pull/171984) by [vincentkoc](https://github.com/vincentkoc).

  </details>

- Getting-started, installation, backup and troubleshooting guides now explain their steps and recovery choices more clearly, while keeping existing links working.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Clarify database reference guidance for search freshness, reconnect ownership and schema 22 rollback. [#171181](https://github.com/openclaw/openclaw/pull/171181) by [@steipete](https://github.com/steipete).
  - Operator guides clarify worker cache behavior and when batched usage totals refresh. [#171393](https://github.com/openclaw/openclaw/pull/171393), thanks to [steipete](https://github.com/steipete).
  - Document the existing Poolside provider and separate ACP setup. [#132896](https://github.com/openclaw/openclaw/pull/132896), [related report #121635](https://github.com/openclaw/openclaw/issues/121635). Thanks to [vmbbz](https://github.com/vmbbz), [vincentkoc](https://github.com/vincentkoc), and [amyduquette](https://github.com/amyduquette).
  - Reorganize the earlier 2026.10.1 release page, Markdown mirror, archive links, and contribution record for easier browsing. [#167818](https://github.com/openclaw/openclaw/pull/167818). Thanks to [hannesrudolph](https://github.com/hannesrudolph) and [RomneyDa](https://github.com/RomneyDa).

  These wording changes are by [@RomneyDa](https://github.com/RomneyDa).

  - Clarifies getting started, installation, provider, update, and security guides while preserving existing links. [#168693](https://github.com/openclaw/openclaw/pull/168693)
  - Makes CLI, recovery, backup, and troubleshooting guides easier to follow. [#168694](https://github.com/openclaw/openclaw/pull/168694)
  - Explains concepts and automation behavior more directly. [#168695](https://github.com/openclaw/openclaw/pull/168695)
  - Clarifies Gateway setup, operation, and recovery guides. [#168696](https://github.com/openclaw/openclaw/pull/168696)
  - Makes security and channel setup instructions easier to understand. [#168697](https://github.com/openclaw/openclaw/pull/168697)
  - Clarifies tool, node, and plugin setup and usage guides. [#168699](https://github.com/openclaw/openclaw/pull/168699)
  - Simplifies reference and CI guidance while keeping links to renamed headings. [#168702](https://github.com/openclaw/openclaw/pull/168702)
  - Clarifies macOS Gateway and managed Node messages and platform guides. [#168704](https://github.com/openclaw/openclaw/pull/168704)
  - Makes iOS guides and release diagnostics more direct. [#168705](https://github.com/openclaw/openclaw/pull/168705)
  - Clarifies Android and Wear guides and the screenshot lane description. [#168706](https://github.com/openclaw/openclaw/pull/168706)
  - Improves Linux setup guidance and the unrecognized managed-installation message. [#168707](https://github.com/openclaw/openclaw/pull/168707)
  - Makes agent and command execution messages clearer about safe retries and checking state. [#168709](https://github.com/openclaw/openclaw/pull/168709)
  - Clarifies Gateway setup and security diagnostics. [#168710](https://github.com/openclaw/openclaw/pull/168710)
  - Makes CLI, Doctor, and service help and repair messages easier to follow. [#168711](https://github.com/openclaw/openclaw/pull/168711)
  - Explains Codex and provider setup requirements and failures more directly. [#168713](https://github.com/openclaw/openclaw/pull/168713)
  - Clarifies messaging and calling help, warnings, and approval receipts. [#168714](https://github.com/openclaw/openclaw/pull/168714)
  - Makes workspace and memory plugin messages clearer about paths, paused recall, and safe retries. [#168715](https://github.com/openclaw/openclaw/pull/168715)
  - Clarifies browser, tool, plugin, and approval help and diagnostics. [#168716](https://github.com/openclaw/openclaw/pull/168716)
  - Clarify product direction for optional hosting, local and self-hosted use, and separate Gateways with host or container isolation for mutually untrusted users ([#170923](https://github.com/openclaw/openclaw/pull/170923), [#170921](https://github.com/openclaw/openclaw/issues/170921)). Thanks [@vincentkoc](https://github.com/vincentkoc).

  - The environment reference documents the existing ClawHub install telemetry opt-out, `CLAWHUB_DISABLE_TELEMETRY`. [#114376](https://github.com/openclaw/openclaw/pull/114376). Thanks [@kobihikri](https://github.com/kobihikri) and [@vincentkoc](https://github.com/vincentkoc).

  - The Neon guide covers existing custom-provider setup for its Chat Completions, Responses, and Anthropic Messages endpoints. [PR #113734](https://github.com/openclaw/openclaw/pull/113734). Thanks to [mezotv](https://github.com/mezotv), [vincentkoc](https://github.com/vincentkoc), and [clarkbw](https://github.com/clarkbw) for review advice.

  - Doctor's guide clarifies that standalone checks can run after an update before starting the Gateway. [#170550](https://github.com/openclaw/openclaw/pull/170550). Thanks to [steipete](https://github.com/steipete).

  - Add a native Ollama configuration example for llmman that retains tool use with an explicitly configured model. [#171444](https://github.com/openclaw/openclaw/pull/171444), thanks to [ericcurtin](https://github.com/ericcurtin).

  </details>

### Models, voice and media

- On Linux x64 CPU systems, [guided setup](/plugins/llama-cpp#managed-local-ocr-and-vision) helps you download and test local models for reading text in images and describing pictures. A separately configured cloud chat model may still receive the original image.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Guided local OCR and vision setup with verified model downloads and separate checks for both tasks. [#148193](https://github.com/openclaw/openclaw/pull/148193), [#148056](https://github.com/openclaw/openclaw/issues/148056). Thanks [@duyufansh2008](https://github.com/duyufansh2008) and [@steipete](https://github.com/steipete).

  </details>

- Choose Fish Audio’s [Drama 3 preview](/providers/fish-audio) for speech and Talk if you want to try it; the existing voice default does not change.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Fish Audio supports the opt-in Drama 3 preview for speech and Talk, with one voice per request. [#170473](https://github.com/openclaw/openclaw/pull/170473). Thanks [@steipete](https://github.com/steipete).

  </details>

- Choose [Gemini 4 Argon](/providers/google#gemini-4-argon) on supported Google and Vertex routes, including its available thinking levels. Google API-key setup now selects it as your primary model, so check that choice if you want to keep another default.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Update the recommended-model list to include Gemini 4 Argon and revise the leading order. [#171429](https://github.com/openclaw/openclaw/pull/171429), thanks to [obviyus](https://github.com/obviyus) for the approved curation.
  - Support Gemini 4 Argon selection, thinking levels and tool-call replay through Google and Vertex. Thinking cannot be fully disabled, and explicit caches and the Live API are unsupported for this model. [#171852](https://github.com/openclaw/openclaw/pull/171852), thanks to [steipete](https://github.com/steipete).

  </details>

- Shared models can use the [Agents API](/plugins/agentsapi#shared-model-tuning); its hosted service handles conversation compaction itself.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Allow Agents API to be selected for shared models with OpenClaw compaction settings. The hosted runtime manages its own compaction. [#171813](https://github.com/openclaw/openclaw/pull/171813), thanks to [steipete](https://github.com/steipete).

  </details>

- Select Muse Wonder 1.0 Standard or choose maximum thinking for Wonder and Spark 1.3 Standard.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Muse Wonder 1.0 Standard selection and max thinking for Wonder and Spark 1.3 Standard ([#170232](https://github.com/openclaw/openclaw/pull/170232)). Thanks to [RomneyDa](https://github.com/RomneyDa).

  </details>

### Skills, plugins and automations

- Different OpenClaw agents can now use [separate Microsoft Teams bot identities](/channels/msteams/configuration#multiple-bot-accounts) from one Gateway, so each can appear under its own bot name instead of sharing one identity.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  Set up an Azure Bot registration, credentials and callback endpoint for each bot; an existing single-bot setup keeps its route. See [multiple Teams bot accounts](/channels/msteams/configuration#multiple-bot-accounts).

  - Multiple Teams bots can be bound to different agents, with a separate callback route for each named account and the original endpoint retained for the default bot. [#112811](https://github.com/openclaw/openclaw/pull/112811), [request #71058](https://github.com/openclaw/openclaw/issues/71058). Thanks to [@jimmypuckett](https://github.com/jimmypuckett), [@steipete](https://github.com/steipete) and reporter [@ashukla147](https://github.com/ashukla147).

  </details>

- Open an older run directly from automation history, or search delivery error text to find a failed run.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Open older linked runs directly and return to the normal history with Show all runs. [#169023](https://github.com/openclaw/openclaw/pull/169023), thanks to [steipete](https://github.com/steipete).
  - Run-history search includes delivery error text ([#170958](https://github.com/openclaw/openclaw/pull/170958)). Thanks [@steipete](https://github.com/steipete).

  </details>

- Pause scheduled Team Reports without losing existing reports or the option to run one manually.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Team Reports can pause automatic scheduling without disabling manual reports or access to stored reports ([#171840](https://github.com/openclaw/openclaw/pull/171840)). Thanks [@vincentkoc](https://github.com/vincentkoc).

  </details>

- Undo a [Skill Workshop](/tools/skill-workshop#undo) review to restore the skills it edited and archive any new skills it created.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Review-wide undo restores edited skills and archives skills created by the review. Button-capable channels can offer Undo, and plain-text channels can use `/learn undo <id>`. [#167996](https://github.com/openclaw/openclaw/pull/167996). Thanks [@obviyus](https://github.com/obviyus).
  - Background reviews wait for ten model iterations, so feedback can take longer to appear. A foreground skill change resets the count. [#168679](https://github.com/openclaw/openclaw/pull/168679). Thanks [@obviyus](https://github.com/obviyus).
  - Change the default destination for background skill notices, with optional channel delivery and Undo. [#170025](https://github.com/openclaw/openclaw/pull/170025) by [obviyus](https://github.com/obviyus).
  - Guide background reviews toward focused, reusable procedures. [#170277](https://github.com/openclaw/openclaw/pull/170277) by [obviyus](https://github.com/obviyus).

  </details>

- Plugin authors can move affected storage, session and other SDK calls to [asynchronous replacements](/plugins/sdk-migration/sqlite-async). Migrate deprecated synchronous calls by December 31, 2026; some unsupported calls already reject synchronous use.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Async conversation route-owner preparation replaces deprecated synchronous hooks for plugin authors. [#169593](https://github.com/openclaw/openclaw/pull/169593), thanks [@steipete](https://github.com/steipete).
  - Legacy synchronous Mention Inbox recording queues work after commit, with `recordCommittedInputAsync` available when completion is needed. [#169594](https://github.com/openclaw/openclaw/pull/169594), thanks [@steipete](https://github.com/steipete).
  - Async alternatives cover session, approval routing, sandbox and harness reads while synchronous adapters remain deprecated. [#169622](https://github.com/openclaw/openclaw/pull/169622), thanks [@steipete](https://github.com/steipete).
  - Remove five never-stable synchronous SDK names and retain published compatibility APIs. The affected names are `withOpenClawAgentDatabaseRuntime`, `loadMemorySessionMetadataBatch`, `createAccountScopedBindingAdapter`, `prepareConversationRouteOwners`, and `captureSessionEntryCurrentCheck`. [#170034](https://github.com/openclaw/openclaw/pull/170034) by [steipete](https://github.com/steipete).
  - Update Plugin SDK and database worker migration guidance for awaited APIs. [#169879](https://github.com/openclaw/openclaw/pull/169879) by [steipete](https://github.com/steipete).
  - Restore the deprecated session header link helper for existing browser plugins. Current headers do not provide a link for it, so migrate to a custom accessory before its planned removal after January 12, 2027. [#169746](https://github.com/openclaw/openclaw/pull/169746) by [RomneyDa](https://github.com/RomneyDa).
  - Restore 29 private SDK exports used by existing community plugins while their authors migrate. [#173777](https://github.com/openclaw/openclaw/pull/173777). Thanks [@RomneyDa](https://github.com/RomneyDa), and [@FtlC-ian](https://github.com/FtlC-ian) for the report.
  - The keyed-state V2 store supports awaited operations and conditional atomic updates. Existing stored data needs no migration. [#168478](https://github.com/openclaw/openclaw/pull/168478). Thanks [@steipete](https://github.com/steipete).
  - The SQLite V2 store offers authority-bound commands, explicit preparation and operations that preserve absent storage. Memory Core adopts it for selected writes. [#168857](https://github.com/openclaw/openclaw/pull/168857). Thanks [@steipete](https://github.com/steipete).
  - Prepared session patches and authority-aware route updates give plugin authors guarded session mutations. Legacy paths remain supported until the next SDK major. [#168453](https://github.com/openclaw/openclaw/pull/168453). Thanks [@steipete](https://github.com/steipete).
  - Native harness integrations gain V2 binding lifecycle and asynchronous ownership hooks, with synchronous compatibility retained. [#168479](https://github.com/openclaw/openclaw/pull/168479). Thanks [@steipete](https://github.com/steipete).
  - Approval publication can be awaited while the synchronous publisher remains available for migration. [#168482](https://github.com/openclaw/openclaw/pull/168482). Thanks [@steipete](https://github.com/steipete).
  - V2 conversation-binding services and adapters provide awaited binding operations. Bundled Discord, Feishu, iMessage, Slack and Telegram paths adopt them. [#168483](https://github.com/openclaw/openclaw/pull/168483). Thanks [@steipete](https://github.com/steipete).
  - Plugins can prepare message-action descriptions asynchronously, including discovery for Matrix accounts with saved credentials. [#168484](https://github.com/openclaw/openclaw/pull/168484). Thanks [@steipete](https://github.com/steipete).
  - Approval and placement operations have migration paths for legacy synchronous placement methods and opaque approval callbacks. [#168855](https://github.com/openclaw/openclaw/pull/168855). Thanks [@steipete](https://github.com/steipete) and [@RomneyDa](https://github.com/RomneyDa) for the reused updater compatibility work.
  - Solid 2 views require the compiler and runtime and an explicit JSX import-source pragma. The X replies view uses the same plugin view contract. [#168408](https://github.com/openclaw/openclaw/pull/168408). Thanks [@steipete](https://github.com/steipete).
  - Plugin authoring, manifest and SDK migration guides use clearer language for existing behavior. [#168701](https://github.com/openclaw/openclaw/pull/168701), [issue #168322](https://github.com/openclaw/openclaw/issues/168322). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Set `fallbacksOverride` in `before_model_resolve` to replace a run's fallback chain. An empty list stops the run if its selected model fails, while omitting the override keeps configured fallbacks. [#168893](https://github.com/openclaw/openclaw/pull/168893), thanks [@steipete](https://github.com/steipete) and [@dwty11](https://github.com/dwty11) for the [report and clarification](https://github.com/openclaw/openclaw/issues/118946).
  - Malformed fallback overrides are treated as an empty list, preventing a malformed value from causing a crash or unintended fallback. [#169702](https://github.com/openclaw/openclaw/pull/169702), thanks [@Yigtwxx](https://github.com/Yigtwxx) and [@dwty11](https://github.com/dwty11) for the [report](https://github.com/openclaw/openclaw/issues/118946).
  - Use V2 GitHub publication request and personal-action capabilities and async lifecycle methods. Existing writer signatures and completion timing remain supported until the next SDK major. [#168954](https://github.com/openclaw/openclaw/pull/168954), thanks [@steipete](https://github.com/steipete).
  - Replace retired synchronous GitHub publication coordinator calls with async or V2 methods. Personal OAuth compatibility methods have a separate contract. [#169581](https://github.com/openclaw/openclaw/pull/169581), thanks [@steipete](https://github.com/steipete).
  - Move synchronous placement readers to their async equivalents. These readers were deprecated, and the placement changes below describe their later compatibility limits. [#169086](https://github.com/openclaw/openclaw/pull/169086), thanks [@steipete](https://github.com/steipete).
  - Await skill-command discovery for channel menus. The synchronous SDK list methods remain available during their deprecation period. [#169089](https://github.com/openclaw/openclaw/pull/169089), thanks [@steipete](https://github.com/steipete).
  - Use async credential preparation and provider-selection APIs. Released synchronous methods retain their behavior through the next SDK major. [#169111](https://github.com/openclaw/openclaw/pull/169111), thanks [@steipete](https://github.com/steipete).
  - Await session metadata, conversation, model-menu and speech-preference preparation. Synchronous SDK calls remain available with warnings. [#169122](https://github.com/openclaw/openclaw/pull/169122), thanks [@steipete](https://github.com/steipete).
  - Use `loadCombinedSessionStoreForGatewayAsync` for cross-session visibility. The synchronous loader remains available through the next SDK major. [#169523](https://github.com/openclaw/openclaw/pull/169523), thanks [@steipete](https://github.com/steipete).
  - Replace deprecated unbound native-session deletion callbacks with the documented factories. Session context consumers can finish with the snapshot they captured, even if the transcript changes afterward. [#169553](https://github.com/openclaw/openclaw/pull/169553), thanks [@steipete](https://github.com/steipete).
  - Await transcript reads, statistics, catalog titles and input completion. Legacy deletion callbacks now run after the session commit, and failed companion cleanup may need a safe retry. [#169566](https://github.com/openclaw/openclaw/pull/169566), thanks [@steipete](https://github.com/steipete).
  - Session input completion avoids a false failure after an unrelated write. Plugin authors can migrate recorder callbacks to `completeProcessingAsync`. [#169573](https://github.com/openclaw/openclaw/pull/169573), thanks [@steipete](https://github.com/steipete).
  - Move Memory session metadata reads to `loadMemorySessionMetadataAsync` or `loadMemorySessionMetadataBatchAsync`. The synchronous forms are deprecated until the next SDK major. [#169579](https://github.com/openclaw/openclaw/pull/169579), thanks [@steipete](https://github.com/steipete).
  - Use async state APIs for plugin hosts, including snapshot publication, cron path resolution, transcript search views and web-search provider lists. Before async preparation, the synchronous TTS path resolver uses explicit config or environment settings, or the default path. [#169580](https://github.com/openclaw/openclaw/pull/169580), thanks [@steipete](https://github.com/steipete).
  - Replace the synchronous session catalog title helper with `readSessionTranscriptCatalogTitleAsync`. [#169620](https://github.com/openclaw/openclaw/pull/169620), thanks [@steipete](https://github.com/steipete).
  - Await replacement placement and Mention Inbox methods. Synchronous placement `get` and `getMany` work only for prepared facts, and some other older methods throw or return unavailable. Legacy Mention Inbox recording is queued, so use `recordCommittedInputAsync` when the caller must wait for completion. [#169626](https://github.com/openclaw/openclaw/pull/169626), thanks [@steipete](https://github.com/steipete).
  - Retained synchronous storage adapters can now emit migration warnings while Board and plugin metadata reads use async APIs. [#169631](https://github.com/openclaw/openclaw/pull/169631), thanks [@steipete](https://github.com/steipete).
  - Await single or batched transcript statistics and use `onPreparedAgentRunStart` for prepared run-start callbacks. Applicable synchronous APIs remain during the current major. [#169637](https://github.com/openclaw/openclaw/pull/169637), thanks [@steipete](https://github.com/steipete).
  - Move deprecated synchronous config, auth, model registry, ACP, session-link and Reef hooks to their async replacements. Legacy calls remain supported during the deprecation period and may warn. [#169714](https://github.com/openclaw/openclaw/pull/169714), thanks [@steipete](https://github.com/steipete).
  - Add `forkSession` for questions against prepared session context, subject to session access, supported providers, and retained context. [#170146](https://github.com/openclaw/openclaw/pull/170146) by [obviyus](https://github.com/obviyus).
  - Allow authorized plugins to steer supported active runs with hidden, attributed guidance and an explicit next-turn fallback. [#170152](https://github.com/openclaw/openclaw/pull/170152) by [obviyus](https://github.com/obviyus).
  - Deprecation notices name the replacement for a plugin API you use. [#171752](https://github.com/openclaw/openclaw/pull/171752), thanks to [@steipete](https://github.com/steipete).
  - Adds awaited helpers for historical transcript-key lookup and TTS prompt preparation, with prepared preferences available for supported synchronous TTS calls. [#171443](https://github.com/openclaw/openclaw/pull/171443), thanks to [@steipete](https://github.com/steipete).
  - Lets admitted agent hooks and Gateway services share plugin-owned data for the same run. [#171307](https://github.com/openclaw/openclaw/pull/171307), thanks to [@obviyus](https://github.com/obviyus).
  - Lets plugin authors filter agent-event subscriptions by phase before unwanted events are copied. [#171534](https://github.com/openclaw/openclaw/pull/171534), thanks to [@obviyus](https://github.com/obviyus).
  - Adds an opt-in metadata-only event payload for short top-level scalar values. Full payloads remain the default. [#171610](https://github.com/openclaw/openclaw/pull/171610), thanks to [@obviyus](https://github.com/obviyus).
  - Aligns bundled plugins with current host APIs. Installing newer bundled plugins separately on older hosts is unsupported, and FaceTime declares a minimum host version of 2026.10.3. [#171633](https://github.com/openclaw/openclaw/pull/171633), thanks to [@steipete](https://github.com/steipete).
  - Registered plugin callbacks again receive `resolvePath` and `inlineView`, including when verifying ONNX models in an explicit directory. [#184110](https://github.com/openclaw/openclaw/pull/184110), thanks to [Leon-SK668](https://github.com/Leon-SK668).
  - Independently validate affected plugin settings when schema validation runs without acceleration. [#182514](https://github.com/openclaw/openclaw/pull/182514), thanks to [steipete](https://github.com/steipete).
  - Reject oversized bounded arrays and sets before element traversal in the patched Zod 3 consumer, including A2UI catalog schemas. Invalid-input diagnostics and refinements can differ. [#187304](https://github.com/openclaw/openclaw/pull/187304), thanks to [RomneyDa](https://github.com/RomneyDa).
  - Reduce allocation and CPU work for adjacent transforms on plugin-backed model streams. [#185083](https://github.com/openclaw/openclaw/pull/185083), thanks to [steipete](https://github.com/steipete).
  - Document five async plugin SDK replacements and their narrow import paths while retaining existing synchronous contracts. [Commit 8fc31c9](https://github.com/openclaw/openclaw/commit/8fc31c91811524b3bae3091a3861b5febd160151).
  - [A direct commit improves conversation lookup, Gateway shutdown, plugin run context and skill discovery, alongside reusable custom snooze times](https://github.com/openclaw/openclaw/commit/993c748b53ca3cd781167886061aa879d576a87b).
  - Retired synchronous GitHub publication methods now name their awaited or V2 replacement before rejecting calls in [#169750](https://github.com/openclaw/openclaw/pull/169750). Thanks [@steipete](https://github.com/steipete).

  - Plugin authors have until December 31, 2026, to migrate deprecated synchronous SDK calls; this change does not remove those calls. [#171775](https://github.com/openclaw/openclaw/pull/171775), thanks to [@steipete](https://github.com/steipete).
  - Asynchronous execution-approval readers and synchronous API migration guidance for plugin developers in [#169584](https://github.com/openclaw/openclaw/pull/169584). Thanks [@steipete](https://github.com/steipete).

  </details>

- See available ClawRouter pool capacity and which models you can use in supported Control UI deployments, without sending the API key to your browser.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - View pool headroom and model eligibility in the Control UI. The configured API key stays on the Gateway. [#169514](https://github.com/openclaw/openclaw/pull/169514), thanks [@steipete](https://github.com/steipete).
  - Use the model-request credential for the ClawRouter pool dashboard. [#170041](https://github.com/openclaw/openclaw/pull/170041) by [steipete](https://github.com/steipete).

  </details>

- Companion clients can find and preview official ClawHub packages, with verification of the exact package they receive.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Supplies official ClawHub catalog discovery, package previews and exact-artifact verification for companion Gateway clients. [#171622](https://github.com/openclaw/openclaw/pull/171622), thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).

  </details>

- Claw authors can add lowercase categories to a manifest without losing them when it is saved.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Accepts and preserves optional lowercase categories in Claw manifests. [#171532](https://github.com/openclaw/openclaw/pull/171532), thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).

  </details>

## Bug fixes

### Conversations and interface

- Switching agents or filtering conversations now shows matches for the selected agent and owner, not results left over from the previous view.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep the selected owner's known name visible when a session filter has no results. [#169166](https://github.com/openclaw/openclaw/pull/169166) Thanks [@steipete](https://github.com/steipete).
  - Filtered sidebar sessions refresh when you switch agents without showing results from the previous agent. [#169774](https://github.com/openclaw/openclaw/pull/169774), thanks [@vincentkoc](https://github.com/vincentkoc).
  - Show your personal conversations across configured agents ([#170072](https://github.com/openclaw/openclaw/pull/170072)). Thanks to [@steipete](https://github.com/steipete).
  - Correct Involving me and named-owner filters for catalog sessions ([#170865](https://github.com/openclaw/openclaw/pull/170865)). Thanks [@vincentkoc](https://github.com/vincentkoc) for the report and contribution.
  - Keep participation and owner information available in large conversation lists ([#171138](https://github.com/openclaw/openclaw/pull/171138)). Thanks [@steipete](https://github.com/steipete).
  - Show matching sessions in saved-filter sidebars while custom group details load. Group names and order update afterward. [#171671](https://github.com/openclaw/openclaw/pull/171671), thanks to [steipete](https://github.com/steipete).
  - Find conversations involving you under the corresponding filter ([commit](https://github.com/openclaw/openclaw/commit/4a2f4fd98edd156713f24b07683b24662cdf0698)), thanks to [@steipete](https://github.com/steipete) and [@RomneyDa](https://github.com/RomneyDa).

  </details>

- Reconnecting or refreshing the conversation sidebar no longer repeatedly drops the selected chat or briefly replaces its list with empty rows. Archived conversation dashboards also stay out of Pages.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Restore saved Sessions and Pages views, pinned destinations and identity while reconnecting, including for large session lists. [#169326](https://github.com/openclaw/openclaw/pull/169326) Thanks [@steipete](https://github.com/steipete).
  - The selected conversation loads before background refreshes of off-page pinned sessions. [#170047](https://github.com/openclaw/openclaw/pull/170047), thanks [@steipete](https://github.com/steipete).
  - Keep group names and default selections current after overlapping refreshes ([#170074](https://github.com/openclaw/openclaw/pull/170074)). Thanks to [@steipete](https://github.com/steipete).
  - Load the sidebar conversation list with smaller responses ([#170082](https://github.com/openclaw/openclaw/pull/170082)). Thanks to [@steipete](https://github.com/steipete).
  - Keep the newly chosen conversation selected after a delayed action from the previous one ([#170260](https://github.com/openclaw/openclaw/pull/170260)). Thanks to [@steipete](https://github.com/steipete).
  - Cached sidebar rosters appear with the dashboard shell, widget shimmer is removed, and filter controls retain chosen focus ([#170358](https://github.com/openclaw/openclaw/pull/170358)). Thanks to [@steipete](https://github.com/steipete).
  - Refresh conversation lists without repeatedly fetching unchanged information ([#170987](https://github.com/openclaw/openclaw/pull/170987), related [#165150](https://github.com/openclaw/openclaw/pull/165150), [#166591](https://github.com/openclaw/openclaw/pull/166591), and [#170082](https://github.com/openclaw/openclaw/pull/170082)). Thanks [@steipete](https://github.com/steipete).
  - Skip unused swarm detail work in sidebar and dashboard session lists ([#171104](https://github.com/openclaw/openclaw/pull/171104)). Thanks [@steipete](https://github.com/steipete).
  - Reuse unchanged sidebar rows while refreshing counts and filters ([#171220](https://github.com/openclaw/openclaw/pull/171220)). Thanks [@steipete](https://github.com/steipete).
  - Keep session lists available during native ownership changes or pending row updates. A persistently changing row can temporarily show configured model information until a later refresh ([#171300](https://github.com/openclaw/openclaw/pull/171300)). Thanks [@steipete](https://github.com/steipete).
  - Session lists reuse selections during unrelated activity while keeping visible row information current. [#171418](https://github.com/openclaw/openclaw/pull/171418) Thanks to [@steipete](https://github.com/steipete).
  - Routine session updates need fewer repeated full sidebar list reads. [#171595](https://github.com/openclaw/openclaw/pull/171595) Thanks to [@steipete](https://github.com/steipete).
  - Keep sidebar running indicators moving during session updates and catalog header spinners stable during unread updates. [#171689](https://github.com/openclaw/openclaw/pull/171689), thanks to [steipete](https://github.com/steipete); [#172303](https://github.com/openclaw/openclaw/pull/172303), thanks to [fuller-stack-dev](https://github.com/fuller-stack-dev).
  - Resolve titles for accessible session links outside the sidebar and show hover cards when card data is available. [#172558](https://github.com/openclaw/openclaw/pull/172558). Thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
  - Exclude archived session dashboards from Pages, including restored sidebar snapshots and additional pages of results. [#172460](https://github.com/openclaw/openclaw/pull/172460). Thanks to [@fuller-stack-dev](https://github.com/fuller-stack-dev) and [@vyctorbrzezowski](https://github.com/vyctorbrzezowski).
  - Stop repeated sidebar refreshes on personal Gateways with legacy participants and keep those conversations visible. [#172575](https://github.com/openclaw/openclaw/pull/172575). Thanks to [@fuller-stack-dev](https://github.com/fuller-stack-dev).
  - Avoid repeated category registration work when creating or assigning a session to an existing category. [#172523](https://github.com/openclaw/openclaw/pull/172523). Thanks to [@steipete](https://github.com/steipete).
  - Avoid traversing the agent roster again during session catalog delivery. [#172612](https://github.com/openclaw/openclaw/pull/172612). Thanks to [@steipete](https://github.com/steipete).
  - Keep the sidebar's conversation state aligned with Gateway lifecycle changes. [Merge](https://github.com/openclaw/openclaw/commit/b132a0a133bd9328f7bbcde6b66df6fcf30b4422)

  </details>

- [Conversation search](/concepts/session-search#control-ui-search) now finds names written in equivalent Unicode forms and phrases separated by punctuation. If searching transcripts takes too long, it suggests narrowing the search.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Match equivalent Unicode forms in the session catalog ([#184847](https://github.com/openclaw/openclaw/pull/184847)). Thanks [@Leon-SK668](https://github.com/Leon-SK668).
  - Clear the Sessions search with its button or Escape without resetting other filters. [#146954](https://github.com/openclaw/openclaw/pull/146954). Thanks [@vincentkoc](https://github.com/vincentkoc) and [@altaywtf](https://github.com/altaywtf).
  - Find matching conversations when search words are separated by standalone punctuation or non-indexed symbols. [#168117](https://github.com/openclaw/openclaw/pull/168117). Thanks [@yetval](https://github.com/yetval) and [@obviyus](https://github.com/obviyus).
  - Give transcript searches enough time to use their worker budget and suggest narrower searches after a timeout ([#171190](https://github.com/openclaw/openclaw/pull/171190)). Thanks [@steipete](https://github.com/steipete).
  - Match equivalent Unicode forms in session title search and command-palette ranking ([#184374](https://github.com/openclaw/openclaw/pull/184374)). Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@obviyus](https://github.com/obviyus).

  </details>

- File searches tell you when nothing matches instead of leaving a blank panel.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Show an empty-search message in filtered Files views instead of a blank panel. [#169114](https://github.com/openclaw/openclaw/pull/169114) Thanks [@steipete](https://github.com/steipete).

  </details>

- [Unsent drafts](/web/control-ui/offline-and-reconnect#warm-reload), attachments and follow-up messages stay with the chat you wrote them in when you navigate away or reconnect. If a send is still unconfirmed, check the chat history before sending it again.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Change saved model and reasoning preferences during a reply for unstarted queued work. The picker shows the saved preference, and explicit per-message reasoning choices take precedence. [#160440](https://github.com/openclaw/openclaw/pull/160440), [#160428](https://github.com/openclaw/openclaw/issues/160428). Thanks [@hxy91819](https://github.com/hxy91819) and [@steipete](https://github.com/steipete).
  - Type, attach files, and queue follow-ups while a new chat starts. They follow the initial prompt in order, and failed creation keeps the input for retry. [#165091](https://github.com/openclaw/openclaw/pull/165091). Thanks [@steipete](https://github.com/steipete).
  - In a connected Control UI chat, typing `/stop` cancels work and clears queued follow-ups in the selected non-global session. The Stop button and offline typed stops remain specific to the active run. [#167860](https://github.com/openclaw/openclaw/pull/167860), [#167859](https://github.com/openclaw/openclaw/issues/167859). Thanks [@masatohoshino](https://github.com/masatohoshino) and [@steipete](https://github.com/steipete).
  - Keep files attached to `/steer` and `/redirect` messages, including for retry after a rejected submission. [#165105](https://github.com/openclaw/openclaw/pull/165105), [#165104](https://github.com/openclaw/openclaw/issues/165104). Thanks [@ooiuuii](https://github.com/ooiuuii) and [@obviyus](https://github.com/obviyus).
  - Confirmed queued messages clear a false delivery warning while uncertain messages continue to warn. [PR #168284](https://github.com/openclaw/openclaw/pull/168284). Thanks to [@steipete](https://github.com/steipete).
  - Large WebChat images are staged so workspace file tools can open them, including in sandboxes. [PR #168537](https://github.com/openclaw/openclaw/pull/168537), [issue #103198](https://github.com/openclaw/openclaw/issues/103198). Thanks to [@synthalorian](https://github.com/synthalorian), [@obviyus](https://github.com/obviyus) and reporter [@woohahahaaa](https://github.com/woohahahaaa).
  - Messages with surrounding whitespace use the same normalized text on first inference and later replay. [PR #168725](https://github.com/openclaw/openclaw/pull/168725). Thanks to [@steipete](https://github.com/steipete).
  - Chat preparation reuses fresh session facts to reduce repeated database and worker reads. [PR #168316](https://github.com/openclaw/openclaw/pull/168316). Thanks to [@steipete](https://github.com/steipete).
  - Avoid false media errors and duplicate file cards when a WebChat attachment was already committed. Previously cached duplicates are not rewritten. [#169093](https://github.com/openclaw/openclaw/pull/169093) Thanks [@steipete](https://github.com/steipete).
  - Prevent duplicate history entries for prompts with inline directives. Existing duplicate transcripts are not rewritten. The related [issue #168843](https://github.com/openclaw/openclaw/issues/168843) covers a separate problem. [#169434](https://github.com/openclaw/openclaw/pull/169434) Thanks [@obviyus](https://github.com/obviyus).
  - Retain prepared model catalogs and pending Settings edits during preference changes. RPC clients without editable drafts can request a compact configuration patch acknowledgement. [#169253](https://github.com/openclaw/openclaw/pull/169253) Thanks [@steipete](https://github.com/steipete).
  - Show an error after repeated preference-save conflicts while retaining the edit for a later retry or reconnect. [#169367](https://github.com/openclaw/openclaw/pull/169367) Thanks [@steipete](https://github.com/steipete).
  - Keep dictated text and a chat being created with the draft you actually started, even while the browser connection opens. [#169692](https://github.com/openclaw/openclaw/pull/169692), thanks [@steipete](https://github.com/steipete).
  - An accepted message without a confirmation ID reports unknown on the first response and replay without sending again. [#169650](https://github.com/openclaw/openclaw/pull/169650), thanks [@steipete](https://github.com/steipete).
  - Offline queued messages retain individual reconnect badges without a duplicate count band ([#170352](https://github.com/openclaw/openclaw/pull/170352)). Thanks to [@steipete](https://github.com/steipete).
  - Accepted chat input and its interaction time are saved together before acknowledgment ([#170250](https://github.com/openclaw/openclaw/pull/170250)). Thanks to [@steipete](https://github.com/steipete).
  - Avoid making a ready conversation wait behind unrelated saved-chat work before accepting a message ([#170342](https://github.com/openclaw/openclaw/pull/170342)). Thanks to [@steipete](https://github.com/steipete).
  - Confirm eligible messages sent to idle chats once the input is saved ([#170376](https://github.com/openclaw/openclaw/pull/170376)). Thanks to [@steipete](https://github.com/steipete).
  - Keep an original request above a later steering message while a new conversation is being set up. [#170723](https://github.com/openclaw/openclaw/pull/170723) Thanks [@steipete](https://github.com/steipete).
  - Acknowledge chat sends sooner when unrelated database writes are in progress ([#170816](https://github.com/openclaw/openclaw/pull/170816)). Thanks [@steipete](https://github.com/steipete).
  - Reject edited retries using the same request key for newly fingerprinted messages, including after in-memory state is lost ([#171174](https://github.com/openclaw/openclaw/pull/171174), [reported issue](https://github.com/openclaw/openclaw/issues/171173)). Older records and records created without an available device identity retain the earlier comparison. If the identity changes and a retry conflicts, check the conversation history before sending with a new key. Thanks [@SeanLiu326](https://github.com/SeanLiu326) and [@steipete](https://github.com/steipete).
  - Warm conversations reuse session information to reduce database work. [#171337](https://github.com/openclaw/openclaw/pull/171337) Thanks to [@steipete](https://github.com/steipete).
  - Show current queue labels after reconnecting while an earlier unconfirmed send remains paused for review. [#171866](https://github.com/openclaw/openclaw/pull/171866), thanks to [steipete](https://github.com/steipete).
  - Remove an empty second composer after an interrupted session start while keeping any actual follow-up draft. [#172318](https://github.com/openclaw/openclaw/pull/172318), thanks to [vincentkoc](https://github.com/vincentkoc).
  - Refresh applicable filtered sidebars promptly after session creation and clear accepted prompts and attachments from the draft. Failed creation and newer unsent drafts remain available. [#171768](https://github.com/openclaw/openclaw/pull/171768), thanks to [vincentkoc](https://github.com/vincentkoc) for reporting and directing the fix.
  - Keep a prompt sent immediately after stopping a preparing turn in the queue so it can run after the stopped turn settles. Recovering a queued reply also keeps its chat identity. [#172685](https://github.com/openclaw/openclaw/pull/172685), fixing [#172658](https://github.com/openclaw/openclaw/issues/172658). Thanks to [@shakkernerd](https://github.com/shakkernerd) for the report and fix.
  - Avoid false storage warnings, unwanted retries and restored drafts after a queued message has already been retired ([#186171](https://github.com/openclaw/openclaw/pull/186171)). Thanks [@syxscott](https://github.com/syxscott) and [@obviyus](https://github.com/obviyus).
  - Close stale command and skill menus after a submitted draft clears, while keeping menus for retained or newer drafts ([#184869](https://github.com/openclaw/openclaw/pull/184869)). Thanks [@shakkernerd](https://github.com/shakkernerd).
  - Restored pasted-text chips, attachment previews and capability-menu interactions in the composer. [Commit](https://github.com/openclaw/openclaw/commit/0c8464cf802c2f7ca62f2bc0def9303f98d0dde1)
  - Settled accepted terminal-state writes before releasing canceled turns. [Commit](https://github.com/openclaw/openclaw/commit/04cb1cbfab59e5dda6db7ee56ab0ab1be4500f75)
  - Loaded persisted transcript state when an append needs a retry and the session has no in-memory snapshot. [Commit](https://github.com/openclaw/openclaw/commit/e65bd3be4134f1453bb4ab26e68704c678086b58)
  - Report slow chat sends while avoiding unnecessary work when no standing intent matches. [Merge](https://github.com/openclaw/openclaw/commit/210340a16a91aa77b4b1cb61a4d8a18a80ae6ba9)
  - Restore queued follow-ups after an eligible interruption ([commit](https://github.com/openclaw/openclaw/commit/333b2e303bee777b8882f9139e32629953ee79d1)), thanks to [@steipete](https://github.com/steipete) and [@RomneyDa](https://github.com/RomneyDa).

  </details>

- Fixes affected chats showing the same reply twice, losing the end of a streamed answer or displaying messages in the wrong order after recovery.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Deliver eligible background completions to their original WebChat conversation without an external messaging target. [#158067](https://github.com/openclaw/openclaw/pull/158067), [#147387](https://github.com/openclaw/openclaw/issues/147387). Thanks [@vincentkoc](https://github.com/vincentkoc) and reporter [@oywino](https://github.com/oywino).
  - Avoid a false WebChat error when a Claude CLI turn has already delivered its final answer through the message tool. [#167736](https://github.com/openclaw/openclaw/pull/167736), [#167709](https://github.com/openclaw/openclaw/issues/167709); related separate report [#169614](https://github.com/openclaw/openclaw/issues/169614). Thanks [@Oldrich333](https://github.com/Oldrich333) and [@obviyus](https://github.com/obviyus).
  - Hide recognized serialized tool-call markup from streamed and final replies while keeping surrounding text and literal code examples. [#138204](https://github.com/openclaw/openclaw/pull/138204), [#138198](https://github.com/openclaw/openclaw/issues/138198), [#153594](https://github.com/openclaw/openclaw/issues/153594). Thanks [@ericcaiwx-star](https://github.com/ericcaiwx-star), [@ruiling-smartbear](https://github.com/ruiling-smartbear), and [@steipete](https://github.com/steipete).
  - Keep an authorized channel message in history when required preflight compaction fails, so a later turn can see it. The compaction error still appears. [#160462](https://github.com/openclaw/openclaw/pull/160462), [#86592](https://github.com/openclaw/openclaw/issues/86592). Thanks [@masatohoshino](https://github.com/masatohoshino), [@obviyus](https://github.com/obviyus), and reporter [@aacodex401](https://github.com/aacodex401).
  - Retain the original message or tool result when a plugin returns a non-message replacement and normal plugin error handling applies. Configured fail-closed handling still applies. [#161098](https://github.com/openclaw/openclaw/pull/161098), [#160641](https://github.com/openclaw/openclaw/issues/160641). Thanks [@xydigitLybnnnn](https://github.com/xydigitLybnnnn), [@obviyus](https://github.com/obviyus), and reporter [@aniruddhaadak80](https://github.com/aniruddhaadak80).
  - Let implicit group thread follow-ups remain silent when group silence is allowed, without a misleading missing-response retry. Explicit mentions and commands still require replies. [#164877](https://github.com/openclaw/openclaw/pull/164877), [#141556](https://github.com/openclaw/openclaw/issues/141556); related separate report [#160750](https://github.com/openclaw/openclaw/issues/160750). Thanks [@shannon0430](https://github.com/shannon0430), [@obviyus](https://github.com/obviyus), and [@zabealbe](https://github.com/zabealbe).
  - Live replies and saved history stay in chronological order around worker updates. [PR #168250](https://github.com/openclaw/openclaw/pull/168250). Thanks to [@steipete](https://github.com/steipete).
  - A remaining chat observer continues receiving updates and narration after another observer unsubscribes. [#169693](https://github.com/openclaw/openclaw/pull/169693), thanks [@steipete](https://github.com/steipete).
  - Newly committed message previews appear promptly in resident session lists ([#170105](https://github.com/openclaw/openclaw/pull/170105)). Thanks to [@steipete](https://github.com/steipete).
  - Keep conversation branches available when saved history is reconciled ([#170079](https://github.com/openclaw/openclaw/pull/170079)). Thanks to [@steipete](https://github.com/steipete).
  - Restore eligible chats after restart even if another conversation had steered them ([#170252](https://github.com/openclaw/openclaw/pull/170252)). Thanks to [@steipete](https://github.com/steipete) for the request and co-authorship.
  - Preserve a main-session recovery claim when a follow-up arrives after interrupted work, so the earlier request can resume first. [#170647](https://github.com/openclaw/openclaw/pull/170647) Thanks [@steipete](https://github.com/steipete).
  - Load earlier messages when the recent history page contains only hidden activity. [#170731](https://github.com/openclaw/openclaw/pull/170731) Thanks [@steipete](https://github.com/steipete) for reporting the issue.
  - Focus the folder path and keep the save action reachable on short screens in group defaults. [#170566](https://github.com/openclaw/openclaw/pull/170566) Thanks [@steipete](https://github.com/steipete).
  - Keep new and previously saved failure notices out of later model requests ([#171327](https://github.com/openclaw/openclaw/pull/171327)). Thanks [@steipete](https://github.com/steipete).
  - Observe late worker errors after cancellation and limit the raw size of default history pages. Oversized pages ask for a smaller limit, while an oversized message returns an error ([#170898](https://github.com/openclaw/openclaw/pull/170898)). Thanks [@steipete](https://github.com/steipete).
  - Show a saved completed reply when its message event was missed. [#171766](https://github.com/openclaw/openclaw/pull/171766), thanks to [vincentkoc](https://github.com/vincentkoc) for reporting and co-authoring the fix.
  - Keep images with their headings in live web chat and reloaded history. [#172438](https://github.com/openclaw/openclaw/pull/172438). Thanks to [@steipete](https://github.com/steipete) for raising the problem.
  - Hide stray reply actions on pre-tool progress messages while retaining actions for eligible answers. [#172620](https://github.com/openclaw/openclaw/pull/172620). Thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
  - Include confirmed delivered final replies when session history rebuilds a conversation, addressing one cause of repeated Telegram responses. [#179399](https://github.com/openclaw/openclaw/pull/179399), related to [#166482](https://github.com/openclaw/openclaw/issues/166482). Thanks to [@sobolevbel](https://github.com/sobolevbel), [@gkoch02](https://github.com/gkoch02), and [@steipete](https://github.com/steipete).
  - Keep side-question replies when different questions have the same answer and suppress a complete reply already sent by a messaging tool. [#174869](https://github.com/openclaw/openclaw/pull/174869). Thanks to [@steipete](https://github.com/steipete).
  - Keep CLI-backed group conversation context across room events and mentions when automatic replies are enabled. Visible room-event output still requires an explicit message-tool send ([#182273](https://github.com/openclaw/openclaw/pull/182273), [report](https://github.com/openclaw/openclaw/issues/182177)). Thanks [@xiaopan-xydt](https://github.com/xiaopan-xydt), [@goslingmanagment](https://github.com/goslingmanagment) and [@steipete](https://github.com/steipete).
  - Fix unbinding and activity updates for conversation IDs containing the binding separator without changing a separate prefix binding ([#184317](https://github.com/openclaw/openclaw/pull/184317)). Thanks [@steipete](https://github.com/steipete).
  - Prevent a stray separator at the start of a reply after an empty native thinking-block segment ([commit 9931e6e](https://github.com/openclaw/openclaw/commit/9931e6efb02e24b2541194f14b72a0354e838cfb)).
  - Preserved history paging, retry controls, parked content state and focus across chat updates. [Commit](https://github.com/openclaw/openclaw/commit/84fb3196ed56a5a74e389563b287770e041909db)
  - Prevented an empty linked-session preview from freezing navigation in web and native conversation views. [Commit](https://github.com/openclaw/openclaw/commit/0407fd597c0d8f7e1905c3a78a6e2260fdde14ea) Thanks [@VACInc](https://github.com/VACInc).
  - Removed managed media directives from assistant session previews while preserving literal and user-authored text and fallback-model attribution. Media-only replies have no text preview. [Commit](https://github.com/openclaw/openclaw/commit/47ba0ae081320861c3c032c3a57f2a24489e5588)
  - Preserved provider-signed blank assistant items when replaying OpenAI Responses conversations. [Commit](https://github.com/openclaw/openclaw/commit/9fd613fe813b83e9a5627bc7327707e1823554d3) Thanks [@steipete](https://github.com/steipete).
  - Eligible built-in agent runs can continue unfinished tool work after an empty output-limit response. [PR #153728](https://github.com/openclaw/openclaw/pull/153728), [issue #144842](https://github.com/openclaw/openclaw/issues/144842). Thanks to [zhangguiping-xydt](https://github.com/zhangguiping-xydt) and [steipete](https://github.com/steipete).
  - Keep stable partial answers and recognize configured native API keys with the managed native CLI update. [#181823](https://github.com/openclaw/openclaw/pull/181823). The release wording is clarified in [#188157](https://github.com/openclaw/openclaw/pull/188157). Thanks [@joshavant](https://github.com/joshavant), [@RomneyDa](https://github.com/RomneyDa).
  - Recover a missing ending in a started Codex stream when the completed answer extends the text already received. [#168400](https://github.com/openclaw/openclaw/pull/168400). Thanks to [@RomneyDa](https://github.com/RomneyDa).
  - Restore dispatch for bound ACP conversations and preserve accumulated Telegram preview text when a separate final status arrives ([#168989](https://github.com/openclaw/openclaw/pull/168989)). Thanks [@steipete](https://github.com/steipete).
  - Preserve live answer text across tools and reasoning, including ACP streams, while keeping deliberately empty final replies empty ([#169020](https://github.com/openclaw/openclaw/pull/169020)). Thanks [@steipete](https://github.com/steipete), [@laulopezreal](https://github.com/laulopezreal), and [@Yigtwxx](https://github.com/Yigtwxx).
  - Prevent covered split tool-call markers from exposing raw call text in streamed replies ([#169172](https://github.com/openclaw/openclaw/pull/169172)). Thanks [@JasonBuildAI](https://github.com/JasonBuildAI) and [@steipete](https://github.com/steipete).
  - Keep a Stop-hook-rejected draft out of the final reply even when a tool call precedes the rewrite, including when the rewrite is `NO_REPLY` ([#168764](https://github.com/openclaw/openclaw/pull/168764)). Thanks [@ruel225](https://github.com/ruel225), [@steipete](https://github.com/steipete), and [@Oliver4Spot](https://github.com/Oliver4Spot).
  - Complete Responses reasoning turns that use asynchronous tools instead of failing after the tool runs. [#171431](https://github.com/openclaw/openclaw/pull/171431), thanks to [hannesrudolph](https://github.com/hannesrudolph) for the fix and [obviyus](https://github.com/obviyus) for the merge. See the [reported issue](https://github.com/openclaw/openclaw/issues/171401).
  - Keep Responses tool-call and result identifiers stable across later turns and transcript reloads. [#171614](https://github.com/openclaw/openclaw/pull/171614), thanks to [steipete](https://github.com/steipete).
  - Reduce repeated parsing delays in long streamed replies that quote tool-call XML in a code block. [#171573](https://github.com/openclaw/openclaw/pull/171573), thanks to [steipete](https://github.com/steipete) and [boeingchoco](https://github.com/boeingchoco) for [reporting the issue](https://github.com/openclaw/openclaw/issues/171363).
  - Reduced unnecessary tool-call parsing for streamed Markdown links and code. [#172398](https://github.com/openclaw/openclaw/pull/172398). Thanks [@steipete](https://github.com/steipete).
  - Reduced repeated sanitization scans for bracket-led citation replies. [#172470](https://github.com/openclaw/openclaw/pull/172470), addressing [#172340](https://github.com/openclaw/openclaw/issues/172340) and related to [#171416](https://github.com/openclaw/openclaw/issues/171416) and [#119478](https://github.com/openclaw/openclaw/issues/119478). Thanks [@JasonBuildAI](https://github.com/JasonBuildAI) and [@steipete](https://github.com/steipete).
  - Use OpenClaw-owned tools for Codex one-shot `agent exec` runs and retain completed answers and payloads if later cleanup fails. Cleanup failure still returns a failure exit code. [#173516](https://github.com/openclaw/openclaw/pull/173516) Thanks to [@RomneyDa](https://github.com/RomneyDa) and [@Compassboot](https://github.com/Compassboot) for the [report](https://github.com/openclaw/openclaw/issues/161576).
  - Keep long Codex node exec-server exit diagnostics readable when truncation falls inside a UTF-8 character. [#183932](https://github.com/openclaw/openclaw/pull/183932) Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@obviyus](https://github.com/obviyus).
  - Confirmed final messages and explicitly final reactions to the current conversation can complete the turn. [#170653](https://github.com/openclaw/openclaw/pull/170653), thanks to [@steipete](https://github.com/steipete) and [@sunlit-deng](https://github.com/sunlit-deng).
  - A final reply already delivered to the current conversation remains complete through provider retries. [#170675](https://github.com/openclaw/openclaw/pull/170675), thanks to [@obviyus](https://github.com/obviyus) for the report and [@Kimiyu-186](https://github.com/Kimiyu-186) and [@steipete](https://github.com/steipete).
  - A saved final CLI reply stays successful when subsequent settlement fails. [#170757](https://github.com/openclaw/openclaw/pull/170757), thanks to [@steipete](https://github.com/steipete) and [@elikampf](https://github.com/elikampf) for the [report](https://github.com/openclaw/openclaw/issues/169804).
  - Codex receives the current group-chat speaker's stable identity beside their request. [#170709](https://github.com/openclaw/openclaw/pull/170709), thanks to [@sunlit-deng](https://github.com/sunlit-deng), [@steipete](https://github.com/steipete) and [@oEdyb](https://github.com/oEdyb) for the [report](https://github.com/openclaw/openclaw/issues/170159).
  - Stop can cancel the intended run while participant display information updates. [#170652](https://github.com/openclaw/openclaw/pull/170652), thanks to [@steipete](https://github.com/steipete).
  - Follow-up messages avoid being steered into a closed reply, and memory maintenance uses the active run's context budget. [#170635](https://github.com/openclaw/openclaw/pull/170635), thanks to [@RomneyDa](https://github.com/RomneyDa).

  </details>

- Reopening a chat after a disconnect or reload now brings back its available messages and reading position instead of showing an empty chat or another conversation. Save unsent work and reload tabs left open from the older interface to receive the update-recovery fix.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Reload an open tab onto the current build when an old asset is missing after an update. Doctor also removes the obsolete retained asset cache. [#168105](https://github.com/openclaw/openclaw/pull/168105), [#128055](https://github.com/openclaw/openclaw/issues/128055). Thanks [@steipete](https://github.com/steipete) and [@hannesrudolph](https://github.com/hannesrudolph).
  - Load native plugin assets together on authenticated reload and keep the app document available if the plugin catalog fails. [#168059](https://github.com/openclaw/openclaw/pull/168059). Thanks [@steipete](https://github.com/steipete).
  - Show cached conversations at the latest messages with saved timing and task progress while reconnecting. [#168154](https://github.com/openclaw/openclaw/pull/168154). Thanks [@steipete](https://github.com/steipete).
  - Previously visited chats restore saved sidebar rows and navigation while reconnecting. [PR #168206](https://github.com/openclaw/openclaw/pull/168206). Thanks to [@steipete](https://github.com/steipete).
  - Authorized conversation-link reloads can show the configured assistant identity before the connection completes. [PR #168265](https://github.com/openclaw/openclaw/pull/168265). Thanks to [@steipete](https://github.com/steipete).
  - A uniquely matched cached dashboard name link can show its saved layout and side transcript while connecting. Board content waits for authorization. [PR #168663](https://github.com/openclaw/openclaw/pull/168663). Thanks to [@steipete](https://github.com/steipete).
  - Conversation drafts survive route changes and reconnects, and Back history is corrected after default-agent initialization. [PR #168612](https://github.com/openclaw/openclaw/pull/168612). Thanks to [@steipete](https://github.com/steipete).
  - Cached conversations no longer briefly show the empty-chat welcome during the first connection. [PR #168185](https://github.com/openclaw/openclaw/pull/168185). Thanks to [@steipete](https://github.com/steipete).
  - Refresh after a server update returns to the same chat and preserves its link. [PR #168941](https://github.com/openclaw/openclaw/pull/168941). Thanks to [@steipete](https://github.com/steipete).
  - Standalone question pages offer Retry after a temporary refresh failure and restore the answer held on that page. Drafts are not persisted by this change. [PR #168984](https://github.com/openclaw/openclaw/pull/168984). Thanks to [@steipete](https://github.com/steipete).
  - Control UI startup defers optional automation and System busyness code until it is needed. [PR #168506](https://github.com/openclaw/openclaw/pull/168506). Thanks to [@steipete](https://github.com/steipete).
  - Reserve the measured height of previously viewed Canvas widgets and MCP Apps during cached chat reloads. Content and window changes can still resize them. [#169304](https://github.com/openclaw/openclaw/pull/169304) Thanks [@steipete](https://github.com/steipete).
  - Reveal an unvisited chat after its initial transcript position settles. [#169334](https://github.com/openclaw/openclaw/pull/169334) Thanks [@steipete](https://github.com/steipete).
  - Reopen the existing chat after automatic recovery reloads while preserving its draft and dashboard parameters. [#169194](https://github.com/openclaw/openclaw/pull/169194) Thanks [@steipete](https://github.com/steipete).
  - Cached transcripts and saved reading positions stay steadier while fresh history loads. [#170052](https://github.com/openclaw/openclaw/pull/170052), thanks [@steipete](https://github.com/steipete).
  - Load chat without waiting for unrelated workspace identity and Board code ([#170345](https://github.com/openclaw/openclaw/pull/170345)). Thanks to [@steipete](https://github.com/steipete).
  - Avoid an unnecessary refresh prompt after reconnecting to a Gateway on another origin ([#170090](https://github.com/openclaw/openclaw/pull/170090)). Thanks to [@steipete](https://github.com/steipete).
  - Show settled chat history sooner on reload while preserving the reading position. [#170662](https://github.com/openclaw/openclaw/pull/170662) Thanks [@steipete](https://github.com/steipete).
  - Keep session rows visible as the sidebar switches from cached to live data. [#170708](https://github.com/openclaw/openclaw/pull/170708) Thanks [@steipete](https://github.com/steipete).
  - Reduce repeated sidebar updates and load unopened menu items when first needed. [#170625](https://github.com/openclaw/openclaw/pull/170625) Thanks [@steipete](https://github.com/steipete).
  - Load closed Inbox and sidebar menu renderers on first use, reducing initial JavaScript downloads. First use can require a network connection. [#170648](https://github.com/openclaw/openclaw/pull/170648) Thanks [@steipete](https://github.com/steipete).
  - Apply saved appearance and sidebar preferences earlier on authenticated same-origin reloads. [#170649](https://github.com/openclaw/openclaw/pull/170649) Thanks [@steipete](https://github.com/steipete).
  - Load older chat history only when requested after a reload ([#171009](https://github.com/openclaw/openclaw/pull/171009), related [#170662](https://github.com/openclaw/openclaw/pull/170662), [#170731](https://github.com/openclaw/openclaw/pull/170731), and [#170789](https://github.com/openclaw/openclaw/pull/170789)). Thanks [@steipete](https://github.com/steipete).
  - Fix repeated reloads for authenticated users opening shared chat links after a deployment. If access changes during the handoff, the page asks the reader to reload or log in ([#171244](https://github.com/openclaw/openclaw/pull/171244)). Thanks [@steipete](https://github.com/steipete).
  - Keep open Control UI tabs connected when a busy Gateway delays application heartbeats. If application messages stall while the transport remains healthy, recovery waits for a transport close or tab activation ([#171253](https://github.com/openclaw/openclaw/pull/171253)). Thanks [@steipete](https://github.com/steipete).
  - Recover startup and view downloads after a temporary network failure, subject to reload safeguards. [#171825](https://github.com/openclaw/openclaw/pull/171825), thanks to [steipete](https://github.com/steipete).
  - Preserve an opening connection when a Control UI tab wakes and resume Logs from its previous position after reconnecting to the same Gateway. [#172864](https://github.com/openclaw/openclaw/pull/172864), related to [#172507](https://github.com/openclaw/openclaw/issues/172507). Thanks to [@steipete](https://github.com/steipete) and reporter [@najef1979-code](https://github.com/najef1979-code).
  - Preserve the saved sidebar when another tab has not yet resolved its profile, including the follow-up that keeps the existing cache scope ([#185762](https://github.com/openclaw/openclaw/pull/185762), [#187594](https://github.com/openclaw/openclaw/pull/187594)). Thanks [@steipete](https://github.com/steipete) and [@romneyda](https://github.com/romneyda).
  - Show a loading state for an uncached, disconnected chat deep link until its history or session identity is known ([commit 2bf00b8](https://github.com/openclaw/openclaw/commit/2bf00b83d30972963435ecef4e7baa30338b77d0)).
  - Load the saved sidebar without making the initial page download as large. [Commit](https://github.com/openclaw/openclaw/commit/4f4741bfe2b6b49e75af89107be87224b5fcfc9e)
  - Reduced asset requests for chat and new-session startup. [Commit](https://github.com/openclaw/openclaw/commit/926602532b623c60e281e35759dc8af33e77cbd7)
  - Refreshed profile appearance preferences after reconnecting with the same client. [Commit](https://github.com/openclaw/openclaw/commit/1f961c5f7fa988cd65c9f69e1c435c774cdcfbd6)
  - Reloaded logs from the start after a Gateway restart, retaining previous rows until the new read succeeds. [Commit](https://github.com/openclaw/openclaw/commit/0cc89c8e3a0f92e3851e7647f062f7f28bff9978)
  - Restored data connections needed by the board, dashboard and debug views. [Commit](https://github.com/openclaw/openclaw/commit/da8802bc54ef00ae19ac854cec98a507879c684c)

  </details>

- Stop now more reliably targets the turn you chose, without cancelling separate follow-up messages unless you use a control that explicitly clears them. If a stop is still settling, check its outcome before assuming the work ended.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep the conversation view following the right turn while Stop moves between active runs ([#170349](https://github.com/openclaw/openclaw/pull/170349)). Thanks to [@steipete](https://github.com/steipete).
  - Avoid a misleading Stop error when the requested turn finishes while cancellation is being prepared. [#170542](https://github.com/openclaw/openclaw/pull/170542) Thanks [@steipete](https://github.com/steipete).
  - Keep a slow sessions-tool Stop active and return `settling` while cancellation continues. The response does not mean cancellation has completed. [#176603](https://github.com/openclaw/openclaw/pull/176603), addressing the report in [#169077](https://github.com/openclaw/openclaw/issues/169077). Thanks to [@steipete](https://github.com/steipete) and reporter [@hannnnn-l](https://github.com/hannnnn-l).
  - Continue a stopped conversation after terminal recovery records are cleared, keeping its history intact ([#181866](https://github.com/openclaw/openclaw/pull/181866)). Thanks [@romneyda](https://github.com/romneyda).
  - Continue a killed conversation in the same session when an abandoned recovery record blocked new messages ([#181992](https://github.com/openclaw/openclaw/pull/181992), [report](https://github.com/openclaw/openclaw/issues/181952)). Thanks [@steipete](https://github.com/steipete) and [@najef1979-code](https://github.com/najef1979-code).
  - Stop selected native Codex descendants with their parent and preserve children that complete during Stop. [PR #169700](https://github.com/openclaw/openclaw/pull/169700). Thanks to [vincentkoc](https://github.com/vincentkoc).
  - Release a Codex parent chat after Stop when its selected child was already interrupted. [#171541](https://github.com/openclaw/openclaw/pull/171541), thanks to [RomneyDa](https://github.com/RomneyDa).
  - Keep a stopped Codex conversation ready for another message after reloading the web UI. [#171656](https://github.com/openclaw/openclaw/pull/171656), thanks to [steipete](https://github.com/steipete).
  - Preserve the replacement process when Stop interrupts the wait for a previous Codex process before the new thread is written. The next turn still waits for the previous process to exit. [#173580](https://github.com/openclaw/openclaw/pull/173580) Thanks to [@LLagoon3](https://github.com/LLagoon3), [@RomneyDa](https://github.com/RomneyDa) for validation, and [@jalehman](https://github.com/jalehman) for the [report](https://github.com/openclaw/openclaw/issues/167280).
  - Repeated cancellation callbacks preserve a confirmed subagent cancellation and its pending parent notice. [#176206](https://github.com/openclaw/openclaw/pull/176206) Thanks [@steipete](https://github.com/steipete).
  - Stop can interrupt the current run's owned Codex descendants after a parent thread is reused, without cancelling older or unrelated work. [#181475](https://github.com/openclaw/openclaw/pull/181475) Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Keep `/stop` bound to the work selected before authorization in [f28e5ba](https://github.com/openclaw/openclaw/commit/f28e5ba25b1ffc6e2980cbc65b5f714f4533718a).
  - Let Codex Stop settle during native client shutdown while replacement writers still wait for the old process to exit in [67a3798](https://github.com/openclaw/openclaw/commit/67a3798b5bf6579475075bcfccc4bf349bafa09b) and [1e1d5f1](https://github.com/openclaw/openclaw/commit/1e1d5f11672a4b634ace27096971d6f3a417fd4c).
  - Fix Stop during queued turns, keep configured reasoning choices available and continue following the chat after a scroll that moved nowhere in [fcb89a3](https://github.com/openclaw/openclaw/commit/fcb89a331a1f59eedde59c4b3a338febdb199cb7).
  - Identify AI service connection failures and remind users to check completed work before retrying ([#168247](https://github.com/openclaw/openclaw/pull/168247)). Thanks [@steipete](https://github.com/steipete).
  - Apply the first-event timeout to model requests that never return response headers. Cold loading before headers consumes that budget; adjust the provider timeout if needed using the [custom provider guide](/concepts/model-providers/custom-providers) ([#168282](https://github.com/openclaw/openclaw/pull/168282)). Thanks [@steipete](https://github.com/steipete) and [@Yigtwxx](https://github.com/Yigtwxx) for the investigation.
  - Cancel active OpenAI-compatible HTTP runs through session-wide Stop and return the known run ID ([#168080](https://github.com/openclaw/openclaw/pull/168080)). Thanks [@steipete](https://github.com/steipete).
  - Preserve partial Gemini responses at generation limits without executing incomplete function calls. The updated computer-control driver also includes upstream fixes for macOS application enumeration and cursor behavior and Windows installation ([#168103](https://github.com/openclaw/openclaw/pull/168103)). Thanks [@steipete](https://github.com/steipete).
  - Keep unfinished reasoning out of Chat Completions replies when a tool call is followed by a token limit or content filter ([#168294](https://github.com/openclaw/openclaw/pull/168294)). Thanks [@steipete](https://github.com/steipete).
  - Refresh agent names and avatars in open Control UI views after a Gateway identity-file save without losing the chat or draft. Direct filesystem edits still need a reload or reconnect ([#168170](https://github.com/openclaw/openclaw/pull/168170)). Thanks [@steipete](https://github.com/steipete).
  - Remove the duplicate waiting line when individual subagent activity is already visible in Control UI ([#168173](https://github.com/openclaw/openclaw/pull/168173)). Thanks [@steipete](https://github.com/steipete).
  - Prevent CLI migration provider discovery, preview and import from changing state while the running Gateway owns it. Gateway-owned memory imports continue to work. [#168419](https://github.com/openclaw/openclaw/pull/168419). Thanks to [@steipete](https://github.com/steipete).
  - Keep Codex plugin discovery during onboarding within its intended timeout when the system clock changes. [#168735](https://github.com/openclaw/openclaw/pull/168735). Thanks to [@SunnyShu0925](https://github.com/SunnyShu0925).
  - Session Stop covers authorized OpenAI-compatible HTTP runs admitted or queued before the runner starts. [Early HTTP run cancellation](https://github.com/openclaw/openclaw/pull/168359). Thanks [@steipete](https://github.com/steipete).
  - Cancelling a queued CLI-backed turn takes effect without waiting for the active turn to finish, and the cancelled turn does not run. [#169303](https://github.com/openclaw/openclaw/pull/169303), [prior investigation](https://github.com/openclaw/openclaw/pull/160804). Thanks [@steipete](https://github.com/steipete) and [@changeroa](https://github.com/changeroa).
  - Keep shared Control UI state in sync with the Gateway. If a subscription acknowledgement is lost, refresh or reconnect to update a stale view; a list changing while it loads can still skip or repeat entries. [#169375](https://github.com/openclaw/openclaw/pull/169375). Thanks [@steipete](https://github.com/steipete).
  - Report finalized abandoned session deliveries with their queue IDs and count them as failures in batch recovery. Check the conversation before retrying manually because the earlier attempt may already have had effects. [#169932](https://github.com/openclaw/openclaw/pull/169932), [issue #169807](https://github.com/openclaw/openclaw/issues/169807). Thanks [@huyengiang101086-spec](https://github.com/huyengiang101086-spec), [@steipete](https://github.com/steipete) and reporter [@Yolo521-bot](https://github.com/Yolo521-bot).
  - Give controllers a shorter polling hint after a managed deployment begins draining, so they can notice completed work sooner. [#169585](https://github.com/openclaw/openclaw/pull/169585). Thanks [@steipete](https://github.com/steipete).
  - A late deletion confirmation no longer closes or switches away from a selected replacement session in [#170056](https://github.com/openclaw/openclaw/pull/170056). Thanks [@steipete](https://github.com/steipete).
  - Offline chats show guidance when a cloud session's initial message remains unresolved, while follow-up messages can still queue. [#170515](https://github.com/openclaw/openclaw/pull/170515). Thanks to [steipete](https://github.com/steipete).
  - Clarify that follow-ups can be queued while the first message is unresolved, but wait for it to be resolved before delivery ([#170802](https://github.com/openclaw/openclaw/pull/170802)). Thanks [@steipete](https://github.com/steipete).
  - Valid request failures leave a healthy Gateway connection open. A successful hello is still needed for normal initialization. [#171303](https://github.com/openclaw/openclaw/pull/171303), thanks to [steipete](https://github.com/steipete).
  - Deliver the first `sessions_send` message to a newly created main session under the Always defaults ([7b125134](https://github.com/openclaw/openclaw/commit/7b125134f3860743c55696b3f273ed82abe535dc)).
  - Accept valid follow-up input when the preceding terminal write finishes before writer admission ([f8ea55fc](https://github.com/openclaw/openclaw/commit/f8ea55fcf7a8d35212c77e4b7116281b15253165)).
  - Preserve aborted results and stop reasons during session deletion and Stop, and wait for the canceled owner to settle ([6bb8525d](https://github.com/openclaw/openclaw/commit/6bb8525d548881f86d550f5476a4f804b77daed6)).

  </details>

- Fixes long chats freezing when you jump to a message, images failing to enlarge and split diffs misaligning related lines. Narrow screens also make more room for chat controls and titles.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Follow the writer’s caret and whitespace in a shared draft preview. [#168158](https://github.com/openclaw/openclaw/pull/168158). Thanks [@steipete](https://github.com/steipete).
  - Keep edited annotation comments open when the transcript scrolls, including after a resize. [#153379](https://github.com/openclaw/openclaw/pull/153379), [#153103](https://github.com/openclaw/openclaw/issues/153103). Thanks [@xydt-juyaohui](https://github.com/xydt-juyaohui), [@altaywtf](https://github.com/altaywtf), and [@vyctorbrzezowski](https://github.com/vyctorbrzezowski).
  - Allow Canvas widget videos to enter fullscreen and prevent clipped captions in chat and pinned dashboards, including saved widgets. [#168143](https://github.com/openclaw/openclaw/pull/168143). Thanks [@steipete](https://github.com/steipete).
  - Narrow subagent transcripts use space previously reserved for hidden avatars. [PR #168221](https://github.com/openclaw/openclaw/pull/168221). Thanks to [@steipete](https://github.com/steipete).
  - Canvas and inline app widget actions remain clickable beside Details in narrow chat panes. [PR #168328](https://github.com/openclaw/openclaw/pull/168328). Thanks to [@obviyus](https://github.com/obviyus).
  - Inline widgets retain playback and local state across same-account reconnect recovery and, in browsers supporting atomic moves, when the final reply appears. Safari still reloads the widget on final-reply transfer. [PR #168181](https://github.com/openclaw/openclaw/pull/168181). Thanks to [@steipete](https://github.com/steipete).
  - Avoid loading plugin views for ordinary tool output and retain selected plugin-view drafts across transcript hide and restore. [#169346](https://github.com/openclaw/openclaw/pull/169346) Thanks [@steipete](https://github.com/steipete).
  - Dismiss link previews when keyboard focus leaves, including after a preview mounts late. [#169073](https://github.com/openclaw/openclaw/pull/169073) Thanks [@steipete](https://github.com/steipete).
  - Load less overlay code initially, keep keyboard menu selections in view and preserve transcript following through programmatic scroll corrections. [#169128](https://github.com/openclaw/openclaw/pull/169128) Thanks [@steipete](https://github.com/steipete).
  - Bring back the Terminal side panel and make the Browser view respond to its activation control. [#169182](https://github.com/openclaw/openclaw/pull/169182) Thanks [@RomneyDa](https://github.com/RomneyDa).
  - YouTube playback continues when an unchanged chat transcript refreshes. [#169541](https://github.com/openclaw/openclaw/pull/169541), thanks [@steipete](https://github.com/steipete).
  - Show chosen colors on recent, pinned and imported conversation rows ([#170382](https://github.com/openclaw/openclaw/pull/170382), [request](https://github.com/openclaw/openclaw/issues/170371)). Thanks to [@steipete](https://github.com/steipete) for the co-authorship.
  - Load larger older-history pages when requested without making the initial chat load as large ([#170481](https://github.com/openclaw/openclaw/pull/170481)). Thanks to [@steipete](https://github.com/steipete) for the co-authorship.
  - Compact Summary and Transcript tabs in the Meetings reader, with keyboard navigation retained ([#170314](https://github.com/openclaw/openclaw/pull/170314)). Thanks to [@steipete](https://github.com/steipete).
  - Prevent the Control UI from freezing when jumping to an offscreen chat message. [#170789](https://github.com/openclaw/openclaw/pull/170789) Thanks [@steipete](https://github.com/steipete).
  - Align the sidebar avatar and search with the navigation controls. [#170688](https://github.com/openclaw/openclaw/pull/170688) Thanks [@vincentkoc](https://github.com/vincentkoc).
  - Restore spacing between colored sidebar sessions. [#170706](https://github.com/openclaw/openclaw/pull/170706) Thanks [@steipete](https://github.com/steipete).
  - Reserve stable image preview space for new uploads and older images, which still open at full size ([#170819](https://github.com/openclaw/openclaw/pull/170819)). Thanks [@steipete](https://github.com/steipete).
  - Session titles and overflow controls fit on phone-sized rows, and the Layout menu stays within the screen and scrolls to its actions. [#171413](https://github.com/openclaw/openclaw/pull/171413) Thanks to [@steipete](https://github.com/steipete).
  - Mobile headers make room for session titles, while Panels opens Details and available tools. Widening the window restores the saved desktop layout. [#171430](https://github.com/openclaw/openclaw/pull/171430) Thanks to [@steipete](https://github.com/steipete).
  - Swipes over inline visualizations continue scrolling the conversation with momentum. [#171468](https://github.com/openclaw/openclaw/pull/171468) Thanks to [@steipete](https://github.com/steipete).
  - The mobile sidebar backdrop is adjusted to avoid a delayed browser-bar tint when the drawer closes in Safari. [#171617](https://github.com/openclaw/openclaw/pull/171617) Thanks to [@steipete](https://github.com/steipete).
  - Chat tool Diff and Raw tabs use a tighter layout and retain the chosen view. Failed and skipped results open in Raw. [#171552](https://github.com/openclaw/openclaw/pull/171552) Thanks to [@steipete](https://github.com/steipete).
  - Fold functions, classes and other supported code regions, with hidden change counts in the placeholder. [#172350](https://github.com/openclaw/openclaw/pull/172350), thanks to [steipete](https://github.com/steipete).
  - Align related lines in split diffs and highlight changed text in session diffs and tool edit previews. [#171935](https://github.com/openclaw/openclaw/pull/171935), thanks to [steipete](https://github.com/steipete).
  - Keep large session diffs responsive while keeping changed lines visible. [#172257](https://github.com/openclaw/openclaw/pull/172257), thanks to [steipete](https://github.com/steipete).
  - Let session readers preview, download and play attachments belonging to messages they can currently read. Fixes [#172130](https://github.com/openclaw/openclaw/issues/172130) in [#172202](https://github.com/openclaw/openclaw/pull/172202), thanks to [shakkernerd](https://github.com/shakkernerd) for the report and fix.
  - Give existing conversations more room above the idle composer, which still expands for multiline drafts. [#171637](https://github.com/openclaw/openclaw/pull/171637), thanks to [steipete](https://github.com/steipete) for the design request.
  - Remove the empty session sidebar footer when there is no development-branch badge. [#171644](https://github.com/openclaw/openclaw/pull/171644), thanks to [steipete](https://github.com/steipete).
  - Keep repository labels readable in narrow session Details panels while allowing PR titles to wrap. [#171995](https://github.com/openclaw/openclaw/pull/171995), thanks to [jacobtomlinson](https://github.com/jacobtomlinson).
  - Search the reaction picker by emoji name or shortcode while keeping quick reactions and emoji paste. [#172577](https://github.com/openclaw/openclaw/pull/172577). Thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
  - Stop Canvas document replacement and report the error if cleanup of the old document fails. A partial deletion is not rolled back. [#175343](https://github.com/openclaw/openclaw/pull/175343). Thanks to [@steipete](https://github.com/steipete).
  - Preserve browser zoom and reset shortcuts in loaded image previews while unmodified keys continue to control the image ([#180872](https://github.com/openclaw/openclaw/pull/180872)). Thanks [@etzelm](https://github.com/etzelm).
  - Fix lightbox zoom changing the percentage without enlarging images with known dimensions ([#181374](https://github.com/openclaw/openclaw/pull/181374), [report](https://github.com/openclaw/openclaw/issues/180943)). Thanks [@AmelioMansour](https://github.com/AmelioMansour) and [@obviyus](https://github.com/obviyus).
  - Bring back the Files action in the hosted chat header. [Commit](https://github.com/openclaw/openclaw/commit/3a697ca4265b8302dca2b0191748a231c7c16432)
  - Made the Latest button hide immediately at the newest message. [Commit](https://github.com/openclaw/openclaw/commit/af93d66c072d4e3ef2568c17a05943e972e027cc)
  - Preserved table controls across pane moves and retired pending image previews on disconnect. [Commit](https://github.com/openclaw/openclaw/commit/521393ecd7d11374b80c16068226b83bd75a3979)
  - The earlier table-retention change was [reverted](https://github.com/openclaw/openclaw/commit/9605dd68cb6d07fe26475c9e54731d2c68aba669) before the follow-up addressed both tables and image previews. [Original change](https://github.com/openclaw/openclaw/commit/042db1e7064930a08c534c4487864d7bfb8c5287)
  - Use native tooltip lifecycle events, with one opening or closing event per transition ([#170841](https://github.com/openclaw/openclaw/pull/170841)). Thanks [@steipete](https://github.com/steipete).

  </details>

- Fixes keyboard focus disappearing when menus, dialogs or chat controls refresh, and restores visible focus indicators and labels for assistive technology.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Return keyboard focus to a surviving heading after plugin removal from Settings or the catalog-backed Plugins hub. [#161111](https://github.com/openclaw/openclaw/pull/161111), [#127327](https://github.com/openclaw/openclaw/issues/127327). Thanks [@MoerAI](https://github.com/MoerAI) and [@steipete](https://github.com/steipete).
  - Keep keyboard focus on Ask OpenClaw answer choices through background updates. [#169349](https://github.com/openclaw/openclaw/pull/169349) Thanks [@steipete](https://github.com/steipete).
  - Restore Security pairing eligibility after reconnect, Escape handling in Chat Details and recovery after a successful manual refresh. [#169046](https://github.com/openclaw/openclaw/pull/169046) Thanks [@steipete](https://github.com/steipete).
  - Open composer controls and draft recovery errors follow language changes without losing the draft or focus. [#169574](https://github.com/openclaw/openclaw/pull/169574), thanks [@steipete](https://github.com/steipete).
  - Focused links keep people hovercards open, and terminal header actions work when hosted outside the panel. [#169725](https://github.com/openclaw/openclaw/pull/169725), thanks [@steipete](https://github.com/steipete).
  - Keep keyboard focus and notices usable in dialogs and long menus ([#170387](https://github.com/openclaw/openclaw/pull/170387)). Thanks to [@steipete](https://github.com/steipete).
  - Close Sessions filters with Escape and return focus while keeping the search text. [#170565](https://github.com/openclaw/openclaw/pull/170565) Thanks [@steipete](https://github.com/steipete).
  - Improve keyboard navigation, focus handling and selection counts in Usage filters. [#170567](https://github.com/openclaw/openclaw/pull/170567) Thanks [@steipete](https://github.com/steipete).
  - Keep the dismissal menu visible near screen edges and return keyboard focus to your draft after dismissal or Escape. [#170568](https://github.com/openclaw/openclaw/pull/170568) Thanks [@steipete](https://github.com/steipete).
  - Close plugin setting action menus before leaving settings and prevent empty menu clicks from toggling values. [#170569](https://github.com/openclaw/openclaw/pull/170569) Thanks [@steipete](https://github.com/steipete).
  - Let Activity filters wrap into view when space is tight or zoom is enlarged. [#170570](https://github.com/openclaw/openclaw/pull/170570) Thanks [@steipete](https://github.com/steipete).
  - Keep rename-button focus and participant avatars during header updates. [#170631](https://github.com/openclaw/openclaw/pull/170631) Thanks [@steipete](https://github.com/steipete).
  - Keep progress, reaction, and image menus usable after document changes and pointer selection ([#170814](https://github.com/openclaw/openclaw/pull/170814)). Thanks [@steipete](https://github.com/steipete).
  - The New Session environment device list scrolls on narrow screens, and dismissing its picker returns focus. [#171441](https://github.com/openclaw/openclaw/pull/171441) Thanks to [@steipete](https://github.com/steipete).
  - Sidebar menus improve focus handling and reveal the selected agent on short screens. [#171463](https://github.com/openclaw/openclaw/pull/171463) Thanks to [@steipete](https://github.com/steipete).
  - The session group environment menu focuses the selected choice when reopened by keyboard and returns focus after Escape. [#171343](https://github.com/openclaw/openclaw/pull/171343) Thanks to [@steipete](https://github.com/steipete).
  - Refresh connection and automation labels in open person activity cards when the language changes, while keeping focus. [#172140](https://github.com/openclaw/openclaw/pull/172140), thanks to [steipete](https://github.com/steipete).
  - Refresh visible and accessible progress-card labels when the language changes. [#172184](https://github.com/openclaw/openclaw/pull/172184), thanks to [steipete](https://github.com/steipete).
  - Remove old recovery links when a rich toast is replaced and preserve focus through unrelated refreshes. [#171817](https://github.com/openclaw/openclaw/pull/171817), thanks to [steipete](https://github.com/steipete).
  - Show a keyboard focus outline in the Chat and New Session editors in forced-colors mode. [#180135](https://github.com/openclaw/openclaw/pull/180135), fixing [#180134](https://github.com/openclaw/openclaw/issues/180134). Thanks to [@etzelm](https://github.com/etzelm) and [@obviyus](https://github.com/obviyus).
  - Name the focusable chat transcript for assistive technology ([#180857](https://github.com/openclaw/openclaw/pull/180857), [report](https://github.com/openclaw/openclaw/issues/180814)). Thanks [@bajiaoshan](https://github.com/bajiaoshan), [@carlopignatari-boop](https://github.com/carlopignatari-boop) and [@obviyus](https://github.com/obviyus).
  - Expose agent-file save failures and conflicts as accessibility alerts ([#181126](https://github.com/openclaw/openclaw/pull/181126)). Thanks [@etzelm](https://github.com/etzelm).
  - Restore the keyboard focus indicator for Settings search in forced-colors mode ([#181225](https://github.com/openclaw/openclaw/pull/181225)). Thanks [@etzelm](https://github.com/etzelm).
  - Let Shift+Tab leave composer suggestions without selecting one or changing the draft ([#181145](https://github.com/openclaw/openclaw/pull/181145)). Thanks [@etzelm](https://github.com/etzelm).
  - Keep Shift+Enter available for a newline while suggestions are open ([#181999](https://github.com/openclaw/openclaw/pull/181999)). Thanks [@AmelioMansour](https://github.com/AmelioMansour) and [@obviyus](https://github.com/obviyus).
  - Ignore repeated key events when a command-palette shortcut is held ([#183067](https://github.com/openclaw/openclaw/pull/183067)). Thanks [@etzelm](https://github.com/etzelm).
  - Return keyboard focus to the previous control after a modal closes, while respecting focus deliberately moved elsewhere ([commit 4a7d536](https://github.com/openclaw/openclaw/commit/4a7d53616a5dbee3b0a8e2efc1b5ed7185325b13)).
  - Kept the Unarchive action attached and focused when its banner refreshes. [Commit](https://github.com/openclaw/openclaw/commit/a640fff46b13a827c7f63f2e4fdd5c8342115971)
  - Restored Escape dismissal for hover-only chat position-rail previews. [Commit](https://github.com/openclaw/openclaw/commit/b73d6bf0a600f1c0ca115889e2075544a1ee30ef)
  - Restored modal focus immediately when the target is ready, or after an inert background becomes usable. [Commit](https://github.com/openclaw/openclaw/commit/eec5e318ecaa95def03d5c27254d12db149856fa)
  - Preserved focus in an open mobile drawer menu when swipe support loads. [Commit](https://github.com/openclaw/openclaw/commit/a8a349b15b20240d387770378072c2ca51889596)
  - Returned focus to a temporarily disabled login control once it becomes available and kept cached provider information visible during initial synchronization. [Commit](https://github.com/openclaw/openclaw/commit/2cf64f1bc4360f3caed91ce2303464fde703cd03)
  - Waited for tooltips to render and restored focus to the active chat sidebar tab. [Commit](https://github.com/openclaw/openclaw/commit/91a860e080610d5f1d7ac833b698effdf9e0ef4b)
  - Prevented a redundant tooltip during menu fade-in from consuming the first Escape. [Commit](https://github.com/openclaw/openclaw/commit/2f5bdf2f870849a70961dcf6239fe51779e526ef)
  - [Modal and drawer link menu positioning](https://github.com/openclaw/openclaw/commit/131ad6e8f6e077598664e954ab60c40dfcddbb87), thanks to [@RomneyDa](https://github.com/RomneyDa).
  - Device menu focus stays on the selected action when approval actions appear and returns to the trigger after selection. [#170784](https://github.com/openclaw/openclaw/pull/170784) by [@steipete](https://github.com/steipete).

  </details>

- Fixes chosen language and appearance settings failing to update open views, along with missing agent avatars and labels that did not match their controls.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Team agent headers no longer show an extra creator avatar beside the agent identity. [PR #168575](https://github.com/openclaw/openclaw/pull/168575). Thanks to [@steipete](https://github.com/steipete).
  - Repeated requests for missing avatars are reduced. Some supported fallback profile photos may not appear. [PR #168640](https://github.com/openclaw/openclaw/pull/168640). Thanks to [@steipete](https://github.com/steipete).
  - Settings, configuration help and guides use clearer wording. [PR #168703](https://github.com/openclaw/openclaw/pull/168703), [plain-language issue #168322](https://github.com/openclaw/openclaw/issues/168322). Thanks to [@RomneyDa](https://github.com/RomneyDa).
  - The agent emoji picker handles disconnection and restores its trigger on reconnect. [PR #168759](https://github.com/openclaw/openclaw/pull/168759), [UI migration issue #168114](https://github.com/openclaw/openclaw/issues/168114). Thanks to [@steipete](https://github.com/steipete).
  - Worktrees keeps repository drafts during asynchronous refreshes and updates its header when the locale changes. Visible log times follow the current timezone when rows update. [PR #168767](https://github.com/openclaw/openclaw/pull/168767). Thanks to [@steipete](https://github.com/steipete).
  - Update open board labels and controls when the Control UI language changes. [#169415](https://github.com/openclaw/openclaw/pull/169415) Thanks [@steipete](https://github.com/steipete).
  - Translate the helper panel's approximate call count into 20 languages. [#169781](https://github.com/openclaw/openclaw/pull/169781).
  - Reconnecting refreshes profile appearance while preserving pending local choices, and leaving New Session stops its detached placeholder animation. [#170007](https://github.com/openclaw/openclaw/pull/170007), thanks [@steipete](https://github.com/steipete).
  - Participant contribution counts and timestamps refresh after count changes. [#169858](https://github.com/openclaw/openclaw/pull/169858), thanks [@steipete](https://github.com/steipete).
  - Group existing settings for messages between conversations more clearly ([#170390](https://github.com/openclaw/openclaw/pull/170390)). Thanks to [@vyctorbrzezowski](https://github.com/vyctorbrzezowski).
  - Choose System or a supported language from the normal Appearance settings picker ([#170237](https://github.com/openclaw/openclaw/pull/170237)). Thanks to [@steipete](https://github.com/steipete).
  - Embedded widgets share theme reads and continue receiving live palette updates ([#170240](https://github.com/openclaw/openclaw/pull/170240)). Thanks to [@steipete](https://github.com/steipete).
  - Appearance text drafts survive unrelated settings refreshes ([#170319](https://github.com/openclaw/openclaw/pull/170319)). Thanks to [@steipete](https://github.com/steipete).
  - The sidebar community link uses the correct Follow OpenClaw on X label for its tooltip and accessible name. [#171462](https://github.com/openclaw/openclaw/pull/171462) Thanks to [@steipete](https://github.com/steipete).
  - Read-aloud controls and interrupted voice-reply guidance gain translated records. [#171333](https://github.com/openclaw/openclaw/pull/171333)
  - Session snooze date and time labels gain translated records. [#171381](https://github.com/openclaw/openclaw/pull/171381)
  - Match the reaction control's appearance to the other message actions. [#172517](https://github.com/openclaw/openclaw/pull/172517). Thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
  - Apply locale-aware capitalization to recent chat footer timestamps. [#172550](https://github.com/openclaw/openclaw/pull/172550). Thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
  - Restore data-URL agent avatars on session surfaces that request an unversioned avatar URL ([#182730](https://github.com/openclaw/openclaw/pull/182730), [report](https://github.com/openclaw/openclaw/issues/182688)). Thanks [@sunlit-deng](https://github.com/sunlit-deng), [@obviyus](https://github.com/obviyus) and [@migelizaga-rgb](https://github.com/migelizaga-rgb).

  </details>

- Fixes settings edits being lost during background refreshes and form controls showing an old choice after the saved setting changes.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep Advanced settings and the current reading position visible during reconnect. Editing pauses while the schema refreshes. [#159875](https://github.com/openclaw/openclaw/pull/159875), [#152874](https://github.com/openclaw/openclaw/issues/152874); related separate report [#153143](https://github.com/openclaw/openclaw/issues/153143). Thanks [@MoerAI](https://github.com/MoerAI), [@vyctorbrzezowski](https://github.com/vyctorbrzezowski), and [@altaywtf](https://github.com/altaywtf).
  - Settings shows validation reasons beside invalid scalar values and clears them after correction. [PR #168329](https://github.com/openclaw/openclaw/pull/168329), [issue #127329](https://github.com/openclaw/openclaw/issues/127329). Thanks to [@MoerAI](https://github.com/MoerAI), [@obviyus](https://github.com/obviyus) and [@steipete](https://github.com/steipete).
  - Clarify the Versions menu with plain-text previews, a current marker and optional help. [#169206](https://github.com/openclaw/openclaw/pull/169206) Thanks [@vyctorbrzezowski](https://github.com/vyctorbrzezowski).
  - Reveal the relevant advanced Memory group when opening a Settings search result. [#169022](https://github.com/openclaw/openclaw/pull/169022) Thanks [@steipete](https://github.com/steipete).
  - Keep the Saved status timer running through unrelated refreshes so Apply changes can reappear. [#169246](https://github.com/openclaw/openclaw/pull/169246), part of the broader [Control UI migration](https://github.com/openclaw/openclaw/issues/168114). Thanks [@steipete](https://github.com/steipete).
  - Versions help opens for the current chat, and its menu closes when navigating away or using browser Back. [#169794](https://github.com/openclaw/openclaw/pull/169794), thanks [@steipete](https://github.com/steipete).
  - Group rename and New session defaults dialogs close on reconnect or connection switch. Reopen the group menu to make changes on the intended connection. [#170067](https://github.com/openclaw/openclaw/pull/170067), thanks [@steipete](https://github.com/steipete).
  - Preserve focused drafts through loader updates on migrated Control UI pages. [#170571](https://github.com/openclaw/openclaw/pull/170571) Thanks [@steipete](https://github.com/steipete).
  - Keep Reset visible in the narrow-screen Automations Jobs filter. [#170580](https://github.com/openclaw/openclaw/pull/170580), [migration tracking #168114](https://github.com/openclaw/openclaw/issues/168114). Thanks [@steipete](https://github.com/steipete).
  - Save the suggested profile on selection, with the usual provider checks when a worker is allocated ([#170875](https://github.com/openclaw/openclaw/pull/170875)). Thanks [@steipete](https://github.com/steipete).
  - Explain missing prompt-reaction permission and how to address an external reaction explicitly ([#171264](https://github.com/openclaw/openclaw/pull/171264)). Thanks [@Yigtwxx](https://github.com/Yigtwxx) and [@obviyus](https://github.com/obviyus).
  - New Session menus close when changing agents or opening the new session, and Escape closes a nested agent menu first. Failed parent-session reads retry after a session-list refresh. [#171561](https://github.com/openclaw/openclaw/pull/171561) Thanks to [@steipete](https://github.com/steipete).
  - Publication account menus close with Details, and pull request check disclosures retain their open state across navigation. [#171349](https://github.com/openclaw/openclaw/pull/171349) Thanks to [@steipete](https://github.com/steipete).
  - Preserve MCP catalog focus and open pairing request details during refreshes while actions use current data. [#171894](https://github.com/openclaw/openclaw/pull/171894), thanks to [steipete](https://github.com/steipete).
  - Show a configuration schema error when reconnecting to a Gateway that lacks the required schema method, while retaining the previous schema. [#176039](https://github.com/openclaw/openclaw/pull/176039). Thanks to [@steipete](https://github.com/steipete).
  - Step the current numeric Settings draft instead of the inherited default, while retaining default stepping for blank fields ([#182076](https://github.com/openclaw/openclaw/pull/182076)). Thanks [@AmelioMansour](https://github.com/AmelioMansour) and [@obviyus](https://github.com/obviyus).
  - Kept the web-search checkbox unchecked when global policy disables search, including with a stale override. [Commit](https://github.com/openclaw/openclaw/commit/f74d65712bb5a7386ebbd746bae79d5618f05066) Thanks [@steipete](https://github.com/steipete).
  - Restored missing web-search guidance for dashboard requests when search is unconfigured. [Commit](https://github.com/openclaw/openclaw/commit/3b01cee14cfeb14080d5927340355206e5990936)
  - Allow revision-checked `config.patch` calls to remove explicitly named agents while preserving omitted siblings. Array replacements still require exact acknowledgments. [#152052](https://github.com/openclaw/openclaw/pull/152052), [reported in #152047](https://github.com/openclaw/openclaw/issues/152047). Thanks to [maximilien](https://github.com/maximilien) and [obviyus](https://github.com/obviyus).
  - Restart without making an unnecessary copy of the shared database just to identify the previous owner. [#169097](https://github.com/openclaw/openclaw/pull/169097), thanks [@steipete](https://github.com/steipete).
  - Workspace skill watches exclude unrelated sibling state while retaining live skill refresh in [#170229](https://github.com/openclaw/openclaw/pull/170229). Thanks [@steipete](https://github.com/steipete).
  - Common core configuration operations avoid unrelated plugin secret-target discovery while retaining plugin and channel credential handling. [PR #170270](https://github.com/openclaw/openclaw/pull/170270). Thanks [@steipete](https://github.com/steipete).
  - Avoid unnecessary plugin discovery for unrelated configuration edits while retaining relevant model catalog normalization ([#170861](https://github.com/openclaw/openclaw/pull/170861)). Thanks [@steipete](https://github.com/steipete).
  - Agent creation and settings saves avoid redundant skill discovery and unrelated reader revival during reload. [#171309](https://github.com/openclaw/openclaw/pull/171309), thanks to [steipete](https://github.com/steipete).
  - Avoid a false Gateway restart warning when credential removal supersedes a model update ([9c253952](https://github.com/openclaw/openclaw/commit/9c253952601063a8eccc1f733ac55e95cc9961cc)).
  - Complete affected configuration changes during reload without accidentally re-enabling suppressed channels ([6cbfacd8](https://github.com/openclaw/openclaw/commit/6cbfacd8d801318e39574fbc8ff45ed6c0e5f75e)).
  - Avoid a misleading refresh prompt on the first Gateway connection. [Commit](https://github.com/openclaw/openclaw/commit/d0298744306f8bc30468cf9d2726544c6a2517c0)
  - Keep configuration form fields current as their underlying values change. [Commit](https://github.com/openclaw/openclaw/commit/84ce5954d111273c1e7a1e32f86451ea5768bde6)

  </details>

- [Incognito conversations](/concepts/session#incognito-sessions) now keep OpenClaw conversation contents in memory instead of an Incognito database, and usage refresh uses less memory. That history expires within 24 hours or when OpenClaw restarts, whichever comes first; providers, tools, plugins and Codex diagnostics may still retain their own data.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Identify Incognito chats more clearly. The notice explains that session history expires after 24 hours or a restart, whichever comes first, while providers process messages and tools, plugins, or uploads may retain data. [#154651](https://github.com/openclaw/openclaw/pull/154651). Thanks [@vincentkoc](https://github.com/vincentkoc).
  - Incognito guidance documents the Codex diagnostic-log limitation and the OpenClaw-runtime alternative. [PR #168966](https://github.com/openclaw/openclaw/pull/168966). Thanks to [@steipete](https://github.com/steipete).
  - Allow an administrator to reload an existing Incognito conversation during its Gateway session. [#169025](https://github.com/openclaw/openclaw/pull/169025) Thanks [@steipete](https://github.com/steipete).
  - Refresh the Public badge in an open chat when another window changes sharing. [#169078](https://github.com/openclaw/openclaw/pull/169078) Thanks [@steipete](https://github.com/steipete).
  - Disable Delete for adopted Claude and Codex sessions whose native transcripts cannot be removed through that action ([#171031](https://github.com/openclaw/openclaw/pull/171031), [reported issue](https://github.com/openclaw/openclaw/issues/169185), [related Codex issue](https://github.com/openclaw/openclaw/issues/169184)). Thanks [@chelsealong](https://github.com/chelsealong), [@bricelb](https://github.com/bricelb) for the report, and [@obviyus](https://github.com/obviyus) for verification.
  - Stop session readers from repeatedly polling operator-only features and show clearer access guidance ([#171223](https://github.com/openclaw/openclaw/pull/171223)). Thanks [@steipete](https://github.com/steipete).
  - Kept a retained incognito session findable by ID after the state directory changes while its in-memory owner remains active. [Commit](https://github.com/openclaw/openclaw/commit/6cdd20ae2d0a4a3a8aef500031e55f4ee8d53095)
  - Keep Incognito conversation content in process memory rather than an Incognito database. Plugin authors accessing Incognito sessions must await the updated SDK calls. [#170712](https://github.com/openclaw/openclaw/pull/170712) Thanks [@steipete](https://github.com/steipete).
  - [Memory use during Incognito usage refresh](https://github.com/openclaw/openclaw/commit/1cbc801f5ae2d6f7372d508a1099d40de135cfe7), thanks to [@HerbertHuerto](https://github.com/HerbertHuerto) and [@RomneyDa](https://github.com/RomneyDa).

  </details>

- Fixes unrelated device activity interrupting a Control UI reply and replaces misleading connection or session errors with the relevant reason and next step in affected cases.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep the destination readable in browser tab titles during a disconnect. Connection status remains available in the app and favicon. [#167388](https://github.com/openclaw/openclaw/pull/167388). Thanks [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
  - Show the active follow-up's own duration instead of the time taken by an earlier completed spawn on the Sessions page. [PR #168666](https://github.com/openclaw/openclaw/pull/168666), [issue #168664](https://github.com/openclaw/openclaw/issues/168664). Thanks to [@holgergruenhagen](https://github.com/holgergruenhagen) and [@obviyus](https://github.com/obviyus).
  - Show the normal New Session place choices while loading instead of a misleading worker warning for local sessions. Required-worker placement still gates sending. [#169402](https://github.com/openclaw/openclaw/pull/169402) Thanks [@obviyus](https://github.com/obviyus).
  - Reduce dashboard gallery refresh payloads by omitting session fields the cards do not use. [#169062](https://github.com/openclaw/openclaw/pull/169062) Thanks [@steipete](https://github.com/steipete).
  - Show Gateway CPU use separately from the whole computer's utilization, in comparable core units. The process reading excludes subprocesses. [#169791](https://github.com/openclaw/openclaw/pull/169791), thanks [@vincentkoc](https://github.com/vincentkoc).
  - Control UI turns continue through unrelated paired-device activity while actual revocation still stops affected work. [#169457](https://github.com/openclaw/openclaw/pull/169457), thanks [@steipete](https://github.com/steipete) and [@Oldrich333](https://github.com/Oldrich333) for the [report and reproduction](https://github.com/openclaw/openclaw/issues/169134).
  - Explain why a computer is unavailable and show it only once in the command menu ([#170456](https://github.com/openclaw/openclaw/pull/170456)). Thanks to [@vincentkoc](https://github.com/vincentkoc).
  - Clear old Inbox sign-in warnings when switching agents ([#170149](https://github.com/openclaw/openclaw/pull/170149)). Thanks to [@steipete](https://github.com/steipete).
  - Restore Mentions after the profile starts, with spaced retries if it is temporarily unavailable ([#170507](https://github.com/openclaw/openclaw/pull/170507)). Thanks to [@steipete](https://github.com/steipete).
  - Avoid a duplicate agent roster request on dashboard reload. [#170637](https://github.com/openclaw/openclaw/pull/170637) Thanks [@steipete](https://github.com/steipete).
  - Show a connection-opening timeout explanation before the Control UI retries. [#172626](https://github.com/openclaw/openclaw/pull/172626), related to [#172507](https://github.com/openclaw/openclaw/issues/172507). Thanks to [@RomneyDa](https://github.com/RomneyDa), reporter [@najef1979-code](https://github.com/najef1979-code), and [@steipete](https://github.com/steipete) for related investigation.
  - Warn in Gateway logs when a Control UI pull request subscription fails to prepare and suggest retrying it. [#177038](https://github.com/openclaw/openclaw/pull/177038). Thanks to [@steipete](https://github.com/steipete).
  - Release cached Control UI assets when the UI is disabled and start a fresh cache when it is re-enabled. [#177042](https://github.com/openclaw/openclaw/pull/177042). Thanks to [@vincentkoc](https://github.com/vincentkoc).
  - Let the development UI reconnect through its configured proxy after a Gateway disconnect without restarting Vite. [#177066](https://github.com/openclaw/openclaw/pull/177066). Thanks to [@steipete](https://github.com/steipete).
  - Accept equivalent case variations of configured agent IDs in authorized HTTP and WebSocket tool calls. [#168127](https://github.com/openclaw/openclaw/pull/168127). Thanks to [yetval](https://github.com/yetval).
  - Refused agent turns distinguish a missing session-store schema from a read failure without exposing raw paths or database messages in [#169965](https://github.com/openclaw/openclaw/pull/169965). Thanks [@steipete](https://github.com/steipete).
  - Chat Completions, Responses and embeddings request bodies have a 60-second upload deadline. See [#170094](https://github.com/openclaw/openclaw/pull/170094) and [#162422](https://github.com/openclaw/openclaw/issues/162422). Thanks [@steipete](https://github.com/steipete) and [@boeingchoco](https://github.com/boeingchoco).
  - OpenAI-compatible chat completions and responses return an actionable HTTP 409 for archived sessions, including streaming requests. Restore the session in the Control UI before retrying. [PR #170299](https://github.com/openclaw/openclaw/pull/170299), reported in [#169679](https://github.com/openclaw/openclaw/issues/169679). Thanks [@steipete](https://github.com/steipete) and [@lqsyyy](https://github.com/lqsyyy) for the report.
  - One-shot `openclaw agent --local` commands release cached provider connections after a reply so the process can exit. [PR #170391](https://github.com/openclaw/openclaw/pull/170391). Thanks [@obviyus](https://github.com/obviyus).
  - Approved device connections skip an unnecessary pairing recovery lookup. [#170594](https://github.com/openclaw/openclaw/pull/170594). Thanks to [steipete](https://github.com/steipete).
  - Let unrelated session writes proceed during credential reads and provider observations for authentication health ([#170807](https://github.com/openclaw/openclaw/pull/170807)). Thanks [@steipete](https://github.com/steipete).
  - Reuse a named Gateway owner's profile facts before the first connection snapshot ([#170832](https://github.com/openclaw/openclaw/pull/170832)). Thanks [@steipete](https://github.com/steipete).
  - Avoid repeated authentication-file checks during dashboard startup and model authorization while refreshing changed credentials ([#170842](https://github.com/openclaw/openclaw/pull/170842)). Thanks [@steipete](https://github.com/steipete).
  - Routine auth and catalog work avoids misleading deprecation warnings, while version guidance is logged as information. Explicit deprecated API calls still warn. [#171229](https://github.com/openclaw/openclaw/pull/171229), thanks to [steipete](https://github.com/steipete).
  - Keep authenticated local Gateway access when Tailscale Serve is disabled by policy. Restore the Serve policy and restart the Gateway to recover remote access. [#171509](https://github.com/openclaw/openclaw/pull/171509) by [RomneyDa](https://github.com/RomneyDa).
  - Show the restart instruction once when a Gateway read detects lost state ownership. [#171568](https://github.com/openclaw/openclaw/pull/171568) by [RomneyDa](https://github.com/RomneyDa).
  - Foreground Gateway startup failures report a redacted reason without debug mode. [#172107](https://github.com/openclaw/openclaw/pull/172107), reported in [#172053](https://github.com/openclaw/openclaw/issues/172053). Thanks to [steipete](https://github.com/steipete), reporter [waynegault](https://github.com/waynegault), and co-author [skyzhao1223](https://github.com/skyzhao1223).
  - Unchanged provider credential refreshes no longer cause valid HTTP hook wakes to receive a 503. [#172619](https://github.com/openclaw/openclaw/pull/172619), thanks [@steipete](https://github.com/steipete).
  - `/session unbind` warns when no binding was removed instead of reporting success. [#184857](https://github.com/openclaw/openclaw/pull/184857) Thanks [@steipete](https://github.com/steipete).
  - Gateway monitoring warns when it cannot open an adopted Claude or Pi transcript because of an access error, while continuing to retry. [#182118](https://github.com/openclaw/openclaw/pull/182118) Thanks [@xiaopan-xydt](https://github.com/xiaopan-xydt) and [@steipete](https://github.com/steipete).

  </details>

- Fixes update status showing an older failure after a successful update or hiding a warning that still needs attention, so you can see the result and next step.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Report the real update outcome after a chat-requested update instead of a false Doctor cleanup permission error. [#170070](https://github.com/openclaw/openclaw/pull/170070), thanks [@hannesrudolph](https://github.com/hannesrudolph), [@steipete](https://github.com/steipete) for the investigation, and [@ezimerman](https://github.com/ezimerman), [@yoyo837](https://github.com/yoyo837), [@aia007731-lab](https://github.com/aia007731-lab) and [@justinforsound](https://github.com/justinforsound) for [reports](https://github.com/openclaw/openclaw/issues/168750).
  - Add an Updates action and stable or beta availability badge to the account menu. Dev users can still update manually without a new-update notice. [#172544](https://github.com/openclaw/openclaw/pull/172544). Thanks to [@fuller-stack-dev](https://github.com/fuller-stack-dev).
  - Prevent an older background check from overwriting the first manual update status publication. [#169913](https://github.com/openclaw/openclaw/pull/169913). Related tracing reports [#112278](https://github.com/openclaw/openclaw/issues/112278) and [#112486](https://github.com/openclaw/openclaw/issues/112486) are not resolved by this change. Thanks [@steipete](https://github.com/steipete).
  - Status treats a qualifying targetless failed update as history after a healthy Gateway changes its recorded identity. Records without a saved running identity still warn. See [#170063](https://github.com/openclaw/openclaw/pull/170063) and [#169950](https://github.com/openclaw/openclaw/issues/169950). Thanks [@amittell](https://github.com/amittell), [@steipete](https://github.com/steipete) and [@wr-web](https://github.com/wr-web).
  - Update confirmations and delayed native fallback stay with their original Gateway and profile in [#170086](https://github.com/openclaw/openclaw/pull/170086). Thanks [@steipete](https://github.com/steipete).
  - Update verification avoids a false failure when recorded migration has advanced the database schema, and improves saved status guidance. See [#170130](https://github.com/openclaw/openclaw/pull/170130) and [#169422](https://github.com/openclaw/openclaw/issues/169422). Thanks [@steipete](https://github.com/steipete) and [@angeliti999](https://github.com/angeliti999).
  - Failed-update reports retain Doctor recovery instructions until process settlement is safely verified in [#170207](https://github.com/openclaw/openclaw/pull/170207). Thanks [@steipete](https://github.com/steipete).
  - Slow state snapshots no longer consume the next command's inspection window when updating from a 2026.10.1 or newer updater. An installed updater containing this change also flags deferred optional checks and suggests `openclaw doctor --fix` after the update. [PR #170374](https://github.com/openclaw/openclaw/pull/170374), fixing [#170333](https://github.com/openclaw/openclaw/issues/170333). Thanks [@RomneyDa](https://github.com/RomneyDa), [@DonnieFi](https://github.com/DonnieFi) for the report, and [@steipete](https://github.com/steipete) for policy advice.
  - Warnings explain when optional original-state capture failed but the update can continue, and distinguish the later database recovery snapshots. See [recovery limits](/cli/update/how-updates-run#recovery-limits). [PR #170380](https://github.com/openclaw/openclaw/pull/170380), reported in [#170332](https://github.com/openclaw/openclaw/issues/170332). Thanks [@DonnieFi](https://github.com/DonnieFi), [@RomneyDa](https://github.com/RomneyDa), and [@steipete](https://github.com/steipete) for the policy explanation.
  - Package update journal mismatch messages identify changed filesystem bindings and show the profile-aware `openclaw update repair` command. [PR #170385](https://github.com/openclaw/openclaw/pull/170385), with reports and discussion in [#170031](https://github.com/openclaw/openclaw/issues/170031) and [#169352](https://github.com/openclaw/openclaw/issues/169352). Thanks [@steipete](https://github.com/steipete), [@council10-kera](https://github.com/council10-kera), [@dave160926-ops](https://github.com/dave160926-ops), and [@SergeiAug](https://github.com/SergeiAug).
  - Failed-update diagnostics retain the Doctor inventory link when it fits. For an exceptionally long path, they say the link is unavailable and keep the inventory on disk. [#170638](https://github.com/openclaw/openclaw/pull/170638). Thanks to [steipete](https://github.com/steipete).
  - The compact Inbox update action stays disabled and shows that it is checking until its target freshness check finishes. [#170491](https://github.com/openclaw/openclaw/pull/170491). Thanks to [steipete](https://github.com/steipete).
  - Successful update headlines include the number of warnings that need attention, while keeping the successful outcome. [#170490](https://github.com/openclaw/openclaw/pull/170490). Thanks to [RomneyDa](https://github.com/RomneyDa).

  </details>

- Fixes eligible conversation forks failing and exports with spaces in their filenames breaking, while archive actions better handle interrupted cleanup. Archiving a conversation tree can still partly succeed, and Undo only restores changes it can still reach.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Confirm before bulk archiving a selection with active sessions. Cancelling leaves the selection untouched. [#169040](https://github.com/openclaw/openclaw/pull/169040) Thanks [@steipete](https://github.com/steipete).
  - Begin archive preparation without waiting for unrelated session writes; the final archive still waits for its write and rechecks authority ([#171198](https://github.com/openclaw/openclaw/pull/171198)). Thanks [@steipete](https://github.com/steipete).
  - Allow archiving after successful cleanup of orphaned worker provisioning. Failed cleanup still prevents the archive ([#171233](https://github.com/openclaw/openclaw/pull/171233)). Thanks [@vincentkoc](https://github.com/vincentkoc) for the report and repair direction.
  - Export conversations and trajectories to filenames containing spaces without breaking the path. [#171616](https://github.com/openclaw/openclaw/pull/171616) Thanks to [@zhangguiping-xydt](https://github.com/zhangguiping-xydt) and [@obviyus](https://github.com/obviyus).
  - Avoid opening recognized live SQLite files and hardlinks during session checkout diff capture. [#174017](https://github.com/openclaw/openclaw/pull/174017). Thanks to [@steipete](https://github.com/steipete).
  - Reconcile archive retention beyond the first page so ordinary cleanup does not leave stale missing-copy warnings ([#181746](https://github.com/openclaw/openclaw/pull/181746), [report](https://github.com/openclaw/openclaw/issues/181722)). Thanks [@xiaopan-xydt](https://github.com/xiaopan-xydt), [@tre1d](https://github.com/tre1d) and [@steipete](https://github.com/steipete).
  - Restore message forking for eligible session-writing guests, preserving preceding context and putting the selected message in the new draft ([#185486](https://github.com/openclaw/openclaw/pull/185486), [report](https://github.com/openclaw/openclaw/issues/185414)). Thanks [@shakkernerd](https://github.com/shakkernerd).

  </details>

- Fixes Mentions and Activity losing available items after a refresh or agent change. A paired device already displaying a completed conversation can also skip the redundant completion notification.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep failed dashboard widget removal errors visible through an unchanged refresh. [#169003](https://github.com/openclaw/openclaw/pull/169003) Thanks [@steipete](https://github.com/steipete).
  - Use singular English wording for one session or person in Activity, including accessible descriptions. [#169231](https://github.com/openclaw/openclaw/pull/169231) Thanks [@steipete](https://github.com/steipete).
  - Inbox automation alerts stay available when switching agents within the same scope, while agent-specific authentication refreshes. [#169677](https://github.com/openclaw/openclaw/pull/169677), thanks [@steipete](https://github.com/steipete).
  - Dismissing an absent or already dismissed Inbox mention returns the current authorized Inbox instead of failing during unrelated session activity. [#169836](https://github.com/openclaw/openclaw/pull/169836), thanks [@steipete](https://github.com/steipete).
  - Hide suggested tasks during launch and restore failed or unconfirmed tasks for retry. [#170752](https://github.com/openclaw/openclaw/pull/170752) Thanks [@steipete](https://github.com/steipete).
  - Recover the mention Inbox after a session replacement, with bounded background retries ([#170896](https://github.com/openclaw/openclaw/pull/170896)). Thanks [@steipete](https://github.com/steipete).
  - Clear a suggested task's old error after a successful retry without clearing newer or unrelated errors. [#171640](https://github.com/openclaw/openclaw/pull/171640), thanks to [steipete](https://github.com/steipete).
  - Avoid running an Activity recap again when an earlier request already completed it. [#172334](https://github.com/openclaw/openclaw/pull/172334), thanks to [steipete](https://github.com/steipete) for the fix and [Mike-MWT](https://github.com/Mike-MWT) for reporting [#172186](https://github.com/openclaw/openclaw/issues/172186).
  - Avoid unnecessary roster planning when delivering opt-in Control UI activity recaps ([#182182](https://github.com/openclaw/openclaw/pull/182182)). Thanks [@vincentkoc](https://github.com/vincentkoc).
  - Agent finished Web Push skips the paired device actively viewing the finished conversation and resumes normal delivery when it is hidden, switched away or disconnected. [#183535](https://github.com/openclaw/openclaw/pull/183535) Thanks [@holgergruenhagen](https://github.com/holgergruenhagen) and [@steipete](https://github.com/steipete). Thanks [@pmochine](https://github.com/pmochine) for the report.

  </details>

- Plugin download counts now use the correct million or billion label.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Display plugin download counts with the correct compact unit at million and billion boundaries. [#149103](https://github.com/openclaw/openclaw/pull/149103). Thanks [@Piyushrathoree](https://github.com/Piyushrathoree) and [@obviyus](https://github.com/obviyus).

  </details>

- GitHub Actions widgets can show a marked older result while a previously successful view refreshes. Unchanged HTML widgets also keep their sandbox address across board refreshes.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Previously successful GitHub Actions widget reads can return a cached result marked `stale: true` while refreshing. Cold or changed-scope reads still wait, and a failed refresh causes the next read to retry. [PR #168774](https://github.com/openclaw/openclaw/pull/168774). Thanks to [@steipete](https://github.com/steipete).
  - Reuse sandbox URLs for unchanged HTML widget policies on repeated board reads ([#171332](https://github.com/openclaw/openclaw/pull/171332)). Thanks [@steipete](https://github.com/steipete).

  </details>

- The community banner no longer shows Pinterest’s Save overlay when the integration respects its opt-out.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Prevent Pinterest integrations that honor image opt-outs from placing Save controls over the community banner. [#171903](https://github.com/openclaw/openclaw/pull/171903), thanks to [vincentkoc](https://github.com/vincentkoc).

  </details>

- Fixes commands reporting the wrong failure, including missing local Gateway access mistaken for a token problem. JSON command failures now give scripts an error type and message where supported.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - `openclaw dashboard --json` failures include standard error type and message fields alongside the existing reason. [PR #168812](https://github.com/openclaw/openclaw/pull/168812). Thanks to [@ly85206559](https://github.com/ly85206559) and [@obviyus](https://github.com/obviyus).
  - Preserve whole Unicode characters when widget syntax-error messages are clipped. [#176207](https://github.com/openclaw/openclaw/pull/176207). Thanks to [@hugenshen](https://github.com/hugenshen) and [@obviyus](https://github.com/obviyus).
  - Include the shared error type and message in onboarding and setup JSON failures, [#168488](https://github.com/openclaw/openclaw/pull/168488). Thanks to [obviyus](https://github.com/obviyus).
  - Correct `openclaw path` line numbers in JSONC files with a byte-order mark, [#168582](https://github.com/openclaw/openclaw/pull/168582). Thanks to [LinzeShi](https://github.com/LinzeShi) and [obviyus](https://github.com/obviyus).
  - Explain when the TUI cannot find a local Gateway instead of reporting a misleading missing-token error in [#169413](https://github.com/openclaw/openclaw/pull/169413). Thanks [@obviyus](https://github.com/obviyus).
  - Tool errors now distinguish malformed inputs from permission denials. [PR #176104](https://github.com/openclaw/openclaw/pull/176104), [issue #176066](https://github.com/openclaw/openclaw/issues/176066). Thanks [yinx65588-boop](https://github.com/yinx65588-boop) and reporter [BGreezy](https://github.com/BGreezy).
  - CLI resource cleanup errors appear on stderr even when they arrive after the reporting deadline. [PR #173566](https://github.com/openclaw/openclaw/pull/173566), contextual [issue #139485](https://github.com/openclaw/openclaw/issues/139485). Thanks [steipete](https://github.com/steipete) and [hannesrudolph](https://github.com/hannesrudolph) for the related report and investigation.
  - `openclaw logs` rejects a combination of `--local-time` and `--utc` before fetching logs. [#176262](https://github.com/openclaw/openclaw/pull/176262), [issue #176261](https://github.com/openclaw/openclaw/issues/176261). Thanks [@YangManBOBO](https://github.com/YangManBOBO) for the fix and report, and [@obviyus](https://github.com/obviyus).
  - `openclaw path set` rejects blank numeric replacements instead of silently writing zero. [#178692](https://github.com/openclaw/openclaw/pull/178692). Thanks [@LinzeShi](https://github.com/LinzeShi) and [@steipete](https://github.com/steipete).
  - Stop malformed tool-call argument lengths from being mistaken for authentication errors and producing misleading sign-in advice. [#168500](https://github.com/openclaw/openclaw/pull/168500), [issue #168450](https://github.com/openclaw/openclaw/issues/168450). Thanks to [@TYY-2005](https://github.com/TYY-2005) and [@steipete](https://github.com/steipete), and to [@r3n3x](https://github.com/r3n3x) for the report.
  - Busy `openclaw gateway suspend --json` returns one parseable JSON result and a nonzero exit status. [#176795](https://github.com/openclaw/openclaw/pull/176795). Thanks [@vincentkoc](https://github.com/vincentkoc).
  - Return structured command errors for Policy check, compare and watch in JSON or piped output. Watch appends a single-line error to its existing stream ([#181758](https://github.com/openclaw/openclaw/pull/181758)). Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@obviyus](https://github.com/obviyus).
  - Preserve the original guarded response if cleanup fails and report the cleanup problem ([#181655](https://github.com/openclaw/openclaw/pull/181655)). Thanks [@tianhaotian](https://github.com/tianhaotian).
  - Database command operational failures return an error object with a type and message. [#183393](https://github.com/openclaw/openclaw/pull/183393) Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@steipete](https://github.com/steipete).
  - Caught update cleanup exceptions use the same error shape and retain available recovery details. [#184166](https://github.com/openclaw/openclaw/pull/184166) Thanks [@Leon-SK668](https://github.com/Leon-SK668).

  </details>

- [Public conversation links](/web/urls#public-session-transcripts) now show progress messages, short grouped tool summaries and images that earlier public pages left out. Review existing shares because these additions also appear on links you already published. Image contents are not redacted.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  Tool-result text and reasoning stay hidden, while other supported attachments appear as filenames.

  - Show progress, short grouped tool summaries, images and attachment names on public conversation pages, with pages filled by visible items. [#169644](https://github.com/openclaw/openclaw/pull/169644), thanks [@steipete](https://github.com/steipete).

  </details>

- Long HTML conversation exports display their transcript and navigation again. Regenerate older exports to get the fix.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Restore the transcript and navigation in long HTML session exports. Previously generated exports need to be regenerated. [#151029](https://github.com/openclaw/openclaw/pull/151029). Thanks [@zhangguiping-xydt](https://github.com/zhangguiping-xydt).

  </details>

- Tool results and conversation text now keep their original wording in the agent's context and chat history, instead of automatically changing code or file contents. Review chats before sharing them because file reads may include credentials.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep file reads, code and other conversation text unchanged in agent context, saved chats and public shares. An interrupted private completion from an older release may need its outcome checked and a fresh request started if an exact-input retry is rejected. [#169063](https://github.com/openclaw/openclaw/pull/169063) Thanks [@steipete](https://github.com/steipete).

  </details>

- Usage reports now include matching conversations beyond the first 1,000 and label missing measurements as unavailable rather than zero. You can export complete selections while other chats refresh, but incomplete selected data still blocks export, and missing provider measurements cannot be recovered.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Mark interrupted or unmeasured responses as unavailable across status, chat, session metadata, and usage summaries. Missing provider measurements cannot be reconstructed. [#120008](https://github.com/openclaw/openclaw/pull/120008), [#119244](https://github.com/openclaw/openclaw/issues/119244); related open report [#151347](https://github.com/openclaw/openclaw/issues/151347). Thanks [@OWWZO](https://github.com/OWWZO), [@steipete](https://github.com/steipete), and reporter [@EvolveAegis](https://github.com/EvolveAegis).
  - Reject malformed `usage.cost` agent selectors instead of silently reporting costs for the default agent. [#158696](https://github.com/openclaw/openclaw/pull/158696). Thanks [@alix-007](https://github.com/alix-007) and [@obviyus](https://github.com/obviyus).
  - Show million-token values in `m` units in `/usage full` and custom usage templates. [#164684](https://github.com/openclaw/openclaw/pull/164684). Thanks [@yetval](https://github.com/yetval) and [@obviyus](https://github.com/obviyus).
  - Usage overview filtering, totals and paging cover matching sessions beyond the first 1,000. Detailed reports and exports remain available. [#169660](https://github.com/openclaw/openclaw/pull/169660), thanks [@steipete](https://github.com/steipete) and [@Grynn](https://github.com/Grynn) for the [report](https://github.com/openclaw/openclaw/issues/127245).
  - Show available usage results while slow rows still calculate, labeling those rows as computing. Reports have a 15-second deadline and a 20,000-instance limit after creator filtering. [#171336](https://github.com/openclaw/openclaw/pull/171336) Thanks to [@steipete](https://github.com/steipete).
  - Usage backfill handles changed ownership of custom or shared stores and resumes slow batches. Reports can show partial totals while backfill progresses. [#171632](https://github.com/openclaw/openclaw/pull/171632) Thanks to [@steipete](https://github.com/steipete).
  - Usage exports refuse incomplete data and offer guidance to refresh or narrow the range. [#171613](https://github.com/openclaw/openclaw/pull/171613) Thanks to [@steipete](https://github.com/steipete).
  - The Usage export menu improves keyboard focus and dismissal. [#171347](https://github.com/openclaw/openclaw/pull/171347) Thanks to [@steipete](https://github.com/steipete).
  - Usage session details stay current as the view changes, and unavailable values update when the language changes. [#171630](https://github.com/openclaw/openclaw/pull/171630) Thanks to [@steipete](https://github.com/steipete).
  - Return marked partial totals and narrowing guidance when a usage read exceeds its time budget. [#171904](https://github.com/openclaw/openclaw/pull/171904), thanks to [steipete](https://github.com/steipete).
  - Export a complete selection as JSON or CSV while unrelated sessions refresh. Incomplete selected sources still block export. [#171679](https://github.com/openclaw/openclaw/pull/171679), thanks to [steipete](https://github.com/steipete).
  - Show provider-reported totals for selected timeline intervals even when the By Type breakdown is incomplete. [#171872](https://github.com/openclaw/openclaw/pull/171872), thanks to [steipete](https://github.com/steipete).
  - Keep retained transcripts with legacy colon-containing session IDs in usage reports without interrupting background refresh. [#172316](https://github.com/openclaw/openclaw/pull/172316), thanks to [steipete](https://github.com/steipete).

  </details>

- Fixes saved chats losing attachment references or supported model choices during recovery and maintenance. Attachment identity missing from older records and choices already deleted cannot be reconstructed.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Use less memory while saving large chat histories and report their size when a save is slow. [#171540](https://github.com/openclaw/openclaw/pull/171540) by [steipete](https://github.com/steipete).
  - Keep new internal runtime continuations out of visible user history while retaining them for model replay. Existing stored markers are not rewritten. [#137273](https://github.com/openclaw/openclaw/pull/137273), [related report #124244](https://github.com/openclaw/openclaw/issues/124244). Thanks to [LiuwqGit](https://github.com/LiuwqGit), [steipete](https://github.com/steipete), and [jpazvd](https://github.com/jpazvd).
  - Sessions using a symlinked state folder remain usable after a Gateway restart without changing stored paths. [Symlinked session state](https://github.com/openclaw/openclaw/pull/168361). Thanks [@obviyus](https://github.com/obviyus).
  - Activity refreshes blank previews after archived conversation history is restored. [Restored conversation previews](https://github.com/openclaw/openclaw/pull/168397). Thanks [@steipete](https://github.com/steipete).
  - Completed transcript searches no longer show an indexing warning just because an unchanged database writer initialized. [Transcript search readiness](https://github.com/openclaw/openclaw/pull/168550). Thanks [@steipete](https://github.com/steipete).
  - Accept valid worker transcript bytes from another JavaScript realm so affected saved-session history can load. [#168915](https://github.com/openclaw/openclaw/pull/168915), thanks [@steipete](https://github.com/steipete).
  - Reduce repeated session database reads during turns and retain managed-image attachments if an exact session read fails. [#169053](https://github.com/openclaw/openclaw/pull/169053), thanks [@steipete](https://github.com/steipete).
  - Limit database and foreground transcript worker pools to reduce memory pressure on high-core hosts, and expose worker counts by script. [#169110](https://github.com/openclaw/openclaw/pull/169110), thanks [@steipete](https://github.com/steipete).
  - Restore cached-row invalidation after a failed database writer discovery followed by a successful write. [#169113](https://github.com/openclaw/openclaw/pull/169113), thanks [@steipete](https://github.com/steipete).
  - Recover session reads overtaken by committed writes so a completed agent reply can return normally. [#169174](https://github.com/openclaw/openclaw/pull/169174), thanks [@steipete](https://github.com/steipete).
  - A session read retries once after a transient invalidation, allowing the turn or final reply to continue. A second invalidation still returns the error. [#169199](https://github.com/openclaw/openclaw/pull/169199), [report](https://github.com/openclaw/openclaw/issues/169181). Thanks [@steipete](https://github.com/steipete) and [@beru-ant-king](https://github.com/beru-ant-king).
  - Transcript rebuilding can reach affected sessions after compaction when a database revision is unknown. [#169467](https://github.com/openclaw/openclaw/pull/169467). Thanks [@obviyus](https://github.com/obviyus).
  - Reduce acknowledgement work for messages sent to ready existing sessions, while accepting input durably before acknowledging it. [#169596](https://github.com/openclaw/openclaw/pull/169596). Thanks [@steipete](https://github.com/steipete).
  - Preserve attachment identity in transcript mirrors and accept completed-turn receipts across equivalent database paths. Older filename-only history cannot recover missing attachment identity. [#169710](https://github.com/openclaw/openclaw/pull/169710). Thanks [@steipete](https://github.com/steipete).
  - Session creation avoids waiting on some unrelated database writes in [#170092](https://github.com/openclaw/openclaw/pull/170092). Thanks [@steipete](https://github.com/steipete).
  - Native transcript reads restore history when a read overlaps an archive in [#170096](https://github.com/openclaw/openclaw/pull/170096). Thanks [@steipete](https://github.com/steipete).
  - Session repair and deletion skip archive work for empty transcripts while protecting later additions in [#170122](https://github.com/openclaw/openclaw/pull/170122). Thanks [@steipete](https://github.com/steipete).
  - Eligible active-session writes reuse resident transcript context to avoid redundant reads in [#170199](https://github.com/openclaw/openclaw/pull/170199). Thanks [@steipete](https://github.com/steipete).
  - Eligible Gateway connections reuse resident profile facts and avoid an extra database worker read in [#170228](https://github.com/openclaw/openclaw/pull/170228). Thanks [@steipete](https://github.com/steipete).
  - Session observation saves digests and activity recaps with fewer writer requests. [PR #170271](https://github.com/openclaw/openclaw/pull/170271). Thanks [@steipete](https://github.com/steipete).
  - Keep fewer duplicate copies of a chat's saved history in memory. [PR #170304](https://github.com/openclaw/openclaw/pull/170304). Thanks [@steipete](https://github.com/steipete).
  - Activity summaries can reuse a complete resident transcript across ordinary metadata entries, reducing worker reads in eligible warm sessions. [PR #170340](https://github.com/openclaw/openclaw/pull/170340). Thanks [@steipete](https://github.com/steipete).
  - Operators can enable SQLite worker timing at startup with `OPENCLAW_DIAGNOSTICS=sqlite.worker-timing`. Empty admission updates also avoid unnecessary bookkeeping. [PR #170235](https://github.com/openclaw/openclaw/pull/170235). Thanks [@steipete](https://github.com/steipete).
  - Connected `openclaw sessions cleanup --all-agents` waits for the Gateway result, and routine cleanup avoids redundant work. [#170618](https://github.com/openclaw/openclaw/pull/170618). Thanks to [steipete](https://github.com/steipete) for the fix and [personaltrainerkoichan](https://github.com/personaltrainerkoichan) for the [report](https://github.com/openclaw/openclaw/issues/170474).
  - Idle maintenance uses fewer wakeups and database operations. While the healthy-idle delay histogram is paused, idle snapshots do not include a delay percentile, but callback stalls are still tracked. [#170531](https://github.com/openclaw/openclaw/pull/170531). Thanks to [steipete](https://github.com/steipete).
  - Preserve already streamed text when the transcript writer is available, without saving unfinished tool calls ([#170697](https://github.com/openclaw/openclaw/pull/170697)). Thanks [@steipete](https://github.com/steipete).
  - Retry configured session history cleanup after a blocked checkpoint recovers, while keeping history until a checkpoint completes ([#170913](https://github.com/openclaw/openclaw/pull/170913)). Thanks [@steipete](https://github.com/steipete).
  - Reduce database reads during chat preparation ([#170745](https://github.com/openclaw/openclaw/pull/170745)). Thanks [@steipete](https://github.com/steipete).
  - Preserve an existing Gateway startup tracing setting across service reinstall or repair ([#170725](https://github.com/openclaw/openclaw/pull/170725), [#169808](https://github.com/openclaw/openclaw/issues/169808)). Thanks [@wr-web](https://github.com/wr-web), [@steipete](https://github.com/steipete), and [@hbgangcn1](https://github.com/hbgangcn1).
  - Park idle maintenance until database writes, authentication failures, or pairing activity require it ([#170755](https://github.com/openclaw/openclaw/pull/170755)). Thanks [@steipete](https://github.com/steipete).
  - Avoid an unnecessary database statistics refresh after large history-only cleanups, reducing interruptions to session writes. [#170977](https://github.com/openclaw/openclaw/pull/170977), related [#170913](https://github.com/openclaw/openclaw/pull/170913) by [@steipete](https://github.com/steipete).
  - Rewrite a loaded transcript without copying its text again on the Gateway's main thread. [#171019](https://github.com/openclaw/openclaw/pull/171019) by [@steipete](https://github.com/steipete).
  - Speed up pending approval replay when many unrelated approvals are waiting. [#171047](https://github.com/openclaw/openclaw/pull/171047) by [@steipete](https://github.com/steipete).
  - Release stale SQLite receipt and admission metadata when sessions are deleted or workers retire. [#171088](https://github.com/openclaw/openclaw/pull/171088), related [#170855](https://github.com/openclaw/openclaw/pull/170855) and [#171012](https://github.com/openclaw/openclaw/pull/171012) by [@steipete](https://github.com/steipete).
  - Let automatic session cleanup proceed during unrelated activity while rechecking the sessions selected for cleanup and their protections. [#171154](https://github.com/openclaw/openclaw/pull/171154) by [@steipete](https://github.com/steipete).
  - Retire idle transcript workers after five minutes to release memory after bursts of activity. A later read can incur a cold start. [#171155](https://github.com/openclaw/openclaw/pull/171155) by [@steipete](https://github.com/steipete).
  - Session cleanup makes fewer unproductive passes over protected entries and resumes when relevant protection ends. [#171211](https://github.com/openclaw/openclaw/pull/171211), thanks to [steipete](https://github.com/steipete).
  - Surplus shared-state readers retire after 30 idle seconds while one stays warm. [#171231](https://github.com/openclaw/openclaw/pull/171231), thanks to [steipete](https://github.com/steipete).
  - Compatible scoped SQLite reads reuse a bounded worker pool, reducing process churn for repeated reads. [#171299](https://github.com/openclaw/openclaw/pull/171299), thanks to [steipete](https://github.com/steipete).
  - Idle maintenance uses fewer wakeups. Healthy non-authority directory watches recover missed events on a five-minute interval, while authority-sensitive and unhealthy watches retain their 30-second recovery interval. [#171318](https://github.com/openclaw/openclaw/pull/171318), thanks to [steipete](https://github.com/steipete).
  - Empty maintenance inventories wait for relevant changes or deadlines instead of repeatedly querying the database. [#171320](https://github.com/openclaw/openclaw/pull/171320), thanks to [steipete](https://github.com/steipete).
  - Larger installations avoid repeated full placement scans and share plugin inventory reads during skill discovery. [#171323](https://github.com/openclaw/openclaw/pull/171323), thanks to [steipete](https://github.com/steipete).
  - Surplus transcript history and search workers retire after 30 idle seconds and restart when needed. [#171354](https://github.com/openclaw/openclaw/pull/171354), thanks to [steipete](https://github.com/steipete).
  - Repeated inference can reuse published authentication rows, avoiding redundant credential worker reads after session writes. [#171726](https://github.com/openclaw/openclaw/pull/171726) by [steipete](https://github.com/steipete).
  - Gateway SQLite exchanges avoid repeatedly publishing unchanged admission facts. [#171788](https://github.com/openclaw/openclaw/pull/171788) by [steipete](https://github.com/steipete).
  - Session settlement avoids repeatedly inspecting long conversation data. [#171850](https://github.com/openclaw/openclaw/pull/171850) by [steipete](https://github.com/steipete).
  - Loading bounded transcript context avoids copying message data twice. [#171862](https://github.com/openclaw/openclaw/pull/171862) by [steipete](https://github.com/steipete).
  - Agent database workers no longer run large automatic checkpoints during transcript commits. Passive maintenance handles checkpointing. [#172009](https://github.com/openclaw/openclaw/pull/172009) by [steipete](https://github.com/steipete).
  - Warm transcript writes avoid a transaction-held metadata wait when another session registers concurrently. [#172059](https://github.com/openclaw/openclaw/pull/172059) by [steipete](https://github.com/steipete).
  - Full transcript reads decode once per event, reducing temporary JavaScript work on large histories. [#172112](https://github.com/openclaw/openclaw/pull/172112) by [steipete](https://github.com/steipete).
  - Reduce the data serialized and transferred when appending to long durable sessions. [#172462](https://github.com/openclaw/openclaw/pull/172462). Thanks to [@steipete](https://github.com/steipete).
  - Reuse a broker for isolated Gateway agent file reads while retaining their separate-process boundary. [#172476](https://github.com/openclaw/openclaw/pull/172476). Thanks to [@steipete](https://github.com/steipete).
  - Following logs avoids repeated scans of old log content on subsequent polls while retaining intended secret masking. [#172885](https://github.com/openclaw/openclaw/pull/172885), thanks [@steipete](https://github.com/steipete) and [@najef1979-code](https://github.com/najef1979-code) for the [related report](https://github.com/openclaw/openclaw/issues/172507).
  - Closing or replacing a transcript database releases its cached history pages. [#172521](https://github.com/openclaw/openclaw/pull/172521), thanks [@steipete](https://github.com/steipete).
  - Closing a history reader also clears cached reset-window references to its database. [#172541](https://github.com/openclaw/openclaw/pull/172541), thanks [@steipete](https://github.com/steipete).
  - Doctor preserves supported explicit session runtime choices, including in archived sessions. Choices already deleted cannot be reconstructed, and unavailable or invalid choices can still be cleared. [#173498](https://github.com/openclaw/openclaw/pull/173498), thanks [@obviyus](https://github.com/obviyus) and [@s-salamatov](https://github.com/s-salamatov) for the [earlier report](https://github.com/openclaw/openclaw/issues/83098).
  - Session snapshot construction reuses validation of unchanged frozen session facts. [#172533](https://github.com/openclaw/openclaw/pull/172533), thanks [@steipete](https://github.com/steipete).
  - Allow session resets to pass completed, inactive subagent history while still cleaning up unfinished work ([#179731](https://github.com/openclaw/openclaw/pull/179731)). Thanks [@hidaba](https://github.com/hidaba) and [@steipete](https://github.com/steipete).
  - Reduce unnecessary provider dependencies retained by transcript history workers ([#181936](https://github.com/openclaw/openclaw/pull/181936)). Thanks [@steipete](https://github.com/steipete).
  - Session-fork snapshots account for retained data more completely. Snapshots near the existing budget may be evicted sooner. [#182544](https://github.com/openclaw/openclaw/pull/182544) Thanks [@steipete](https://github.com/steipete).
  - Defer the remaining expired subagent cleanup backlog during shutdown and resume it after restart ([#185859](https://github.com/openclaw/openclaw/pull/185859)). Thanks to [@steipete](https://github.com/steipete).

  </details>

- Fixes recovery instructions disappearing while a chat is loading and makes the failed-reply Retry and Copy error controls easier to find.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep keyboard focus on the copy button when draft recovery shows its copied confirmation. [#171591](https://github.com/openclaw/openclaw/pull/171591) by [steipete](https://github.com/steipete).
  - Show login recovery and its copy control while the chat route is still loading ([06afa0d9](https://github.com/openclaw/openclaw/commit/06afa0d926363318e1aa252ac9c019e75989aac2)).
  - Simplify the failed-reply card and make retry and error copying easier to find. [#172349](https://github.com/openclaw/openclaw/pull/172349). Thanks to [@steipete](https://github.com/steipete).

  </details>

- Fixes missing Turkish navigation labels and refreshes translations in Workboard and Labs.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Refresh Workboard and Labs translation catalogs. [#172216](https://github.com/openclaw/openclaw/pull/172216).
  - Translate Turkish navigation tabs and nested section labels. [#128836](https://github.com/openclaw/openclaw/pull/128836), [reported in #128834](https://github.com/openclaw/openclaw/issues/128834). Thanks to [husodrn46](https://github.com/husodrn46) and [vincentkoc](https://github.com/vincentkoc).

  </details>

- Fixes reasoning previews appearing twice when a turn finishes, while the chosen reasoning and model controls remain available through supported catalog refreshes.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Show reasoning as it arrives when you have enabled that view, then replace its preview with saved history without repeating it. [#117721](https://github.com/openclaw/openclaw/pull/117721), [#88079](https://github.com/openclaw/openclaw/issues/88079), [#163567](https://github.com/openclaw/openclaw/issues/163567). Thanks [@steipete](https://github.com/steipete).
  - With View → Reasoning enabled, each tool step can retain its preceding reasoning. Saved reasoning replaces previews in `on` mode, while `stream` previews disappear when the run ends. [PR #168898](https://github.com/openclaw/openclaw/pull/168898). Thanks to [@steipete](https://github.com/steipete) and [@leapdragon](https://github.com/leapdragon).
  - Hide an unsupported context percentage when the selected model's capacity is unknown, while retaining available provider plan usage. [#169341](https://github.com/openclaw/openclaw/pull/169341) Thanks [@steipete](https://github.com/steipete).
  - Chat shows fallback and return dividers and hides recovered same-run diagnostic errors. A named fallback candidate may have been skipped. [#169773](https://github.com/openclaw/openclaw/pull/169773), thanks [@steipete](https://github.com/steipete) and [@jacobtomlinson](https://github.com/jacobtomlinson).
  - Compact context ring beside the model picker, with its usage details retained ([#170370](https://github.com/openclaw/openclaw/pull/170370)). Thanks to [@steipete](https://github.com/steipete).
  - Respect the configured reasoning policy when showing session thinking options for runtime-routed models. [#170589](https://github.com/openclaw/openclaw/pull/170589), [issue #170528](https://github.com/openclaw/openclaw/issues/170528). Thanks [@obviyus](https://github.com/obviyus) for the fix and [@EmeraldPi](https://github.com/EmeraldPi) for the report.
  - Retain session thinking labels and options when a later catalog row omits the model. [#170659](https://github.com/openclaw/openclaw/pull/170659) Thanks [@steipete](https://github.com/steipete).
  - Keep the effort slider available during a model catalog retry when the retained selected model is enabled ([commit 66c4b4a](https://github.com/openclaw/openclaw/commit/66c4b4a524dfcf571f1c529919aa84d668636266)).
  - Show the applicable agent verbosity in Control UI and local TUI history, with session overrides taking precedence ([#182059](https://github.com/openclaw/openclaw/pull/182059)). Thanks [@masatohoshino](https://github.com/masatohoshino) and [@obviyus](https://github.com/obviyus).

  </details>

### Agents, Goals and automations

- Scheduled jobs keep a saved future retry when OpenClaw restarts instead of running it early.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Startup recovery preserves the scheduled retry time. [#171775](https://github.com/openclaw/openclaw/pull/171775).

  </details>

- You can now guide the same running conversation from the Control UI or an administrator-linked messaging account. The task keeps its original permissions, which may be broader than those of the incoming account.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  [#188029](https://github.com/openclaw/openclaw/pull/188029). Thanks to [@joshavant](https://github.com/joshavant). See [channel identity links](/concepts/user-model#channel-identity-links).

  An administrator must approve the account link. When collaborative steering is off, shared-token or password access can continue work only when the Control UI side has administrator authority and the channel side has current authorized-owner authority. New tasks use the submitting person's current permissions, and a shared credential does not establish who used it. Known bot messages do not use this exception.

  </details>

- Automation history now returns distinct run IDs for scheduled and on-exit runs whose IDs were missing from history responses.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  [#188848](https://github.com/openclaw/openclaw/pull/188848), included through [#188878](https://github.com/openclaw/openclaw/pull/188878). Thanks to [@RomneyDa](https://github.com/RomneyDa). Explicit manual request IDs remain unchanged, and imported older history can use its stored IDs.

  </details>

- Fixes a parent conversation being unable to answer while its [helper](/tools/subagents/operations) is still working, recovering from an interruption or waiting to deliver a result.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Let an eligible parent chat continue after repeated restarts instead of waiting behind an interrupted helper result. [#184100](https://github.com/openclaw/openclaw/pull/184100). Thanks [@steipete](https://github.com/steipete).
  - Continue protected conversations and private completions while child work is active, with current tool permissions preserved. [#174900](https://github.com/openclaw/openclaw/pull/174900) Thanks to [@enki](https://github.com/enki), [@Ricardodpalmeida](https://github.com/Ricardodpalmeida), [@Stronggenetics](https://github.com/Stronggenetics), [@RomneyDa](https://github.com/RomneyDa), and [@steipete](https://github.com/steipete).
  - A parent can resume after all native children finish while their results await delivery. [#175246](https://github.com/openclaw/openclaw/pull/175246) Thanks [@quqi1599](https://github.com/quqi1599), [@steipete](https://github.com/steipete) and [@Stronggenetics](https://github.com/Stronggenetics).
  - After a restart interrupts a quiet subagent, affected parents can receive a turn to reconcile unfinished work. [#175278](https://github.com/openclaw/openclaw/pull/175278) Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Codex sessions can reply after recovering completed native children without conflicting with their own pending recovery writes. [#177564](https://github.com/openclaw/openclaw/pull/177564) Thanks [@jjjhenriksen](https://github.com/jjjhenriksen).
  - Parents can resume after a native child's follow-up finishes while its result awaits acknowledgment. [#177577](https://github.com/openclaw/openclaw/pull/177577), [#172837](https://github.com/openclaw/openclaw/issues/172837) Thanks [@linancn](https://github.com/linancn) and [@steipete](https://github.com/steipete).
  - An interrupted native child can remain resumable without blocking an idle parent from replying. [#179099](https://github.com/openclaw/openclaw/pull/179099) Thanks [@wtfichigo](https://github.com/wtfichigo) and [@obviyus](https://github.com/obviyus).
  - Let Claude CLI parent replies finish when nested work belongs to a subagent, while the parent's own background work still holds the reply open. [#182267](https://github.com/openclaw/openclaw/pull/182267) Thanks [@steipete](https://github.com/steipete) and [@goslingmanagment](https://github.com/goslingmanagment).
  - Retain recovery notifications while a main session is awaiting preparation ([commit](https://github.com/openclaw/openclaw/commit/2251880c0f1df0cc22c56d73c7b6f8a57046ec59)).

  </details>

- Helper status now distinguishes work still in progress from a result that failed to reach its parent, and fixes old completed results reappearing after a restart in affected cases.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Show a failed helper delivery as failed, not as work still waiting, while keeping genuinely pending results visible. [PR #155019](https://github.com/openclaw/openclaw/pull/155019), [issue #154834](https://github.com/openclaw/openclaw/issues/154834). Thanks to [linhongyu510](https://github.com/linhongyu510) and [obviyus](https://github.com/obviyus), with the report from [jerryliang122](https://github.com/jerryliang122), investigation by [ifyouhavethisemail-afk](https://github.com/ifyouhavethisemail-afk), [assimetria-ai](https://github.com/assimetria-ai), and [waynegault](https://github.com/waynegault), and related reports from [itanyplus](https://github.com/itanyplus) and [rozenpl](https://github.com/rozenpl).
  - Codex sessions recognize still-pending child agents started on earlier turns. [#167368](https://github.com/openclaw/openclaw/pull/167368), [#167354](https://github.com/openclaw/openclaw/issues/167354), [#160737](https://github.com/openclaw/openclaw/issues/160737), [#167277](https://github.com/openclaw/openclaw/issues/167277). Thanks to [jalehman](https://github.com/jalehman).
  - Let Codex plugins track outer tool calls until their recorded outputs arrive, helping them avoid treating an active run as idle. [#171661](https://github.com/openclaw/openclaw/pull/171661), thanks to [obviyus](https://github.com/obviyus).
  - Stop permanently undeliverable Codex child completions from returning after registration or restart. `openclaw doctor --fix` can repair proven duplicate or obsolete assignments. [#173018](https://github.com/openclaw/openclaw/pull/173018) Thanks to [@steipete](https://github.com/steipete), [@jekmanis](https://github.com/jekmanis), and [@gisk0](https://github.com/gisk0).
  - Completed nested Codex work no longer leaves a stale assignment that repeats a warning after restart. [#179050](https://github.com/openclaw/openclaw/pull/179050), [#178395](https://github.com/openclaw/openclaw/issues/178395) Thanks [@steipete](https://github.com/steipete) and [@mmartoccia](https://github.com/mmartoccia).
  - After a restart, a replaced child no longer leaves its old task unresolved. The original parent receives a private notice, and parent reset leaves the replacement child alone. [#170513](https://github.com/openclaw/openclaw/pull/170513), thanks to [@steipete](https://github.com/steipete).

  </details>

- Completed helper [results and follow-ups](/tools/subagents/announce#private-parent-completion) now reach their original conversation after more supported restarts without repeating a result already delivered. Cancelled or replaced conversations do not automatically receive the old work.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep recorded helper results available when an authorized Claude CLI chat resumes. Account boundaries that cannot authorize replay receive metadata only. [#164175](https://github.com/openclaw/openclaw/pull/164175), [#171195](https://github.com/openclaw/openclaw/issues/171195), [#159512](https://github.com/openclaw/openclaw/issues/159512), [#154716](https://github.com/openclaw/openclaw/issues/154716). Thanks to [etzelm](https://github.com/etzelm), [steipete](https://github.com/steipete), [potterdigital](https://github.com/potterdigital), [synapse-homeroot](https://github.com/synapse-homeroot), [cassthebandit](https://github.com/cassthebandit), [holgergruenhagen](https://github.com/holgergruenhagen), [oldrich333](https://github.com/oldrich333) and [xdom-jr](https://github.com/xdom-jr).
  - Prevent successful session completions from being rejected after their own writes and keep queued replies eligible for retry. [PR #169646](https://github.com/openclaw/openclaw/pull/169646). Thanks to [steipete](https://github.com/steipete).
  - A recovered subagent continuation can finish silently when its results have already been delivered, avoiding a duplicate final answer in that restart scenario. [#181260](https://github.com/openclaw/openclaw/pull/181260) Thanks [@steipete](https://github.com/steipete).
  - Keep a completed child result for an authorized in-place Resume after restart. Replacing the parent session does not deliver the old result to the new conversation. [#182587](https://github.com/openclaw/openclaw/pull/182587) Thanks [@steipete](https://github.com/steipete).
  - Route nested Claude CLI background-agent results according to whether the launcher consumed or forwarded them, preserving the final answer in both cases. [#182516](https://github.com/openclaw/openclaw/pull/182516) Thanks [@goslingmanagment](https://github.com/goslingmanagment), [@dmsrg399](https://github.com/dmsrg399) and [@steipete](https://github.com/steipete).
  - Preserve ACP input and completion notifications during session and dispatch races in [af03aa0](https://github.com/openclaw/openclaw/commit/af03aa072fc53ae697dcc2baba7772c6e6fe4eba). Thanks to [steipete](https://github.com/steipete).
  - Preserve eligible nested Claude CLI background task answers across snapshot orderings ([commit](https://github.com/openclaw/openclaw/commit/8bf0e03aa413f53694def4fad3b2d4e79e2c726d)). Thanks to [@RomneyDa](https://github.com/RomneyDa).
  - Restart recovery leaves active subagent result delivery and cleanup to finish. [#170486](https://github.com/openclaw/openclaw/pull/170486), thanks to [@steipete](https://github.com/steipete).
  - Completed child-result batches do not rerun the requester, and interrupted work resumes only when its original authority and child batch are available. [#171158](https://github.com/openclaw/openclaw/pull/171158). Thanks [@steipete](https://github.com/steipete).
  - Recover eligible accepted agent-to-agent updates after a restart, in order, without rerunning the sender. Cancelled updates and updates from reset, archived, replaced or access-revoked sessions are not automatically delivered. [#171717](https://github.com/openclaw/openclaw/pull/171717), thanks to [steipete](https://github.com/steipete).
  - Return visible child completions and failures to a yielded guest session. [#171796](https://github.com/openclaw/openclaw/pull/171796), thanks to [shakkernerd](https://github.com/shakkernerd) for the fix and [skyzhao1223](https://github.com/skyzhao1223) for investigating the [reported handoff problem](https://github.com/openclaw/openclaw/issues/171647).
  - Avoid retrying a subagent result that was already delivered when receipt recording fails, and retain useful errors for failed handoffs. [#171657](https://github.com/openclaw/openclaw/pull/171657), thanks to [steipete](https://github.com/steipete).
  - Gave human browser-chat follow-ups in retained child sessions their own recovery record. [#172017](https://github.com/openclaw/openclaw/pull/172017). Thanks [@vincentkoc](https://github.com/vincentkoc).
  - Kept stopped requester turns cancelled when a subagent-result settlement is retried. [#172286](https://github.com/openclaw/openclaw/pull/172286). Thanks [@fuller-stack-dev](https://github.com/fuller-stack-dev).

  </details>

- When a plugin tool opts in to sending the final reply, that reply now waits for the other tools in the same group to finish, so their errors or unfinished work are not hidden.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Wait for all tools in a group before an opted-in plugin reports a final answer, including failures. [#165291](https://github.com/openclaw/openclaw/pull/165291), [#164558](https://github.com/openclaw/openclaw/pull/164558). Thanks to [steipete](https://github.com/steipete).

  </details>

- Fixes new Codex helpers starting successfully but failing when they try to ask their configured model for an answer.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Let visible subagents started during a parent turn reach their configured model and fallback sequence. [PR #169984](https://github.com/openclaw/openclaw/pull/169984). Thanks to [steipete](https://github.com/steipete).
  - Codex native children can make model requests after startup without inheriting an expired startup context. [#176311](https://github.com/openclaw/openclaw/pull/176311), [#162119](https://github.com/openclaw/openclaw/issues/162119), [#165739](https://github.com/openclaw/openclaw/issues/165739) Thanks [@enki](https://github.com/enki).

  </details>

- New conversations and side questions now wait when all model-request slots are occupied instead of failing immediately. Waiting adds time, and a parent whose helpers also need occupied slots can still stall.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Queue new turns and side questions at the existing 64-root inference limit. Waiting adds latency, and parents holding all roots while waiting for children can still stall until a root is freed. [#181895](https://github.com/openclaw/openclaw/pull/181895) Thanks [@steipete](https://github.com/steipete).

  </details>

- Changing the policy of a busy Codex conversation now leaves its current model and settings intact if the change cannot be applied, instead of switching models unexpectedly.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - When a configuration or policy change encounters a busy Codex thread, model fallback stops and the existing binding and configuration remain available. [#181204](https://github.com/openclaw/openclaw/pull/181204), [#181046](https://github.com/openclaw/openclaw/issues/181046) Thanks [@steipete](https://github.com/steipete), [@stronggenetics](https://github.com/stronggenetics) and [@jason-allen-oneal](https://github.com/jason-allen-oneal).

  </details>

- Fixes a failed quota check preventing later work from continuing in the affected recovery path.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Contain quota suspension lookup and marker-write failures so later work can proceed ([commit](https://github.com/openclaw/openclaw/commit/2fdae7f27e20089ed7f3ef62a800be934f965a28)).

  </details>

- Fixes unfinished cleanup after a failed Docker-backed command start, cleanup failures caused by Node startup instrumentation, and false Linux cleanup failures after the owned processes have exited. If cleanup is unconfirmed, inspect its status before assuming the command stopped.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  [#183247](https://github.com/openclaw/openclaw/pull/183247), backported in [#188851](https://github.com/openclaw/openclaw/pull/188851), retains cleanup after a failed start. [#184044](https://github.com/openclaw/openclaw/pull/184044), adapted in [#188746](https://github.com/openclaw/openclaw/pull/188746), keeps inherited Node startup hooks out of OpenClaw's process supervisors. The service-child retirement fix from [#188188](https://github.com/openclaw/openclaw/pull/188188), adapted in [#188962](https://github.com/openclaw/openclaw/pull/188962), corrects the Linux cleanup report. Commands keep their original environment. Thanks to [@steipete](https://github.com/steipete), [@shakkernerd](https://github.com/shakkernerd) and [@RomneyDa](https://github.com/RomneyDa).

  </details>

- Stopping a [native Codex helper](/plugins/codex-harness) now waits for that helper's commands to finish stopping before confirming cancellation, without stopping unrelated work. If cleanup fails, a later Stop can retry; an interrupted reply alone does not mean its commands stopped.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  [#187646](https://github.com/openclaw/openclaw/pull/187646), adapted for the release in [#188974](https://github.com/openclaw/openclaw/pull/188974). Thanks to [@shakkernerd](https://github.com/shakkernerd) and [@RomneyDa](https://github.com/RomneyDa). This also covers a helper already interrupted before Stop or still working after its parent yielded. A helper that finishes successfully during Stop keeps its result after cleanup.

  </details>

- Fixes finished helpers leaving resources behind after a temporary cleanup failure, while avoiding a second cleanup for work already settled before restart.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Stop or recover only the helper belonging to the selected conversation, using its recorded identity. Ambiguous watches and incomplete visible spawns report an error. [#167966](https://github.com/openclaw/openclaw/pull/167966). Thanks to [steipete](https://github.com/steipete).
  - Retry cleanup of completed Codex subagent subscriptions after a temporary failure while protecting active follow-ups. [#173547](https://github.com/openclaw/openclaw/pull/173547) Thanks to [@Kimiyu-186](https://github.com/Kimiyu-186).
  - Finish cleanup when a native child ends while its parent is waiting for an inline reply, allowing descendant settlement to complete. [#181933](https://github.com/openclaw/openclaw/pull/181933) Thanks [@jalehman](https://github.com/jalehman).
  - Reduce unnecessary idle maintenance work when completed subagent runs are retained. [#181560](https://github.com/openclaw/openclaw/pull/181560) Thanks [@steipete](https://github.com/steipete).
  - Completed subagent launches release retained authorization resources and parent context. [#170855](https://github.com/openclaw/openclaw/pull/170855), thanks to [@steipete](https://github.com/steipete).
  - Completed interrupted subagent cleanup is not repeated on restart. [#171091](https://github.com/openclaw/openclaw/pull/171091). Thanks [@steipete](https://github.com/steipete).

  </details>

- Helper failures now keep their actual error details, and a progress update no longer appears to be a finished answer. Startup warnings about old helper records are summarized.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Report when two helper continuations conflict and surface cleanup failures in [#185386](https://github.com/openclaw/openclaw/pull/185386). Thanks to [steipete](https://github.com/steipete).
  - Startup combines legacy subagent authority warnings into a single summary with a count and sample IDs. [#170506](https://github.com/openclaw/openclaw/pull/170506), thanks to [@steipete](https://github.com/steipete).
  - Subagent failure logs retain useful errors, and progress-only output is no longer counted as a visible final reply. [#170959](https://github.com/openclaw/openclaw/pull/170959). Thanks [@steipete](https://github.com/steipete).

  </details>

- When many helper results arrive together, shortened findings say that text was omitted, and discarded records no longer use the parent's available reply space.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep discarded Claude helper records from consuming the parent's available reply space in [#184352](https://github.com/openclaw/openclaw/pull/184352). Retained output and the existing line and frame limits still count. Thanks to [obviyus](https://github.com/obviyus) and [jaxonparrott](https://github.com/jaxonparrott).
  - Bounded large subagent completion batches and marked truncated findings. [#172068](https://github.com/openclaw/openclaw/pull/172068). Thanks [@steipete](https://github.com/steipete) and [@Oldrich333](https://github.com/Oldrich333) for [the report](https://github.com/openclaw/openclaw/issues/171864).

  </details>

- Fixes some replies and helper follow-ups failing to start when another agent launches them in a separate conversation.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Prevent a conversation-writer mismatch from stopping independently launched `sessions_send` and helper turns. [PR #170077](https://github.com/openclaw/openclaw/pull/170077), [issue #166734](https://github.com/openclaw/openclaw/issues/166734). Thanks to [steipete](https://github.com/steipete), [mariorivas1](https://github.com/mariorivas1) and [ghbalf](https://github.com/ghbalf).

  </details>

- Fixes an agent waiting for your answer to a question you never saw. Blocking questions now reach the conversation that started the request.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Send a blocking [agent question](/tools/ask-user) to the conversation that started the request, so the person can see and answer it. Credential questions retain their existing handling. [PR #170039](https://github.com/openclaw/openclaw/pull/170039). Thanks to [steipete](https://github.com/steipete).

  </details>

- After OpenClaw restarts, eligible unfinished chats can continue with saved progress and partial answers intact. Cancelled work and tool actions whose effects are uncertain are not automatically repeated.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Continue eligible interrupted chats once their session or workspace is ready. [#168650](https://github.com/openclaw/openclaw/pull/168650) by [@steipete](https://github.com/steipete).
  - Recovers eligible interrupted main chats when a shutdown marker was missed and reports archived recovery entries more clearly. [#168651](https://github.com/openclaw/openclaw/pull/168651) by [@steipete](https://github.com/steipete).
  - Return interrupted delegated work to its original parent, including quiet children and nested parents, while preserving pending final replies and respecting cancellation and reset. [#169144](https://github.com/openclaw/openclaw/pull/169144), thanks [@steipete](https://github.com/steipete).
  - Preserve the sender label on replayed inter-session messages, including forwarded messages. [#169130](https://github.com/openclaw/openclaw/pull/169130), thanks [@RomneyDa](https://github.com/RomneyDa).
  - Restart recovery retains eligible queued or preparing turns. Delegated work still needs reconstructable sender authority. If recovery stops, WebChat offers **Resume in new session** and other channels can use `/new` or `/reset`. [PR #170384](https://github.com/openclaw/openclaw/pull/170384). Thanks [@steipete](https://github.com/steipete).
  - Retain restart recovery for a canceled main-session run whose cleanup finishes before its recovery record is saved ([#170699](https://github.com/openclaw/openclaw/pull/170699)). Thanks [@steipete](https://github.com/steipete).
  - Continue eligible main dashboard turns interrupted by a backend restart drain ([#170858](https://github.com/openclaw/openclaw/pull/170858)). Thanks [@steipete](https://github.com/steipete).
  - Keep unread watcher context for an ordinary turn after restart without creating replay turns or outbound replies ([#170781](https://github.com/openclaw/openclaw/pull/170781)). Thanks [@steipete](https://github.com/steipete).
  - Wait for pending worker placement before admitting a chat, retain interrupted-run recovery information, and allow selected trace diagnostics after a native reply. Session and worktree handling also avoid repeated work ([#170860](https://github.com/openclaw/openclaw/pull/170860), [#170845](https://github.com/openclaw/openclaw/issues/170845)). Thanks [@steipete](https://github.com/steipete).
  - Recovered turns use a background lane so they do not fill the interactive lane. [#171242](https://github.com/openclaw/openclaw/pull/171242), thanks to [steipete](https://github.com/steipete).
  - Preserve partial output and continue eligible replies interrupted by a Gateway restart. [#172234](https://github.com/openclaw/openclaw/pull/172234). Thanks to [@steipete](https://github.com/steipete).
  - Record accepted unfinished replies for recovery before restart shutdown cancels them. [#172412](https://github.com/openclaw/openclaw/pull/172412). Thanks to [@steipete](https://github.com/steipete).
  - Recover eligible authenticated CLI and API tasks after steering and repeated restarts while rechecking current authority. [#172356](https://github.com/openclaw/openclaw/pull/172356). Thanks to [@steipete](https://github.com/steipete).
  - Keep the reason for permanent restart-event admission failures and stop retrying those failures indefinitely. [#172322](https://github.com/openclaw/openclaw/pull/172322). Thanks to [@steipete](https://github.com/steipete).
  - Return the established authority error when a recovery continuation is rejected after its authority closes. [#172195](https://github.com/openclaw/openclaw/pull/172195), related to [#172183](https://github.com/openclaw/openclaw/issues/172183). Thanks to [@shakkernerd](https://github.com/shakkernerd).
  - Reuse plugin-managed grant authority during recovered operator runs while continuing policy and revocation checks. [#172482](https://github.com/openclaw/openclaw/pull/172482). Thanks to [@steipete](https://github.com/steipete).
  - Delegated work remains eligible to resume when its completion check meets a Gateway shutdown window. [#172852](https://github.com/openclaw/openclaw/pull/172852), thanks [@RomneyDa](https://github.com/RomneyDa).
  - After an unresumable delegated turn is retired during restart recovery, a conversation can accept a fresh authenticated message. The interrupted work is not replayed, and outstanding delivery or execution work can still block recovery. [#176682](https://github.com/openclaw/openclaw/pull/176682). Thanks [@steipete](https://github.com/steipete), [@enki](https://github.com/enki), and [@Oldrich333](https://github.com/Oldrich333). [@SamuelThornburg](https://github.com/SamuelThornburg) supplied an additional lab reproduction.
  - Recover eligible delegated child work and inline follow-ups after restart without duplicate completion notices. Missing execution records or grants cannot be recreated ([#181373](https://github.com/openclaw/openclaw/pull/181373)). Thanks [@steipete](https://github.com/steipete).
  - Restored child and descendant work waits until it is ready to continue instead of blocking later user messages. [#184022](https://github.com/openclaw/openclaw/pull/184022) Thanks [@steipete](https://github.com/steipete) and [@borclaw](https://github.com/borclaw) for the report.
  - Let later messages proceed after restart while a restored child remains paused ([#185999](https://github.com/openclaw/openclaw/pull/185999)). Thanks to [@vacinc](https://github.com/vacinc).
  - Preserve the restart cancellation reason when a reply finishes during a session restart ([45e2bced](https://github.com/openclaw/openclaw/commit/45e2bcedec8f0561a409faeeff4034327f4dba71)).

  </details>

- New configurations for supported Codex models now use corrected capacity defaults; existing configurations are not changed by this fix.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Use corrected capacity defaults for new configurations of supported GPT-5, GPT-5.1, GPT-5.2 and GPT-5.3 Codex models. [#114891](https://github.com/openclaw/openclaw/pull/114891). Thanks to [@steipete](https://github.com/steipete) and [@snotty](https://github.com/snotty) for related evidence.

  </details>

- Fixes an unfinished [Goal](/tools/goal#automatic-continuation) stopping after an ordinary reply when the assistant still has work to do. In supported chats, it can take another turn toward the same objective without a new prompt.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  Automatic continuation covers built-in chat and supported local and cloud-worker Codex sessions, not other external runtimes, heartbeat turns or independent scheduled work. It stops when the Goal completes, pauses, becomes blocked or reaches a limit. Saved Goal state alone does not start work at boot. See [Goals](/tools/goal#automatic-continuation).

  - Keep working on an unfinished Goal in supported chats after a normal reply, until it finishes, pauses, stops, becomes blocked or reaches a limit. Saved Goals do not start work at boot. [#167897](https://github.com/openclaw/openclaw/pull/167897), thanks to [jacobtomlinson](https://github.com/jacobtomlinson), [RomneyDa](https://github.com/RomneyDa).

  </details>

- Fixes the Resume action being unavailable for an achieved Goal. You can continue that Goal in the same conversation, and the control shows when a resume attempt still needs confirmation or a retry.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Show that Goal Resume is still in progress on desktop and mobile, with a Retry resume control if confirmation does not arrive. [#169789](https://github.com/openclaw/openclaw/pull/169789), thanks to [vincentkoc](https://github.com/vincentkoc).
  - Achieved goals can be explicitly resumed without recreating the goal or conversation ([#171999](https://github.com/openclaw/openclaw/pull/171999)). Thanks to [vincentkoc](https://github.com/vincentkoc) for reporting the issue.

  </details>

- Fixes an authorized scheduled follow-up losing the access it needs to finish work in the same conversation. If a one-time check is still waiting, it can schedule its next check on the same job.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Let newly scheduled follow-ups in the same authenticated conversation retain permitted access and schedule another check on the existing one-time job ([#176422](https://github.com/openclaw/openclaw/pull/176422)). Thanks [@steipete](https://github.com/steipete).

  </details>

- [Scheduled jobs](/automation/cron-jobs) now keep their selected account and allowed tools in affected handoffs, and supported deliveries appear in the conversation or topic that received them. Older jobs without a saved account selection can keep using environment or provider-config keys, but must explicitly select a stored account with `model@profile` before using it; model fallback will not bypass that choice.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep the selected model account on a new isolated job and report when its access is no longer valid ([#172590](https://github.com/openclaw/openclaw/pull/172590)). Thanks [@fuller-stack-dev](https://github.com/fuller-stack-dev).
  - Scheduled CLI jobs can use their native login without silently adopting a stored OpenClaw profile ([#172717](https://github.com/openclaw/openclaw/pull/172717)). Thanks [@steipete](https://github.com/steipete).
  - Scheduled Discord message reads and edits work with Claude CLI authentication without a conflicting host account binding ([#172794](https://github.com/openclaw/openclaw/pull/172794)). Thanks [@patrick-erichsen](https://github.com/patrick-erichsen).
  - Fix false authorization failures when concurrent scheduled runs use the same unchanged saved API-key or OAuth account. [#179333](https://github.com/openclaw/openclaw/pull/179333), [issue #179331](https://github.com/openclaw/openclaw/issues/179331). Thanks to [brandon-julio-t](https://github.com/brandon-julio-t) and [steipete](https://github.com/steipete).
  - Automation owners replacing allowed tools can capture fresh native app access, with guidance when capture is unavailable ([#170498](https://github.com/openclaw/openclaw/pull/170498), [reported in #170298](https://github.com/openclaw/openclaw/issues/170298)). Thanks [@steipete](https://github.com/steipete) and to [@fbuechler](https://github.com/fbuechler) for the report.
  - Scheduled agents without an interactive sender can inspect or remove their own job within existing permissions ([#170864](https://github.com/openclaw/openclaw/pull/170864)). Thanks [@vincentkoc](https://github.com/vincentkoc).
  - Keep permitted tools available to an accepted manual run after its initiating request ends. Revoking the initiating device after activation no longer stops that run; disabling or removing the job still cancels it. [#168037](https://github.com/openclaw/openclaw/pull/168037), thanks to [obviyus](https://github.com/obviyus).
  - Gateway-pinned commands reject conflicting host or node targets before execution ([#176997](https://github.com/openclaw/openclaw/pull/176997), [#169256](https://github.com/openclaw/openclaw/issues/169256)). Thanks [@steipete](https://github.com/steipete) and to [@etzelm](https://github.com/etzelm) for the report.
  - Keep delivered agent, command, and script results in the receiving chat or topic. Cross-agent destinations and native-only content without a text representation can produce a warning instead of a conversation entry. [#168996](https://github.com/openclaw/openclaw/pull/168996), thanks to [obviyus](https://github.com/obviyus), [steipete](https://github.com/steipete), and [Kimiyu-186](https://github.com/Kimiyu-186).
  - Keep a repeated automation result in later model context. [#169369](https://github.com/openclaw/openclaw/pull/169369), thanks to [obviyus](https://github.com/obviyus).
  - Allow confirmed automation announcements to be committed during an active conversation turn, also helping restart handoff proceed. [#181506](https://github.com/openclaw/openclaw/pull/181506). Thanks to [steipete](https://github.com/steipete).
  - Announce cron wakes retain the context of an existing CLI-backed chat across the next reply ([#176218](https://github.com/openclaw/openclaw/pull/176218), [#176208](https://github.com/openclaw/openclaw/issues/176208)). Thanks [@eliavb43](https://github.com/eliavb43) and [@steipete](https://github.com/steipete).
  - Targeted system events from the selected conversation reach the isolated heartbeat prompt, including when the regular heartbeat schedule is disabled ([#175642](https://github.com/openclaw/openclaw/pull/175642), [#175599](https://github.com/openclaw/openclaw/issues/175599)). Thanks [@sunlit-deng](https://github.com/sunlit-deng), [@steipete](https://github.com/steipete) and to [@seriouslysean](https://github.com/seriouslysean) for the report.
  - Repair eligible older dashboard chat roots with Doctor so linked automations regain the appropriate memory access. [#182345](https://github.com/openclaw/openclaw/pull/182345). Thanks to [jalehman](https://github.com/jalehman).
  - Keep configured-key jobs usable alongside the account-selection rules. [#188980](https://github.com/openclaw/openclaw/pull/188980). Thanks to [@RomneyDa](https://github.com/RomneyDa) and [@obviyus](https://github.com/obviyus).

  </details>

- Fixes eligible scheduled runs missed after a restart or clock change not catching up. Already completed slots are not run again; cancelled jobs stay cancelled, and work that may already have had an effect is not automatically repeated.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Make timed, manual and event runs share scheduling capacity, with supported waiting jobs eligible to resume after an interruption. [#169364](https://github.com/openclaw/openclaw/pull/169364), thanks to [steipete](https://github.com/steipete) and [jlapenna](https://github.com/jlapenna) for [the report](https://github.com/openclaw/openclaw/issues/168072).
  - Restore recorded cron results once and mark uncertain active runs interrupted instead of replaying commands, tool effects, or deliveries. Queued timed requests can resume, while manual or event requests whose transient payload is lost are skipped. [#169946](https://github.com/openclaw/openclaw/pull/169946), thanks to [steipete](https://github.com/steipete) and [jlapenna](https://github.com/jlapenna) for [the report](https://github.com/openclaw/openclaw/issues/168072).
  - Keep eligible dashboard automation recovery available when restart draining interrupts a turn. [#170162](https://github.com/openclaw/openclaw/pull/170162), thanks to [steipete](https://github.com/steipete).
  - An interrupted early manual run preserves a separate scheduled one-shot occurrence. The interrupted attempt remains failed with unknown delivery and is not replayed ([#171727](https://github.com/openclaw/openclaw/pull/171727)). Thanks [@steipete](https://github.com/steipete).
  - Recurring jobs advance past a cancelled stop-time slot without replaying it ([#171988](https://github.com/openclaw/openclaw/pull/171988), [#171896](https://github.com/openclaw/openclaw/issues/171896)). Thanks [@steipete](https://github.com/steipete) and to [@Oldrich333](https://github.com/Oldrich333) for the report.
  - Restart catch-up avoids repeating slots covered by a successful or skipped long run while keeping genuinely missed and forced occurrences ([#172497](https://github.com/openclaw/openclaw/pull/172497)). Thanks [@steipete](https://github.com/steipete).
  - Recover eligible missed recurring slots on normal ticks. Jobs configured to skip missed runs continue to do so, and an idle scheduler does not wake before its stored deadline. [#179928](https://github.com/openclaw/openclaw/pull/179928), [issue #179927](https://github.com/openclaw/openclaw/issues/179927). Thanks to [andrewbowlds](https://github.com/andrewbowlds) and [steipete](https://github.com/steipete).
  - Restore admission of eligible catch-up runs after a restart or forward clock jump. [#187558](https://github.com/openclaw/openclaw/pull/187558). Thanks to [romneyda](https://github.com/romneyda), [shakkernerd](https://github.com/shakkernerd), and [steipete](https://github.com/steipete).
  - Blocker explanations no longer turn completed runs into execution failures ([#170267](https://github.com/openclaw/openclaw/pull/170267), related [#161698](https://github.com/openclaw/openclaw/issues/161698) and [#165811](https://github.com/openclaw/openclaw/issues/165811)). Thanks [@steipete](https://github.com/steipete).
  - Delegated scheduled work waits for a child's result after a heartbeat-only handoff and honors an intentionally silent child ([#172407](https://github.com/openclaw/openclaw/pull/172407)). Thanks [@steipete](https://github.com/steipete).
  - Cancelled runs retain unfinished cleanup and delivery work while returning cancellation promptly ([#170264](https://github.com/openclaw/openclaw/pull/170264)). Thanks [@steipete](https://github.com/steipete).
  - On-exit watches wait for command process cleanup before proceeding ([#171832](https://github.com/openclaw/openclaw/pull/171832)). Thanks [@steipete](https://github.com/steipete).
  - Request cancellation when an already paused job is explicitly disabled during a forced run. Cron tool guidance also now describes workspace and sandbox inheritance for current conversations correctly. [#182350](https://github.com/openclaw/openclaw/pull/182350). Thanks to [steipete](https://github.com/steipete).
  - Keep a stopped task cancelled after restart even if one of its helpers finished while the task was stopping, while retaining the helper's result. [#169453](https://github.com/openclaw/openclaw/pull/169453), thanks to [freeqaz-openai](https://github.com/freeqaz-openai).
  - Optional late subagent and `sessions_send` results can settle silently while replies to actual requests remain required. [#172509](https://github.com/openclaw/openclaw/pull/172509), thanks [@steipete](https://github.com/steipete) and [@tre1d](https://github.com/tre1d) for the [related report](https://github.com/openclaw/openclaw/issues/158332).

  </details>

- Automation history and alerts now distinguish a job that ran from a result that could not be delivered. If a one-time job fails and will not run again, the notice tells you to use Run Now or reschedule it.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Ask the original conversation to handle an eligible one-time job failure, or show the owner an alert if that repair cannot start. [#169102](https://github.com/openclaw/openclaw/pull/169102), thanks to [steipete](https://github.com/steipete), and to [erlightbourn-source](https://github.com/erlightbourn-source) and [lonexreb](https://github.com/lonexreb) for identifying the failure-alert defect.
  - Keep cancelled or restart-retired one-shots quiet and record terminal failures for Doctor and eligible notifications or repair. [#169314](https://github.com/openclaw/openclaw/pull/169314), with related work in [#131590](https://github.com/openclaw/openclaw/pull/131590) and [#167908](https://github.com/openclaw/openclaw/pull/167908), thanks to [steipete](https://github.com/steipete), [lonexreb](https://github.com/lonexreb), and [erlightbourn-source](https://github.com/erlightbourn-source).
  - Avoid a premature still-failing alert when a recurring run began before repair finished. Jobs continue running during repair. [#170073](https://github.com/openclaw/openclaw/pull/170073), [issue #170014](https://github.com/openclaw/openclaw/issues/170014), thanks to [obviyus](https://github.com/obviyus).
  - Automatic repair waits keep their timeout across system clock changes ([#171097](https://github.com/openclaw/openclaw/pull/171097), [#170014](https://github.com/openclaw/openclaw/issues/170014), related [#170073](https://github.com/openclaw/openclaw/pull/170073) and [#171094](https://github.com/openclaw/openclaw/pull/171094)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925), [@obviyus](https://github.com/obviyus) and [@altaywtf](https://github.com/altaywtf).
  - A failure alert refused before sending can trigger the existing in-app fallback for the job owner ([#173347](https://github.com/openclaw/openclaw/pull/173347), [#173077](https://github.com/openclaw/openclaw/issues/173077)). Thanks [@steipete](https://github.com/steipete), [@Winoren](https://github.com/Winoren) and to [@Yolo521-bot](https://github.com/Yolo521-bot) for the report.
  - Failed automation notices show a concise recovery summary while leaving the agent's response visible ([#170799](https://github.com/openclaw/openclaw/pull/170799)). Thanks [@steipete](https://github.com/steipete).
  - Tell you to use Run Now or reschedule when a local-provider failure leaves no future automatic run. [#169329](https://github.com/openclaw/openclaw/pull/169329), with related local-provider alert work in [#169278](https://github.com/openclaw/openclaw/pull/169278), thanks to [steipete](https://github.com/steipete).
  - Keep an unresolved announcement destination from turning a successful cron run into an execution error or triggering execution backoff. The report and delivery diagnostic remain in history. [#168380](https://github.com/openclaw/openclaw/pull/168380), thanks to [obviyus](https://github.com/obviyus).
  - Stop labeling unattributed channel failures as model timeouts in cron alerts and history. [#168091](https://github.com/openclaw/openclaw/pull/168091), thanks to [KhanCold](https://github.com/KhanCold), [geekforlife](https://github.com/geekforlife) for [the report](https://github.com/openclaw/openclaw/issues/167865), and [obviyus](https://github.com/obviyus) for confirming the landing.
  - Preserve the scheduled turn's identity when a primary model times out and a configured fallback continues it. [#168509](https://github.com/openclaw/openclaw/pull/168509), thanks to [synthalorian](https://github.com/synthalorian), [steipete](https://github.com/steipete), and [wongwilliam425-ui](https://github.com/wongwilliam425-ui) for [the related report](https://github.com/openclaw/openclaw/issues/168456).
  - Let a configured fallback receive the original saved prompt after a provider timeout without duplicating it. [#168605](https://github.com/openclaw/openclaw/pull/168605), thanks to [steipete](https://github.com/steipete) and [wongwilliam425-ui](https://github.com/wongwilliam425-ui) for [the related report](https://github.com/openclaw/openclaw/issues/168456).
  - Avoid false authorization errors in authenticated local model server logs during cron connectivity checks. [#169795](https://github.com/openclaw/openclaw/pull/169795), thanks to [steipete](https://github.com/steipete) and [franssauermann](https://github.com/franssauermann) for [the report](https://github.com/openclaw/openclaw/issues/157140).
  - Avoid an extra unhandled-rejection warning when a recovered scheduled job fails. [#169525](https://github.com/openclaw/openclaw/pull/169525), thanks to [zhangguiping-xydt](https://github.com/zhangguiping-xydt).

  </details>

- Fixes automation editing losing the selected job after reconnecting or changing views, and keeps a submitted Create & run now action tied to the job being created.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Reconnect to the same Gateway with the selected automation and its run still open. [#169032](https://github.com/openclaw/openclaw/pull/169032), [issue #152963](https://github.com/openclaw/openclaw/issues/152963), thanks to [steipete](https://github.com/steipete) and [vyctorbrzezowski](https://github.com/vyctorbrzezowski).
  - Reload the latest settings after a stale pause or resume is rejected, so you can review them and retry deliberately. [#169290](https://github.com/openclaw/openclaw/pull/169290), thanks to [steipete](https://github.com/steipete).
  - Preserve the selected editor and a submitted Create & run now action when navigating during creation. [#169698](https://github.com/openclaw/openclaw/pull/169698), thanks to [steipete](https://github.com/steipete).
  - A just-completed job can be edited or disabled without a false state-change error ([#172528](https://github.com/openclaw/openclaw/pull/172528)). Thanks [@steipete](https://github.com/steipete).
  - Delivery account suggestions use configured IDs instead of display names ([#171057](https://github.com/openclaw/openclaw/pull/171057), [#171056](https://github.com/openclaw/openclaw/issues/171056), related [#134368](https://github.com/openclaw/openclaw/pull/134368)). Thanks [@ooiuuii](https://github.com/ooiuuii).
  - Job action and run-history menus use shared focus and selection behavior ([#170917](https://github.com/openclaw/openclaw/pull/170917)). Thanks [@steipete](https://github.com/steipete).
  - The Automations model catalog can load after a fresh agent database is initialized ([#171321](https://github.com/openclaw/openclaw/pull/171321)). Thanks [@steipete](https://github.com/steipete).
  - Give clearer local errors and schedule examples for malformed `cron add` and `cron edit` input. Natural-language schedules remain unsupported. [#168163](https://github.com/openclaw/openclaw/pull/168163), thanks to [xialonglee](https://github.com/xialonglee) and [obviyus](https://github.com/obviyus).
  - Command automations preserve an explicitly configured `__proto__` environment override ([#171770](https://github.com/openclaw/openclaw/pull/171770)). Thanks [@zhangguiping-xydt](https://github.com/zhangguiping-xydt).
  - Isolated cron runs avoid duplicating prior session lineage, and cleanup processes older oversized entries in pages ([#172072](https://github.com/openclaw/openclaw/pull/172072), [#171913](https://github.com/openclaw/openclaw/issues/171913)). Thanks [@steipete](https://github.com/steipete) and to [@Oldrich333](https://github.com/Oldrich333) for the report.
  - Cron history cleanup avoids loading unrelated large payloads, reducing the risk of shared state-worker exhaustion ([#174530](https://github.com/openclaw/openclaw/pull/174530), [#174078](https://github.com/openclaw/openclaw/issues/174078)). Thanks [@wangmiao0668000666](https://github.com/wangmiao0668000666), [@RomneyDa](https://github.com/RomneyDa) and to [@asikorskiy](https://github.com/asikorskiy) for the report.
  - Scheduled run activation and completion avoid repeated database work ([#170874](https://github.com/openclaw/openclaw/pull/170874)). Thanks [@steipete](https://github.com/steipete).
  - Release a delayed cron write and retry so other state writes have a chance to proceed. [#168291](https://github.com/openclaw/openclaw/pull/168291), thanks to [steipete](https://github.com/steipete) and [jlapenna](https://github.com/jlapenna) for [the report](https://github.com/openclaw/openclaw/issues/168072).
  - Keep busy cron operations from holding the shared database writer while waiting for host callbacks. [#168619](https://github.com/openclaw/openclaw/pull/168619), thanks to [steipete](https://github.com/steipete) and [jlapenna](https://github.com/jlapenna) for [the report](https://github.com/openclaw/openclaw/issues/168072).
  - Apply cron job edits to current data so concurrent runtime updates are preserved. [#169766](https://github.com/openclaw/openclaw/pull/169766), thanks to [steipete](https://github.com/steipete) and [jlapenna](https://github.com/jlapenna) for [the report](https://github.com/openclaw/openclaw/issues/168072).
  - Keep published session metadata consistent with fresh reads to avoid false ownership conflicts in scheduled work. [#169899](https://github.com/openclaw/openclaw/pull/169899), thanks to [steipete](https://github.com/steipete).
  - Keep conversations counted as running in Online while delegated descendants are active, without counting the same conversation twice. [#168186](https://github.com/openclaw/openclaw/pull/168186), thanks to [steipete](https://github.com/steipete).
  - Combine eligible session-creation notices into a bounded Home summary, leaving room for reminders and other notifications. Older entries can be omitted and the pending summary is lost on restart. [#168239](https://github.com/openclaw/openclaw/pull/168239), thanks to [steipete](https://github.com/steipete).
  - Stop repeated Dreaming malformed-key log errors for heartbeats using a session named `heartbeat`. [#168502](https://github.com/openclaw/openclaw/pull/168502), thanks to [steipete](https://github.com/steipete) and [michaelrobertexp-source](https://github.com/michaelrobertexp-source) for [the report](https://github.com/openclaw/openclaw/issues/168021).
  - Standing-intent expiry and cooldown maintenance runs at known deadlines and catches up after restart ([#171234](https://github.com/openclaw/openclaw/pull/171234)). Thanks [@steipete](https://github.com/steipete).
  - Standing-intent fire limits and cooldowns accept valid numeric strings ([#172329](https://github.com/openclaw/openclaw/pull/172329), [#172297](https://github.com/openclaw/openclaw/issues/172297)). Thanks [@steipete](https://github.com/steipete) and to [@daddyclint82](https://github.com/daddyclint82) for the report.
  - Reject a FIFO roster promptly while continuing to support regular JSON files and symlinks to them. [#183614](https://github.com/openclaw/openclaw/pull/183614). Thanks to [Leon-SK668](https://github.com/Leon-SK668) and [obviyus](https://github.com/obviyus).
  - Keep hot reload running while cron monitor reconciliation has a scheduled retry. [#170951](https://github.com/openclaw/openclaw/pull/170951), [report #170644](https://github.com/openclaw/openclaw/issues/170644), earlier [report #135433](https://github.com/openclaw/openclaw/issues/135433) and [#148592](https://github.com/openclaw/openclaw/pull/148592). Thanks to [@steipete](https://github.com/steipete), [@Navras98](https://github.com/Navras98), and [@davidcittadini](https://github.com/davidcittadini).

  </details>

- Fixes agents continuing from an older request after an interruption or missing newly discovered tools in affected CLI chats. The current request and permitted tool choices remain available.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep the original request available when a built-in or authorized CLI turn resumes after interruption, [#168279](https://github.com/openclaw/openclaw/pull/168279). Thanks to [steipete](https://github.com/steipete).
  - Keep the agent focused on your current request unless you ask it to return to earlier work, [#168906](https://github.com/openclaw/openclaw/pull/168906). Thanks to [steipete](https://github.com/steipete) and [alter](https://github.com/alter) for related investigation.
  - `/btw`, `/side`, and `/loop` preserve multiline questions and recurring prompts, including indentation. [#176293](https://github.com/openclaw/openclaw/pull/176293), [issue #176250](https://github.com/openclaw/openclaw/issues/176250). Thanks [@goutamadwant](https://github.com/goutamadwant) and [@steipete](https://github.com/steipete), and [@yetval](https://github.com/yetval) for reporting the issue.
  - Changed MCP tool names start a fresh native CLI session so its tool catalog can refresh while the OpenClaw chat remains. History recovery follows the existing account boundary. [#176577](https://github.com/openclaw/openclaw/pull/176577), [issue #175670](https://github.com/openclaw/openclaw/issues/175670). Thanks [@steipete](https://github.com/steipete), and [@jackylecalvez2](https://github.com/jackylecalvez2) for reporting the issue.
  - Agent guidance omits reasoning and status command hints when the channel has no enabled command route. [#181997](https://github.com/openclaw/openclaw/pull/181997), [issue #181956](https://github.com/openclaw/openclaw/issues/181956). Thanks [@LiuwqGit](https://github.com/LiuwqGit), [@steipete](https://github.com/steipete), and [@Card4Philippe](https://github.com/Card4Philippe).
  - Agent guidance no longer recommends disabled chat update and restart commands. [#182001](https://github.com/openclaw/openclaw/pull/182001), related [issue #181956](https://github.com/openclaw/openclaw/issues/181956). Thanks [@MonkeyLeeT](https://github.com/MonkeyLeeT) and [@steipete](https://github.com/steipete), and [@Card4Philippe](https://github.com/Card4Philippe) for reporting the issue.
  - Retain delivered slash commands and replies in history with sensitive recorded values redacted in [#169026](https://github.com/openclaw/openclaw/pull/169026). Thanks [@obviyus](https://github.com/obviyus).
  - Preserve the order of captions and images in OpenAI Responses tool results in [#169119](https://github.com/openclaw/openclaw/pull/169119). Thanks [@Shenrui-Ma](https://github.com/Shenrui-Ma) and [@obviyus](https://github.com/obviyus).
  - Send deferred Tool Search results to the model without duplicating structured data in [#169537](https://github.com/openclaw/openclaw/pull/169537), addressing [#169492](https://github.com/openclaw/openclaw/issues/169492). Thanks [@TUARAN](https://github.com/TUARAN), [@obviyus](https://github.com/obviyus) and reporter [@kseczhouyb](https://github.com/kseczhouyb).
  - Use `dispatch_action` consistently for generic Tool Search in [#169552](https://github.com/openclaw/openclaw/pull/169552), related to [#145137](https://github.com/openclaw/openclaw/issues/145137). Thanks [@steipete](https://github.com/steipete) and reporter [@lator57-gif](https://github.com/lator57-gif).
  - Tell a resumed Claude CLI session about missed turns after switching models, with a session-history hint when that tool is available. The notice does not itself include the missed messages. [#168726](https://github.com/openclaw/openclaw/pull/168726). Thanks to [@obviyus](https://github.com/obviyus).
  - Supply earlier-message metadata and policy-permitted history lookup after an account switch, without automatically replaying the transcript or durable context ([#168781](https://github.com/openclaw/openclaw/pull/168781)). Thanks [@obviyus](https://github.com/obviyus).

  </details>

- Fixes new agent setup being blocked by stale session or model information, and shows supported workspace, model and access choices for the agent you are creating.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Let explicitly authorized local coding helpers use the tools granted to them ([#168085](https://github.com/openclaw/openclaw/pull/168085)). Thanks [@steipete](https://github.com/steipete).
  - Select a compatible hosted workspace and model from session creation and settings ([#168259](https://github.com/openclaw/openclaw/pull/168259)). Thanks [@steipete](https://github.com/steipete).
  - Preserve supported saved conversations across the binding upgrade ([#168150](https://github.com/openclaw/openclaw/pull/168150)). Thanks [@steipete](https://github.com/steipete).
  - Drain active agent work before deletion and resume pending cleanup after restart ([#168199](https://github.com/openclaw/openclaw/pull/168199)). Thanks [@steipete](https://github.com/steipete).
  - Preserve ACP tool narration and the final answer after commentary ([#168201](https://github.com/openclaw/openclaw/pull/168201), [#167837](https://github.com/openclaw/openclaw/issues/167837)). Thanks [@steipete](https://github.com/steipete) and reporter [@YiWang24](https://github.com/YiWang24).
  - Keep Claude CLI models in the picker after plugin or agent settings reload ([#168315](https://github.com/openclaw/openclaw/pull/168315)). Thanks [@obviyus](https://github.com/obviyus).
  - Show account-listed OpenCode Go chat models even when public metadata is missing ([#168286](https://github.com/openclaw/openclaw/pull/168286)). Thanks [@obviyus](https://github.com/obviyus).
  - Show OpenCode Zen Kimi K3's supported thinking levels and send the explicit Off setting ([#168209](https://github.com/openclaw/openclaw/pull/168209), [#168174](https://github.com/openclaw/openclaw/issues/168174)). Thanks [@steipete](https://github.com/steipete).
  - Show one xAI model group in early lists after a restart while retaining existing x-ai references ([#168180](https://github.com/openclaw/openclaw/pull/168180)). Thanks [@obviyus](https://github.com/obviyus).
  - Recognize the current agent's model aliases as slash shortcuts ([#168287](https://github.com/openclaw/openclaw/pull/168287), [#168122](https://github.com/openclaw/openclaw/issues/168122)). Thanks [@steipete](https://github.com/steipete) and co-author and reporter [@yetval](https://github.com/yetval).
  - Local-provider preflight skips count toward the configured failure-alert threshold. Jobs stay scheduled, and full failure-alert opt-outs still apply. [#169278](https://github.com/openclaw/openclaw/pull/169278), [issue #168026](https://github.com/openclaw/openclaw/issues/168026). Thanks [@steipete](https://github.com/steipete) and [@obviyus](https://github.com/obviyus).
  - Allow agent creation alongside the main agent's first session. [PR #169779](https://github.com/openclaw/openclaw/pull/169779). Thanks to [steipete](https://github.com/steipete).
  - Keep an open agent database connection associated with its original database when a symlink is retargeted. [PR #169701](https://github.com/openclaw/openclaw/pull/169701). Thanks to [steipete](https://github.com/steipete).
  - Skip stale multiple-store sentinel registrations during configured-agent startup and add standalone Doctor cleanup for invalid registrations. Cleanup is deferred during updates. [PR #170043](https://github.com/openclaw/openclaw/pull/170043), [issue #169764](https://github.com/openclaw/openclaw/issues/169764). Thanks to [steipete](https://github.com/steipete) and [ourcoms2018](https://github.com/ourcoms2018).
  - Keep the revoked status and remove the Revoke button after a successful revocation. [PR #169695](https://github.com/openclaw/openclaw/pull/169695). Thanks to [steipete](https://github.com/steipete).

  </details>

- If a tool times out, OpenClaw now keeps completed output and tells you when its effect is unknown, rather than assuming it is safe to run again. Automatic retry is limited to work known not to have started or safe to repeat.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Finish optional Ultrafast model discovery within its time limit even if the computer clock changes ([#168144](https://github.com/openclaw/openclaw/pull/168144)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925).
  - Keep the session fork metadata timeout stable across clock changes ([#168298](https://github.com/openclaw/openclaw/pull/168298)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925).
  - Release a canceled startup's queue position so a later attempt can proceed to its own handoff wait. Replacement writes still wait for the old process to exit ([#168347](https://github.com/openclaw/openclaw/pull/168347)). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Keep the native Codex inference connection timeout steady when the system clock changes after admission. [#168731](https://github.com/openclaw/openclaw/pull/168731). Thanks to [@SunnyShu0925](https://github.com/SunnyShu0925) and [@obviyus](https://github.com/obviyus).
  - Keep Codex app-server process inspection within its intended time budget when the host clock changes. [#168736](https://github.com/openclaw/openclaw/pull/168736). Thanks to [@SunnyShu0925](https://github.com/SunnyShu0925) and [@altaywtf](https://github.com/altaywtf).
  - Resume queued chats after a plugin reload when the exact old thread is unloaded, and preserve startup failures and cancellations as their intended outcomes. [#182104](https://github.com/openclaw/openclaw/pull/182104) Thanks [@jjjhenriksen](https://github.com/jjjhenriksen) and [@RomneyDa](https://github.com/RomneyDa).
  - R2 downloads resume after transient interruptions during verification or restore. Starting a new command begins a new download. [#171292](https://github.com/openclaw/openclaw/pull/171292), reported in [#171165](https://github.com/openclaw/openclaw/issues/171165). Thanks [@steipete](https://github.com/steipete) and [@davidcittadini](https://github.com/davidcittadini).
  - Added a safe retry or explicit failure for detected text-only tool calls. [#171898](https://github.com/openclaw/openclaw/pull/171898), with related reports [#138245](https://github.com/openclaw/openclaw/issues/138245) and [#168744](https://github.com/openclaw/openclaw/issues/168744). Thanks [@steipete](https://github.com/steipete), [@5jrfrbd6z9-spec](https://github.com/5jrfrbd6z9-spec) and [@chitowntony](https://github.com/chitowntony).
  - Allowed consented Muse chats with conversation tool restrictions while retaining the native permission boundary. [#172361](https://github.com/openclaw/openclaw/pull/172361). Thanks [@obviyus](https://github.com/obviyus).
  - Preserved recovered final replies and required complete, identified delivery before recording success. [#171929](https://github.com/openclaw/openclaw/pull/171929), related to [#155119](https://github.com/openclaw/openclaw/issues/155119). Thanks [@fuller-stack-dev](https://github.com/fuller-stack-dev).
  - When a tool times out before it finishes, report the interruption and keep completed output without automatically rerunning the turn. [#172983](https://github.com/openclaw/openclaw/pull/172983) Thanks to [@steipete](https://github.com/steipete) and [@budzation](https://github.com/budzation) for the [report](https://github.com/openclaw/openclaw/issues/172899).
  - Preserve blank lines when agents read files across pages, including reads that start on a blank line. [#173835](https://github.com/openclaw/openclaw/pull/173835) Thanks to [@steipete](https://github.com/steipete).
  - Keep recognized final exit, signal, timeout and launch-failure messages when long command output is shortened. [#174030](https://github.com/openclaw/openclaw/pull/174030) Thanks to [@vincentkoc](https://github.com/vincentkoc).
  - Honor explicitly preserved login environment credentials in Claude CLI readiness checks so affected child-agent requests can proceed. [#175114](https://github.com/openclaw/openclaw/pull/175114) Thanks to [@RomneyDa](https://github.com/RomneyDa).
  - Interrupted tool recovery requires safe tools and refuses CLI runtimes that cannot enforce them. The same backport improves Codex handoffs and command results, preserves the active request during compaction, supports OpenClaw goal continuation in supported local and cloud-worker Codex sessions, and provides a masked GitHub reconnect flow in capable Control UI sessions. Native Codex automatic goal continuation remains disabled. [#180270](https://github.com/openclaw/openclaw/pull/180270) Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Native session read failures show their actual error, allowing eligible timeouts before execution to use the existing scheduled-job retry policy. [#175654](https://github.com/openclaw/openclaw/pull/175654) Thanks [@enki](https://github.com/enki).
  - Keep internal Gateway and plugin response timeouts on their elapsed-time budget when the computer clock changes. [#171094](https://github.com/openclaw/openclaw/pull/171094), related [#108423](https://github.com/openclaw/openclaw/pull/108423) and [#154321](https://github.com/openclaw/openclaw/pull/154321). Thanks to [@SunnyShu0925](https://github.com/SunnyShu0925) and [@obviyus](https://github.com/obviyus).

  </details>

- Fixes some shutdowns waiting on processes that already exited and leaves more worker and reader resources cleanly closed. If cleanup cannot be confirmed, inspect its status rather than assuming the process stopped.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Finish shutting down retained worker connections even after their worker list has cleared. [#168862](https://github.com/openclaw/openclaw/pull/168862) by [@steipete](https://github.com/steipete), with thanks to [@Captain69G](https://github.com/Captain69G).
  - Idle Gateways stop periodic plugin-state expiry sweeps. Expired values remain unreadable, while inactive namespaces can retain expired rows on disk until a later write. [#169524](https://github.com/openclaw/openclaw/pull/169524). Thanks [@steipete](https://github.com/steipete).
  - Stall diagnostics add callback labels and a bounded trailing CPU sample on supported Node 26 processes. The sample describes recent activity rather than identifying one callback as the cause. [#169535](https://github.com/openclaw/openclaw/pull/169535). Thanks [@steipete](https://github.com/steipete).
  - Avoid retaining empty request activity records and length-specific cumulative tool metric series. Exact parameter lengths remain on tool spans. [#169786](https://github.com/openclaw/openclaw/pull/169786). Thanks [@steipete](https://github.com/steipete).
  - Let an admitted wake callback finish under its captured handler, and start listeners added during an event with the next event. [#169648](https://github.com/openclaw/openclaw/pull/169648). Thanks [@steipete](https://github.com/steipete).
  - Gateway shutdown and restart finish their lifecycle records before shared database workers close in [#169983](https://github.com/openclaw/openclaw/pull/169983). Thanks [@steipete](https://github.com/steipete).
  - Idle Gateways defer unobserved health, GitHub discovery, and upstream checks until needed. [PR #170389](https://github.com/openclaw/openclaw/pull/170389). Thanks [@steipete](https://github.com/steipete).
  - Gateway shutdown waits for accepted session updates to finish preparation before closing connected clients. Existing client delivery checks still apply. [#170555](https://github.com/openclaw/openclaw/pull/170555). Thanks to [steipete](https://github.com/steipete).
  - Completed and failed operations release owned resources more consistently, including the OpenRouter sign-in listener and Tlon HTTP resources. [#170439](https://github.com/openclaw/openclaw/pull/170439). Thanks to [steipete](https://github.com/steipete).
  - Doctor and startup inspections release temporary plugin captures, and rejected file-lock handoffs release the acquired lock. [#170530](https://github.com/openclaw/openclaw/pull/170530). Thanks to [steipete](https://github.com/steipete).
  - Stalled transcript indexing receives a five-second grace during Gateway shutdown before cancellation. Saved transcripts and required cleanup remain protected, and unfinished indexing can be rediscovered after restart. The grace is not a total shutdown deadline. See the [restart recovery guide](/gateway/restart-recovery). [#170493](https://github.com/openclaw/openclaw/pull/170493). Thanks to [steipete](https://github.com/steipete), [Oldrich333](https://github.com/Oldrich333) for the [report](https://github.com/openclaw/openclaw/issues/169777), and [O96a](https://github.com/O96a) for shutdown advice.
  - Ordinary shutdown gives execution cleanup time to release worktrees, and a warning-only Codex profile check no longer holds up startup. [#171308](https://github.com/openclaw/openclaw/pull/171308), thanks to [steipete](https://github.com/steipete).
  - After a validated external drain, supervised restarts skip repeated waits and settle queued work while preserving restart recovery and final transcript writes. [#171399](https://github.com/openclaw/openclaw/pull/171399), thanks to [steipete](https://github.com/steipete).
  - Drain status reports blockers promptly, and the deployment controller can retry transient transport failures within its original deadline. The changed controller executable and library need to be adopted together, and a failed poll does not authorize interruption. Gateway hello also no longer waits for watched-session membership preparation. [#171442](https://github.com/openclaw/openclaw/pull/171442), thanks to [steipete](https://github.com/steipete).
  - Finish shutdown sooner when attached command trees have exited. The plugin SDK process runtime also exposes a latched `exited()` check on the process-tree handle. [#171725](https://github.com/openclaw/openclaw/pull/171725) by [steipete](https://github.com/steipete).
  - Clean up streaming observation when a client disconnects while authorization is pending. [#171713](https://github.com/openclaw/openclaw/pull/171713) by [steipete](https://github.com/steipete).
  - Prevent an early Gateway exit when an explicit Node heap budget is combined with `--exit-on-contradictory-flags`. Workers inherit the configured ceiling in this diagnostic mode. [#171490](https://github.com/openclaw/openclaw/pull/171490) by [RomneyDa](https://github.com/RomneyDa).
  - Busy shutdown cancels in-flight worker preparation while preserving recovery state. [#171843](https://github.com/openclaw/openclaw/pull/171843) by [steipete](https://github.com/steipete).
  - Gateway stall monitoring removes process-wide asynchronous hook overhead. Task labels now cover synchronous scopes, and some stalls during healthy idle periods may go unreported. [#172531](https://github.com/openclaw/openclaw/pull/172531), thanks [@steipete](https://github.com/steipete).
  - Foreground transcript readers release database resources during cleanup, addressing a Windows cleanup hang. [#172506](https://github.com/openclaw/openclaw/pull/172506), thanks [@joshavant](https://github.com/joshavant).
  - Inspect macOS processes natively for supervisor cleanup and Codex containment, including a bounded recheck when an exiting process is briefly unavailable. Migrate the process-runtime SDK from `DarwinProcess.uid` to `owner`. [#182215](https://github.com/openclaw/openclaw/pull/182215), combining [#174147](https://github.com/openclaw/openclaw/pull/174147), [#174284](https://github.com/openclaw/openclaw/pull/174284), [#175368](https://github.com/openclaw/openclaw/pull/175368), [#176576](https://github.com/openclaw/openclaw/pull/176576) and [#176612](https://github.com/openclaw/openclaw/pull/176612). Thanks [@steipete](https://github.com/steipete).
  - Preserve file-backed standard input when a service-child supervision anchor retires. [#187804](https://github.com/openclaw/openclaw/pull/187804). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Keep orphaned-process cleanup on elapsed time so clock changes do not shorten or extend its shutdown grace period ([#181335](https://github.com/openclaw/openclaw/pull/181335)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925).
  - Keep spawn-broker child cleanup and confirmation deadlines stable across system-clock changes ([#181360](https://github.com/openclaw/openclaw/pull/181360)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@steipete](https://github.com/steipete).
  - Honor a stop signal during restart drain after the existing cleanup completes ([#186055](https://github.com/openclaw/openclaw/pull/186055)). Thanks to [@freeqaz](https://github.com/freeqaz).
  - Deliver confirmed service-child cancellation exits to existing and late exit listeners ([7fdc3dcd](https://github.com/openclaw/openclaw/commit/7fdc3dcd45be661e4e032281af7371a5dd415cbb)).
  - Avoid duplicate recurring maintenance runs under clock drift, including the exact half-period boundary. [Scheduler fix](https://github.com/openclaw/openclaw/commit/344b71032447521feaff383f619667801dff6d83) and [boundary follow-up](https://github.com/openclaw/openclaw/commit/741a6d2cf6e791c26b194d500fdf4708ec0abce4), thanks to [Patrick-Erichsen](https://github.com/Patrick-Erichsen).
  - Avoid transient Skills worker filesystem watches that could delay shutdown, observed on macOS. [Commit](https://github.com/openclaw/openclaw/commit/a6491a1b37e138700d9db52e8ee9bafcebe9466a)
  - Close retained agent directory watchers during shared-state shutdown. [Commit](https://github.com/openclaw/openclaw/commit/7e4c0f7378ea285e405bdb9cfca3207d2529d30f)
  - Close idle SQLite readers before broker shutdown to avoid an extra wait during Linux Gateway shutdown and restart. [Commit](https://github.com/openclaw/openclaw/commit/075dc2f6777726c52c808228f8dd43ee746d81e4)
  - Reduce potential memory retention when a scheduler scope closes after its parent has stopped. [Commit](https://github.com/openclaw/openclaw/commit/d8af435b5ba1495f35f5df6a48b740dd2029d77a)
  - End pending device scope-upgrade waits as interruptions when the Gateway scheduler shuts down. [Commit](https://github.com/openclaw/openclaw/commit/0dc75157e1b1f9abfafd661b1e16276990c0f649)
  - Preserve empty arguments and the positions of later arguments in generated systemd service commands. [Commit](https://github.com/openclaw/openclaw/commit/82600d8d4828223dcad244612312d30d69d9763a), thanks to [shakkernerd](https://github.com/shakkernerd) and [gideonpraise](https://github.com/gideonpraise).
  - Restore structured cleanup duration, escalation timing and signal failure fields for tools inspecting service-child cleanup errors. [Commit](https://github.com/openclaw/openclaw/commit/edd07a352505e6443c853f835b78a2ab6a57e9c9), thanks to [romneyda](https://github.com/romneyda).

  </details>

- Fixes valid nested helper results being rejected, and tells you when the helper has used up its result-submission retries instead of implying later submissions were checked.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Accept valid nested JSON objects and arrays when a helper returns them as a JSON string. [#150209](https://github.com/openclaw/openclaw/pull/150209), [reported in #150167](https://github.com/openclaw/openclaw/issues/150167). Thanks to [chelsealong](https://github.com/chelsealong), [steipete](https://github.com/steipete), and [residentb2b](https://github.com/residentb2b).
  - Report when a collector has exhausted its structured-output retries instead of presenting the previous schema error as a new validation result. Later calls are not evaluated after the budget is spent ([#181515](https://github.com/openclaw/openclaw/pull/181515), [#181442](https://github.com/openclaw/openclaw/issues/181442)). Thanks [@sukhdeepjohar](https://github.com/sukhdeepjohar), [@oldrich333](https://github.com/oldrich333) and [@steipete](https://github.com/steipete).

  </details>

- Fixes authorized CLI-backed tool calls being refused while another command runs, or failing before the tool actually starts because of a local connection race.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Allow authorized host commands to run together without a false denial caused by another command's usage record. [PR #171143](https://github.com/openclaw/openclaw/pull/171143). Thanks [steipete](https://github.com/steipete).
  - CLI-backed agents avoid a local connection reuse race that could fail a tool call before it started. Long-running responses remain supported. [PR #172980](https://github.com/openclaw/openclaw/pull/172980), [issue #172871](https://github.com/openclaw/openclaw/issues/172871). Thanks [steipete](https://github.com/steipete) and reporter [Oldrich333](https://github.com/Oldrich333).
  - Gateway-owned session ID lookup and creation for agent requests. [PR #172110](https://github.com/openclaw/openclaw/pull/172110). Thanks [steipete](https://github.com/steipete).

  </details>

- Fixes agents getting stuck after you answer a question, steer an active turn or continue a long chat after compaction. Pending helper results remain available for supported recovery after interruptions.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep existing agents available while you add or remove a different agent ([#169249](https://github.com/openclaw/openclaw/pull/169249)). Thanks [@steipete](https://github.com/steipete).
  - Wait for the requested agent to finish starting without holding up ready agents ([#168826](https://github.com/openclaw/openclaw/pull/168826)). Thanks [@steipete](https://github.com/steipete). Thanks [@xiaozishan](https://github.com/xiaozishan) for the report.
  - Prevent a settled database write from leaving an agent stuck rejecting messages when a separate read remains open ([#169064](https://github.com/openclaw/openclaw/pull/169064)). Thanks [@steipete](https://github.com/steipete).
  - Skip completed child-session reads during subagent restart recovery so an unreadable completed session does not block later active runs ([#169034](https://github.com/openclaw/openclaw/pull/169034)). Thanks [@steipete](https://github.com/steipete).
  - Keep unconfirmed subagent completion announcements eligible for bounded recovery after transcript contention ([#169015](https://github.com/openclaw/openclaw/pull/169015)). Thanks [@ruel225](https://github.com/ruel225) and [@steipete](https://github.com/steipete).
  - Keep accepted steering messages in order and their consumption status aligned with the saved conversation ([#169061](https://github.com/openclaw/openclaw/pull/169061)). Thanks [@steipete](https://github.com/steipete).
  - Resume the waiting agent after you answer its question. [#169306](https://github.com/openclaw/openclaw/pull/169306) Thanks [@steipete](https://github.com/steipete).
  - On Linux, steering an active native Codex conversation no longer hangs and blocks later messages. [#169343](https://github.com/openclaw/openclaw/pull/169343) Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Restores compatible Codex follow-ups after conversation preparation fails, including while a background command continues. Incompatible policy changes remain refused while that work is active. [#169431](https://github.com/openclaw/openclaw/pull/169431) Thanks [@jjjhenriksen](https://github.com/jjjhenriksen) and [@RomneyDa](https://github.com/RomneyDa).
  - Preserves separate watched-task results across a Gateway restart when tasks share a child session. Replacing the same task still invalidates its older result. [#169489](https://github.com/openclaw/openclaw/pull/169489) Thanks [@steipete](https://github.com/steipete).
  - Fixes a next message failing while saved conversation history is rebuilt after native compaction. [#169583](https://github.com/openclaw/openclaw/pull/169583) Thanks [@obviyus](https://github.com/obviyus).
  - Keeps recent context consistent in long conversations when messages arrive during a read. [#169619](https://github.com/openclaw/openclaw/pull/169619), [related issue #127629](https://github.com/openclaw/openclaw/issues/127629). Thanks [@steipete](https://github.com/steipete).
  - Workspace prompt prefixes remain steadier as capabilities change, and live and replayed failed-turn histories agree. [#170516](https://github.com/openclaw/openclaw/pull/170516), thanks to [@steipete](https://github.com/steipete).
  - An agent can continue once after malformed tool arguments follow consumed failures that were all proven not to have started. [#170615](https://github.com/openclaw/openclaw/pull/170615), thanks to [@steipete](https://github.com/steipete), [@r3n3x](https://github.com/r3n3x) for the [report](https://github.com/openclaw/openclaw/issues/170522), [@fransqaas](https://github.com/fransqaas) for related work and [@akushonkamen](https://github.com/akushonkamen) for the investigation.
  - Responses tool calls using a supported alias no longer fail with a false tool-name change, including when spawning a child. [#170751](https://github.com/openclaw/openclaw/pull/170751), thanks to [@steipete](https://github.com/steipete).
  - Deferred agents become available before background transcript repair completes. [#170849](https://github.com/openclaw/openclaw/pull/170849), thanks to [@steipete](https://github.com/steipete).
  - Delayed worker results remain valid when unchanged agent database schema facts are republished. [#170194](https://github.com/openclaw/openclaw/pull/170194), thanks to [@steipete](https://github.com/steipete).

  </details>

### Messaging, voice and media

- Fixes Telegram repeating a spoken answer when its final caption uses different paragraph breaks from the streamed text.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Captioned final speech in Telegram no longer repeats the same answer when its paragraph breaks differ from the streamed text. [#181161](https://github.com/openclaw/openclaw/pull/181161), fixing [#181070](https://github.com/openclaw/openclaw/issues/181070). Thanks [@mushuiyu886](https://github.com/mushuiyu886), [@steipete](https://github.com/steipete) and reporter [@julianloperar](https://github.com/julianloperar).

  </details>

- Fixes speech-only heartbeat replies not being delivered and keeps the spoken answer available to later OpenAI Completions turns.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Speech-only heartbeat replies can be spoken and delivered under the existing voice settings, and later OpenAI Completions turns can retain the spoken answer in context. [#170357](https://github.com/openclaw/openclaw/pull/170357), [#170027](https://github.com/openclaw/openclaw/issues/170027), [#170062](https://github.com/openclaw/openclaw/issues/170062). Thanks [@ericcurtin](https://github.com/ericcurtin), [@steipete](https://github.com/steipete), [@Twilight-Networks](https://github.com/Twilight-Networks) and [@obviyus](https://github.com/obviyus) for the replay probe.

  </details>

- [Talk voice and transcription choices](/nodes/talk/realtime-sessions) now keep the settings you selected when providers refresh. Language hints reach automatically found Python Whisper, and supported GPT-Live subscription voice accepts a valid pasted ChatGPT access token with an account ID.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Talk choices remain available during provider refresh. [#172556](https://github.com/openclaw/openclaw/pull/172556). Thanks [@steipete](https://github.com/steipete).
  - Talk keeps a configured custom Azure Speech endpoint when only the voice is overridden. [#151253](https://github.com/openclaw/openclaw/pull/151253). Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@obviyus](https://github.com/obviyus).
  - Automatically discovered Python Whisper receives a configured or requested language hint. [#164841](https://github.com/openclaw/openclaw/pull/164841), [#164840](https://github.com/openclaw/openclaw/issues/164840). Thanks [@ooiuuii](https://github.com/ooiuuii) and [@obviyus](https://github.com/obviyus).
  - GPT-Live subscription voice can use a valid pasted ChatGPT access token carrying an account ID for Voice Call, Discord and Talk. [#166211](https://github.com/openclaw/openclaw/pull/166211). Thanks [@VACInc](https://github.com/VACInc).
  - Talk voice reads and selections clean up authorization resources after success or error. [#170386](https://github.com/openclaw/openclaw/pull/170386). Thanks [@steipete](https://github.com/steipete).
  - Talk provider choices retain the selected speech provider's configuration during readiness checks. [#170412](https://github.com/openclaw/openclaw/pull/170412). Thanks [@steipete](https://github.com/steipete).
  - Talk checks speech, transcription and realtime providers together when building the provider list. [#170806](https://github.com/openclaw/openclaw/pull/170806). Thanks [@steipete](https://github.com/steipete).
  - Talk provider choices no longer repeat the same realtime setup while loading. [#171099](https://github.com/openclaw/openclaw/pull/171099). Thanks [@steipete](https://github.com/steipete).
  - Talk shows the applied settings rather than an unapplied edit; pending or rejected changes can appear once a reload succeeds. [#171607](https://github.com/openclaw/openclaw/pull/171607). Thanks [@steipete](https://github.com/steipete).
  - Talk provider choices can load without checking the same transcription and audio models repeatedly. [#172538](https://github.com/openclaw/openclaw/pull/172538). Thanks [@steipete](https://github.com/steipete).
  - ElevenLabs batch transcription receives configured options, including explicit false values. [#177975](https://github.com/openclaw/openclaw/pull/177975), fixing [#168580](https://github.com/openclaw/openclaw/issues/168580). Thanks [@HeZ2z](https://github.com/HeZ2z), [@obviyus](https://github.com/obviyus) and reporter [@exGeni](https://github.com/exGeni).
  - Talk speech and realtime provider keys accept different case or surrounding whitespace. Select a provider explicitly when more than one is configured. [Commit 4e1f951](https://github.com/openclaw/openclaw/commit/4e1f9518dfaab09f128762ed689389cf9d8a0df9). Thanks [@shakkernerd](https://github.com/shakkernerd) and [@gideonpraise](https://github.com/gideonpraise).
  - DeepInfra and OpenRouter speech requests use a two-minute default timeout. Configured and per-call timeouts take precedence. [#175614](https://github.com/openclaw/openclaw/pull/175614). Thanks [@steipete](https://github.com/steipete).

  </details>

- Fixes spoken replies going missing when speech arrives after the text, and fixes the first-reply crash in iPhone relay Talk. Telegram voice captions and macOS Talk replies also keep their accompanying text in the affected cases.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Delayed automatic speech joins the answer it belongs to, even after a reload ([#171090](https://github.com/openclaw/openclaw/pull/171090), related [#170937](https://github.com/openclaw/openclaw/pull/170937)). Thanks [@steipete](https://github.com/steipete).
  - Free-text TTS tags keep the spoken reply and Telegram voice caption visible. [#137329](https://github.com/openclaw/openclaw/pull/137329), [#137281](https://github.com/openclaw/openclaw/issues/137281). Thanks [@wangyan2026](https://github.com/wangyan2026), [@obviyus](https://github.com/obviyus), [@eiriktorheim](https://github.com/eiriktorheim) and [@vobornik](https://github.com/vobornik).
  - Talk closes an owned session when its valid ID has surrounding whitespace. [#167066](https://github.com/openclaw/openclaw/pull/167066). Thanks [@hugenshen](https://github.com/hugenshen) and [@obviyus](https://github.com/obviyus).
  - Voice Wake matches case-sensitive Signal group IDs when selecting a session route. [#170823](https://github.com/openclaw/openclaw/pull/170823). Thanks [@steipete](https://github.com/steipete).
  - Local speech generation no longer includes spoken-message previews in debug logs. [#170999](https://github.com/openclaw/openclaw/pull/170999). Thanks [@steipete](https://github.com/steipete).
  - iPhone Gateway-relay Talk fixes a first-reply crash and improves built-in speaker playback and interruption. [#168416](https://github.com/openclaw/openclaw/pull/168416), report [#168415](https://github.com/openclaw/openclaw/issues/168415) and related [#167810](https://github.com/openclaw/openclaw/issues/167810). Thanks [masatohoshino](https://github.com/masatohoshino) and related reporter [nathan-85](https://github.com/nathan-85).
  - macOS Talk waits for the accepted run to finish and speaks its matching complete reply, including slow responses. [#164485](https://github.com/openclaw/openclaw/pull/164485), reports [#153145](https://github.com/openclaw/openclaw/issues/153145) and [#127558](https://github.com/openclaw/openclaw/issues/127558). Thanks [PollyBot13](https://github.com/PollyBot13), [steipete](https://github.com/steipete) and [rsaeks](https://github.com/rsaeks).
  - iOS Talk microphone recovery notices and host-entry guidance are translated in 21 non-English locales. [#181265](https://github.com/openclaw/openclaw/pull/181265).

  </details>

- Fixes a disconnected FaceTime call blocking the next authorized call until OpenClaw restarts.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - A disconnected FaceTime call releases the bridge without requiring a Gateway restart before the next authorized call. [#154230](https://github.com/openclaw/openclaw/pull/154230), [#154228](https://github.com/openclaw/openclaw/issues/154228). Thanks [@Solvely-Colin](https://github.com/Solvely-Colin), [@omarshahine](https://github.com/omarshahine) and [@beeven](https://github.com/beeven).

  </details>

- Voice Call commands now keep their JSON results readable by other tools and reject unsupported call-brief files instead of waiting indefinitely.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Voice Call steer returns clean JSON without startup text mixed in. [#169430](https://github.com/openclaw/openclaw/pull/169430). Thanks [@steipete](https://github.com/steipete).
  - Voice Call commands reject special files supplied as call briefs. [#183417](https://github.com/openclaw/openclaw/pull/183417). Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@steipete](https://github.com/steipete).
  - Voice Call diagnostics reject nonregular custom logs without blocking on POSIX. [#172743](https://github.com/openclaw/openclaw/pull/172743). Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@obviyus](https://github.com/obviyus).

  </details>

- [Image generation and editing](/tools/image-generation) now reject invalid size and shape options before contacting a provider, while supported URL-backed images can be returned as results. Video results show which options a provider ignored. If you pinned a retired Together Wan 2.2 or Kling video model, choose a supported model before generating again.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - ComfyUI image, video and music workflow polling keeps the configured timeout across system clock changes. [#162779](https://github.com/openclaw/openclaw/pull/162779). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925).
  - Image generation and editing tell you when a resolution is unsupported before sending a request. Supported values are 1K, 2K and 4K. [#170154](https://github.com/openclaw/openclaw/pull/170154). Thanks [@ly85206559](https://github.com/ly85206559) and [@obviyus](https://github.com/obviyus).
  - OpenAI-compatible image generation and editing accept URL-backed results under the existing network and image-size policies. [#170278](https://github.com/openclaw/openclaw/pull/170278), [#162717](https://github.com/openclaw/openclaw/issues/162717). Thanks [@steipete](https://github.com/steipete), reporter [@lucthaobybgkw3232-eng](https://github.com/lucthaobybgkw3232-eng) and [@acedatacloud-dev](https://github.com/acedatacloud-dev) for the compatibility report.
  - Video generation reports ignored provider options in text and JSON results. [#171172](https://github.com/openclaw/openclaw/pull/171172). Thanks [@ly85206559](https://github.com/ly85206559).
  - Image generation and editing reject malformed shape settings before sending a request or creating a file. Positive numeric ratios remain supported. [#172082](https://github.com/openclaw/openclaw/pull/172082). Thanks [@KrasimirKralev](https://github.com/KrasimirKralev) and [@obviyus](https://github.com/obviyus).
  - Together video defaults to Wan 2.7 and uses a longer polling window. Explicit retired Wan 2.2 and Kling IDs need replacement. [#172364](https://github.com/openclaw/openclaw/pull/172364). Thanks [@steipete](https://github.com/steipete).

  </details>

- Generated images, music and video can wait behind a busy chat without reporting failure too early. Text and image attachments keep their expected characters and file formats in the affected cases; a permanent delivery failure still reports the problem.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Windows-1252 text and CSV attachments retain accents and symbols when their MIME type has no charset. [#165771](https://github.com/openclaw/openclaw/pull/165771). Thanks [@yetval](https://github.com/yetval).
  - Uploaded attachments remain available if the request cannot confirm it was accepted. You still see the error, and no agent run starts. [#167369](https://github.com/openclaw/openclaw/pull/167369). Thanks [@vincentkoc](https://github.com/vincentkoc).
  - Generated image, music and video results queued behind a busy chat avoid a premature failure warning. A permanent delivery failure still reports the problem and retains the media reference. [#172637](https://github.com/openclaw/openclaw/pull/172637), with the earlier proposal in [#154064](https://github.com/openclaw/openclaw/pull/154064). Thanks [@Patrick-Erichsen](https://github.com/Patrick-Erichsen) and [@Leon-SK668](https://github.com/Leon-SK668).
  - Public image attachments use extensions matching their resolved formats, including queued deliveries. [#182494](https://github.com/openclaw/openclaw/pull/182494). Thanks [@steipete](https://github.com/steipete).
  - Background media handoff deadlines use elapsed time. [#185704](https://github.com/openclaw/openclaw/pull/185704). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@obviyus](https://github.com/obviyus).
  - Images staged for sandboxed WebChat messages now load for the agent; the same merge also fixes Linux service detection, model listing and plugin inspection. [Commit e26afcf](https://github.com/openclaw/openclaw/commit/e26afcff4beb0cfb90a1ca6e9cbde7d713472895).
  - When a generated-media batch fails, cleanup starts in request order and preserves the original save error. [Commit a316adf](https://github.com/openclaw/openclaw/commit/a316adfcce2e03619282801914a3daf7383cdf1c).

  </details>

- A playback conversion can still return its completed result if closing the output file reports a problem, and cache cleanup now reports its own failures.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Playback conversion reports output-file close failures while preserving the conversion result. [#174668](https://github.com/openclaw/openclaw/pull/174668). Thanks [@steipete](https://github.com/steipete).
  - Playback cache cleanup reports errors and avoids an extra eviction when an entry has already disappeared. [#175634](https://github.com/openclaw/openclaw/pull/175634). Thanks [@steipete](https://github.com/steipete).

  </details>

- Replies in long channel threads can include the latest 50 messages when the thread window is available. Reactions, shared contacts, quoted messages and native channel menus also stay attached to their intended messages in the affected channels.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Long channel threads provide the newest 50 replies as context when that window can be selected reliably. [#120824](https://github.com/openclaw/openclaw/pull/120824), [#98870](https://github.com/openclaw/openclaw/issues/98870). Thanks to [@Linux2010](https://github.com/Linux2010), [@obviyus](https://github.com/obviyus) and [@qingminglong](https://github.com/qingminglong).
  - Reaction lists show available names and person IDs. [#151128](https://github.com/openclaw/openclaw/pull/151128). Thanks to [@Leon-SK668](https://github.com/Leon-SK668) and [@obviyus](https://github.com/obviyus).
  - Teams direct messages show useful progress steps on separate readable lines. [#157704](https://github.com/openclaw/openclaw/pull/157704), [#157702](https://github.com/openclaw/openclaw/issues/157702). Thanks to [@rdbartram](https://github.com/rdbartram) and [@altaywtf](https://github.com/altaywtf).
  - Reactions and reaction lists target the current channel-thread reply. [#166582](https://github.com/openclaw/openclaw/pull/166582), [#166178](https://github.com/openclaw/openclaw/issues/166178). Thanks to [@ericcurtin](https://github.com/ericcurtin), [@obviyus](https://github.com/obviyus) and [@yetval](https://github.com/yetval).
  - Incoming dice rolls include the emoji and value in agent and reply context. Group mention requirements continue to apply. [#137112](https://github.com/openclaw/openclaw/pull/137112), [related outbound request #137110](https://github.com/openclaw/openclaw/issues/137110). Thanks to [@adeepn](https://github.com/adeepn) and [@obviyus](https://github.com/obviyus).
  - Voice notes and audio uploads can show their duration when `ffprobe` is available. Uploads still proceed if probing fails. [#142552](https://github.com/openclaw/openclaw/pull/142552), [#142548](https://github.com/openclaw/openclaw/issues/142548). Thanks to [@szafranski](https://github.com/szafranski) and [@obviyus](https://github.com/obviyus).
  - Shared contact cards and replies to them retain the contact name and phone details without treating those details as a bot mention. [#144602](https://github.com/openclaw/openclaw/pull/144602). Thanks to [@JamesY023](https://github.com/JamesY023) and [@obviyus](https://github.com/obviyus).
  - Quoted reply text stays attached to its message when automation context is present in a CLI-backed agent prompt. [#166869](https://github.com/openclaw/openclaw/pull/166869). Thanks to [@VACInc](https://github.com/VACInc).
  - Authorized Telegram private-topic reactions reach their originating session when cached topic context is available. On a cache miss they fall back to the base DM, or are dropped when `requireTopic` is enabled. [#175946](https://github.com/openclaw/openclaw/pull/175946). Thanks to [xiaopan-xydt](https://github.com/xiaopan-xydt) and [RaphazZze](https://github.com/RaphazZze) for the report.
  - Messaging actions can target thread and topic sessions when you opt in, with the usual permissions still applying. [#168846](https://github.com/openclaw/openclaw/pull/168846). Thanks [@VACInc](https://github.com/VACInc).
  - Discord keeps delivered status, menu, model-picker and plugin replies with their commands in conversation history. [#169200](https://github.com/openclaw/openclaw/pull/169200). Thanks [@obviyus](https://github.com/obviyus).
  - Slack keeps delivered command menus and their commands in conversation history. [#169236](https://github.com/openclaw/openclaw/pull/169236). Thanks [@obviyus](https://github.com/obviyus).
  - Keep delivered Mattermost model and provider pickers and selection confirmations in history ([#169255](https://github.com/openclaw/openclaw/pull/169255)). Thanks to [obviyus](https://github.com/obviyus).
  - A new request no longer gets confused with earlier messages in its thread ([#169817](https://github.com/openclaw/openclaw/pull/169817)). Thanks to [yousan](https://github.com/yousan) and [steipete](https://github.com/steipete).
  - Preserve multiline group slash-command arguments such as `/btw` questions and `/loop` prompts ([#183606](https://github.com/openclaw/openclaw/pull/183606)). Thanks to [L4XB](https://github.com/L4XB) and [obviyus](https://github.com/obviyus).
  - Feishu merged forwards include available sender and timestamp information, with sender-name lookup bounded to the first 50 rendered messages. [#150214](https://github.com/openclaw/openclaw/pull/150214), [#150165](https://github.com/openclaw/openclaw/issues/150165). Thanks to [@chelsealong](https://github.com/chelsealong), [@obviyus](https://github.com/obviyus) and [@peach980](https://github.com/peach980).

  </details>

- Fixes Microsoft Teams messages stalling on malformed replies or slow pasted images, and makes message reads and lists easier to read. A Teams allowlist whose names cannot be resolved still blocks access.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Give slow pasted images in Microsoft Teams a longer download budget and preserve a separate budget for optional message context ([#170437](https://github.com/openclaw/openclaw/pull/170437)). Thanks to [RomneyDa](https://github.com/RomneyDa) and [EbulenConsult](https://github.com/EbulenConsult) for the [report](https://github.com/openclaw/openclaw/issues/169917).
  - Teams message reads and searches show message content and metadata in human-readable CLI output. [#171153](https://github.com/openclaw/openclaw/pull/171153). Thanks to [@ly85206559](https://github.com/ly85206559) and [@obviyus](https://github.com/obviyus).
  - Microsoft Teams list items following fenced code blocks render separately instead of being absorbed into the code block. [#182959](https://github.com/openclaw/openclaw/pull/182959). Thanks to [L4XB](https://github.com/L4XB) and [obviyus](https://github.com/obviyus).
  - Prevent malformed Teams replies and attachment HTML from stalling message handling ([#183438](https://github.com/openclaw/openclaw/pull/183438)). Thanks to [LeizhenZhang](https://github.com/LeizhenZhang) and [steipete](https://github.com/steipete).
  - Keep fully unresolved Teams team, channel, and group sender allowlists restrictive at startup ([#184989](https://github.com/openclaw/openclaw/pull/184989)). Thanks to [eleqtrizit](https://github.com/eleqtrizit).
  - Update the affected Teams authentication dependencies, including for managed npm plugin installations ([#187293](https://github.com/openclaw/openclaw/pull/187293)). Thanks to [RomneyDa](https://github.com/RomneyDa) and upstream contributor [Robbie-Microsoft](https://github.com/Robbie-Microsoft).

  </details>

- [Matrix encryption state](/channels/matrix/encryption) now refuses competing writers and invalid saved snapshots before they can replace retained room keys. If separate installations share an account, stop older writers and upgrade them together. An older version may already have lost keys it never saved; explicit snapshot recovery can lose keys received since the last good save. Room policies also stay with the intended room when its display name changes.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Matrix refuses overlapping encrypted-state writers and invalid saved snapshots before restoring them. Doctor can inspect that state and guide an explicit recovery. [#160707](https://github.com/openclaw/openclaw/pull/160707). Thanks to [@eleqtrizit](https://github.com/eleqtrizit) and [@joshavant](https://github.com/joshavant).
  - Allow channel plugins to use optional asynchronous account hooks and allow Matrix persisted-state reads without blocking the Gateway thread. Bundled Matrix requires a matching V2 host. [#168481](https://github.com/openclaw/openclaw/pull/168481). Thanks [@steipete](https://github.com/steipete).
  - Pace Matrix live-preview updates after slow sends and edits ([#169975](https://github.com/openclaw/openclaw/pull/169975)). Thanks to [xili-ytl](https://github.com/xili-ytl), [obviyus](https://github.com/obviyus), and [aniruddhaadak80](https://github.com/aniruddhaadak80) for the [related report](https://github.com/openclaw/openclaw/issues/106644).
  - Matrix tool and mention policies use room identity rather than an editable display name, while configured aliases remain supported. [#171645](https://github.com/openclaw/openclaw/pull/171645). Thanks to [@steipete](https://github.com/steipete) and [@yetval](https://github.com/yetval) for the [report](https://github.com/openclaw/openclaw/issues/168134).
  - Matrix replies to ordinary room messages now follow your silence and visibility settings; commands still receive their expected response. [#179506](https://github.com/openclaw/openclaw/pull/179506). Thanks to [xiaopan-xydt](https://github.com/xiaopan-xydt), [obviyus](https://github.com/obviyus), and [doomy](https://github.com/doomy) for the report.
  - Matrix streaming previews no longer repeatedly highlight incidental mentions; the final message still includes its mentions ([#183372](https://github.com/openclaw/openclaw/pull/183372)). Thanks to [L4XB](https://github.com/L4XB) and [steipete](https://github.com/steipete).
  - Restore Matrix execution approval requests to the originating room and approver DM when the native handler is async-only ([commit 9356d64](https://github.com/openclaw/openclaw/commit/9356d64ceac6cc6187997677467584e10a3a9236)). Thanks to [steipete](https://github.com/steipete).

  </details>

- [Telegram](/channels/telegram/messaging) now keeps slow voice notes and messages waiting behind a busy reply eligible for retry instead of silently losing them. Saved ordinary final text can recover after eligible delivery failures, but if Telegram accepted the first send and its acknowledgment was lost, the reply may appear twice. On the first legacy-queue import, messages older than 24 hours are marked failed and will not run, including ones that were never processed.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Telegram polling starts in source-checkout and captured-plugin layouts, including packaged builds. [#154286](https://github.com/openclaw/openclaw/pull/154286), [#154180](https://github.com/openclaw/openclaw/issues/154180). Thanks to [@xydt-juyaohui](https://github.com/xydt-juyaohui), [@steipete](https://github.com/steipete) and reporter [@markfietje](https://github.com/markfietje).
  - Replaying the same audio message suppresses duplicate transcript echoes while its receipt is retained, up to 24 hours and subject to the receipt cap. [#162565](https://github.com/openclaw/openclaw/pull/162565), [related cross-account report #146311](https://github.com/openclaw/openclaw/issues/146311). Thanks to [@dankarization](https://github.com/dankarization) and [@steipete](https://github.com/steipete).
  - Group voice mentions are recognized when a group-scoped rule allows audio transcription. Direct-only rules continue to exclude group audio. [#163746](https://github.com/openclaw/openclaw/pull/163746). Thanks to [@jewseppi](https://github.com/jewseppi) and [@obviyus](https://github.com/obviyus).
  - Keep Telegram's temporary progress preamble visible during verbose tool runs while sending diagnostics separately. [#168225](https://github.com/openclaw/openclaw/pull/168225). Thanks [@obviyus](https://github.com/obviyus).
  - Show authored preamble text without the internal heading in Telegram previews. [#168281](https://github.com/openclaw/openclaw/pull/168281). Thanks [@obviyus](https://github.com/obviyus).
  - Preserve tables and their placement when optional Telegram rich replies include neighboring quotes or lists. [#168383](https://github.com/openclaw/openclaw/pull/168383), [issue](https://github.com/openclaw/openclaw/issues/168366), [rich-message guide](/channels/telegram/rich-messages). Thanks [@dhruv1220](https://github.com/dhruv1220), [@steipete](https://github.com/steipete) and reporter [@barry-ssb](https://github.com/barry-ssb).
  - Count the full Telegram command progress row against the configured line limit. [#168464](https://github.com/openclaw/openclaw/pull/168464), [issue](https://github.com/openclaw/openclaw/issues/130144). Thanks [@obviyus](https://github.com/obviyus) and reporter [@ml12580](https://github.com/ml12580).
  - Render Telegram progress notes as prose instead of monospace code. [#168723](https://github.com/openclaw/openclaw/pull/168723). Thanks [@obviyus](https://github.com/obviyus).
  - An eligible saved Telegram text answer gets one recovery send after an ambiguous network failure; the first send may already have reached the chat. [#168738](https://github.com/openclaw/openclaw/pull/168738). Thanks [@obviyus](https://github.com/obviyus).
  - Avoid duplicate Telegram answers in chat history when another message queues during streaming. [#169019](https://github.com/openclaw/openclaw/pull/169019). Thanks [@obviyus](https://github.com/obviyus).
  - A Telegram voice note or message waiting behind a busy reply can still be processed after a timeout while its original attempt is pending. Existing retry limits apply. [#169202](https://github.com/openclaw/openclaw/pull/169202), [related issue](https://github.com/openclaw/openclaw/issues/127229). Thanks [@diregoblin](https://github.com/diregoblin), [@obviyus](https://github.com/obviyus), [@Grynn](https://github.com/Grynn), [@travellingsoldier85](https://github.com/travellingsoldier85), [@PaGrom](https://github.com/PaGrom) and [@cablackmon](https://github.com/cablackmon) for the reports and investigation.
  - Avoid a session-wide scan when mirroring Telegram deliveries in long histories ([#169663](https://github.com/openclaw/openclaw/pull/169663)). Thanks to [obviyus](https://github.com/obviyus).
  - On the first import of older Telegram messages, mark those over 24 hours old failed instead of running an old instruction. This also loses genuinely unprocessed old messages; messages imported before this fix are unchanged ([#170068](https://github.com/openclaw/openclaw/pull/170068), [replay limits](/channels/telegram/transports)). Thanks to [steipete](https://github.com/steipete) and [angeliti999](https://github.com/angeliti999) for the [report](https://github.com/openclaw/openclaw/issues/169784).
  - Report fractional Telegram attachment limits accurately in warnings and model context ([#170677](https://github.com/openclaw/openclaw/pull/170677)). Thanks to [obviyus](https://github.com/obviyus).
  - Wait for pending Telegram photo albums before ordinary follow-up text ([#170690](https://github.com/openclaw/openclaw/pull/170690)). Thanks to [obviyus](https://github.com/obviyus).
  - Long streaming replies avoid repeated visibility-check work after a preview is visible. [#171417](https://github.com/openclaw/openclaw/pull/171417), [report](https://github.com/openclaw/openclaw/issues/171416). Thanks to [@boeingchoco](https://github.com/boeingchoco) and [@steipete](https://github.com/steipete).
  - Telegram respects its IPv4-first preference on affected dual-stack networks and can retry timeouts proven to occur before a send. See [Telegram troubleshooting](/channels/telegram/troubleshooting). [#171564](https://github.com/openclaw/openclaw/pull/171564). Thanks to [@steipete](https://github.com/steipete) and [@Dat1GUI](https://github.com/Dat1GUI) for the [report](https://github.com/openclaw/openclaw/issues/171438).
  - A command sent to an archived Telegram direct-chat session now fails rather than retrying forever. Restore that session before starting new work. [#171810](https://github.com/openclaw/openclaw/pull/171810). Thanks to [@obviyus](https://github.com/obviyus) and [@dankarization](https://github.com/dankarization) for the [report](https://github.com/openclaw/openclaw/issues/171754).
  - Edited media captions render rich content and plain fallbacks correctly, while spoken-reply code keeps its spacing and checklist markers handle mixed-case input. [#171877](https://github.com/openclaw/openclaw/pull/171877). Thanks to [@steipete](https://github.com/steipete).
  - Telegram polling on Bun can save its checkpoint and resume from it after a clean restart. [#178909](https://github.com/openclaw/openclaw/pull/178909). Thanks to [brianmcguire](https://github.com/brianmcguire), [obviyus](https://github.com/obviyus), and [qwexs](https://github.com/qwexs) for the report.
  - Telegram accounts with mixed-case keys use their own group and topic mention settings and account-specific mention patterns. Status audits use the intended account groups too. [#180654](https://github.com/openclaw/openclaw/pull/180654). Thanks to [sc-10749](https://github.com/sc-10749) and [yetval](https://github.com/yetval) for the report.
  - Telegram sticker descriptions respect `tools.media.image.enabled` when image understanding is explicitly disabled, avoiding an extra image-model request. [#182006](https://github.com/openclaw/openclaw/pull/182006). Thanks to [wr-web](https://github.com/wr-web), [Card4Philippe](https://github.com/Card4Philippe), and [obviyus](https://github.com/obviyus).
  - Preserve Telegram questions and buttons during concurrent progress-draft cleanup ([#183028](https://github.com/openclaw/openclaw/pull/183028)). Thanks to [steipete](https://github.com/steipete) and reporter [sercada](https://github.com/sercada).
  - Resolve the implicit default Telegram bot's root secrets alongside named accounts ([#183618](https://github.com/openclaw/openclaw/pull/183618)). Thanks to [555aaditya](https://github.com/555aaditya), [steipete](https://github.com/steipete), and [rodricksz4h5](https://github.com/rodricksz4h5).
  - Keep Telegram group membership audit deadlines stable across system-clock changes ([#185290](https://github.com/openclaw/openclaw/pull/185290)). Thanks to [SunnyShu0925](https://github.com/SunnyShu0925) and [obviyus](https://github.com/obviyus).
  - Eligible saved Telegram text answers can use the existing recovery path after a local send timeout; a lost acknowledgment can still result in a duplicate ([#185465](https://github.com/openclaw/openclaw/pull/185465)). Thanks to [vincentkoc](https://github.com/vincentkoc).
  - Avoid a false failed status for delivered Telegram replies in ordinary group reply chains ([#185899](https://github.com/openclaw/openclaw/pull/185899)). Thanks to [moonbow0407](https://github.com/moonbow0407), [obviyus](https://github.com/obviyus), and reporter [alexph-dev](https://github.com/alexph-dev).
  - Keep a blank line between a Telegram bullet list and a following parenthesized numbered section ([commit bf381ef](https://github.com/openclaw/openclaw/commit/bf381ef5f0c484d4a8603ff099142abc49723293)). Thanks to [shakkernerd](https://github.com/shakkernerd) and [gideonpraise](https://github.com/gideonpraise).

  </details>

- Telegram final answers now keep their link to the original question after progress updates, while queued button clicks retain the time they were received.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Use the receipt time for Telegram button interactions, including queued replays ([#170210](https://github.com/openclaw/openclaw/pull/170210)). Thanks to [maliv2](https://github.com/maliv2), [obviyus](https://github.com/obviyus), and [zori7](https://github.com/zori7) for the [report](https://github.com/openclaw/openclaw/issues/169881), and [Irish-Joseph](https://github.com/Irish-Joseph) for [related work](https://github.com/openclaw/openclaw/pull/170957).
  - In `first` or `batched` reply mode, only the first eligible message-tool send in a turn uses the implicit reply target. [#171123](https://github.com/openclaw/openclaw/pull/171123). Thanks to [@ooiuuii](https://github.com/ooiuuii), [@steipete](https://github.com/steipete) and [@SanderHelgesen](https://github.com/SanderHelgesen) for the [report](https://github.com/openclaw/openclaw/issues/171102).
  - Final answers after progress cards retain their intended reply link in `first` and `batched` modes. [#171127](https://github.com/openclaw/openclaw/pull/171127). Thanks to [@ooiuuii](https://github.com/ooiuuii), [@obviyus](https://github.com/obviyus) and [@SanderHelgesen](https://github.com/SanderHelgesen) for the [report](https://github.com/openclaw/openclaw/issues/171093).

  </details>

- Links, cards, lists and long code replies now display correctly in the affected channels. Channel text shown in terminal reports can no longer act as terminal control characters; JSON and stored messages keep their original content.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Eligible human DM senders can show their Telegram portraits in Home and chat after a background lookup. The first uncached message uses initials. [#166248](https://github.com/openclaw/openclaw/pull/166248). Thanks to [@vincentkoc](https://github.com/vincentkoc).
  - Voice captions preserve literal TTS directives inside code examples. [#171178](https://github.com/openclaw/openclaw/pull/171178). Thanks to [@obviyus](https://github.com/obviyus).
  - Lists, checklists and quotes render readably in media captions while code examples stay literal. [#171180](https://github.com/openclaw/openclaw/pull/171180). Thanks to [@ruel225](https://github.com/ruel225), [@obviyus](https://github.com/obviyus) and [@SanderHelgesen](https://github.com/SanderHelgesen) for the [report](https://github.com/openclaw/openclaw/issues/171106).
  - Bare links in rich replies remain tappable when link previews are disabled. URLs containing `&` still need a labeled Markdown link. [#171216](https://github.com/openclaw/openclaw/pull/171216). Thanks to [@Irish-Joseph](https://github.com/Irish-Joseph), [@obviyus](https://github.com/obviyus) and [@SanderHelgesen](https://github.com/SanderHelgesen) for the [report](https://github.com/openclaw/openclaw/issues/171111).
  - Show readable post cards using available anonymous preview metadata. [#168213](https://github.com/openclaw/openclaw/pull/168213), [issue](https://github.com/openclaw/openclaw/issues/168212). Thanks [@steipete](https://github.com/steipete).
  - Streaming and final replies can remove repeated CRLF-separated paragraphs while preserving the separators and fenced code. [#183023](https://github.com/openclaw/openclaw/pull/183023). Thanks to [gdpu11](https://github.com/gdpu11) and [steipete](https://github.com/steipete).
  - Google Chat conversational replies render supported formatting, including during typing updates. [#141752](https://github.com/openclaw/openclaw/pull/141752), [#141625](https://github.com/openclaw/openclaw/issues/141625). Thanks to [@ericcaiwx-star](https://github.com/ericcaiwx-star), coauthor and reporter [@pbreault](https://github.com/pbreault), and [@obviyus](https://github.com/obviyus).
  - WhatsApp Web and Desktop stickers can reach the agent as image attachments again. [#164210](https://github.com/openclaw/openclaw/pull/164210), [#163559](https://github.com/openclaw/openclaw/issues/163559). Thanks to [@andrewwbuilds](https://github.com/andrewwbuilds), [@obviyus](https://github.com/obviyus) and reporter [@abacha](https://github.com/abacha).
  - Use Mattermost's supported button format in agent guidance. [#168368](https://github.com/openclaw/openclaw/pull/168368), [issue](https://github.com/openclaw/openclaw/issues/168081). Thanks [@ericcurtin](https://github.com/ericcurtin), [@obviyus](https://github.com/obviyus) and reporter [@hannnnn-l](https://github.com/hannnnn-l).
  - Display Slack Markdown links beginning with `@`, `#` or `!` as labels instead of generating mention or channel markup. [#168438](https://github.com/openclaw/openclaw/pull/168438), [issue](https://github.com/openclaw/openclaw/issues/168252). Thanks [@KhanCold](https://github.com/KhanCold), [@obviyus](https://github.com/obviyus) and [@yetval](https://github.com/yetval).
  - Message command reports show channel-supplied text safely in a terminal, including send results, errors and reactions. JSON keeps the original data. [#176266](https://github.com/openclaw/openclaw/pull/176266). Thanks to [wangmiao0668000666](https://github.com/wangmiao0668000666) and [obviyus](https://github.com/obviyus).
  - Human-readable channel capability probes and diagnostics neutralize terminal controls while JSON retains the original values. [#178234](https://github.com/openclaw/openclaw/pull/178234). Thanks to [SunnyShu0925](https://github.com/SunnyShu0925) and [steipete](https://github.com/steipete).
  - Catalog-only channel labels in `channels list --all` neutralize terminal controls in human-readable output while JSON retains the original labels. [#178238](https://github.com/openclaw/openclaw/pull/178238). Thanks to [SunnyShu0925](https://github.com/SunnyShu0925) and [steipete](https://github.com/steipete).
  - Reply chunking no longer mistakes inline backticks for an unclosed code fence and formats the following prose normally. [#180588](https://github.com/openclaw/openclaw/pull/180588). Thanks to [AmelioMansour](https://github.com/AmelioMansour) and [steipete](https://github.com/steipete).

  - Slack pin tables show the message text, author and timestamp, and message tables render remote values safely for terminals. [#171042](https://github.com/openclaw/openclaw/pull/171042), [report](https://github.com/openclaw/openclaw/issues/171041). Thanks to [@ooiuuii](https://github.com/ooiuuii) and [@obviyus](https://github.com/obviyus).
  - Incoming Feishu rich posts preserve nested backticks within one code block. [#171222](https://github.com/openclaw/openclaw/pull/171222). Thanks to [@rudycelekli](https://github.com/rudycelekli) and [@obviyus](https://github.com/obviyus).
  - Incoming Tlon messages preserve nested code fences for the assistant. [#171584](https://github.com/openclaw/openclaw/pull/171584). Thanks to [@ly85206559](https://github.com/ly85206559).
  - Slack messages and rich-text tables retain dates supplied without fallback text, using UTC for the timestamp. [#172182](https://github.com/openclaw/openclaw/pull/172182). Thanks to [@fhgffy](https://github.com/fhgffy) for the fix and [report](https://github.com/openclaw/openclaw/issues/172180), [@skyzhao1223](https://github.com/skyzhao1223) and [@steipete](https://github.com/steipete).

  </details>

- Slack and Discord channel rules now stay with the channel they were set for, rather than applying to another channel or thread with the same name. Supported credentials and owner approvals also follow the intended account, while changed permissions apply to messages still waiting to start.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - An unverified group-DM sender cannot use privileged actions or replay approvals; ordinary allowed messages can still receive replies. [#165801](https://github.com/openclaw/openclaw/pull/165801). Thanks to [@eleqtrizit](https://github.com/eleqtrizit).
  - Keep channel-specific setup options available after empty or flag-like shared option values. [#167939](https://github.com/openclaw/openclaw/pull/167939). Thanks [@LinzeShi](https://github.com/LinzeShi).
  - Changes to send and receive permissions now apply to messages still waiting to start. [#168548](https://github.com/openclaw/openclaw/pull/168548). Thanks [@steipete](https://github.com/steipete).
  - Show agents message actions relevant to their current channel and bindings, while keeping configured-channel discovery for trusted scheduled runs. [#168875](https://github.com/openclaw/openclaw/pull/168875), [related issue](https://github.com/openclaw/openclaw/issues/14785). Thanks [@steipete](https://github.com/steipete) and [@abacha](https://github.com/abacha) for the schema measurements and action mapping.
  - Preserve historical webhook callback settings when a trusted official plugin update is deferred, avoiding a migration blocker seen with Microsoft Teams. [#169035](https://github.com/openclaw/openclaw/pull/169035), [issue](https://github.com/openclaw/openclaw/issues/168872), [migration guide](/gateway/doctor/config-migrations#channel-webhook-listeners). Thanks [@steipete](https://github.com/steipete) and [@sirius1024](https://github.com/sirius1024).
  - Protected storage for supported channel credentials, and removal of the unnecessary key from fresh managed llama.cpp setup ([#169732](https://github.com/openclaw/openclaw/pull/169732)). Thanks to [steipete](https://github.com/steipete) and [dh-js](https://github.com/dh-js) for the [report](https://github.com/openclaw/openclaw/issues/141812).
  - Preserve the originating X post and restrict work-session reply targets ([#169747](https://github.com/openclaw/openclaw/pull/169747)). Thanks to [steipete](https://github.com/steipete).
  - Keep channel capability checks within their per-account timeout when the system clock moves backward ([#170500](https://github.com/openclaw/openclaw/pull/170500)). Thanks to [SunnyShu0925](https://github.com/SunnyShu0925) and [obviyus](https://github.com/obviyus).
  - Remove affected inbound message text from Tlon, LINE, Twitch, iMessage, IRC, WhatsApp, and Mattermost diagnostics, and give managed Signal accounts distinct Doctor-assigned ports ([#170815](https://github.com/openclaw/openclaw/pull/170815)). Thanks to [steipete](https://github.com/steipete).
  - Still-allowed X mentions can proceed after an unrelated authorization change instead of triggering model fallback or a generic error reply. [#171384](https://github.com/openclaw/openclaw/pull/171384). Thanks to [@obviyus](https://github.com/obviyus).
  - ClickClack bound-message routing reuses published binding information while continuing to deny revoked or uncertain access. [#171458](https://github.com/openclaw/openclaw/pull/171458). Thanks to [@steipete](https://github.com/steipete).
  - Diagnostics for the affected channels no longer include the identified private message text or pairing codes. [#171606](https://github.com/openclaw/openclaw/pull/171606). Thanks to [@steipete](https://github.com/steipete).
  - Channel reloads skip unavailable credentials for disabled idle accounts. [#171734](https://github.com/openclaw/openclaw/pull/171734). Thanks to [@steipete](https://github.com/steipete) and [@davidcittadini](https://github.com/davidcittadini) for the [report](https://github.com/openclaw/openclaw/issues/171367).
  - Slack tool and mention rules stay with the same channel after it is renamed. Direct name matching remains available through the explicit `dangerouslyAllowNameMatching` setting. [#171828](https://github.com/openclaw/openclaw/pull/171828). Thanks to [@steipete](https://github.com/steipete).
  - Discord channel rules no longer apply to an unrelated channel or thread just because it has the same name. [#171829](https://github.com/openclaw/openclaw/pull/171829). Thanks to [@steipete](https://github.com/steipete) and [@yetval](https://github.com/yetval) for the related Matrix report.
  - Discord owners configured as `discord:user:<id>` regain voice command access and eligibility for owner-derived execution approvals. Account-specific approvers take precedence. [#172385](https://github.com/openclaw/openclaw/pull/172385). Thanks to [@yetval](https://github.com/yetval) and [@RomneyDa](https://github.com/RomneyDa).
  - Slack owners configured as `slack:user:<id>` can be selected for automatic execution approvals when no explicit account approvers replace them. Workspace-qualified owner entries remain excluded from this approval path. [#172424](https://github.com/openclaw/openclaw/pull/172424). Thanks to [@yetval](https://github.com/yetval) and [@RomneyDa](https://github.com/RomneyDa).
  - Channel status and Doctor clear an obsolete restart-loop warning after recovery, even when an account remains stopped and needs attention. [#176182](https://github.com/openclaw/openclaw/pull/176182). Thanks to [ericcurtin](https://github.com/ericcurtin) and [iaford](https://github.com/iaford) for the report.
  - Channel discovery warns when it cannot read plugin installation records and suggests `openclaw doctor` to inspect plugin state. Installed channels may be missing from the resulting list. [#177252](https://github.com/openclaw/openclaw/pull/177252). Thanks to [steipete](https://github.com/steipete).
  - After a manual channel-account stop times out, an explicit start can recover the account once cleanup succeeds. Automatic restart remains suppressed until that start. [#177444](https://github.com/openclaw/openclaw/pull/177444). Thanks to [YangManBOBO](https://github.com/YangManBOBO) and [obviyus](https://github.com/obviyus).
  - Named Google Chat and X accounts no longer deactivate the implicit default account's SecretRef credentials. [#180450](https://github.com/openclaw/openclaw/pull/180450). Thanks to [555aaditya](https://github.com/555aaditya).
  - Reject oversized bounded arrays and sets early in the embedded Discord Activities SDK parser ([#187297](https://github.com/openclaw/openclaw/pull/187297)). Thanks to [RomneyDa](https://github.com/RomneyDa).
  - Correct IMAP sender parsing for nested-comment spoofing in sender-bound token admission ([#187301](https://github.com/openclaw/openclaw/pull/187301)). Thanks to [RomneyDa](https://github.com/RomneyDa).
  - Keep prepared session-to-session sends working across metadata-only updates while respecting changed communication permissions ([commit 4efde33](https://github.com/openclaw/openclaw/commit/4efde337b43de030fba6676fa3806db77e61349a)). Thanks to [steipete](https://github.com/steipete).

  </details>

- Replies that finish while a channel is busy, reloading or recovering have more chances to reach the right conversation, and a delivery warning no longer replaces an answer already delivered or held for recovery. A send whose outcome is unknown is not blindly repeated.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Silent maintenance turns suppress attachments and other rich content as well as text, while preserving errors, actual voice messages and notices explicitly marked for delivery. [#129244](https://github.com/openclaw/openclaw/pull/129244). Thanks to [@steipete](https://github.com/steipete).
  - Final answers retain text after internal tool blocks containing quoted closing markers. [#149775](https://github.com/openclaw/openclaw/pull/149775). Thanks to [@bodapatisaikrishna](https://github.com/bodapatisaikrishna) and [@steipete](https://github.com/steipete).
  - Replies that add a correction or other new text after a message-tool send are delivered, including their repeated opening. [#151921](https://github.com/openclaw/openclaw/pull/151921). Thanks to [@amittell](https://github.com/amittell) and [@obviyus](https://github.com/obviyus).
  - Channel tools remain available to later messages after the agent or operator task that started the account ends. [#159396](https://github.com/openclaw/openclaw/pull/159396), [related #152965](https://github.com/openclaw/openclaw/issues/152965), [#158070](https://github.com/openclaw/openclaw/issues/158070) and [#161151](https://github.com/openclaw/openclaw/issues/161151). Thanks to [@ceckert](https://github.com/ceckert), [@RomneyDa](https://github.com/RomneyDa), [@slinkoff](https://github.com/slinkoff) and [@fuller-stack-dev](https://github.com/fuller-stack-dev).
  - Queued follow-ups and collected inputs use the current provider after a plugin reload, allowing the affected replies to resume. [#159715](https://github.com/openclaw/openclaw/pull/159715), [#158375](https://github.com/openclaw/openclaw/issues/158375). Thanks to [@mbelinky](https://github.com/mbelinky), [@RomneyDa](https://github.com/RomneyDa), and reporters [@chenkai8654](https://github.com/chenkai8654), [@N4DH](https://github.com/N4DH) and [@Oldrich333](https://github.com/Oldrich333).
  - Eligible long replies using reply instructions avoid repeated parsing and can arrive faster. [#166782](https://github.com/openclaw/openclaw/pull/166782), [#166781](https://github.com/openclaw/openclaw/issues/166781). Thanks to [@boeingchoco](https://github.com/boeingchoco) and [@obviyus](https://github.com/obviyus).
  - Preserve interrupted completion replies for recovery before later messages. [#167814](https://github.com/openclaw/openclaw/pull/167814), [issue](https://github.com/openclaw/openclaw/issues/167766), [restart recovery guide](/gateway/restart-recovery). Thanks [@goutamadwant](https://github.com/goutamadwant), [@steipete](https://github.com/steipete) and reporter [@marknilsn](https://github.com/marknilsn).
  - Keep non-steering messages queued behind subagent or command announcements until cleanup finishes. [#168077](https://github.com/openclaw/openclaw/pull/168077), [queue steering guide](/concepts/queue-steering). Thanks [@steipete](https://github.com/steipete).
  - Keep background task replies in their originating WebChat and preserve reply destinations when mirroring transcripts. Reef also stops treating a 40-character revision hash in a GitHub HTTPS commit, blob or tree link as a secret solely because of its entropy, while other checks still apply. [#168248](https://github.com/openclaw/openclaw/pull/168248), [Reef guide](/channels/reef). Thanks [@steipete](https://github.com/steipete).
  - Keep recognized silent reasoning placeholders silent when their final token ends in punctuation. [#168571](https://github.com/openclaw/openclaw/pull/168571), [related reports](https://github.com/openclaw/openclaw/issues/165025) and [#138662](https://github.com/openclaw/openclaw/issues/138662). Thanks [@liwenjie200543](https://github.com/liwenjie200543), [@steipete](https://github.com/steipete), reporters [@eonicman](https://github.com/eonicman) and [@cipp-ashe](https://github.com/cipp-ashe), and [@he-yufeng](https://github.com/he-yufeng) for the investigation.
  - Keep queue recovery from interrupting a message whose original sender is still active. [#169010](https://github.com/openclaw/openclaw/pull/169010). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Let ordinary non-steering queued messages without a source identity proceed when unnecessary recovery information cannot be read. [#169138](https://github.com/openclaw/openclaw/pull/169138). Thanks [@steipete](https://github.com/steipete).
  - Send an eligible replacement for an immediately failed reply before later replies in the same turn, including text replacing a failed voice note. Buffered delivery can place the replacement later ([#169305](https://github.com/openclaw/openclaw/pull/169305), [voice output guidance](/tools/tts/output)). Thanks to [steipete](https://github.com/steipete).
  - Include a redacted reply error in diagnostic events when diagnostics and debug or trace file logging are enabled ([#169503](https://github.com/openclaw/openclaw/pull/169503)). Debug logs can still contain private content. Thanks to [VACInc](https://github.com/VACInc) and [keshavbotagent](https://github.com/keshavbotagent).
  - Record intentionally filtered ClickClack scaffold-only messages as suppressed instead of uncertain delivery ([#169509](https://github.com/openclaw/openclaw/pull/169509)). Thanks to [steipete](https://github.com/steipete).
  - Preserve a completed answer after one invalidated session read ([#169987](https://github.com/openclaw/openclaw/pull/169987)). Thanks to [VACInc](https://github.com/VACInc).
  - Suppress token-only uppercase fragments of the silent reply marker while preserving attachments and configured heartbeat acknowledgements ([#170190](https://github.com/openclaw/openclaw/pull/170190)). Thanks to [maliv2](https://github.com/maliv2), [steipete](https://github.com/steipete), and [rboy1](https://github.com/rboy1) for the [report](https://github.com/openclaw/openclaw/issues/170158).
  - Keep a successful channel send marked delivered if a later delivery observer fails ([#170482](https://github.com/openclaw/openclaw/pull/170482)). Thanks to [steipete](https://github.com/steipete).
  - Keep routine channel bookkeeping from making old conversations appear newly active ([#170743](https://github.com/openclaw/openclaw/pull/170743)). Thanks to [steipete](https://github.com/steipete).
  - Wait for a pending current reply before sending replacement answers, media, or failure messages ([#170937](https://github.com/openclaw/openclaw/pull/170937)). Thanks to [steipete](https://github.com/steipete).
  - Deliver a failure notice for eligible requester continuations refused at initial plugin-runtime admission during reload ([#171021](https://github.com/openclaw/openclaw/pull/171021)). Thanks to [johan-eilertsen](https://github.com/johan-eilertsen) and [steipete](https://github.com/steipete).
  - Reply preparation no longer waits for unrelated session retention cleanup. [#171136](https://github.com/openclaw/openclaw/pull/171136). Thanks to [@steipete](https://github.com/steipete).
  - Eligible Web Push notifications can send after pending session updates settle, and delivery failures have more useful logs. Failed sends are not automatically retried. [#171145](https://github.com/openclaw/openclaw/pull/171145). Thanks to [@steipete](https://github.com/steipete).
  - Canceling an input during preparation preserves later queued work. [#171718](https://github.com/openclaw/openclaw/pull/171718). Thanks to [@steipete](https://github.com/steipete).
  - Queued inbound messages can retry when preparation fails before durable acceptance, with later preparation failures handled without replay. [#172080](https://github.com/openclaw/openclaw/pull/172080), [report](https://github.com/openclaw/openclaw/issues/171837). Thanks to [@steipete](https://github.com/steipete), [@bitfroest](https://github.com/bitfroest) and [@nissl24](https://github.com/nissl24).
  - Stalled channel identity writes time out and retry safely instead of waiting indefinitely. If retries are exhausted, the error points to `openclaw gateway status --deep`. [#172244](https://github.com/openclaw/openclaw/pull/172244). Thanks to [@steipete](https://github.com/steipete) and [@desksk](https://github.com/desksk) for the [report](https://github.com/openclaw/openclaw/issues/172091).
  - Streaming ordinary technical prose that mentions tools or functions avoids repeated full-reply trace-filter scans. [#172631](https://github.com/openclaw/openclaw/pull/172631). Thanks to [JasonBuildAI](https://github.com/JasonBuildAI) and [steipete](https://github.com/steipete).
  - An answer already delivered or awaiting delivery recovery no longer triggers a false missing-answer notice. [#173798](https://github.com/openclaw/openclaw/pull/173798). Thanks to [steipete](https://github.com/steipete).
  - Agent webhooks waiting for execution capacity can return an overload response instead of premature success. Session conflicts can also return their proper response. [#175111](https://github.com/openclaw/openclaw/pull/175111). Thanks to [RomneyDa](https://github.com/RomneyDa).
  - A rejected background typing callback is reported without stopping later keepalive ticks or causing an unhandled rejection. [#175381](https://github.com/openclaw/openclaw/pull/175381). Thanks to [musatoktas](https://github.com/musatoktas), [Yolo521-bot](https://github.com/Yolo521-bot) for the report, and [cxbAsDev](https://github.com/cxbAsDev) for the earlier proposal.
  - When recovery checks an interrupted send with an unknown outcome, matching permanent errors settle the delivery as failed while transient errors remain retryable. The uncertain message is not blindly resent. [#180767](https://github.com/openclaw/openclaw/pull/180767). Thanks to [wr-web](https://github.com/wr-web) and [Yolo521-bot](https://github.com/Yolo521-bot) for the report.
  - The optional extendable reply wait keeps its intended time budget when the system clock changes. [#182057](https://github.com/openclaw/openclaw/pull/182057). Thanks to [SunnyShu0925](https://github.com/SunnyShu0925) and [steipete](https://github.com/steipete).
  - Let an admitted reply settle before a queued command takes over, preserving reply accounting and command order ([commit 3678292](https://github.com/openclaw/openclaw/commit/3678292a09f253000fd9b475b262106fbe5fde1c)).
  - Keep streamed completion separate from pending source delivery so final replies and attachments are handled correctly, including during timeout recovery ([commit b52afef](https://github.com/openclaw/openclaw/commit/b52afef09152302461eea247e47a385cfe419366)).
  - WhatsApp retries reuse the same message ID for an uncertain send, reducing the chance of duplicate replies. [#142434](https://github.com/openclaw/openclaw/pull/142434), [#142398](https://github.com/openclaw/openclaw/issues/142398), [related acknowledgement issue #122758](https://github.com/openclaw/openclaw/issues/122758). Thanks to [@ashawwal](https://github.com/ashawwal), [@obviyus](https://github.com/obviyus) and [@he-yufeng](https://github.com/he-yufeng).
  - Synology Chat paces each webhook independently while preserving order and spacing for messages to the same webhook. [#144991](https://github.com/openclaw/openclaw/pull/144991), [#127491](https://github.com/openclaw/openclaw/issues/127491). Thanks to [@Abhishek-B-R](https://github.com/Abhishek-B-R) and reporter [@steipete](https://github.com/steipete).
  - Feishu sends a complete static reply when a streaming preview was accepted but the final update was rejected. The earlier preview remains visible. [#152086](https://github.com/openclaw/openclaw/pull/152086), [#139443](https://github.com/openclaw/openclaw/issues/139443). Thanks to [@kqtxmaster-boop](https://github.com/kqtxmaster-boop), [@obviyus](https://github.com/obviyus), [@ArthurNie](https://github.com/ArthurNie), [@Simon2256928](https://github.com/Simon2256928) and [@ruirui666888](https://github.com/ruirui666888).
  - A WhatsApp message that decrypts after an empty placeholder can still reach the agent, while duplicates stay suppressed. This cannot recover a message already marked complete. [#162078](https://github.com/openclaw/openclaw/pull/162078), [#161829](https://github.com/openclaw/openclaw/issues/161829). Thanks to [@stanleys12](https://github.com/stanleys12), [@obviyus](https://github.com/obviyus), reporter [@hundredhandsio](https://github.com/hundredhandsio), [@jmejia-appropia](https://github.com/jmejia-appropia) and [@gabrielrojasc](https://github.com/gabrielrojasc).
  - Keep Google Chat's missing-typing-message fallback working when a 404 response's error body cannot be read. [#168107](https://github.com/openclaw/openclaw/pull/168107). Thanks [@ly85206559](https://github.com/ly85206559) and reporter [@steipete](https://github.com/steipete).
  - Ignore IRC CTCP queries before pairing or agent dispatch, while allowing normal messages and actions through. [#168113](https://github.com/openclaw/openclaw/pull/168113). Thanks [@yetval](https://github.com/yetval) and [@obviyus](https://github.com/obviyus) for landing the fix.
  - Reef state operations run off the Gateway thread with less repeated database work. [#168340](https://github.com/openclaw/openclaw/pull/168340). Thanks [@steipete](https://github.com/steipete).
  - Accepted channel-bound ACP turns can deliver replies after five minutes without replaying their input. [#170880](https://github.com/openclaw/openclaw/pull/170880), reported in [#170827](https://github.com/openclaw/openclaw/issues/170827). Thanks [@steipete](https://github.com/steipete) and [@fanmeng-felix](https://github.com/fanmeng-felix).
  - Long channel `/compact` commands can finish within their configured timeout without being replayed by the ingress watchdog. [#171011](https://github.com/openclaw/openclaw/pull/171011), reported in [#170982](https://github.com/openclaw/openclaw/issues/170982), with a related proposal in [#171027](https://github.com/openclaw/openclaw/pull/171027). Thanks [@steipete](https://github.com/steipete), [@bluet](https://github.com/bluet), and [@PratikRai0101](https://github.com/PratikRai0101).
  - Stopping an ACP turn no longer suppresses a separate queued follow-up. Cancelling the follow-up itself still stops its output. [#170883](https://github.com/openclaw/openclaw/pull/170883), related to [#170833](https://github.com/openclaw/openclaw/issues/170833). Thanks [@steipete](https://github.com/steipete) and [@fanmeng-felix](https://github.com/fanmeng-felix).
  - A steered follow-up keeps its own failure reply and attachments after an earlier message-tool reply. [#170916](https://github.com/openclaw/openclaw/pull/170916). Thanks [@steipete](https://github.com/steipete).

  </details>

- Tool progress now finishes its update before the answer starts streaming, keeping long step titles readable within the configured display limit.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Fit long tool titles within the configured progress line limit while retaining useful path endings and status. [#168312](https://github.com/openclaw/openclaw/pull/168312). Thanks [@obviyus](https://github.com/obviyus).
  - Send verbose progress once and settle it before streaming answer previews. [#168345](https://github.com/openclaw/openclaw/pull/168345). Thanks [@obviyus](https://github.com/obviyus).

  </details>

- A2A replies and retries now stay with the task that started them; unsupported task references fail clearly instead of starting a different task. Discord and WhatsApp command actions also reject unsupported input before doing work.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Discord normalizes plugin command names and skips names over 32 characters with guidance for a shorter alias. Slack spelling is preserved. [#126643](https://github.com/openclaw/openclaw/pull/126643), [#126633](https://github.com/openclaw/openclaw/issues/126633). Thanks to [@steipete](https://github.com/steipete).
  - WhatsApp login validates its `start` and `wait` actions before invoking either operation. [#158719](https://github.com/openclaw/openclaw/pull/158719). Thanks to [@Alix-007](https://github.com/Alix-007) and [@mcaxtr](https://github.com/mcaxtr).
  - A2A push configuration requests return the protocol's push-not-supported error. [#167594](https://github.com/openclaw/openclaw/pull/167594), [#167591](https://github.com/openclaw/openclaw/issues/167591). Thanks to [@clawSean](https://github.com/clawSean) and [@obviyus](https://github.com/obviyus).
  - Reject A2A task references explicitly instead of starting unrelated work. To start a new task in the same conversation, omit `taskId` and reuse `contextId`. [#167596](https://github.com/openclaw/openclaw/pull/167596), [issue](https://github.com/openclaw/openclaw/issues/167592). Thanks [@clawSean](https://github.com/clawSean) and [@obviyus](https://github.com/obviyus).
  - Keep mention-like text literal in Slack compact progress posts and edits ([#169760](https://github.com/openclaw/openclaw/pull/169760)). Thanks to [KhanCold](https://github.com/KhanCold).
  - Retry Discord message edits, deletes, pins, and unpins after transient failures, including reconciliation of an ambiguous delete ([#169806](https://github.com/openclaw/openclaw/pull/169806)). Thanks to [ericcurtin](https://github.com/ericcurtin), and to [steipete](https://github.com/steipete) for confirming the merge.
  - Deliver Tlon events using CRLF or CR line endings or multiple data lines ([#170125](https://github.com/openclaw/openclaw/pull/170125)). Thanks to [ly85206559](https://github.com/ly85206559).
  - Keep A2A retries with a retained message ID on their original task and match replies to the tasks that started them ([#170469](https://github.com/openclaw/openclaw/pull/170469)). Thanks to [steipete](https://github.com/steipete) and [rh7](https://github.com/rh7) for the [report](https://github.com/openclaw/openclaw/issues/169916).
  - Keep the Gateway running when a Buzz relay disconnects during authentication ([#170591](https://github.com/openclaw/openclaw/pull/170591)). Thanks to [masatohoshino](https://github.com/masatohoshino), [obviyus](https://github.com/obviyus), and [jarvis-modern-mail](https://github.com/jarvis-modern-mail) for the [report and investigation](https://github.com/openclaw/openclaw/issues/147269).

  - A2A filters host notices from peer replies and reports failed runs on their originating tasks. [#172064](https://github.com/openclaw/openclaw/pull/172064). Thanks to [@steipete](https://github.com/steipete) and [@Oldrich333](https://github.com/Oldrich333) for the [report](https://github.com/openclaw/openclaw/issues/171985).

  </details>

- A Feishu settings reload no longer lets an old connection shut down the replacement, while stopping Tlon or Zalo prevents pending connection work from reopening it.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Retire unused Telegram token throttlers after token rotation or account removal ([#169536](https://github.com/openclaw/openclaw/pull/169536)). Thanks to [xialonglee](https://github.com/xialonglee).
  - Keep Feishu replies working when a settings reload overlaps an older monitor's cleanup. [#169226](https://github.com/openclaw/openclaw/pull/169226), [issue](https://github.com/openclaw/openclaw/issues/169190), [independent investigation](https://github.com/openclaw/openclaw/pull/170054). Thanks [@ruel225](https://github.com/ruel225), [@obviyus](https://github.com/obviyus), reporter [@junniar](https://github.com/junniar) and [@PratikRai0101](https://github.com/PratikRai0101) for the independent investigation.
  - Keep a stopped Tlon account disconnected when in-flight reconnect authentication finishes ([#169267](https://github.com/openclaw/openclaw/pull/169267)). Thanks to [zhangguiping-xydt](https://github.com/zhangguiping-xydt) and [obviyus](https://github.com/obviyus).
  - Cancel an outstanding Zalo poll when its account stops or restarts ([#169270](https://github.com/openclaw/openclaw/pull/169270)). Thanks to [zhangguiping-xydt](https://github.com/zhangguiping-xydt).

  </details>

- IRC detects more silent connection failures, reconnects, and shows the current error during recovery. Messages missed while disconnected are not replayed.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - IRC status shows disconnection and reconnect errors during recovery, then clears the error after reconnection. [#171053](https://github.com/openclaw/openclaw/pull/171053), [report](https://github.com/openclaw/openclaw/issues/101083). Thanks to [@ooiuuii](https://github.com/ooiuuii) and [@masatohoshino](https://github.com/masatohoshino).
  - IRC detects a silent connection failure and starts the existing reconnect and channel rejoin flow after roughly four minutes. Messages missed while disconnected are not replayed. [#172961](https://github.com/openclaw/openclaw/pull/172961). Thanks to [rodricksz4h5](https://github.com/rodricksz4h5) and [steipete](https://github.com/steipete).

  </details>

- [Discord voice consultations](/channels/discord/voice-channels) continue after a voice change during a call. Update and restart OpenClaw to apply that fix. If a call ends while an answer is still being prepared, the answer can continue in the same channel's text chat unless you cancelled it.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep Discord agent consultations working after an in-call voice change. Update and restart the Gateway to apply the fix ([#171029](https://github.com/openclaw/openclaw/pull/171029), [voice selection guidance](/nodes/talk/realtime-sessions#choose-a-talk-voice-from-chat)). Thanks to [ericcaiwx-star](https://github.com/ericcaiwx-star), [steipete](https://github.com/steipete), and [brainmonger](https://github.com/brainmonger) for the [report and investigation](https://github.com/openclaw/openclaw/issues/171013).
  - If a Discord voice call ends before its answer is ready, that answer can continue in the same channel’s text chat. Explicitly canceled replies send nothing. [#172380](https://github.com/openclaw/openclaw/pull/172380). Thanks to [@steipete](https://github.com/steipete) and [@brainmonger](https://github.com/brainmonger) for the [report](https://github.com/openclaw/openclaw/issues/172233).

  </details>

- An unreadable email no longer blocks later valid IMAP automation messages, and stalled sign-in or send attempts in the affected channels now report or recover from their specific failure. The skipped email remains in the mailbox and is not processed automatically.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - IMAP skips an unreadable email so later valid messages can reach automation. The original remains in the mailbox, and the skipped message is not processed or resubmitted through channel dead letters. [#173231](https://github.com/openclaw/openclaw/pull/173231). Thanks to [pgondhi987](https://github.com/pgondhi987).
  - Slack relay recovery waits for received-event writes to finish after a socket error. [#173407](https://github.com/openclaw/openclaw/pull/173407). Thanks to [steipete](https://github.com/steipete).
  - Mattermost slash commands and model-picker interactions explain when a full pairing queue prevented a request from being saved. The bot owner can approve or dismiss pending requests in Settings → Channels → DM access requests before the user retries. [#178581](https://github.com/openclaw/openclaw/pull/178581). Thanks to [HeZ2z](https://github.com/HeZ2z), [steipete](https://github.com/steipete), and [yetval](https://github.com/yetval) for the report.
  - iMessage bridge recovery recognizes structured send deadlines so later replies can recover. Failed sends are not automatically replayed, and recovery can also be triggered while a send's delivery is unsettled. [#180900](https://github.com/openclaw/openclaw/pull/180900). Thanks to [steipete](https://github.com/steipete).
  - Slack Socket Mode retries an isolated `invalid_auth` and can reconnect without a Gateway restart. Three such failures without a successful connection still block the channel, and definitive credential failures block immediately. [#181056](https://github.com/openclaw/openclaw/pull/181056). Thanks to [mushuiyu886](https://github.com/mushuiyu886) and [marns](https://github.com/marns) for the report.
  - A2A outbound sends with a missing peer URL or unresolved token are treated as permanent pre-dispatch failures, avoiding futile queue retries. Correct the configuration and reload when credentials cannot be resolved. [#181326](https://github.com/openclaw/openclaw/pull/181326). Thanks to [potoior](https://github.com/potoior) and [exGeni](https://github.com/exGeni).
  - SMS rejects unsupported prototype-named MMS content types before sending them to Twilio. Already-staged media with those types returns HTTP 415. [#181773](https://github.com/openclaw/openclaw/pull/181773). Thanks to [Jimmy-xuzimo](https://github.com/Jimmy-xuzimo), [steipete](https://github.com/steipete), and [masatohoshino](https://github.com/masatohoshino) for the report.
  - Feishu and Lark QR registration keeps its intended polling window when the system clock changes during setup. [#182180](https://github.com/openclaw/openclaw/pull/182180). Thanks to [mikasa0818](https://github.com/mikasa0818) and [steipete](https://github.com/steipete).
  - Overlapping WhatsApp plugin instances keep separate quoted-message caches, so a replacement cannot read or clear the retiring instance's quotes. [#182550](https://github.com/openclaw/openclaw/pull/182550). Thanks to [vincentkoc](https://github.com/vincentkoc).

  </details>

- Fixes long Discord replies breaking at line endings, Mattermost final answers being hidden behind stale previews, and LINE loading animations ignoring reply settings. Signal disconnects now show a useful reason for recovery.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Signal reports an unexpected event-stream closure as the reason for recovery, helping operators check the daemon or proxy. [#182746](https://github.com/openclaw/openclaw/pull/182746). Thanks to [wr-web](https://github.com/wr-web), [steipete](https://github.com/steipete), and [888achtachtacht-commits](https://github.com/888achtachtacht-commits) for the report.
  - Recognize an iMessage self-chat reply as an echo when it returns under the chat ID. A same-text message can still be suppressed while a pending echo marker remains ([#183383](https://github.com/openclaw/openclaw/pull/183383)). Thanks to [sukhdeepjohar](https://github.com/sukhdeepjohar), [steipete](https://github.com/steipete), and reporter [kunalchaudhary82](https://github.com/kunalchaudhary82).
  - Keep WhatsApp QR login waits stable across system-clock changes ([#183394](https://github.com/openclaw/openclaw/pull/183394)). Thanks to [SunnyShu0925](https://github.com/SunnyShu0925) and [steipete](https://github.com/steipete).
  - Attempt to close the Discord connection when startup fails after an overlapping restart ([#184033](https://github.com/openclaw/openclaw/pull/184033)). Thanks to [MarMarLabs](https://github.com/MarMarLabs) and [steipete](https://github.com/steipete).
  - Fix CRLF boundaries in long Discord replies while preserving line endings when inline code crosses a boundary ([#184435](https://github.com/openclaw/openclaw/pull/184435)). Thanks to [xialonglee](https://github.com/xialonglee) and [obviyus](https://github.com/obviyus).
  - Follow reply policy and typing settings for LINE direct-chat loading animations ([#185306](https://github.com/openclaw/openclaw/pull/185306)). Thanks to [masatohoshino](https://github.com/masatohoshino) and [obviyus](https://github.com/obviyus).
  - Send a fresh Mattermost final post when newer relevant activity has overtaken its preview ([#185422](https://github.com/openclaw/openclaw/pull/185422)). Thanks to [hannnnn-l](https://github.com/hannnnn-l) and [obviyus](https://github.com/obviyus).
  - Avoid bursts of Mattermost preview edits after a slow send ([#185483](https://github.com/openclaw/openclaw/pull/185483)). Thanks to [masatohoshino](https://github.com/masatohoshino) and [obviyus](https://github.com/obviyus).
  - Settle cancellation cleanly when an X account stops or reloads during subscription setup ([#186226](https://github.com/openclaw/openclaw/pull/186226)). Thanks to [steipete](https://github.com/steipete).
  - The merge includes Discord message-action retries and model status identifying the credential source selected for the current route ([commit 8548651](https://github.com/openclaw/openclaw/commit/8548651ff64ef4086abc492ea357b53b0b9bb913)).
  - The merge includes the fix that stops pending Tlon reconnect work from reopening streams after shutdown ([commit 9a41e1b](https://github.com/openclaw/openclaw/commit/9a41e1b76ec6f5903101d2570b38a8f456ece605)).

  </details>

- Retrying a meeting transcript from Summary or Transcript now restores all available pages. Capture settings return you to the selected meeting and filters, and periodic captions can continue after the joining command disconnects.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Failed automatic captures clean up unchanged empty candidates. The same change retains pending provider model choices and corrects authentication selection for explicit Gateway connections. [#137092](https://github.com/openclaw/openclaw/pull/137092). Thanks [@steipete](https://github.com/steipete).
  - Teams and Zoom meeting commands validate explicitly empty `--mode` and `--transport` values before connecting. [#167871](https://github.com/openclaw/openclaw/pull/167871). Thanks [@ly85206559](https://github.com/ly85206559) and [@obviyus](https://github.com/obviyus).
  - Restore every transcript page after an authorized retry from Summary or Transcript. [#169000](https://github.com/openclaw/openclaw/pull/169000), thanks [@steipete](https://github.com/steipete).
  - Return to the selected meeting and library filters after opening capture settings. [#169279](https://github.com/openclaw/openclaw/pull/169279), thanks [@steipete](https://github.com/steipete).
  - Keep periodic meeting captions running after the joining CLI disconnects. [#178415](https://github.com/openclaw/openclaw/pull/178415). Thanks [@sukhdeepjohar](https://github.com/sukhdeepjohar) and [@steipete](https://github.com/steipete), and [@sercada](https://github.com/sercada) for the related report.

  </details>

### Memory and search

- Starting OpenClaw no longer opens every agent's memory index at once. Each index opens when needed, while plugin reloads resume indexing that was already active.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Restores on-demand memory-index startup. [#174718](https://github.com/openclaw/openclaw/pull/174718).

  </details>

- [Memory search](/concepts/memory-search#how-search-works) can find notes that a natural-language question previously missed, keep relevant older dated notes eligible and rank weak keyword matches below closer matches in meaning. These are improvements to existing search, not a guarantee that every exact match comes first. If you set a minimum search score yourself, lower it if useful results disappear after the ranking change.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Natural-language questions can recover notes through a fallback when strict body and filename searches find nothing, and hybrid search can score keyword matches outside the initial vector window. [#161165](https://github.com/openclaw/openclaw/pull/161165), with thanks to [wangjx-xydt](https://github.com/wangjx-xydt), [steipete](https://github.com/steipete), [davidcittadini](https://github.com/davidcittadini) and [AXEG0](https://github.com/AXEG0). See [#160839](https://github.com/openclaw/openclaw/issues/160839) and [#162764](https://github.com/openclaw/openclaw/issues/162764).
  - Relevant older dated notes can appear in search again, though newer notes may still rank ahead. [#168692](https://github.com/openclaw/openclaw/pull/168692), with thanks to [steipete](https://github.com/steipete), [DrDanielSingleton](https://github.com/DrDanielSingleton), [S1gv4rd](https://github.com/S1gv4rd), [davidcittadini](https://github.com/davidcittadini), [rkcollins](https://github.com/rkcollins) and [h6y3](https://github.com/h6y3). See [#157392](https://github.com/openclaw/openclaw/issues/157392).
  - Keyword relevance remains distinct when dated notes decay, with changed hybrid scores for tuned thresholds. [#167004](https://github.com/openclaw/openclaw/pull/167004), with thanks to [MonkeyLeeT](https://github.com/MonkeyLeeT), [steipete](https://github.com/steipete), [AXEG0](https://github.com/AXEG0) and [n0mad-ai](https://github.com/n0mad-ai). See [#162764](https://github.com/openclaw/openclaw/issues/162764).
  - Eligible standalone headings stay with following content in built-in memory search. [#168867](https://github.com/openclaw/openclaw/pull/168867), with thanks to [steipete](https://github.com/steipete), [TomSchuman](https://github.com/TomSchuman) and [maximilliangrand](https://github.com/maximilliangrand). See [#149758](https://github.com/openclaw/openclaw/issues/149758).
  - Agents can answer from sufficient supplied context and retrieve memory when facts are missing. [#121115](https://github.com/openclaw/openclaw/pull/121115), with thanks to [arhxam](https://github.com/arhxam), [steipete](https://github.com/steipete), [shannon0430](https://github.com/shannon0430) and [petergaultney](https://github.com/petergaultney). See [#120968](https://github.com/openclaw/openclaw/issues/120968).
  - In eligible private chats, French questions about past discussions can trigger Active Memory escalation when the initial lookup is weak. [#171370](https://github.com/openclaw/openclaw/pull/171370), thanks to [RaphazZze](https://github.com/RaphazZze). See the [report](https://github.com/openclaw/openclaw/issues/171369).
  - Hybrid memory search gives weak keyword overlap less influence than a closer match in meaning. Tuned minimum scores may hide lower-scoring results, and rare identifiers or filename matches may move in the results ([#177450](https://github.com/openclaw/openclaw/pull/177450)). The related [exact-recall report #162764](https://github.com/openclaw/openclaw/issues/162764) remains open. Thanks [@serg0x](https://github.com/serg0x), [@steipete](https://github.com/steipete), and reporter [@axeg0](https://github.com/axeg0).

  </details>

- Memory search now explains more embedding-provider failures and keeps a [previously usable index](/concepts/memory-builtin#safe-index-recovery) available when rebuilding fails. After a database worker stops, a later request can reopen the existing index, although searches during recovery can still fail.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Software vector scoring can use less CPU and temporary memory on large indexes when sqlite-vec acceleration is unavailable. [#164773](https://github.com/openclaw/openclaw/pull/164773), with thanks to [etzelm](https://github.com/etzelm) and [steipete](https://github.com/steipete). See [#114913](https://github.com/openclaw/openclaw/issues/114913) and [#128140](https://github.com/openclaw/openclaw/issues/128140).
  - Memory status and Doctor explain when a requested sessions source is excluded because transcript indexing is not enabled. [#160320](https://github.com/openclaw/openclaw/pull/160320), with thanks to [Olli0103](https://github.com/Olli0103), [steipete](https://github.com/steipete) and [benjaml4](https://github.com/benjaml4). See [#159872](https://github.com/openclaw/openclaw/issues/159872).
  - When an index records vector dimensions, mismatched query embeddings produce an error with an agent-specific force-rebuild command. [#168465](https://github.com/openclaw/openclaw/pull/168465), with thanks to [steipete](https://github.com/steipete).
  - Enabled loop detection recognizes repeated memory searches with unchanged ordered hits. [#169088](https://github.com/openclaw/openclaw/pull/169088), thanks to [ericcaiwx-star](https://github.com/ericcaiwx-star), [steipete](https://github.com/steipete) and [PatrickTrent](https://github.com/PatrickTrent).
  - Reduced unnecessary session metadata reads during memory-search visibility checks ([#181247](https://github.com/openclaw/openclaw/pull/181247), [issue #181092](https://github.com/openclaw/openclaw/issues/181092)). Thanks [@steipete](https://github.com/steipete) and reporter [@davidcittadini](https://github.com/davidcittadini).
  - Kept Active Memory timeout streaks through cooldown expiry so another timeout renews the pause ([#181297](https://github.com/openclaw/openclaw/pull/181297), related [issue #180978](https://github.com/openclaw/openclaw/issues/180978)). Thanks [@steipete](https://github.com/steipete) and [@nikolay-bratanov](https://github.com/nikolay-bratanov).
  - Applied the existing LanceDB recall deadline across cold provider initialization, embedding, and search for provider adapters ([#182340](https://github.com/openclaw/openclaw/pull/182340)). Thanks [@steipete](https://github.com/steipete).
  - Kept LanceDB recall deadlines stable when the system clock changes ([#184711](https://github.com/openclaw/openclaw/pull/184711)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@obviyus](https://github.com/obviyus).
  - Applied the same elapsed-time protection to cold-start embedding deadlines ([#186037](https://github.com/openclaw/openclaw/pull/186037)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@obviyus](https://github.com/obviyus).
  - Added a Gateway warning when an all-zero query embedding skips vector recall, with guidance to check the embedding service and retry ([#183475](https://github.com/openclaw/openclaw/pull/183475), related [issue #183425](https://github.com/openclaw/openclaw/issues/183425)). Thanks [@lonexreb](https://github.com/lonexreb), [@steipete](https://github.com/steipete), and reporter [@feiniaoivp](https://github.com/feiniaoivp).
  - Embedding deadlines use elapsed time, preventing system clock changes from causing unnecessary retries or accepting late results. [#169360](https://github.com/openclaw/openclaw/pull/169360), thanks to [Bartok9](https://github.com/Bartok9) and [obviyus](https://github.com/obviyus).
  - OpenAI OAuth embeddings pick up renewed credentials for direct and batch requests. An eligible same-origin expired-token response gets one retry. [#172237](https://github.com/openclaw/openclaw/pull/172237), thanks to [steipete](https://github.com/steipete) and [digitalfrost84](https://github.com/digitalfrost84).
  - Failed full reindexes retry with bounded backoff while a valid published index remains available for searches. [#138786](https://github.com/openclaw/openclaw/pull/138786), with thanks to [grynn](https://github.com/grynn) and [steipete](https://github.com/steipete). See [#138775](https://github.com/openclaw/openclaw/issues/138775).
  - Embedding requests split at declared provider input limits before sending. Custom compatible providers must declare their limit to use this path. [#141686](https://github.com/openclaw/openclaw/pull/141686), with thanks to [vildevev](https://github.com/vildevev) and [steipete](https://github.com/steipete). See [#139040](https://github.com/openclaw/openclaw/issues/139040).
  - After a recognized limit rejection, embedding retries use a valid reported item limit to avoid unnecessary rejected batches. [#140508](https://github.com/openclaw/openclaw/pull/140508), with thanks to [saladinyao-cyber](https://github.com/saladinyao-cyber) and [steipete](https://github.com/steipete).
  - Managed llama.cpp memory indexing can use its local service when a retained API-key reference is unavailable. Other local providers still require their configured credentials. [#158108](https://github.com/openclaw/openclaw/pull/158108), with thanks to [ysumatta](https://github.com/ysumatta) and [steipete](https://github.com/steipete).
  - Invalid or empty embedding results now show an error rather than silently dropping search matches. A failed rebuild keeps the previous usable index. [#168263](https://github.com/openclaw/openclaw/pull/168263), with thanks to [steipete](https://github.com/steipete).
  - After a memory database worker stops, a later request can reopen the existing index. Searches during recovery may fail, and uncertain writes are not repeated automatically. [#171494](https://github.com/openclaw/openclaw/pull/171494), thanks to [steipete](https://github.com/steipete).
  - Memory status and Doctor resolve a selected third-party plugin's saved credentials and report the provider unavailable if they cannot be resolved. [#172135](https://github.com/openclaw/openclaw/pull/172135), thanks to [steipete](https://github.com/steipete) and [PaulClawitzki](https://github.com/PaulClawitzki).
  - Doctor explains that indexing may stop when neither primary nor fallback embeddings work, and gives agent-specific credential or keyword-only recovery guidance. [#172223](https://github.com/openclaw/openclaw/pull/172223), thanks to [serg0x](https://github.com/serg0x) and [steipete](https://github.com/steipete).

  </details>

- Memory reads through the CLI and supported plugins now reach the intended agent’s permitted notes more consistently, while private or untrusted content remains subject to its existing access checks.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Trusted workspace profiles and memory reach the model when a third-party memory plugin lacks a provenance classifier. Untrusted or invalidly identified content remains excluded. [#171241](https://github.com/openclaw/openclaw/pull/171241), thanks to [VACInc](https://github.com/VACInc).
  - Sessions opened at an explicit memory path can append and reopen messages with an ordinary canonical session key. [#171284](https://github.com/openclaw/openclaw/pull/171284), thanks to [steipete](https://github.com/steipete).
  - Restored memory authority for eligible owner sessions and cross-agent subagents, and enforced role and admin checks on private memory reads ([#181359](https://github.com/openclaw/openclaw/pull/181359)). Thanks [@jalehman](https://github.com/jalehman).
  - LanceDB resolves its default store from the active state directory, and Doctor checks that store for its legacy-memory migration. [#168944](https://github.com/openclaw/openclaw/pull/168944), with thanks to [steipete](https://github.com/steipete).
  - Memory search and standard session-backfill preview, apply and rollback route through the running local Gateway, as do Matrix verification status, bootstrap and device commands. Other operations require exclusive offline ownership. [#168471](https://github.com/openclaw/openclaw/pull/168471), with thanks to [steipete](https://github.com/steipete).
  - Memory Core writes from other processes require the Gateway or exclusive offline access. Workboard reads overlapping a change can briefly show an older snapshot until the next request. [#168841](https://github.com/openclaw/openclaw/pull/168841), with thanks to [steipete](https://github.com/steipete).
  - Refused a deleted or replaced source database before disclosing or writing backfilled memories ([commit 3d9595f](https://github.com/openclaw/openclaw/commit/3d9595fe12769ce63cb54992911728b95442e243)).

  </details>

- During memory setup, you can optionally test an [embedding provider and model](/concepts/memory-search#supported-providers) before saving them. Skipping or failing the check leaves existing settings intact, and interrupted import setup can return to its result and Continue action.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Guided and classic local onboarding and memory configuration offer the optional provider and model check. Skipping, a failed check or declining to save leaves existing settings in place. [#163693](https://github.com/openclaw/openclaw/pull/163693), with thanks to [PollyBot13](https://github.com/PollyBot13), [steipete](https://github.com/steipete) and [actwebmaster](https://github.com/actwebmaster). See [#16670](https://github.com/openclaw/openclaw/issues/16670).
  - A completed memory import can show its result and Continue action after the onboarding view is reactivated. [#168791](https://github.com/openclaw/openclaw/pull/168791), with thanks to [steipete](https://github.com/steipete).
  - Selected Memory Core refreshes its cached managers after provider settings change, so corrected embedding settings can take effect without restarting the Gateway. [#151263](https://github.com/openclaw/openclaw/pull/151263), with thanks to [ruel225](https://github.com/ruel225), [steipete](https://github.com/steipete) and [Mirksen](https://github.com/Mirksen). See [#151055](https://github.com/openclaw/openclaw/issues/151055).
  - Non-interactive embedding-only onboarding accepts `openclaw onboard --non-interactive --accept-risk --auth-choice llama-cpp --llama-cpp-embedding-only`. Enabled local-memory agents must agree on the embedding model. [#170153](https://github.com/openclaw/openclaw/pull/170153), thanks to [steipete](https://github.com/steipete) and [dh-js](https://github.com/dh-js) for the [report](https://github.com/openclaw/openclaw/issues/141793).
  - Provider-reported prompt and total token counts reach `/v1/embeddings` responses. Unavailable, invalid or incomplete usage returns zero rather than an estimate. [#154721](https://github.com/openclaw/openclaw/pull/154721), with thanks to [xialonglee](https://github.com/xialonglee) and [steipete](https://github.com/steipete).
  - Configured model IDs and authorized overrides can contain slashes when the prefix is not a registered provider. [#161170](https://github.com/openclaw/openclaw/pull/161170), with thanks to [xialonglee](https://github.com/xialonglee) and [steipete](https://github.com/steipete).

  </details>

- Memory embedding requests now respect the chosen provider’s private-network rules, including when a service redirects to a private address. If your embedding service depends on that route, you may need to allow it explicitly; invalid Google or LM Studio headers identify the affected setting.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Provider private-network denial now applies to memory embeddings, including remote overrides, and redirects to another private origin require permission. [#169847](https://github.com/openclaw/openclaw/pull/169847), thanks to [steipete](https://github.com/steipete), [dmorn](https://github.com/dmorn) for the [report](https://github.com/openclaw/openclaw/issues/94166), and [mushuiyu886](https://github.com/mushuiyu886) for [earlier policy work](https://github.com/openclaw/openclaw/pull/94344).
  - Gemini embedding and batch requests and LM Studio discovery, preparation and embedding requests honor explicit private-network denial. Private DNS opt-in belongs on the embedding provider's ID. [#170173](https://github.com/openclaw/openclaw/pull/170173), thanks to [steipete](https://github.com/steipete) and [Yigtwxx](https://github.com/Yigtwxx).
  - Invalid or unresolved Google and LM Studio embedding headers fail with the affected setting identified. [#169361](https://github.com/openclaw/openclaw/pull/169361), thanks to [steipete](https://github.com/steipete) and [aniruddhaadak80](https://github.com/aniruddhaadak80) for the [report](https://github.com/openclaw/openclaw/issues/128536).

  </details>

- [Memory Wiki](/plugins/memory-wiki#search-and-retrieval) now finds matching filenames without scanning every page in those searches, matches equivalent Unicode spellings and recognizes more local Markdown links in lint and backlinks.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Compile and lint avoid a second vault compile after changes, and compile returns the actual updated-index count. [#169028](https://github.com/openclaw/openclaw/pull/169028), thanks to [ericcurtin](https://github.com/ericcurtin) and [etzelm](https://github.com/etzelm).
  - Large vault status counts avoid the reported timeout. [#170553](https://github.com/openclaw/openclaw/pull/170553), thanks to [obviyus](https://github.com/obviyus) and [migelizaga-rgb](https://github.com/migelizaga-rgb) for the [report](https://github.com/openclaw/openclaw/issues/170466).
  - Identity validation uses less temporary memory for vaults with long compile histories. [#171845](https://github.com/openclaw/openclaw/pull/171845), thanks to [vincentkoc](https://github.com/vincentkoc).
  - Filename and extensionless-path lookups read matching candidates instead of every page. Page ID lookups and misses still scan the vault. [#171961](https://github.com/openclaw/openclaw/pull/171961), thanks to [vincentkoc](https://github.com/vincentkoc) and [etzelm](https://github.com/etzelm).
  - Fixed wiki lint and backlinks for inline Markdown links with titles, parentheses, or angle-bracket destinations ([#181380](https://github.com/openclaw/openclaw/pull/181380), [issue #181379](https://github.com/openclaw/openclaw/issues/181379)). Thanks [@loading2332](https://github.com/loading2332).
  - Resolved percent-encoded local Markdown paths for lint and backlinks ([#181794](https://github.com/openclaw/openclaw/pull/181794)). Thanks [@L4XB](https://github.com/L4XB) and [@obviyus](https://github.com/obviyus).
  - Matched equivalent composed and decomposed Unicode text in local Wiki search ([#184353](https://github.com/openclaw/openclaw/pull/184353)). Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@obviyus](https://github.com/obviyus).

  </details>

- Memory Wiki keeps Notes inside its marked human section when regenerating concept pages, and memory maintenance leaves unreadable source files and [Dream Diary](/concepts/dreaming#dream-diary) entries untouched. If a file is damaged, preserve the original and repair a copy before retrying. Handwritten text outside the marked Notes section on older generated pages is not protected.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Handwritten Notes inside the marked section now survive regeneration of Memory Wiki concept pages ([#175707](https://github.com/openclaw/openclaw/pull/175707), [issue #175700](https://github.com/openclaw/openclaw/issues/175700)). Thanks [@YangManBOBO](https://github.com/YangManBOBO), [@RomneyDa](https://github.com/RomneyDa), and [@steipete](https://github.com/steipete).
  - Kept stale OKF concept pages containing handwritten Notes when a concept is removed from the bundle ([#179657](https://github.com/openclaw/openclaw/pull/179657)). Thanks [@steipete](https://github.com/steipete).
  - Retained malformed source pages and their synchronization state during bridge and unsafe-local pruning ([#174573](https://github.com/openclaw/openclaw/pull/174573)). Thanks [@steipete](https://github.com/steipete).
  - Preserved existing OKF concepts with unreadable source text and stopped imports with an unreadable root index before concept writes ([#176009](https://github.com/openclaw/openclaw/pull/176009)). Thanks [@Alix-007](https://github.com/Alix-007).
  - Stopped memory maintenance from rewriting files with malformed UTF-8 ([#179016](https://github.com/openclaw/openclaw/pull/179016)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@steipete](https://github.com/steipete).
  - Doctor now stops before merging malformed root memory files and explains how to preserve the originals and retry with a converted copy. If the legacy file was already archived, the warning identifies its location. [#169029](https://github.com/openclaw/openclaw/pull/169029), thanks to [steipete](https://github.com/steipete) and co-author [wangmiao0668000666](https://github.com/wangmiao0668000666), who reported [#168567](https://github.com/openclaw/openclaw/issues/168567).
  - Doctor preserves local or custom Ollama embedding routes when migrating hosted Ollama chat settings. [#169661](https://github.com/openclaw/openclaw/pull/169661), thanks to [obviyus](https://github.com/obviyus).

  </details>

- ChatGPT imports now keep readable prose and pasted text from supported transcripts; Hermes memory imports reject malformed text instead of changing the source or destination. Replace unexpected special files with regular readable files, and convert a copy of malformed text before retrying.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Rejected special files in ChatGPT wiki import and preview. Replace the affected path with a regular file and retry. Symlinks to regular files remain supported ([#181755](https://github.com/openclaw/openclaw/pull/181755)). Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@steipete](https://github.com/steipete).
  - Preserved prose, pasted JSON, and embedded quotes in newly imported active-branch ChatGPT transcripts. Explicitly typed image parts remain omitted ([#182049](https://github.com/openclaw/openclaw/pull/182049)). Thanks [@L4XB](https://github.com/L4XB) and [@steipete](https://github.com/steipete).
  - Hermes append-style `MEMORY.md` and `USER.md` imports reject malformed UTF-8 without changing the failed item's source or destination. Re-encode the source before retrying. [#172742](https://github.com/openclaw/openclaw/pull/172742), thanks to [Leon-SK668](https://github.com/Leon-SK668) and [obviyus](https://github.com/obviyus).
  - Reported directory inspection and skill listing errors during preview. Resolve the access or storage problem and rerun preview before applying ([#175452](https://github.com/openclaw/openclaw/pull/175452)). Thanks [@steipete](https://github.com/steipete).
  - Avoided blocking on pipes and other special files during migration. Replace an unexpected special file with an ordinary readable UTF-8 file and retry ([#180908](https://github.com/openclaw/openclaw/pull/180908)). Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@steipete](https://github.com/steipete).

  </details>

- Memory can save a checkpoint before conversation compaction even when a provider omits token-use data. File-based checkpoints also reject exact copies of already saved blocks and can retry with new text.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - A transcript estimate can trigger a pre-compaction memory checkpoint when provider usage is missing or zero, without presenting the estimate as measured session usage. [#83178](https://github.com/openclaw/openclaw/pull/83178), with thanks to [njuboy11](https://github.com/njuboy11) and [steipete](https://github.com/steipete). See [#83177](https://github.com/openclaw/openclaw/issues/83177).
  - File-based pre-compaction flushes reject copied saved blocks and can retry with new text. Existing duplicates remain, and paraphrased repetition is not detected. [#168123](https://github.com/openclaw/openclaw/pull/168123), with thanks to [steipete](https://github.com/steipete), [bit-777](https://github.com/bit-777) and [touraround](https://github.com/touraround). See [#164650](https://github.com/openclaw/openclaw/issues/164650).

  </details>

- Paused or failure-disabled [Dreaming jobs](/concepts/dreaming#scheduling) now stay stopped during routine recovery, and an empty diary sweep writes no entry. To resume a stopped job, run `openclaw cron enable <job-id>`.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - A useful Dream Diary sweep writes at most one combined reflection per workspace, and an empty sweep writes none. [#167887](https://github.com/openclaw/openclaw/pull/167887), with thanks to [diregoblin](https://github.com/diregoblin) and [steipete](https://github.com/steipete).
  - A fresh Gateway no longer reports a false dreaming cleanup failure when an agent database is first created. [#168175](https://github.com/openclaw/openclaw/pull/168175), with thanks to [steipete](https://github.com/steipete).
  - Memory sweeps no longer cause unnecessary recovery checks on Gateway restart. [#168631](https://github.com/openclaw/openclaw/pull/168631), with thanks to [jalehman](https://github.com/jalehman). See [#168620](https://github.com/openclaw/openclaw/issues/168620).
  - Disabling or replacing Memory Core no longer waits for a timeout solely because a startup scan is running. [#168229](https://github.com/openclaw/openclaw/pull/168229), with thanks to [steipete](https://github.com/steipete).
  - Paused or failure-disabled Dreaming jobs keep their stopped state and failure history. Resume one with `openclaw cron enable <job-id>` ([#180694](https://github.com/openclaw/openclaw/pull/180694), [issue #180655](https://github.com/openclaw/openclaw/issues/180655)). Thanks [@Yun-0000](https://github.com/Yun-0000), [@steipete](https://github.com/steipete), and reporter [@lisandromachado](https://github.com/lisandromachado).
  - Recorded Gateway-routed CLI memory search recalls in the requested agent's Dreaming workspace ([commit 8fc0987](https://github.com/openclaw/openclaw/commit/8fc0987fb086d68df8c345b50501c6b08e4f6e8d)).
  - Preserved malformed dream diaries during updates and omitted them from optional history ([#179022](https://github.com/openclaw/openclaw/pull/179022)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@steipete](https://github.com/steipete).
  - Documented recovery for malformed dream diaries, including preserving the original and converting a copy before retrying ([commit 43c5a84](https://github.com/openclaw/openclaw/commit/43c5a84ecaf9ce16a191f5498ed2550aca40da83)). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Memory plugin reload can finish while slow cleanup of old interrupted dreaming sessions continues in the background. [#169945](https://github.com/openclaw/openclaw/pull/169945), thanks to [Stronggenetics](https://github.com/Stronggenetics) and [hannesrudolph](https://github.com/hannesrudolph) for the [related report](https://github.com/openclaw/openclaw/issues/152275).

  </details>

### Workspaces and paired computers

- Fixes managed-worktree cleanup stopping at read-only dependency folders or abandoning other worktrees when one cannot be removed.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Repair eligible read-only directories during orphan cleanup and continue cleaning other worktrees when one fails. After fixing access, retry deferred cleanup with `openclaw worktrees gc --retry-deferred`. [#171305](https://github.com/openclaw/openclaw/pull/171305) by [@steipete](https://github.com/steipete).

  </details>

- A conversation on a [paired computer](/nodes/pairing-and-status) can continue once after a brief disconnect if its saved conversation and workspace recover. If a command might have run before the connection dropped, check what it did before trying it again. OpenClaw will not automatically repeat it.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Continue an eligible chat once after the paired computer reconnects and its saved conversation and workspace recover. Direct agent RPC turns do not receive this continuation. [#171867](https://github.com/openclaw/openclaw/pull/171867) by [@steipete](https://github.com/steipete).
  - Explain a paired-computer disconnect and remind you to check whether an interrupted command had an effect before retrying. [#171695](https://github.com/openclaw/openclaw/pull/171695) by [@steipete](https://github.com/steipete).
  - Keep attempts to reconnect a paired workspace from waiting longer after the system clock changes ([#171977](https://github.com/openclaw/openclaw/pull/171977)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@obviyus](https://github.com/obviyus).
  - Keep remote workspace operations from timing out too early or waiting too long when the system clock changes ([#172256](https://github.com/openclaw/openclaw/pull/172256)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925).
  - Keep remote attachment transfers from waiting longer after the system clock moves backward ([#173142](https://github.com/openclaw/openclaw/pull/173142)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@obviyus](https://github.com/obviyus).
  - Keep remote command progress updates on schedule if the computer's clock changes ([#182481](https://github.com/openclaw/openclaw/pull/182481)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925).
  - Keep a worker waiting for a free slot from waiting beyond its normal limit after clock changes ([#184042](https://github.com/openclaw/openclaw/pull/184042)). Thanks [@steipete](https://github.com/steipete) and [@SunnyShu0925](https://github.com/SunnyShu0925).
  - Wait until a native worker is attached before starting the first conversation turn ([#177184](https://github.com/openclaw/openclaw/pull/177184)). Thanks [@steipete](https://github.com/steipete).
  - Run remote commands under the right service identity instead of a misleading inherited one ([#173304](https://github.com/openclaw/openclaw/pull/173304), [#171542](https://github.com/openclaw/openclaw/issues/171542)). Thanks [@steipete](https://github.com/steipete), [@Leon-SK668](https://github.com/Leon-SK668) and [@davidcittadini](https://github.com/davidcittadini).
  - Show the cause of a paired-computer worker failure in local warnings without exposing secrets ([#174750](https://github.com/openclaw/openclaw/pull/174750), [#173351](https://github.com/openclaw/openclaw/issues/173351)). Thanks [@steipete](https://github.com/steipete), [@unknown7751](https://github.com/unknown7751) and [@Yolo521-bot](https://github.com/Yolo521-bot).

  </details>

- Commands and events for one paired computer keep working while another device's pairing changes. If the computer itself loses its connection or permission, OpenClaw reports the actual problem instead of suggesting that every host is full.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Report a computer's current pairing or connection failure when a session cannot start there, instead of a misleading capacity error ([#168531](https://github.com/openclaw/openclaw/pull/168531)). Thanks to [steipete](https://github.com/steipete).
  - Free a paired computer's worker slot after a forced stop by clearing processes that belong to the stopped worker ([#168746](https://github.com/openclaw/openclaw/pull/168746), [report #160643](https://github.com/openclaw/openclaw/issues/160643)). Thanks to [steipete](https://github.com/steipete), reporter [aniruddhaadak80](https://github.com/aniruddhaadak80), and [linhongyu510](https://github.com/linhongyu510) for the cleanup investigation.
  - Let paired-computer workspace maintenance finish even when its preparation outlasts the scheduler's initial wait ([#168780](https://github.com/openclaw/openclaw/pull/168780)). Thanks to [steipete](https://github.com/steipete).
  - Keep an already approved remote command attached to the right approval, with device policy checks intact ([#148612](https://github.com/openclaw/openclaw/pull/148612)). Thanks to [beenhero](https://github.com/beenhero) and [steipete](https://github.com/steipete).
  - Warn when a remote node background or yield request runs synchronously ([#156553](https://github.com/openclaw/openclaw/pull/156553), [report #156524](https://github.com/openclaw/openclaw/issues/156524)). Thanks to [NianJiuZst](https://github.com/NianJiuZst), [obviyus](https://github.com/obviyus), and reporter [service-cyber](https://github.com/service-cyber).
  - Run a remote command after its valid approval instead of rejecting it because an internal plan reference was lost ([#161980](https://github.com/openclaw/openclaw/pull/161980), [report #151622](https://github.com/openclaw/openclaw/issues/151622), [related issue #142492](https://github.com/openclaw/openclaw/issues/142492)). Thanks to [Program-123](https://github.com/Program-123), [steipete](https://github.com/steipete), reporters [gaojian125](https://github.com/gaojian125) and [enderwillsaveyou](https://github.com/enderwillsaveyou), and [rozenpl](https://github.com/rozenpl) and [daddydubzzz](https://github.com/daddydubzzz) for reproductions.
  - Avoid announcing a remote command as finished twice after its result has already appeared ([#164511](https://github.com/openclaw/openclaw/pull/164511), [related issue #154474](https://github.com/openclaw/openclaw/issues/154474)). Thanks to [holgergruenhagen](https://github.com/holgergruenhagen), [obviyus](https://github.com/obviyus), and reporter [xiazixin](https://github.com/xiazixin).
  - Run authorized POSIX paired-node commands that end in whitespace ([#168120](https://github.com/openclaw/openclaw/pull/168120)). Thanks to [yetval](https://github.com/yetval).
  - Keep commands and events working for a paired computer when another device's pairing information changes. [#169486](https://github.com/openclaw/openclaw/pull/169486) by [@steipete](https://github.com/steipete). Related to [#166652](https://github.com/openclaw/openclaw/issues/166652).
  - Keep a paired computer's commands and events flowing during another device's pairing update. A change to that computer's own permission still restricts its access. [#169575](https://github.com/openclaw/openclaw/pull/169575) by [@steipete](https://github.com/steipete), with thanks to [@gisk0](https://github.com/gisk0) for the diagnosis and alternative proposal.
  - Deliver delegated `sessions_send` replies and workspace conflict reports in the intended worker conversation instead of returning a false ownership error. [#168946](https://github.com/openclaw/openclaw/pull/168946), addressing [#159801](https://github.com/openclaw/openclaw/issues/159801), by [@steipete](https://github.com/steipete).
  - Tell agents that paired-node directory browsing lists folders only, and suggest a file listing through node-host execution when permitted. [#169224](https://github.com/openclaw/openclaw/pull/169224) by [@PratikRai0101](https://github.com/PratikRai0101), with thanks to [@keiseisales](https://github.com/keiseisales) for [the report](https://github.com/openclaw/openclaw/issues/169192).
  - Let a cancelled remote command settle even when its progress acknowledgment is late, so the computer can update once idle. [#169273](https://github.com/openclaw/openclaw/pull/169273) by [@zhangguiping-xydt](https://github.com/zhangguiping-xydt).
  - Restart or stop the Gateway despite a disconnected cloud worker, with a warning that its remote machine still needs cleanup later. [#168907](https://github.com/openclaw/openclaw/pull/168907) by [@steipete](https://github.com/steipete).
  - Refresh the paired-computer list with less work when many devices are connected. [#171876](https://github.com/openclaw/openclaw/pull/171876) by [@steipete](https://github.com/steipete).
  - Apply approved pairing-permission changes to the connected computer they belong to. [Commit](https://github.com/openclaw/openclaw/commit/94f180d9ab19d969d59298312cff8ed019e18b58)

  </details>

- You can [move an eligible conversation](/gateway/cloud-workers/session-lifecycle#move-a-session) from its session menu to a local or remote computer, or retry a failed move to the same destination. Moving an active remote conversation interrupts its current turn without replaying it. Leaving an offline device requires confirmation.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Move an eligible conversation from its session menu between local and remote computers, or retry a move that failed during shutdown without selecting a different destination. The existing placement chip remains available. [#171690](https://github.com/openclaw/openclaw/pull/171690) · [Session lifecycle](/gateway/cloud-workers/session-lifecycle) · Contribution from [@steipete](https://github.com/steipete).
  - Missing required worker profiles and recoverable drafts ([#158903](https://github.com/openclaw/openclaw/pull/158903)). Thanks to [RomneyDa](https://github.com/RomneyDa), [sallyom](https://github.com/sallyom), and [steipete](https://github.com/steipete).
  - Keep chosen cloud profiles selected and use smaller, comparable defaults when no machine size is configured ([#156786](https://github.com/openclaw/openclaw/pull/156786)). Thanks to [vincentkoc](https://github.com/vincentkoc).
  - Keep the current turn running while another worker starts independently ([#155464](https://github.com/openclaw/openclaw/pull/155464), [report #155333](https://github.com/openclaw/openclaw/issues/155333)). Thanks to [bulingbuling688](https://github.com/bulingbuling688), [steipete](https://github.com/steipete), and reporter [rvelasquez](https://github.com/rvelasquez).
  - Clarify worker idle retention, optional worker-local inference, placement, and recovery guidance ([#168260](https://github.com/openclaw/openclaw/pull/168260), [issue #168255](https://github.com/openclaw/openclaw/issues/168255)). Thanks to [RomneyDa](https://github.com/RomneyDa).
  - Find repository environment settings and actions together, with shared controls under Advanced. [#170892](https://github.com/openclaw/openclaw/pull/170892) by [@steipete](https://github.com/steipete).
  - See whether a cloud computer is loading an image or preparing its environment, and why it needed a cold start. [#170895](https://github.com/openclaw/openclaw/pull/170895) by [@steipete](https://github.com/steipete).

  </details>

- Cloud conversations can reuse [compatible prepared environments](/gateway/cloud-workers/warm-images#later-sessions-and-refresh) in more cases, including some starts after runtime updates. If a setup secret changes but its name and store reference stay the same, refresh the prepared environment before relying on results from that setup.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Crabbox 0.73.0 minimum and managed acquisition ([#168188](https://github.com/openclaw/openclaw/pull/168188)). Thanks to [steipete](https://github.com/steipete).
  - Reuse prepared images for eligible empty cloud workspaces, and wait until the next refresh before retrying a capture the provider cannot support ([#168371](https://github.com/openclaw/openclaw/pull/168371)). Thanks to [steipete](https://github.com/steipete).
  - Share overlapping cloud machine and operating-system metadata requests while allowing later refreshes ([#156605](https://github.com/openclaw/openclaw/pull/156605)). Thanks to [vincentkoc](https://github.com/vincentkoc).
  - Optionally save a reusable image while reclaiming a cloud session ([#168454](https://github.com/openclaw/openclaw/pull/168454)). Thanks to [steipete](https://github.com/steipete).
  - Keep Crabbox command retry and cleanup time budgets consistent when the system clock changes ([#165889](https://github.com/openclaw/openclaw/pull/165889)). Thanks to [SunnyShu0925](https://github.com/SunnyShu0925) and [fuller-stack-dev](https://github.com/fuller-stack-dev).
  - A compatible prepared image skips repeated profile setup ([#168892](https://github.com/openclaw/openclaw/pull/168892)). Thanks to [steipete](https://github.com/steipete).
  - Start from a prepared image without reinstalling the runtime already stored in it. [#168974](https://github.com/openclaw/openclaw/pull/168974) by [@steipete](https://github.com/steipete).
  - Prefetch runtime files at boot for eligible Linux warm images with cron. When system Node resolves under `/usr`, the prefetch may also read unrelated files under that directory. [#169886](https://github.com/openclaw/openclaw/pull/169886) by [@steipete](https://github.com/steipete).
  - Keep warm-image cleanup within its elapsed-time budget across system clock changes. Timed-out deletions remain tracked for retry. [#169908](https://github.com/openclaw/openclaw/pull/169908) by [@SunnyShu0925](https://github.com/SunnyShu0925).
  - Reuse a compatible Crabbox project image across runtime updates, installing a newer runtime after startup if needed. Changed setup or machine inputs still require a compatible image. [#170780](https://github.com/openclaw/openclaw/pull/170780) by [@steipete](https://github.com/steipete).
  - Refresh Cloud inventory after plugin activation and use canonical repository labels for worktree snapshots. Existing labels update on their next metadata write. [#171176](https://github.com/openclaw/openclaw/pull/171176) by [@steipete](https://github.com/steipete).
  - An eligible first AWS cloud session can start while its snapshot uploads with Crabbox 0.78.0 or newer, once capture is confirmed. Another session may start cold until that image finishes saving. [#171729](https://github.com/openclaw/openclaw/pull/171729) by [@steipete](https://github.com/steipete).
  - Show one useful warning rather than repeated capture failures when a Crabbox image save is already paused. [#171059](https://github.com/openclaw/openclaw/pull/171059) by [@steipete](https://github.com/steipete).

  - Honored Crabbox worker lifetimes during preparation and capture and waited for confirmed remote gate cleanup. Crabbox 0.77.0 or newer is required ([#172442](https://github.com/openclaw/openclaw/pull/172442)). Thanks [@steipete](https://github.com/steipete).

  </details>

- Selecting a saved cloud profile that is not active yet now tells you to restart the Gateway and try again, rather than reporting success. Cloud workers also wait for a provider's quota reset before retrying.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Tell you when a saved cloud profile is not active in the running Gateway yet, with guidance to restart and try again. [#171025](https://github.com/openclaw/openclaw/pull/171025) by [@steipete](https://github.com/steipete).
  - Wait for a provider's quota to reset before retrying a cloud worker that received a rate-limit response. [#171823](https://github.com/openclaw/openclaw/pull/171823), related to [#171760](https://github.com/openclaw/openclaw/pull/171760), by [@vincentkoc](https://github.com/vincentkoc), with [@Kimiyu-186](https://github.com/Kimiyu-186) and [@steipete](https://github.com/steipete).

  </details>

- Conversations on paired and cloud computers give a clearer reason when a model or credential is missing, a worker stops mid-reply, or a turn produces no answer. If a worker disappears while the Gateway stays up, text it already received can remain in conversation history, but interrupted tools are not resumed.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Deliver the worker's finished reply before file synchronization completes; follow-up work still waits for synchronization, and a later conflict appears separately ([#169484](https://github.com/openclaw/openclaw/pull/169484)). Thanks to [steipete](https://github.com/steipete).
  - Start replying sooner in measured warm paired-computer turns by avoiding repeated destination checks. [#168799](https://github.com/openclaw/openclaw/pull/168799) by [@steipete](https://github.com/steipete).
  - Finish a remote turn with less file-sync work when neither workspace changed. [#168933](https://github.com/openclaw/openclaw/pull/168933) by [@steipete](https://github.com/steipete).
  - Reuse approved model and credential preparation across provider requests within a Gateway-proxied node turn. [#169294](https://github.com/openclaw/openclaw/pull/169294) by [@steipete](https://github.com/steipete).
  - Reduce repeated bundle inspection during node retention by reusing installed status for the current connection. A bundle altered during that connection may not be detected until launch, installation or explicit inspection. [#169325](https://github.com/openclaw/openclaw/pull/169325) by [@steipete](https://github.com/steipete).
  - Avoid full retention cleanup on capacity-only node updates. Inventory-only cleanup waits for a successful periodic reconciliation. [#169371](https://github.com/openclaw/openclaw/pull/169371) by [@steipete](https://github.com/steipete).
  - Reuse successful disk samples for unchanged idle worker placements for up to 15 minutes. Activity or runner changes prompt a refresh on the next maintenance pass. Disk-pressure warnings remain advisory. [#169712](https://github.com/openclaw/openclaw/pull/169712) by [@steipete](https://github.com/steipete).
  - Retry starting a session once if another worker's change interrupted its start. [#170085](https://github.com/openclaw/openclaw/pull/170085) by [@steipete](https://github.com/steipete).
  - Use an explicitly selected OpenClaw runtime and model on a required worker even when the Gateway has no provider credentials. [#170132](https://github.com/openclaw/openclaw/pull/170132) by [@steipete](https://github.com/steipete).
  - Check interrupted worker work after a Gateway restart before starting the next turn. [#170161](https://github.com/openclaw/openclaw/pull/170161) by [@steipete](https://github.com/steipete).
  - If a native worker disappears during a reply while the Gateway stays running, try to keep the text already received in conversation history and explain the failure. Interrupted tools are not resumed. [#170223](https://github.com/openclaw/openclaw/pull/170223) by [@steipete](https://github.com/steipete).
  - Tell you when a paired computer needs model or credential setup instead of pointing to an unrelated update or sign-in problem. [#170257](https://github.com/openclaw/openclaw/pull/170257) by [@steipete](https://github.com/steipete).
  - Ask a worker for an answer after its tools finish, or show a failure if it still returns nothing. A background command that is still running is reported as in progress. [#170426](https://github.com/openclaw/openclaw/pull/170426) by [@steipete](https://github.com/steipete).
  - Cloud worker turns accept longer provider response IDs when both the Gateway and worker use the updated validator. [#170461](https://github.com/openclaw/openclaw/pull/170461) by [@sallyom](https://github.com/sallyom).
  - The worker inference guide clarifies that optional workers handle bound sessions while sessionless helpers run on the Gateway. A required profile blocks those helpers rather than moving them to the worker. [#170012](https://github.com/openclaw/openclaw/pull/170012) by [@steipete](https://github.com/steipete).

  </details>

- Supported worker slots can be used again after a confirmed computer restart, without waiting for the old worker to reappear.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Free supported native worker slots after a confirmed computer restart. If the computer's boot identity is unavailable, OpenClaw keeps the safer existing recovery behavior. [#168863](https://github.com/openclaw/openclaw/pull/168863) by [@steipete](https://github.com/steipete).

  </details>

- Worker setup refuses project-cache folders that are known to lead through a symlink.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Rejected known symlinked project-cache parents before worker toolchain setup ([#172079](https://github.com/openclaw/openclaw/pull/172079)). Thanks [@vincentkoc](https://github.com/vincentkoc).

  </details>

- Some new project conversations can begin replying while their checkout finishes, with file-dependent tools waiting until the [project folder](/concepts/managed-worktrees) is ready. Resetting an existing conversation can keep its project folder and working directory; choosing New Chat still leaves the previous worktree.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Include more default guidance for agents in new workspaces with small setup budgets. Existing workspace files are left alone ([#89894](https://github.com/openclaw/openclaw/pull/89894), [report #75187](https://github.com/openclaw/openclaw/issues/75187)). Thanks to [dwc1997](https://github.com/dwc1997), [steipete](https://github.com/steipete), and [camerono](https://github.com/camerono).
  - Let the opt-in continuation-skip mode stop repeating workspace instructions after successful delivery in an already onboarded workspace ([#154923](https://github.com/openclaw/openclaw/pull/154923), [report #149867](https://github.com/openclaw/openclaw/issues/149867), [workspace configuration](/gateway/config-agents/workspace-and-bootstrap)). Thanks to [sxh313](https://github.com/sxh313), [steipete](https://github.com/steipete), and reporter [playhard94](https://github.com/playhard94).
  - Preserve native managed worktrees, projects, and working directories through conversation resets. Control UI New Chat still leaves the previous worktree ([#160549](https://github.com/openclaw/openclaw/pull/160549), [earlier rollover work #159506](https://github.com/openclaw/openclaw/pull/159506) by [chelsealong](https://github.com/chelsealong)). Thanks to [vincentkoc](https://github.com/vincentkoc).
  - Let a project checkout proceed after a brief delay instead of reporting a false allocation failure ([#168214](https://github.com/openclaw/openclaw/pull/168214)). Thanks to [RomneyDa](https://github.com/RomneyDa).
  - Preserve partial-clone filters and reuse clean worktree snapshot trees, leaving the checkout in place if required objects are missing ([#168682](https://github.com/openclaw/openclaw/pull/168682)). Thanks to [steipete](https://github.com/steipete).
  - Restore accepted local file edits to their committed values after a worker reply is lost ([#168094](https://github.com/openclaw/openclaw/pull/168094)). Thanks to [steipete](https://github.com/steipete).
  - Show files, not folders, in session activity meant to list files ([#167732](https://github.com/openclaw/openclaw/pull/167732), [related issue #96660](https://github.com/openclaw/openclaw/issues/96660)). Thanks to [goldarowana](https://github.com/goldarowana), [obviyus](https://github.com/obviyus), and reporter [mmhzlrj](https://github.com/mmhzlrj).
  - Refuse `openclaw path set` edits on invalid UTF-8 in the opt-in oc-path plugin, preserving the original bytes. Repair or convert a backed-up copy before retrying ([#168491](https://github.com/openclaw/openclaw/pull/168491), [related report #114895](https://github.com/openclaw/openclaw/issues/114895)). Thanks to [wangmiao0668000666](https://github.com/wangmiao0668000666) and reporter [yetval](https://github.com/yetval).
  - Begin replying in eligible new project conversations before checkout finishes, while file-dependent tools wait for the folder. Projects with setup hooks or other incompatible preparation still finish setup first. [#169136](https://github.com/openclaw/openclaw/pull/169136) by [@steipete](https://github.com/steipete).
  - Prepare a project's default branch once for concurrent conversations without disturbing the checkout already in use. [#169070](https://github.com/openclaw/openclaw/pull/169070) by [@steipete](https://github.com/steipete).
  - Open an already prepared project folder without waiting for other conversations' folders to finish allocating. [#169178](https://github.com/openclaw/openclaw/pull/169178) by [@steipete](https://github.com/steipete).
  - Reuse a successful default-base preparation for up to 30 seconds and allow an explicit ref to select an update immediately. [#169590](https://github.com/openclaw/openclaw/pull/169590) by [@steipete](https://github.com/steipete).
  - Restore filesystem template use for full worktrees when a sibling uses sparse checkout. Targets with sparse settings, filters or external attributes continue through Git. [#169359](https://github.com/openclaw/openclaw/pull/169359) by [@steipete](https://github.com/steipete).
  - Reuse validated templates during concurrent Btrfs checkouts and choose Git for later creations when a warm Btrfs checkout measures more than 250 ms slower. [#169440](https://github.com/openclaw/openclaw/pull/169440) by [@steipete](https://github.com/steipete).
  - Reduce resource use during bursts of worktree-backed session creation. [#168807](https://github.com/openclaw/openclaw/pull/168807) by [@steipete](https://github.com/steipete).
  - Free checkout names sooner during ordinary forced cleanup and delete retired files in the background. A crash or failed deletion can leave an inspectable `.openclaw-removing-*` directory. [#169690](https://github.com/openclaw/openclaw/pull/169690) by [@steipete](https://github.com/steipete).
  - Recover available missing partial-clone objects during an explicit deferred cleanup retry. Recovery is bounded and can continue on another retry. [#168864](https://github.com/openclaw/openclaw/pull/168864) by [@steipete](https://github.com/steipete).
  - Keep the first message and start its turn even when several project conversations are created at once. [#169107](https://github.com/openclaw/openclaw/pull/169107) by [@steipete](https://github.com/steipete).

  </details>

- Guests can choose available project checkouts again without seeing host paths, and their New Session choices stay in their own profile. File and HTML previews also work in affected project conversations.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep a guest's New Session choices in that guest's profile ([#172114](https://github.com/openclaw/openclaw/pull/172114), [#172083](https://github.com/openclaw/openclaw/issues/172083)). Thanks [@shakkernerd](https://github.com/shakkernerd).
  - Selected an available checkout and explained unavailable choices ([#172542](https://github.com/openclaw/openclaw/pull/172542), [#172490](https://github.com/openclaw/openclaw/issues/172490)). Thanks [@shakkernerd](https://github.com/shakkernerd).
  - Restored file and HTML preview access in worktree-backed sessions ([#172579](https://github.com/openclaw/openclaw/pull/172579)). Thanks [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
  - Preserved project association and working directory across text resets and idle rollover ([#182491](https://github.com/openclaw/openclaw/pull/182491), [#182474](https://github.com/openclaw/openclaw/issues/182474)). Thanks [@ericcurtin](https://github.com/ericcurtin), [@resinoftree97](https://github.com/resinoftree97) and [@steipete](https://github.com/steipete).
  - Waited for managed workspace checkpoints before guest commands ([#172137](https://github.com/openclaw/openclaw/pull/172137), [#172106](https://github.com/openclaw/openclaw/issues/172106)). Thanks [@shakkernerd](https://github.com/shakkernerd).
  - Corrected the guest scope example and clarified visitor, sandbox and publication guidance ([commit 952d3ac](https://github.com/openclaw/openclaw/commit/952d3ac4dcb4100ea986a0c40d945b2b7f72d25e)).
  - Continued verified pack cleanup despite missing snapshot objects and reported maintenance progress ([#171978](https://github.com/openclaw/openclaw/pull/171978)). Thanks [@steipete](https://github.com/steipete).
  - Stopped managed cloning on destination inspection errors ([#175952](https://github.com/openclaw/openclaw/pull/175952)). Thanks [@steipete](https://github.com/steipete).
  - Reduced redundant Git processes during session refresh and worktree path discovery ([#172472](https://github.com/openclaw/openclaw/pull/172472)). Thanks [@steipete](https://github.com/steipete).
  - Restore guest worktree selection for registered and cloned projects without exposing host paths. [#171811](https://github.com/openclaw/openclaw/pull/171811), related to [#171792](https://github.com/openclaw/openclaw/issues/171792), by [@shakkernerd](https://github.com/shakkernerd).
  - Allow accepted guest child sessions to start after the parent yields, while retaining guest permissions. [#171668](https://github.com/openclaw/openclaw/pull/171668) by [@shakkernerd](https://github.com/shakkernerd).

  </details>

- New files you stage with `git add` on the main computer can reach a cloud worker after its next completed workspace sync; unstaged new files do not. Accepted file changes and deletions also make it back without replacing the worker's local Git history.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Make a new file staged on the main computer available to a cloud worker after a completed workspace sync. Unstaged files stay outside that sync. [#170163](https://github.com/openclaw/openclaw/pull/170163) by [@steipete](https://github.com/steipete).
  - Recovery retains the accepted workspace baseline so later worker deletions of synchronized files apply correctly. [#170213](https://github.com/openclaw/openclaw/pull/170213) by [@steipete](https://github.com/steipete).
  - Transferred folder repositories retain a credential-free HTTP, HTTPS or Git origin without a query or fragment when the node checkout has none. [#170224](https://github.com/openclaw/openclaw/pull/170224) by [@steipete](https://github.com/steipete).
  - Bring accepted file updates back without replacing the remote computer's Git history, branches or remote settings. Node commits remain local and do not advance Gateway HEAD. [#170338](https://github.com/openclaw/openclaw/pull/170338) by [@steipete](https://github.com/steipete).
  - Workspace reconciliation can continue after the reply writer closes. [#170556](https://github.com/openclaw/openclaw/pull/170556) by [@steipete](https://github.com/steipete).
  - Session views can leave the reconciling state when workspace settlement finishes. [#170575](https://github.com/openclaw/openclaw/pull/170575) by [@steipete](https://github.com/steipete).
  - Workspace tools remain usable after a session resumes from a child result or another internal continuation. [#170791](https://github.com/openclaw/openclaw/pull/170791) by [@steipete](https://github.com/steipete).
  - Worker recovery can find a placement added during an overlapping read on its next sweep. [Commit](https://github.com/openclaw/openclaw/commit/3d99ff35fe59104aa3a66b5328e1d2c9ce30f044)
  - Initial worker session creation keeps its placement stable while the first turn is claimed. [Commit](https://github.com/openclaw/openclaw/commit/1ac1a34c11e43006ea9d6b822593495782976505)
  - Required-worker chats stay on the worker admission path across policy reloads. [Commit](https://github.com/openclaw/openclaw/commit/f586b491f164fb6cf6d793999d2b4bca294d7031)
  - Valid required-worker turns can complete and publish workspace results. [Commit](https://github.com/openclaw/openclaw/commit/a1ac97bcbe7b4e4b2985f4deccbb4856b2131581)
  - Node worker downloads reuse validated content for repeated files within one transfer, while keeping the resulting files independent. [Commit](https://github.com/openclaw/openclaw/commit/5268c0790b7fbfcc395cc1e42a9c5384bc10c335)
  - Portable worker archives support database admission after relocation. [Commit](https://github.com/openclaw/openclaw/commit/9e52f76fa4861178687812a00416531c892ed0df)
  - New Gateway worktree files staged with `git add` can join the accepted workspace at the next completed cloud worker reconciliation. Unstaged new files remain local. [Commit](https://github.com/openclaw/openclaw/commit/85bebbe71f9bb7cb308d223e1bc7afaf0dbb6f7a)
  - Eligible agent sessions with matching agents, directories and equivalent runtime configurations can reuse the prepared workspace while keeping their requested execution directory. [Commit](https://github.com/openclaw/openclaw/commit/59b6c109167434cac64ea41fecda871501374750). Thanks [@jalehman](https://github.com/jalehman) and [@romneyda](https://github.com/romneyda).

  </details>

- [Sandboxed agents](/gateway/sandboxing/workspace-access) can read affected reply attachments, saved web-fetch results and cloud-worker skills again, without gaining access to the host command line. Images, video and music generated locally can also be copied into the requesting sandbox for further edits. Remote-only URLs are not copied, and an unavailable or read-only sandbox shows a warning instead.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Restore SSH sandbox reply attachments, including the WebChat failure reported in [#171043](https://github.com/openclaw/openclaw/issues/171043). [#171079](https://github.com/openclaw/openclaw/pull/171079) by [@steipete](https://github.com/steipete), thanks to [@valkyriweb](https://github.com/valkyriweb) for the report. Related attachment work in [#131616](https://github.com/openclaw/openclaw/pull/131616) and [#152633](https://github.com/openclaw/openclaw/pull/152633).
  - Reject oversized local workspace document saves before replacing the previous file. The separate identity and avatar issue remains open in [#127507](https://github.com/openclaw/openclaw/issues/127507). [#171938](https://github.com/openclaw/openclaw/pull/171938) by [@steipete](https://github.com/steipete).
  - Let eligible sandboxed conversations create draft pull requests again under their existing publishing policy. [#171803](https://github.com/openclaw/openclaw/pull/171803) by [@shakkernerd](https://github.com/shakkernerd).
  - Blocked host CLI execution for sandboxed spawned agents ([#178742](https://github.com/openclaw/openclaw/pull/178742)). Thanks [@eleqtrizit](https://github.com/eleqtrizit).
  - Made saved web fetch output readable in local sandboxes, with an inline fallback when staging is unavailable ([#172499](https://github.com/openclaw/openclaw/pull/172499), [#172430](https://github.com/openclaw/openclaw/issues/172430)). Thanks [@shakkernerd](https://github.com/shakkernerd).
  - Kept generated sandbox skills out of untracked Git changes ([#173560](https://github.com/openclaw/openclaw/pull/173560), [#173546](https://github.com/openclaw/openclaw/issues/173546)). Thanks [@shakkernerd](https://github.com/shakkernerd).
  - Restored Code Mode skill search and reads on cloud workers ([#182503](https://github.com/openclaw/openclaw/pull/182503)). Thanks [@steipete](https://github.com/steipete).
  - Copy generated local files into the requesting sandbox for reuse, subject to the configured media cap and a 50 MiB limit per file. Remote-only URLs are not copied, and an unavailable or read-only sandbox produces a warning. [#171058](https://github.com/openclaw/openclaw/pull/171058) · [Sandbox workspace access](https://github.com/openclaw/openclaw/blob/7e15622f37bd0ced194a3b0fccacb4ad6bc78d85/docs/gateway/sandboxing/workspace-access.md) · Thanks [@steipete](https://github.com/steipete), and [@adembektas](https://github.com/adembektas) for the [report](https://github.com/openclaw/openclaw/issues/169922) and detached-completion investigation. The issue also references [#75683](https://github.com/openclaw/openclaw/issues/75683).
  - Fixes the unavailable SDK import used by OpenShell workspace and filesystem checks. [Commit](https://github.com/openclaw/openclaw/commit/2249d6be1c3029d325010bee564477e8f9a4ae6e)
  - Rejected non-decimal timeout input before execution ([#179000](https://github.com/openclaw/openclaw/pull/179000), [#178997](https://github.com/openclaw/openclaw/issues/178997)). Thanks [@tuaran](https://github.com/tuaran) and [@obviyus](https://github.com/obviyus).
  - Reported portal access problems to the requesting browser and preserved open app state ([#172366](https://github.com/openclaw/openclaw/pull/172366)). Thanks [@steipete](https://github.com/steipete).
  - Corrected source lines for `openclaw path resolve` and `openclaw path find` after standalone carriage returns ([#184866](https://github.com/openclaw/openclaw/pull/184866)). Thanks [@LinzeShi](https://github.com/LinzeShi) and [@obviyus](https://github.com/obviyus).
  - Reduced retained memory for prepared session forks with Unicode-heavy requests ([#172032](https://github.com/openclaw/openclaw/pull/172032)). Thanks [@steipete](https://github.com/steipete).

  </details>

- [Paired-computer setup](/nodes/session-hosting) keeps your selected profile and approved device when you retry, and reconnecting preserves the device's credentials.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Preserve the selected profile or container in QR setup's device-list and approval commands. [#178878](https://github.com/openclaw/openclaw/pull/178878). Thanks to [@ly85206559](https://github.com/ly85206559) and [@steipete](https://github.com/steipete).
  - Match generated machine join commands to the Gateway release and offer an installed-command alternative, with matching-build guidance for development or unpublished builds ([#168680](https://github.com/openclaw/openclaw/pull/168680)). Thanks to [obviyus](https://github.com/obviyus).
  - Preserve paired-device credentials on reconnect and support explicit environment authentication ([#168653](https://github.com/openclaw/openclaw/pull/168653)). Thanks to [obviyus](https://github.com/obviyus).
  - Accept copied node pairing request IDs with surrounding whitespace for approval or rejection ([#141286](https://github.com/openclaw/openclaw/pull/141286)). Thanks to [hugenshen](https://github.com/hugenshen).
  - Reuse an approved pairing during node-only and cloud-worker bootstrap retries. [#168795](https://github.com/openclaw/openclaw/pull/168795) by [@steipete](https://github.com/steipete).
  - Align device setup controls with the administrator requirement and retain eligible pairing approvals. [#170988](https://github.com/openclaw/openclaw/pull/170988) by [@steipete](https://github.com/steipete).

  </details>

- Paired-computer services installed with `npx` now use a lasting package location instead of npm's disposable cache. Reinstalling the same profile can repair or update the service, and service commands work with custom state folders.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep `npx`-installed node services outside npm's disposable cache and allow same-profile reinstall to repair or update them ([#168644](https://github.com/openclaw/openclaw/pull/168644)). Thanks to [obviyus](https://github.com/obviyus).
  - Keep Linux node service PATH entries available after login-shell startup, ahead of profile entries ([#136677](https://github.com/openclaw/openclaw/pull/136677), [report #134354](https://github.com/openclaw/openclaw/issues/134354)). Thanks to [harjothkhara](https://github.com/harjothkhara), [steipete](https://github.com/steipete), and reporter [abacha](https://github.com/abacha).
  - Node service lifecycle commands work with custom state directories without a mistaken Gateway identity refusal. [#170403](https://github.com/openclaw/openclaw/pull/170403) by [@vincentkoc](https://github.com/vincentkoc).
  - Show how the paired-computer service is set to run, and offer guarded install choices to restore a saved Node or Bun command. [#170441](https://github.com/openclaw/openclaw/pull/170441) by [@vincentkoc](https://github.com/vincentkoc).

  </details>

- A valid Incognito computer selection no longer fails just because cleanup of an unrelated database lookup failed.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Preserve a valid incognito placement result when database reader cleanup encounters an unreadable discovery candidate ([83579fdb](https://github.com/openclaw/openclaw/commit/83579fdb473aafd4274b1677a10a77679de1b389)).

  </details>

- A command naming a paired computer now runs on that computer even without a separate host setting. If it names conflicting host and device targets, OpenClaw rejects it instead of guessing where to run.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Node-only exec routing and rejection of conflicting host and node arguments. [PR #172327](https://github.com/openclaw/openclaw/pull/172327), [issue #172260](https://github.com/openclaw/openclaw/issues/172260). Thanks [steipete](https://github.com/steipete), reporter [yozakura-ava](https://github.com/yozakura-ava), and [jayswu](https://github.com/jayswu) for tracing the routing and advising on coverage.

  </details>

### Skills, plugins and GitHub

- Skills that download an archive from a generic link can now unpack it when the skill supplies a supported archive filename.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Skill dependencies that explicitly request extraction can use a supported archive filename supplied by a generic download endpoint. [#141312](https://github.com/openclaw/openclaw/pull/141312). Thanks [@hugenshen](https://github.com/hugenshen) and [@obviyus](https://github.com/obviyus).

  </details>

- Fixes outdated Skill Workshop change and Undo notices appearing after the conversation is reset, replaced or deleted.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Suppress outdated change and Undo notices when the reviewed session has been reset, replaced, or deleted. [#170035](https://github.com/openclaw/openclaw/pull/170035) by [steipete](https://github.com/steipete).

  </details>

- [Installed skills](/tools/skills#search-installed-skills) pick up external edits on refresh, keep more icons and homepages, and can retry safe reads after a paired computer briefly disconnects. If a skills directory has an unreadable or broken ignore file, it is skipped with a warning until you repair that file.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Pick up edits made to skill files outside OpenClaw on the next scheduled refresh, or scan immediately when you request it. [#170341](https://github.com/openclaw/openclaw/pull/170341) by [steipete](https://github.com/steipete).
  - Save settings or create an agent without waiting for an unrelated skill scan to finish. [#171157](https://github.com/openclaw/openclaw/pull/171157) by [steipete](https://github.com/steipete).
  - Show the skill's location and computer-specific guidance when you read it by exact name. [#170965](https://github.com/openclaw/openclaw/pull/170965) by [vincentkoc](https://github.com/vincentkoc).
  - Retry safe Skill discovery and reads after a temporary paired-node transition. [#171208](https://github.com/openclaw/openclaw/pull/171208) by [steipete](https://github.com/steipete).
  - Check installer readiness only for selected skill dependencies. [#170967](https://github.com/openclaw/openclaw/pull/170967) by [steipete](https://github.com/steipete).
  - Keep skill icons and homepage links visible even when a metadata line ends with a comment. [#171224](https://github.com/openclaw/openclaw/pull/171224) by [zhangguiping-xydt](https://github.com/zhangguiping-xydt).
  - Continue using already available workspace skills during unrelated background scans; first discovery and a requested refresh still wait for a completed scan. [#171857](https://github.com/openclaw/openclaw/pull/171857), thanks to [@steipete](https://github.com/steipete).
  - Reuses shared skill-root reads within a multi-workspace scan. [#171871](https://github.com/openclaw/openclaw/pull/171871), thanks to [@steipete](https://github.com/steipete) and [@SBC2016](https://github.com/SBC2016) for the [related Windows startup report](https://github.com/openclaw/openclaw/issues/170928).
  - Reduces memory used for skill discovery in a measured workload. [#171285](https://github.com/openclaw/openclaw/pull/171285), thanks to [@steipete](https://github.com/steipete).
  - Keep background Skill Workshop reviews from triggering reply hooks meant only for user messages. [#171651](https://github.com/openclaw/openclaw/pull/171651), thanks to [@obviyus](https://github.com/obviyus).
  - Rejects local skill installs whose required description contains only a YAML comment. [#171812](https://github.com/openclaw/openclaw/pull/171812), thanks to [@steipete](https://github.com/steipete).
  - Skip a skills directory and warn when its ignore file is broken or unreadable. Repair the file so the directory can be included in a later scan. [#176681](https://github.com/openclaw/openclaw/pull/176681). Thanks [@steipete](https://github.com/steipete).
  - Sanitize skills library metadata in human-readable terminal output. JSON and requested file contents remain verbatim and may contain terminal controls. [#178313](https://github.com/openclaw/openclaw/pull/178313). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@steipete](https://github.com/steipete).
  - Show no bundled skills in status and model prompts when you explicitly allow none. [#182731](https://github.com/openclaw/openclaw/pull/182731), thanks to [SC-10749](https://github.com/SC-10749) and [steipete](https://github.com/steipete), and to [Card4Philippe](https://github.com/Card4Philippe) for [the report](https://github.com/openclaw/openclaw/issues/182637).
  - Preserve the completed-turn anchors needed for Workshop learning when an identical prompt snapshot is recorded during a later turn. [Commit 5a1cd1a](https://github.com/openclaw/openclaw/commit/5a1cd1abf119a7393a3004acaafd6b18299ecf81).
  - Keep a background Workshop self-learning review running through later conversation turns. A session reset or permission change still cancels it. [Commit 3dc2d7a](https://github.com/openclaw/openclaw/commit/3dc2d7ab2dc22acd7cc96dd267dcb0967bd31f6b).

  </details>

- [MCP tools](/tools/mcp#troubleshooting) can reconnect for future calls after a legacy server restarts, and duplicate structured results appear only once. A call whose outcome is unknown during the disconnect is not automatically repeated; inspect its effect before trying again.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Reconnect legacy SSE MCP tools for later calls when a server restart changes its address. A call with an unknown outcome is not replayed. [#167423](https://github.com/openclaw/openclaw/pull/167423), [issue #167371](https://github.com/openclaw/openclaw/issues/167371). Thanks [@LiuwqGit](https://github.com/LiuwqGit), [@abacha](https://github.com/abacha), and [@obviyus](https://github.com/obviyus).
  - Keep explicit MCP settings during a reload and remove an unwanted separator from later streamed text. A request interrupted before it runs can report that it was superseded. [#168981](https://github.com/openclaw/openclaw/pull/168981), thanks [@steipete](https://github.com/steipete).
  - Show one MCP structured result when the same JSON appears twice with different formatting, while keeping distinct text and recovery guidance. [#169180](https://github.com/openclaw/openclaw/pull/169180), thanks [@xilopaint](https://github.com/xilopaint) for the fix and [report](https://github.com/openclaw/openclaw/issues/169121), and [@jipeng6036-del](https://github.com/jipeng6036-del) for the implementation.

  </details>

- A connected [MCP App](/tools/mcp#interactive-apps-and-plugin-extensions) in the Dashboard keeps unsaved input and scroll position when you minimize and reopen its panel. Affected MCP sign-in, conversation recovery and Safari startup paths also work again.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep your unsaved input and scroll position in a loaded Dashboard MCP App when you minimize and reopen its panel while it is still connected. [#169441](https://github.com/openclaw/openclaw/pull/169441), thanks [@obviyus](https://github.com/obviyus).
  - Complete MCP sign-in when its registered local callback address omits a port and otherwise matches. [#170876](https://github.com/openclaw/openclaw/pull/170876) by [steipete](https://github.com/steipete), with thanks to [9fw2pq8sgb-art](https://github.com/9fw2pq8sgb-art) for the [report](https://github.com/openclaw/openclaw/issues/170848). See the [MCP transport guidance](/cli/mcp/transports).
  - Keep the elapsed-time budget for pending MCP tool cleanup during clock changes. [#170495](https://github.com/openclaw/openclaw/pull/170495) by [SunnyShu0925](https://github.com/SunnyShu0925), with test contributions from [obviyus](https://github.com/obviyus).
  - Let affected POSIX conversations recover after an unavailable local MCP server is removed. [#171397](https://github.com/openclaw/openclaw/pull/171397), thanks to [@joelagnel](https://github.com/joelagnel). The [related Windows issue](https://github.com/openclaw/openclaw-windows-node/issues/1717) has other unresolved symptoms.
  - Preserves intentional leading and trailing whitespace in `mcp add` executable and working-directory paths. [#171620](https://github.com/openclaw/openclaw/pull/171620), thanks to [@Alix-007](https://github.com/Alix-007) and [@steipete](https://github.com/steipete).
  - Warn about literal secrets in MCP settings and included files without treating a populated environment reference as a literal secret. [#171737](https://github.com/openclaw/openclaw/pull/171737), thanks to [@steipete](https://github.com/steipete) and [@davidcittadini](https://github.com/davidcittadini). See [the reported warning](https://github.com/openclaw/openclaw/issues/171469).
  - Expands MCP Relay guidance for Codex, multiple Gateways and Team access, and corrects the embedded Control UI credential guidance. [#171575](https://github.com/openclaw/openclaw/pull/171575), thanks to [@steipete](https://github.com/steipete).

  </details>

- When MCP sign-in fails, the message now names the server and points you toward its credentials. Quiet tool calls can use their configured timeout, while accepted long-running relay jobs can finish beyond the submission deadline. A call with an uncertain outcome still needs checking before you retry it.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Accept mixed-case JSON content types from authenticated local MCP clients. [#172290](https://github.com/openclaw/openclaw/pull/172290). Thanks [@wangmiao0668000666](https://github.com/wangmiao0668000666) and [@obviyus](https://github.com/obviyus).
  - Reject external-link requests from retired or unfocused embedded MCP frames. [#172312](https://github.com/openclaw/openclaw/pull/172312). Thanks [@steipete](https://github.com/steipete).
  - Name the MCP server when its sign-in fails, with guidance to check credentials or sign in again. [#172331](https://github.com/openclaw/openclaw/pull/172331). Thanks [@steipete](https://github.com/steipete), and [@rclarke0](https://github.com/rclarke0) for the report.
  - Let an HTTP MCP call with no intermediate output use the full request timeout you configured. [#172510](https://github.com/openclaw/openclaw/pull/172510). Thanks [@steipete](https://github.com/steipete), and [@xilopaint](https://github.com/xilopaint) for the report.
  - Release callbacks after MCP Events requests complete and retain a redacted cause when a transport fails. [#172613](https://github.com/openclaw/openclaw/pull/172613). Thanks [@steipete](https://github.com/steipete).
  - Include the server name in accessible names for MCP sign-in and enable or disable actions. [#178162](https://github.com/openclaw/openclaw/pull/178162). Thanks [@etzelm](https://github.com/etzelm) and [@shakkernerd](https://github.com/shakkernerd).
  - Attempt to remove temporary MCP configuration directories after failed Claude or Gemini CLI writes, including partial files that may contain credentials. Removal is best effort. [#179603](https://github.com/openclaw/openclaw/pull/179603). Thanks [@xiaopan-xydt](https://github.com/xiaopan-xydt) and [@steipete](https://github.com/steipete), and [@YangManBOBO](https://github.com/YangManBOBO) for the partial-write reproduction.
  - Mask recognized credentials in MCP CLI list and show output while preserving saved credentials. [#180321](https://github.com/openclaw/openclaw/pull/180321). Thanks [@brandon-julio-t](https://github.com/brandon-julio-t), and [@wr-web](https://github.com/wr-web) for regression coverage.
  - Keep long MCP event descriptions from splitting an emoji or other supplementary character at the existing length limit. [#181741](https://github.com/openclaw/openclaw/pull/181741). Thanks [@wangmiao0668000666](https://github.com/wangmiao0668000666) and [@obviyus](https://github.com/obviyus).
  - Let an already accepted MCP relay run continue past the deadline for submitting new requests. [#181863](https://github.com/openclaw/openclaw/pull/181863). Thanks [@crwohlfeil](https://github.com/crwohlfeil) and [@obviyus](https://github.com/obviyus).
  - Restore MCP App initialization in affected Safari and macOS WebKit setups. [#182485](https://github.com/openclaw/openclaw/pull/182485), thanks to [anmol0b](https://github.com/anmol0b) and [steipete](https://github.com/steipete), and to [technicalpickles](https://github.com/technicalpickles) for [the report](https://github.com/openclaw/openclaw/issues/164447).
  - Keep the MCP App raw-details menu usable across transcript refreshes. [Commit fcfcc06](https://github.com/openclaw/openclaw/commit/fcfcc060446494b1188b503b1c476c78a284a090).
  - Reopen an unexpectedly closed local MCP listener on the next CLI-backed run; a call that already failed is not retried automatically. [#183352](https://github.com/openclaw/openclaw/pull/183352), thanks to [SC-10749](https://github.com/SC-10749) and [steipete](https://github.com/steipete), and to [eli-pavlov](https://github.com/eli-pavlov) for [the report](https://github.com/openclaw/openclaw/issues/139340).
  - Let the next turn proceed after a failed remote MCP session deletion if the local connection was cleaned up. The remote session may remain until it expires. [#182189](https://github.com/openclaw/openclaw/pull/182189), thanks to [aniketkrs](https://github.com/aniketkrs) and [steipete](https://github.com/steipete), and to [goslingmanagment](https://github.com/goslingmanagment) for [the report](https://github.com/openclaw/openclaw/issues/182174).
  - Keep MCP request deadlines and human-input allowances stable across system clock changes. [#184056](https://github.com/openclaw/openclaw/pull/184056), thanks to [steipete](https://github.com/steipete) and [SunnyShu0925](https://github.com/SunnyShu0925).
  - Preserve meaningful whitespace in MCP TLS client certificate and key paths. Previously saved paths that were already trimmed cannot be reconstructed automatically. [#181883](https://github.com/openclaw/openclaw/pull/181883), thanks to [wangmiao0668000666](https://github.com/wangmiao0668000666) and [steipete](https://github.com/steipete).
  - Return the standard structured JSON failure for MCP relay commands. [#183361](https://github.com/openclaw/openclaw/pull/183361), thanks to [Leon-SK668](https://github.com/Leon-SK668) and [steipete](https://github.com/steipete).
  - Preserve complete Unicode characters in the retained tail of a long MCP proxy error. [#183942](https://github.com/openclaw/openclaw/pull/183942), thanks to [SunnyShu0925](https://github.com/SunnyShu0925) and [steipete](https://github.com/steipete).
  - Reject malformed MCP schema identifiers while keeping valid relative references. A schema accepted before this change may now need fixing. [#187285](https://github.com/openclaw/openclaw/pull/187285), thanks to [RomneyDa](https://github.com/RomneyDa).

  </details>

- [Plugin installation and inspection](/plugins/manage-plugins) show clearer failure reasons, and a broken plugin no longer prevents you from inspecting healthy ones. Configured tool guards also apply when an agent runs a standalone command.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Show a useful reason when a plugin command fails, while keeping JSON and debug output available. [#168850](https://github.com/openclaw/openclaw/pull/168850). Thanks [@steipete](https://github.com/steipete).
  - QA Lab lets accepted suites finish during shutdown, while interrupted plugin CLI changes stop retrying without replaying an uncertain accepted operation. [#158087](https://github.com/openclaw/openclaw/pull/158087). Thanks [@vincentkoc](https://github.com/vincentkoc) and [@steipete](https://github.com/steipete).
  - When another Gateway process owns plugin state, local plugin and hook changes now explain the conflict and how to retry. Existing Gateway plugin actions and offline marketplace reads remain available. [#168757](https://github.com/openclaw/openclaw/pull/168757). Thanks [@steipete](https://github.com/steipete).
  - Repeated plugin enable or disable requests leave the config file unchanged when the requested state is already applied. [#168633](https://github.com/openclaw/openclaw/pull/168633). Thanks [@steipete](https://github.com/steipete).
  - Updates avoid repeatedly adding a redundant bundled plugin load path that Doctor removes. [#168226](https://github.com/openclaw/openclaw/pull/168226). Thanks [@obviyus](https://github.com/obviyus).
  - Registry inspection clears a stale warning for a removed plugin load path. Use `openclaw plugins registry --refresh` to update the persisted ledger. [#168167](https://github.com/openclaw/openclaw/pull/168167), [issue #167847](https://github.com/openclaw/openclaw/issues/167847). Thanks [@RomneyDa](https://github.com/RomneyDa) and [@giodl73-repo](https://github.com/giodl73-repo).
  - Standalone plugin setting maps show their Custom entries heading again, including in filtered results. [#157903](https://github.com/openclaw/openclaw/pull/157903). Thanks [@Patrick-Erichsen](https://github.com/Patrick-Erichsen) and [@altaywtf](https://github.com/altaywtf).
  - External TypeScript plugins using NodeNext-style relative imports can start faster, with gains depending on the plugin graph. [#168391](https://github.com/openclaw/openclaw/pull/168391), [issue #168130](https://github.com/openclaw/openclaw/issues/168130). Thanks [@steipete](https://github.com/steipete) and [@jakeaadams](https://github.com/jakeaadams) for the report.
  - Apply configured [plugin tool guards](/plugins/hooks/tool-policy) to standalone `openclaw agent exec` commands before they run. [#159333](https://github.com/openclaw/openclaw/pull/159333), [issue #158824](https://github.com/openclaw/openclaw/issues/158824). Thanks [@joseairosa](https://github.com/joseairosa) for the report and [@obviyus](https://github.com/obviyus).
  - Summaries and new model completions from retained plugins can continue after an unrelated plugin reload. [#168916](https://github.com/openclaw/openclaw/pull/168916), thanks [@jalehman](https://github.com/jalehman) for the fix and [report](https://github.com/openclaw/openclaw/issues/156026).
  - Inspect an incompatible plugin and its repair guidance without losing access to healthy plugin details. The incompatible plugin remains unable to run. [#168977](https://github.com/openclaw/openclaw/pull/168977), thanks [@steipete](https://github.com/steipete).

  </details>

- Plugin changes now report pending migrations and cleanup failures more clearly, while completed migrations stop showing as pending. If an older plugin keeps using a file that has been retired and cleaned up, it may need a restart.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Clean up aged tokenless plugin files after the grace period, including files that are still open. Affected legacy producers may need a restart if their files are reclaimed. [#169198](https://github.com/openclaw/openclaw/pull/169198), thanks [@steipete](https://github.com/steipete) and [@Dhotei](https://github.com/Dhotei) for the [report](https://github.com/openclaw/openclaw/issues/165035).
  - Show unexpected hook-pack inspection errors when a plugin installation is rejected. [#169370](https://github.com/openclaw/openclaw/pull/169370), thanks [@wr-web](https://github.com/wr-web).
  - Deliver queued next-turn plugin context to Codex, ACPX, Agents API and Copilot, including on a retry within the same run. [#169558](https://github.com/openclaw/openclaw/pull/169558), thanks [@obviyus](https://github.com/obviyus).
  - Report an error to extensions when cleanup of a canceled command cannot be confirmed, with the original command result available as the cause. [#169629](https://github.com/openclaw/openclaw/pull/169629), thanks [@steipete](https://github.com/steipete).
  - Apply the subagent concurrency cap to plugin background completions. [#170273](https://github.com/openclaw/openclaw/pull/170273) by [steipete](https://github.com/steipete), with thanks to [rogerallen1](https://github.com/rogerallen1) for the [report](https://github.com/openclaw/openclaw/issues/95746).
  - See which plugin migrations still need repair and which updates were skipped. [#170392](https://github.com/openclaw/openclaw/pull/170392) by [steipete](https://github.com/steipete), with thanks to [DonnieFi](https://github.com/DonnieFi) for the [report](https://github.com/openclaw/openclaw/issues/170334).
  - Remove confirmed completed migration warnings from update results and history while retaining warnings for pending work. [#170413](https://github.com/openclaw/openclaw/pull/170413) by [RomneyDa](https://github.com/RomneyDa), with thanks to [DonnieFi](https://github.com/DonnieFi) for the report and follow-up. See [update status and history](/cli/update/status-and-history).
  - Show state-maintenance and ownership recovery reasons in ordinary plugin command output. [#169907](https://github.com/openclaw/openclaw/pull/169907) by [ericcaiwx-star](https://github.com/ericcaiwx-star), with thanks to [steipete](https://github.com/steipete) and to [jamiezigelbaum](https://github.com/jamiezigelbaum) for the [report](https://github.com/openclaw/openclaw/issues/169862).
  - Keep plugin state reads current for Unicode key aliases after writes and deletions. [#170208](https://github.com/openclaw/openclaw/pull/170208) by [steipete](https://github.com/steipete).
  - Open Control UI panels again for affected trusted bundled and Nix-store plugins. [#170646](https://github.com/openclaw/openclaw/pull/170646) by [licheer-zte](https://github.com/licheer-zte), with thanks to [steipete](https://github.com/steipete) and [paulcam206](https://github.com/paulcam206). See the [report](https://github.com/openclaw/openclaw/issues/170409).
  - Report failed LanceDB provider cleanup, which may require a Gateway restart. Stop the OpenTelemetry service before replacing its globals. [#170800](https://github.com/openclaw/openclaw/pull/170800) by [steipete](https://github.com/steipete).

  </details>

- Building bundled plugin browser views no longer rewrites tracked source manifests.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keeps bundled plugin browser builds from rewriting tracked source manifests while using freshly built browser metadata. [#172037](https://github.com/openclaw/openclaw/pull/172037), thanks to [@steipete](https://github.com/steipete).

  </details>

- In supported Gateway-hosted conversations, an agent can end its current turn to reload a plugin, then continue in the same conversation with the result. Existing permissions still apply. If the Gateway exits before the result arrives, inspect the plugin's state before trying again.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Let an agent use `reloadAndResume` in a Gateway-hosted conversation with turn-yield support, so its current turn ends before the plugin reloads and it can continue with the result. If the Gateway exits before the result arrives, inspect plugin state before retrying. [#171257](https://github.com/openclaw/openclaw/pull/171257), thanks to [@jacobtomlinson](https://github.com/jacobtomlinson) as co-author and for the [report](https://github.com/openclaw/openclaw/issues/170881), and [@steipete](https://github.com/steipete) for integration work.
  - Registers hooks from explicitly enabled standalone plugin files, including tool-call policies. Listing a file in load paths alone does not enable it. See the [tool-policy guidance](/plugins/hooks/tool-policy). [#171330](https://github.com/openclaw/openclaw/pull/171330), thanks to [@holgergruenhagen](https://github.com/holgergruenhagen) and [@obviyus](https://github.com/obviyus) for integration and verification.
  - Retry plugin install, enable, disable and reload actions after brief contention only when the Gateway confirms the action did not begin. An uncertain action is not repeated. [#171390](https://github.com/openclaw/openclaw/pull/171390), thanks to [@steipete](https://github.com/steipete).
  - Removes managed plugins' diagnostic subscriptions when their instances retire, including on reload or unload. Other resources such as timers and sockets still need their own cleanup. [#172052](https://github.com/openclaw/openclaw/pull/172052), thanks to [@steipete](https://github.com/steipete).
  - Keeps plugin installation progress usable across hover and pinning, and returns focus to the install button when Escape closes it. [#171346](https://github.com/openclaw/openclaw/pull/171346), thanks to [@steipete](https://github.com/steipete).
  - Reuses preparation for plugin inventories and stops reporting missing dependencies for providers disabled by discovery policy. [#171356](https://github.com/openclaw/openclaw/pull/171356), thanks to [@steipete](https://github.com/steipete).
  - Defers llama.cpp execution modules until first use and reuses checked plugin paths during POSIX validation. [#171319](https://github.com/openclaw/openclaw/pull/171319), thanks to [@steipete](https://github.com/steipete).
  - Keep the Gateway responsive while it prepares a large external plugin package. Starting that plugin or loading it through a synchronous CLI command may still take time. [#172750](https://github.com/openclaw/openclaw/pull/172750). Thanks [@ExoHumann](https://github.com/ExoHumann), and [@obviyus](https://github.com/obviyus) for the related report.
  - Keep plugin settings and enabled or disabled choices when reinstalling or updating a plugin whose ID uses mixed capitalization. Existing ambiguous disabled aliases may need manual recovery with `openclaw plugins enable <plugin-id>`. [#180789](https://github.com/openclaw/openclaw/pull/180789). Thanks [@anmol0b](https://github.com/anmol0b), and [@yetval](https://github.com/yetval) for the report and earlier fix.
  - Keep invalid numeric plugin settings on the same setup question so they can be corrected. [#176787](https://github.com/openclaw/openclaw/pull/176787). Thanks [@steipete](https://github.com/steipete).
  - Clean up eligible retired plugin files periodically while the Gateway is running. Protected and mapped files remain in place. [#176851](https://github.com/openclaw/openclaw/pull/176851). Thanks [@harjothkhara](https://github.com/harjothkhara) and [@steipete](https://github.com/steipete), and [@PaulD-LeWagon](https://github.com/PaulD-LeWagon) and [@viernesmybot](https://github.com/viernesmybot) for their reports.
  - Avoid false hook isolation failures when shared-memory properties are omitted from the cloned input, and reduce snapshot work. Shared memory delivered to a hook remains blocked. [#172301](https://github.com/openclaw/openclaw/pull/172301). Thanks [@steipete](https://github.com/steipete).
  - Preserve system events that plugins select for deferred delivery. [#181138](https://github.com/openclaw/openclaw/pull/181138). Thanks [@steipete](https://github.com/steipete).

  </details>

- Installed plugins can appear in the list while remote catalog details are still loading; refresh later to see those details. Plugin cleanup now reports more failures without hiding healthy plugins.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep plugin service startup, reload and stop timeout budgets stable when the system clock changes. [#181663](https://github.com/openclaw/openclaw/pull/181663). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@steipete](https://github.com/steipete).
  - Keep plugin instance cleanup's timeout budget stable across system-clock changes. [#181675](https://github.com/openclaw/openclaw/pull/181675). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@steipete](https://github.com/steipete).
  - Restore catalog and chat activity artwork for MCP Relay and Muse Code. [#172299](https://github.com/openclaw/openclaw/pull/172299). Thanks [@steipete](https://github.com/steipete).
  - Restore catalog and chat activity artwork for Advisor and MCP Events. [#172716](https://github.com/openclaw/openclaw/pull/172716). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Show normal-level warnings when plugin cleanup fails during session reset or deletion. Cleanup remains best effort. [#172513](https://github.com/openclaw/openclaw/pull/172513). Thanks [@steipete](https://github.com/steipete) and [@Yolo521-bot](https://github.com/Yolo521-bot) for the report.
  - Warn when a document extractor or bundled web provider fails to initialize while another remains available. [#174299](https://github.com/openclaw/openclaw/pull/174299). Thanks [@steipete](https://github.com/steipete).
  - Include a bounded, redacted explanation in failed 1Password resolver responses. After restoring secret access, run `openclaw secrets reload` to retry affected owners. [#177060](https://github.com/openclaw/openclaw/pull/177060). Thanks [@steipete](https://github.com/steipete), and [@gisk0](https://github.com/gisk0) for the related report.
  - Keep long plugin runtime errors from splitting an emoji or other supplementary character at the existing length limit. [#181742](https://github.com/openclaw/openclaw/pull/181742). Thanks [@wangmiao0668000666](https://github.com/wangmiao0668000666) and [@obviyus](https://github.com/obviyus).
  - Return installed plugin rows while remote catalog enrichment runs. A refresh shows completed details. [#184921](https://github.com/openclaw/openclaw/pull/184921), thanks to [steipete](https://github.com/steipete).
  - Preserve the exact stale install record during removal when its name collides with another plugin's alias. [#184628](https://github.com/openclaw/openclaw/pull/184628), thanks to [Links2008](https://github.com/Links2008) and [obviyus](https://github.com/obviyus), and to [itanyplus](https://github.com/itanyplus) for [the related report](https://github.com/openclaw/openclaw/issues/182635).

  </details>

- Plugin settings and uninstall previews are less likely to lose your intended change when results arrive late, a secret is masked or a plugin ID uses mixed capitalization. Changing a masked secret's backend still requires its explicit ID.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Strip terminal controls and escape line breaks in plugin names shown in uninstall previews. [#183708](https://github.com/openclaw/openclaw/pull/183708), thanks to [wangmiao0668000666](https://github.com/wangmiao0668000666) and [steipete](https://github.com/steipete).
  - Keep a late inspection result from showing a stale error or replacing pending uninstall controls. [Commit 1ac5ebc](https://github.com/openclaw/openclaw/commit/1ac5ebc04789ec97e017f185fbf85786cac5d0d4).
  - Show plugin action notices inside the overview detail panel. [Commit 35362bd](https://github.com/openclaw/openclaw/commit/35362bd45e293a9144625853966be85374b31e2c).
  - Prevent a failed plugin's cleanup from interrupting healthy plugin and model preparation. [#183660](https://github.com/openclaw/openclaw/pull/183660), thanks to [steipete](https://github.com/steipete).
  - Let plugin setup retirement return its timeout result even when artifact removal is slow. Removal can continue afterward. [#187562](https://github.com/openclaw/openclaw/pull/187562), thanks to [RomneyDa](https://github.com/RomneyDa).
  - Reuse a live plugin inspection during model-catalog preparation without a duplicate registration error. [#187567](https://github.com/openclaw/openclaw/pull/187567), thanks to [romneyda](https://github.com/romneyda) and [steipete](https://github.com/steipete).
  - Reject malformed plugin SVG transforms without freezing the Control UI. [#182674](https://github.com/openclaw/openclaw/pull/182674), thanks to [SebTardif](https://github.com/SebTardif) and [steipete](https://github.com/steipete).
  - Preserve Unicode characters at the length limits of ClawHub MCP scope and setup previews. [#182753](https://github.com/openclaw/openclaw/pull/182753), thanks to [wangmiao0668000666](https://github.com/wangmiao0668000666).
  - Complete authorized `reloadAndResume` requests after turn cleanup while retaining permission and revocation checks. [#182929](https://github.com/openclaw/openclaw/pull/182929), thanks to [PollyBot13](https://github.com/PollyBot13) and [steipete](https://github.com/steipete), and to [lisandromachado](https://github.com/lisandromachado) for [the related report](https://github.com/openclaw/openclaw/issues/180662).
  - Save other Control UI settings even when a plugin secret is fully masked. Changing that secret's backend still requires its explicit ID. [#183571](https://github.com/openclaw/openclaw/pull/183571), thanks to [lonexreb](https://github.com/lonexreb) and [steipete](https://github.com/steipete), and to [Valkster70](https://github.com/Valkster70) for [the report](https://github.com/openclaw/openclaw/issues/183562).
  - [Decision-provider configuration in plugin inspection](https://github.com/openclaw/openclaw/commit/a07acefb6abb8efe41aacd271aeca81cb71fa2bc).

  </details>

- Workboard cards now reflect the overall task result through model fallback rather than showing a false failure while work continues. Board tabs and menus are easier to reach on narrow screens, and after a storage problem is resolved, later Workboard, Logbook and Team Reports operations can recover without restarting the Gateway. An uncertain in-flight write is not replayed automatically.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Local Workboard commands make changes visible to the running Gateway. Offline dispatch does not start workers. [#168457](https://github.com/openclaw/openclaw/pull/168457). Thanks [@steipete](https://github.com/steipete).
  - Board widget HTML over the existing 10 MiB limit stops loading with a clear error. [#167260](https://github.com/openclaw/openclaw/pull/167260). Thanks [@hugenshen](https://github.com/hugenshen) and [@obviyus](https://github.com/obviyus).
  - The Workboard guide explains the existing agent tool grants and the tools automatically granted to card workers. [#168222](https://github.com/openclaw/openclaw/pull/168222). Thanks [@steipete](https://github.com/steipete).
  - Workboard card status follows the overall task outcome through model fallback, avoiding false failures while work continues. Session-only links can settle on the next minute sweep. [#168215](https://github.com/openclaw/openclaw/pull/168215), [issue #167574](https://github.com/openclaw/openclaw/issues/167574). Thanks [@obviyus](https://github.com/obviyus), [@skyzhao1223](https://github.com/skyzhao1223), [@asikorskiy](https://github.com/asikorskiy) for the report, and [@ericcurtin](https://github.com/ericcurtin) for the related proposal.
  - Leave unchanged widgets untouched during Board layout edits. [#168999](https://github.com/openclaw/openclaw/pull/168999), thanks [@steipete](https://github.com/steipete).
  - Restore later Workboard, Logbook and Team Reports operations after a storage failure once the underlying problem is resolved. An in-flight write may have an unknown outcome and is not replayed automatically. [#170138](https://github.com/openclaw/openclaw/pull/170138) by [steipete](https://github.com/steipete), with thanks to [Jeehut](https://github.com/Jeehut). See the [report](https://github.com/openclaw/openclaw/issues/169981).
  - Load board summaries and session-linked cards in desktop chat instead of full card history. [#171135](https://github.com/openclaw/openclaw/pull/171135) by [steipete](https://github.com/steipete), with thanks to [Oldrich333](https://github.com/Oldrich333) for the [report](https://github.com/openclaw/openclaw/issues/171078).
  - Prevent normal or forced promotion from reopening completed cards. [#171080](https://github.com/openclaw/openclaw/pull/171080) by [sunlit-deng](https://github.com/sunlit-deng), with thanks to [SabaTech-dev](https://github.com/SabaTech-dev). See the [report](https://github.com/openclaw/openclaw/issues/171048).
  - Reveal overflow-selected board tabs on narrow screens and support keyboard access to long widget menus. [#170767](https://github.com/openclaw/openclaw/pull/170767) by [steipete](https://github.com/steipete).
  - Anchor Workboard details menus to their controls. [#170511](https://github.com/openclaw/openclaw/pull/170511) by [steipete](https://github.com/steipete).
  - Avoid unnecessary database initialization for initial Board snapshot and widget reads. [#171245](https://github.com/openclaw/openclaw/pull/171245) by [steipete](https://github.com/steipete).

  </details>

- Completed Workboard cards stay completed if a later step fails, and manually moving a card to done or blocked releases its claim. That move does not stop a worker already running.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Restores review handoffs after dependencies finish. [#171414](https://github.com/openclaw/openclaw/pull/171414), thanks to [@ericcurtin](https://github.com/ericcurtin), [@asikorskiy](https://github.com/asikorskiy) for [the report](https://github.com/openclaw/openclaw/issues/171380), and [@obviyus](https://github.com/obviyus) for verification.
  - Prevents promotion of cards outside `todo`, including when `force` is used. [#171743](https://github.com/openclaw/openclaw/pull/171743), thanks to [@steipete](https://github.com/steipete) and [@SabaTech-dev](https://github.com/SabaTech-dev). See also [the promotion report](https://github.com/openclaw/openclaw/issues/171048).
  - Preserves full run IDs and completion notifications, with a 512-character limit for new IDs. [#172235](https://github.com/openclaw/openclaw/pull/172235), thanks to [@steipete](https://github.com/steipete) and [@gregbond](https://github.com/gregbond) for [the report](https://github.com/openclaw/openclaw/issues/172203).
  - Load matching packaged Workboard assets from the Control UI origin when the Gateway is separate. Custom or mismatched plugins continue to use the Gateway asset route. [#172352](https://github.com/openclaw/openclaw/pull/172352). Thanks [@vincentkoc](https://github.com/vincentkoc).
  - Show agents why a card claim was refused, including when a blocked card needs to be unblocked. [#172504](https://github.com/openclaw/openclaw/pull/172504). Thanks [@steipete](https://github.com/steipete).
  - Reconcile cards linked to archived sessions, including multiple cards sharing a session or run. [#172505](https://github.com/openclaw/openclaw/pull/172505). Thanks [@steipete](https://github.com/steipete).
  - Preserve completed cards and links after a later step in a multi-card operation fails. [#172615](https://github.com/openclaw/openclaw/pull/172615). Thanks [@steipete](https://github.com/steipete).
  - Release claims and settle active records on manual done or blocked moves. [#184241](https://github.com/openclaw/openclaw/pull/184241), thanks to [jondihaynes](https://github.com/jondihaynes) and [obviyus](https://github.com/obviyus).
  - Keep Workboard automation nudges on their intended cooldown through system clock changes. [#183356](https://github.com/openclaw/openclaw/pull/183356), thanks to [SunnyShu0925](https://github.com/SunnyShu0925) and [steipete](https://github.com/steipete).
  - Include session changes from nested operations in Boards transaction receipts. [Commit bfea15e](https://github.com/openclaw/openclaw/commit/bfea15edc0d66d880c5f58744817fd6297844768).

  </details>

- [Workboard](/plugins/workboard) now records a finished task's result when its conversation is briefly still marked as running, and no longer mistakes newly starting work for a launch abandoned before restart.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  [Workboard lifecycle fixes](https://github.com/openclaw/openclaw/commit/aad30d238ed5b7e347fe9adc66cd7b4ddf5caa9e). Thanks to [@RomneyDa](https://github.com/RomneyDa).

  </details>

- Existing Workboard data can move between SQLite and experimental PostgreSQL storage with an offline, recoverable [database port](/reference/database-schemas/storage-changes). Stop the Gateway and embedded agents first, and back up both sides. Shared state and agent databases remain on SQLite.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Refuse selecting experimental PostgreSQL for an existing populated SQLite Workboard without the supported port. [#170266](https://github.com/openclaw/openclaw/pull/170266) by [steipete](https://github.com/steipete).
  - Port existing Workboard stores, including disabled ones, with a dry run and resume or rollback after an interrupted operation. [#171368](https://github.com/openclaw/openclaw/pull/171368), thanks to [@steipete](https://github.com/steipete).
  - Offer experimental PostgreSQL-backed Workboard storage as an opt-in choice, without replacing shared state or agent databases. [#169214](https://github.com/openclaw/openclaw/pull/169214), [storage design](https://github.com/openclaw/openclaw/issues/169254). Thanks [@steipete](https://github.com/steipete).
  - Report experimental database engine selection in Doctor. Workboard is the only supported PostgreSQL store, and a selected PostgreSQL store does not silently fall back to SQLite. [#169933](https://github.com/openclaw/openclaw/pull/169933), [portability design #169254](https://github.com/openclaw/openclaw/issues/169254). Thanks [@steipete](https://github.com/steipete).
  - Experimental PostgreSQL Workboard writes avoid a duplicate admission request, and PostgreSQL connection secrets must use an environment, file or exec reference in [#170037](https://github.com/openclaw/openclaw/pull/170037). Thanks [@steipete](https://github.com/steipete).
  - PostgreSQL backup, restore, and update protection, including a refusal from `backup sqlite` that directs PostgreSQL users to `backup create` ([#170828](https://github.com/openclaw/openclaw/pull/170828)). Thanks [@steipete](https://github.com/steipete).

  </details>

- GitHub hover previews, repository searches and publication account options can show a previous result while refreshing, clearly marked as stale. Publication still checks current access before it proceeds.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Cached previews, repository search and account options return stale results while refreshing in [#169143](https://github.com/openclaw/openclaw/pull/169143). Thanks [@steipete](https://github.com/steipete).
  - Unchanged issue and pull-request hover previews reuse their response when refreshed in [#170508](https://github.com/openclaw/openclaw/pull/170508). Thanks [@steipete](https://github.com/steipete).
  - Actions widgets and project searches share compatible GitHub reads in [#170825](https://github.com/openclaw/openclaw/pull/170825). Thanks [@steipete](https://github.com/steipete).
  - Cached shared-account publication options remain available and marked stale during native authentication refresh in [#170963](https://github.com/openclaw/openclaw/pull/170963). Thanks [@steipete](https://github.com/steipete).
  - Cached hover previews avoid a redundant credential read while retaining the check before delivery. [PR #171603](https://github.com/openclaw/openclaw/pull/171603). Thanks [steipete](https://github.com/steipete).
  - Concurrent GitHub publication options requests share discovery for a worktree. [PR #171325](https://github.com/openclaw/openclaw/pull/171325). Thanks [steipete](https://github.com/steipete).

  </details>

- GitHub publication works again for eligible managed child sessions even when their parent is outside a publishable workspace. The child's own workspace and inherited permissions still govern what it can publish; this does not grant new publishing access or change where a PR goes.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Own-session PR publishing after a delayed verified profile attachment in [#169400](https://github.com/openclaw/openclaw/pull/169400), addressing [#169377](https://github.com/openclaw/openclaw/issues/169377). Thanks [@Gigaxel](https://github.com/Gigaxel) and [@steipete](https://github.com/steipete).
  - New managed children retain permitted GitHub publication for eligible worktrees, subject to inherited restrictions and Gateway checks. [#171842](https://github.com/openclaw/openclaw/pull/171842), addressing [#171782](https://github.com/openclaw/openclaw/issues/171782). Thanks to [shakkernerd](https://github.com/shakkernerd).
  - Avoid unnecessary publication refusals during overlapping requests. [#172351](https://github.com/openclaw/openclaw/pull/172351). Thanks to [@steipete](https://github.com/steipete).
  - Watched session PR refreshes and GitHub publication avoid redundant Git calls. [#172498](https://github.com/openclaw/openclaw/pull/172498), thanks [@steipete](https://github.com/steipete).
  - ClickClack discussion lookup and shared GitHub publication receipt discovery avoid duplicate local reads. [#172537](https://github.com/openclaw/openclaw/pull/172537), thanks [@steipete](https://github.com/steipete).

  </details>

- An accepted PR publication request can remain pending through a temporary session-access interruption. Check the original request's result rather than sending a duplicate.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep accepted publication requests pending during temporary session authority outages ([commit](https://github.com/openclaw/openclaw/commit/7f98077b2e30dd5b0c2aa271b9934f6414a106dc)). Thanks [@joshavant](https://github.com/joshavant).

  </details>

### Models and coding agents

- A bound Codex conversation can resume its original thread after the Codex service restarts. An input is retried only when the service confirms it was rejected before acceptance.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Preserves bound-thread history after a restart. [#172705](https://github.com/openclaw/openclaw/pull/172705), included in [#178169](https://github.com/openclaw/openclaw/pull/178169). Thanks [@RomneyDa](https://github.com/RomneyDa) and [@steipete](https://github.com/steipete) for the combined backport.

  </details>

- Managed local Codex conversations can recover from a provider error or refresh their settings without replacing their history or interrupting another conversation's work.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  [#172287](https://github.com/openclaw/openclaw/pull/172287) and [#174540](https://github.com/openclaw/openclaw/pull/174540). Thanks to [@zhuyankarl](https://github.com/zhuyankarl), [@steipete](https://github.com/steipete) and [@vincentkoc](https://github.com/vincentkoc).

  This applies to the local Codex service managed by OpenClaw, not an external service or a shared user-owned Codex home. If the old thread cannot finish closing, OpenClaw keeps its history and reports the problem instead of replacing it.

  </details>

- [Binding a conversation to Codex](/plugins/codex-harness/commands#commands-and-diagnostics) no longer fails just because its next reply is waiting to start. If the source conversation is already working, let it finish or stop it before binding.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  [Commit aad30d2](https://github.com/openclaw/openclaw/commit/aad30d238ed5b7e347fe9adc66cd7b4ddf5caa9e), carrying the binding repair from [#189077](https://github.com/openclaw/openclaw/pull/189077). Thanks to [@libaojiang](https://github.com/libaojiang) and [@RomneyDa](https://github.com/RomneyDa).

  The transfer copies a limited amount of visible user and assistant history into a separate Codex thread, not the previous agent's tools or instructions.

  </details>

- Model pickers refresh when the catalog changes during an unfinished read, rather than keeping the older model list.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Starts a fresh catalog read after a change. [#174812](https://github.com/openclaw/openclaw/pull/174812).

  </details>

- If Anthropic model discovery fails, direct Anthropic sessions keep the supported context window you chose. Sonnet 5.5 usage estimates also use the corrected cached-input price.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Direct Anthropic sessions retain their selected supported context window when live model discovery fails. [#177702](https://github.com/openclaw/openclaw/pull/177702), [issue #177701](https://github.com/openclaw/openclaw/issues/177701) Thanks [@nxmxbbd](https://github.com/nxmxbbd) and [@obviyus](https://github.com/obviyus).
  - New Sonnet 5.5 usage estimates use the corrected default cached-input rate. [#171723](https://github.com/openclaw/openclaw/pull/171723) Thanks to [@vincentkoc](https://github.com/vincentkoc).

  </details>

- Fixes text corrections waiting until a Claude CLI task finishes instead of reaching its active turn. A running tool is not interrupted.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  Compatible text can reach the current Claude CLI turn at its next scheduling point; it does not interrupt a running tool. Images and text the current turn cannot accept still take the existing follow-up path.

  - Send compatible corrections into an active Claude CLI turn and keep a record of accepted text in the conversation; other input follows the existing follow-up path. [PR #159816](https://github.com/openclaw/openclaw/pull/159816), [issue #124731](https://github.com/openclaw/openclaw/issues/124731), [related issue #156848](https://github.com/openclaw/openclaw/issues/156848). Thanks to [kiranvk-2011](https://github.com/kiranvk-2011), [Shagrat2](https://github.com/Shagrat2), and [VACInc](https://github.com/VACInc).

  </details>

- Claude CLI now follows the MCP server choices you saved for this session on its next turn, even when the Claude process is already running.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Apply saved per-session MCP server selections on subsequent Claude CLI turns, including warm processes. [#168393](https://github.com/openclaw/openclaw/pull/168393), [issue #168207](https://github.com/openclaw/openclaw/issues/168207), [MCP guide](/tools/mcp). Thanks to [@steipete](https://github.com/steipete) and [@dprev](https://github.com/dprev) for the report.

  </details>

- Claude CLI can still use its permitted tools after a background command finishes, so it can continue the task instead of losing access to files or other allowed tools. Changes to session permissions still apply.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep permitted Claude and OpenClaw tools available when a background command finishes, without lifting current session restrictions. [#168670](https://github.com/openclaw/openclaw/pull/168670), [issue #168342](https://github.com/openclaw/openclaw/issues/168342), [CLI backends guide](/gateway/cli-backends). Thanks to [@steipete](https://github.com/steipete) and [@Oldrich333](https://github.com/Oldrich333) for the report.

  </details>

- Switching away from Claude CLI and back no longer repeats the same question.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Avoid a duplicate question when switching away from Claude CLI and back ([#168965](https://github.com/openclaw/openclaw/pull/168965)). Thanks [@obviyus](https://github.com/obviyus).

  </details>

- Plugin turns and side questions now start with the on-request approval settings you selected instead of losing them.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Preserve managed on-request approval settings for plugin turns and side questions so those requests can start under the configured policy. [#172639](https://github.com/openclaw/openclaw/pull/172639) Thanks to [@stevenlee-oai](https://github.com/stevenlee-oai).

  </details>

- A compatible Codex context refresh can continue the conversation without stopping its running preview or background command.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - A compatible Codex context refresh can continue a conversation without stopping a running preview or background command. [#177716](https://github.com/openclaw/openclaw/pull/177716) Thanks [@jjjhenriksen](https://github.com/jjjhenriksen).

  </details>

- Fixes Codex refusing a correction while it saves conversation history.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Accept Codex corrections while the conversation history is being saved in [ca3798a](https://github.com/openclaw/openclaw/commit/ca3798a38171b430162daa793425c7dd37111568).

  </details>

- Fixes one-shot Codex commands failing cleanup because another run shares their Codex process, and gives the process more time to save state before forcing it to stop. An unresponsive process can take longer to stop; check a cleanup failure rather than assuming it ended.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  [Isolated one-shot cleanup](https://github.com/openclaw/openclaw/commit/142ad535c0807238acb4c03f4fe81b9d7a02519c), [clean-shutdown grace](https://github.com/openclaw/openclaw/commit/2eaf9aaad083a79ccac6a539307effe7ed9f1c8e) and [longer final grace](https://github.com/openclaw/openclaw/commit/46db9eb756e9c8fd43cedad8e520c89b3fd9d6b1). Thanks to [@RomneyDa](https://github.com/RomneyDa).

  </details>

- Codex no longer exposes its native shell when native code mode is disabled. Commands permitted through OpenClaw's own tools remain separate.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  [Native shell setting fix](https://github.com/openclaw/openclaw/commit/1aac7841296895394ead26b17c8e73bfe110c3ae). Thanks to [@RomneyDa](https://github.com/RomneyDa).

  </details>

- Fixes a multiline correction to an ACP coding agent losing its line breaks.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Preserve multiline ACP steering in [#185456](https://github.com/openclaw/openclaw/pull/185456), fixing [#185455](https://github.com/openclaw/openclaw/issues/185455). Thanks to [masatohoshino](https://github.com/masatohoshino) and [obviyus](https://github.com/obviyus).

  </details>

- [ACP replies in WebChat](/tools/acp-agents/delivery#delivery-model) now appear while the agent is working when live delivery is enabled, instead of waiting until the turn ends.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  [#182717](https://github.com/openclaw/openclaw/pull/182717), included through [#188730](https://github.com/openclaw/openclaw/pull/188730). Thanks to [@rjdotdev](https://github.com/rjdotdev), [@steipete](https://github.com/steipete) and [@RomneyDa](https://github.com/RomneyDa), and to [@Honghe](https://github.com/Honghe) for [the report](https://github.com/openclaw/openclaw/issues/162072).

  Live and final text keep matching paragraph breaks. Automatic replies that are not meant for the user stay out of the live stream.

  </details>

- Fixes specific coding-agent conversations losing or duplicating history after a restart or compaction, and helps follow-ups stay with the right conversation. Recovery still depends on the agent and available saved history. If Codex still reports active work after waiting for cleanup, stop that work and retry.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep a subagent launch attached to its original request when a plugin rewrites tool arguments, reducing the risk of a duplicate launch after restart ([#185170](https://github.com/openclaw/openclaw/pull/185170), closing [#185127](https://github.com/openclaw/openclaw/issues/185127)). Thanks [@fuller-stack-dev](https://github.com/fuller-stack-dev).
  - After you manually compact Claude CLI history, the next turn continues with that shortened history in a fresh process. [PR #157766](https://github.com/openclaw/openclaw/pull/157766), [issue #157483](https://github.com/openclaw/openclaw/issues/157483). Thanks to [deepujain](https://github.com/deepujain) and [obviyus](https://github.com/obviyus), with the report from [von8794](https://github.com/von8794) and related evidence from [goslingmanagment](https://github.com/goslingmanagment).
  - Fixes duplicate messages in Claude CLI history when a forwarded message matches the owner's message, without losing who sent it. [#163521](https://github.com/openclaw/openclaw/pull/163521). Thanks to [rogeriochaves](https://github.com/rogeriochaves), [llmsommelier](https://github.com/llmsommelier) and [RomneyDa](https://github.com/RomneyDa).
  - Keeps generated setup prompts out of visible Claude CLI history and shows oversized tool output as a tool result, not something you said. [#166080](https://github.com/openclaw/openclaw/pull/166080), [#165041](https://github.com/openclaw/openclaw/issues/165041). Thanks to [Marvinthebored](https://github.com/Marvinthebored), [Peetiegonzalez](https://github.com/Peetiegonzalez), [RomneyDa](https://github.com/RomneyDa), [IndySweeney](https://github.com/IndySweeney), [agierror](https://github.com/agierror) and [Heighte](https://github.com/Heighte).
  - After a Gateway restart, the first prompt can resume an initialized one-shot ACP conversation when the agent supports loading or resuming sessions. [#166368](https://github.com/openclaw/openclaw/pull/166368), [#124852](https://github.com/openclaw/openclaw/issues/124852). Thanks to [alkor2000](https://github.com/alkor2000), [obviyus](https://github.com/obviyus) and reporter [jhgaylor](https://github.com/jhgaylor).
  - A fork from the last completed turn no longer brings back conversation context you cleared with a newer reset. [#166660](https://github.com/openclaw/openclaw/pull/166660). Thanks to [Shenrui-Ma](https://github.com/Shenrui-Ma) and [obviyus](https://github.com/obviyus).
  - Fixes a long Codex conversation requesting a second compaction when Codex already shortened its own history and OpenClaw's history did not change. [#168051](https://github.com/openclaw/openclaw/pull/168051), [#168015](https://github.com/openclaw/openclaw/issues/168015). Thanks to [ruel225](https://github.com/ruel225), [xydigitLybnnnn](https://github.com/xydigitLybnnnn), [steipete](https://github.com/steipete) and [robertoronderosjr](https://github.com/robertoronderosjr).
  - Hide recognized old requester instructions and duplicate imported turns from displayed chat history ([#168943](https://github.com/openclaw/openclaw/pull/168943)). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Clarify display-only history cleanup and preserved transcripts in the [Claude CLI guide](/gateway/cli-backends) ([#168851](https://github.com/openclaw/openclaw/pull/168851)). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Keep local Claude CLI conversations' session-specific facts available without rewriting the shared instructions on every turn ([#168928](https://github.com/openclaw/openclaw/pull/168928)). Thanks [@alkor2000](https://github.com/alkor2000), [@obviyus](https://github.com/obviyus), and [@Yigtwxx](https://github.com/Yigtwxx). Thanks [@Oldrich333](https://github.com/Oldrich333) for the report.
  - Wait for an earlier background task to finish cleaning up before resuming a cold conversation, without taking over its still-active thread. [#188170](https://github.com/openclaw/openclaw/pull/188170), adapting [#187776](https://github.com/openclaw/openclaw/pull/187776). Thanks [@jjjhenriksen](https://github.com/jjjhenriksen), [@obviyus](https://github.com/obviyus) and [@RomneyDa](https://github.com/RomneyDa).
  - If you know its exact ID, you can find and continue a Claude session beyond the normal browsing limit; browsing itself remains limited. [#176742](https://github.com/openclaw/openclaw/pull/176742), [#176659](https://github.com/openclaw/openclaw/issues/176659) Thanks [@sunlit-deng](https://github.com/sunlit-deng), [@steipete](https://github.com/steipete) and [@ceo633](https://github.com/ceo633).
  - Claude CLI forks whose saved checkpoint was removed by compaction can use existing fresh-session recovery when authorized history and retry budget are available. [#181308](https://github.com/openclaw/openclaw/pull/181308), [#181254](https://github.com/openclaw/openclaw/issues/181254) Thanks [@mushuiyu886](https://github.com/mushuiyu886) and [@Marvinthebored](https://github.com/Marvinthebored).
  - Keep earlier conversation history available for recall and memory indexing after an automatic idle or daily reset. [#184157](https://github.com/openclaw/openclaw/pull/184157) Thanks [@steipete](https://github.com/steipete) and [@namest504](https://github.com/namest504).
  - Preserve the request prefix across thinking-level changes in supported native Codex sessions. [#182397](https://github.com/openclaw/openclaw/pull/182397) Thanks [@vincentkoc](https://github.com/vincentkoc).
  - Refuse to reuse saved context if the current message was removed or rewritten in [777e85c](https://github.com/openclaw/openclaw/commit/777e85c9eece4e6dddb33c9e7ed18389a8e52ef3).
  - Resume an interrupted turn from saved input after its worker is lost ([commit](https://github.com/openclaw/openclaw/commit/4a73e919157bd9420376f6e198945b6a00c60405)).
  - Avoid repeating the same continuation instruction when compaction is retried ([commit](https://github.com/openclaw/openclaw/commit/d49faed633709262226f571dd3d4d1b9c2484d7d)).
  - Keep protected Codex follow-ups tied to a live context relay ([commit](https://github.com/openclaw/openclaw/commit/368809d328482716baf1da66f8e589e5626697ee)). Thanks to [@RomneyDa](https://github.com/RomneyDa).

  </details>

- [Codex](/plugins/codex-harness) and Claude CLI setup now show more of the models and tools your installation and account can actually use, with clearer guidance when access or a plugin is missing.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Show how to enable Codex when a paired device lacks it, or choose a model served through the OpenClaw harness ([#168641](https://github.com/openclaw/openclaw/pull/168641)). Thanks to [obviyus](https://github.com/obviyus).
  - Make a CLI-backed subagent's requested light-context start omit workspace bootstrap files in [#169848](https://github.com/openclaw/openclaw/pull/169848), addressing [#169704](https://github.com/openclaw/openclaw/issues/169704). Thanks [@xydigitLybnnnn](https://github.com/xydigitLybnnnn), [@obviyus](https://github.com/obviyus) and reporter [@Oldrich333](https://github.com/Oldrich333).
  - ACP setup and the bundled router expose the existing `grok-build` agent target for users with the Grok CLI installed and authenticated. [PR #99193](https://github.com/openclaw/openclaw/pull/99193), [related issue #99191](https://github.com/openclaw/openclaw/issues/99191). Thanks to [TheAngryPit](https://github.com/TheAngryPit).
  - Tell Claude CLI which OpenClaw tools are registered and how to find deferred tools, including a message-delivery tool only when one is available. [PR #153032](https://github.com/openclaw/openclaw/pull/153032), [related issues #157321](https://github.com/openclaw/openclaw/issues/157321), [#139599](https://github.com/openclaw/openclaw/issues/139599), and [#147006](https://github.com/openclaw/openclaw/issues/147006). Thanks to [kiranvk-2011](https://github.com/kiranvk-2011) and [RomneyDa](https://github.com/RomneyDa), with related evidence from [lakemike](https://github.com/lakemike) and reports from [philknows](https://github.com/philknows), [destinedenergy](https://github.com/destinedenergy), and [wbumgardner-max](https://github.com/wbumgardner-max).
  - Find a qualifying installed Codex when starting a managed turn or showing its models ([#168228](https://github.com/openclaw/openclaw/pull/168228)). Thanks [@obviyus](https://github.com/obviyus).
  - Discover native models on demand and retire unowned clients after 30 idle seconds, while keeping clients with active or retained work. [#168387](https://github.com/openclaw/openclaw/pull/168387). Thanks to [@steipete](https://github.com/steipete).
  - Retire unused Codex processes after model discovery times out while allowing active work to finish. Future requests get a replacement client. [#168365](https://github.com/openclaw/openclaw/pull/168365), [issue #168159](https://github.com/openclaw/openclaw/issues/168159), [recovery guide](/plugins/codex-harness-runtime/recovery). Thanks to [@steipete](https://github.com/steipete) and [@609NFT](https://github.com/609NFT) for the report and verification.
  - Let affected isolated Codex tasks and short utility requests use an available ChatGPT account route without adding an OpenAI API key. Your explicit account or utility-model choice still controls the request. [#168552](https://github.com/openclaw/openclaw/pull/168552). Thanks to [@obviyus](https://github.com/obviyus).
  - Use the account's native Claude Code model menu and effort levels for CLI selections, while retaining existing configured choices. [#168728](https://github.com/openclaw/openclaw/pull/168728). Thanks to [@obviyus](https://github.com/obviyus).
  - Generate automatic titles, conversation labels and Activity recaps with Haiku on eligible Claude CLI sessions whose main model is Opus or Sonnet, unless you chose another eligible model. [#168603](https://github.com/openclaw/openclaw/pull/168603). Thanks to [@obviyus](https://github.com/obviyus).
  - Check native session forks against their selected runtime's capacity, using 100,000 tokens when capacity is unknown. [PR #169792](https://github.com/openclaw/openclaw/pull/169792). Thanks to [steipete](https://github.com/steipete) and [RomneyDa](https://github.com/RomneyDa).
  - Preserve literal underscores in imported agent names and avatar paths. [#171581](https://github.com/openclaw/openclaw/pull/171581), thanks to [zhangguiping-xydt](https://github.com/zhangguiping-xydt) for the fix and [obviyus](https://github.com/obviyus) for the follow-up.
  - Let an ACP-only agent become available after a slow but healthy startup instead of requiring a Gateway restart. [#171447](https://github.com/openclaw/openclaw/pull/171447), thanks to [ericcaiwx-star](https://github.com/ericcaiwx-star), [steipete](https://github.com/steipete) and [potterdigital](https://github.com/potterdigital). See the [reported issue](https://github.com/openclaw/openclaw/issues/171395).
  - Let signed-in Claude CLI agents start again when an inconclusive account check had been mistaken for a logout. [#172471](https://github.com/openclaw/openclaw/pull/172471). Thanks [@obviyus](https://github.com/obviyus).
  - Avoided a false cleanup failure after Claude CLI stdin has already closed. [#171969](https://github.com/openclaw/openclaw/pull/171969). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Prevented late Codex desktop watcher notifications from scheduling a restart during shutdown. [#172049](https://github.com/openclaw/openclaw/pull/172049). Thanks [@steipete](https://github.com/steipete).
  - Keep native session access waits within their intended elapsed-time budget when the system clock changes. [#172780](https://github.com/openclaw/openclaw/pull/172780) Thanks to [@SunnyShu0925](https://github.com/SunnyShu0925).
  - Codex Computer Use marketplace discovery keeps its elapsed-time allowance when the system clock changes during installation. [#178986](https://github.com/openclaw/openclaw/pull/178986) Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@steipete](https://github.com/steipete).
  - When you explicitly enable ACP, keep its bundled acpx backend available at startup under your plugin policy. [#176876](https://github.com/openclaw/openclaw/pull/176876), [#102205](https://github.com/openclaw/openclaw/issues/102205), [#102221](https://github.com/openclaw/openclaw/issues/102221) Thanks [@steipete](https://github.com/steipete) and [@ZOOWH](https://github.com/ZOOWH).
  - ACP agents with their own workspaces no longer fail readiness because an unused default workspace is absent. [#176879](https://github.com/openclaw/openclaw/pull/176879) Thanks [@steipete](https://github.com/steipete).
  - If Claude CLI skills plugin preparation fails, cleanup attempts to remove temporary files while showing the original failure. [#179611](https://github.com/openclaw/openclaw/pull/179611), [#179557](https://github.com/openclaw/openclaw/issues/179557) Thanks [@xiaopan-xydt](https://github.com/xiaopan-xydt) and [@steipete](https://github.com/steipete).
  - Preserve the remaining attempt budget when a core upgrade retains an older Codex runtime plugin. [#182995](https://github.com/openclaw/openclaw/pull/182995) Thanks [@RomneyDa](https://github.com/RomneyDa), [@kip-claw](https://github.com/kip-claw), [@cjn119-ui](https://github.com/cjn119-ui), [@fray-ai](https://github.com/fray-ai) and [@sukhdeepjohar](https://github.com/sukhdeepjohar).
  - Allow ChatGPT subscription relay preparation to use the managed gateway-only proxy's default loopback settings. [#183232](https://github.com/openclaw/openclaw/pull/183232) Thanks [@steipete](https://github.com/steipete), [@indra622](https://github.com/indra622) and [@ermaxinc](https://github.com/ermaxinc).
  - Keep the same permitted Codex tool descriptions across the main turn and its background completion, avoiding one cause of session resets without relaxing execution checks. [#183286](https://github.com/openclaw/openclaw/pull/183286) Thanks [@steipete](https://github.com/steipete), [@Marvinthebored](https://github.com/Marvinthebored) and [@RomneyDa](https://github.com/RomneyDa).

  </details>

- More long conversations can keep going when their model runs out of room, by shortening earlier history or using a supported recovery path. A summary may leave out details, and a single oversized message may still need shortening. Eligible direct OpenAI API-key conversations now use [provider compaction](/providers/openai/advanced) by default; that compaction call can cost more than a local summary. You can turn it off in the model configuration.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - If repeated summary checks fail, safeguard compaction can continue with a best-effort summary and a warning that details may be missing. [PR #130393](https://github.com/openclaw/openclaw/pull/130393), [issue #120162](https://github.com/openclaw/openclaw/issues/120162). Thanks to [amittell](https://github.com/amittell), [alexm](https://github.com/alexm), and [steipete](https://github.com/steipete).
  - Compaction retries receive whole missing identifiers where they fit, along with a count of omitted values. [PR #138415](https://github.com/openclaw/openclaw/pull/138415). Thanks to [amittell](https://github.com/amittell) and [obviyus](https://github.com/obviyus).
  - Dense CJK-heavy summaries can trim optional prose while retaining required requests and identifiers when those facts fit. [PR #138416](https://github.com/openclaw/openclaw/pull/138416), [related issue #119272](https://github.com/openclaw/openclaw/issues/119272). Thanks to [amittell](https://github.com/amittell) and [steipete](https://github.com/steipete).
  - Requests assembled by compaction-owning context engines are checked for overflow before provider submission and routed to recovery when needed. [PR #139999](https://github.com/openclaw/openclaw/pull/139999), [issue #139961](https://github.com/openclaw/openclaw/issues/139961). Thanks to [Phillis](https://github.com/Phillis) and [steipete](https://github.com/steipete).
  - The immediate estimate after OpenAI server compaction includes the foreground system prompt and tool costs. [PR #141341](https://github.com/openclaw/openclaw/pull/141341), [issue #141340](https://github.com/openclaw/openclaw/issues/141340). Thanks to [ooiuuii](https://github.com/ooiuuii) and [obviyus](https://github.com/obviyus).
  - A supported long Chat Completions turn can shorten its history and continue when its output room runs out, without sending an incomplete reply or rerunning completed tools. Its live preview may pause while the reply is buffered. [PR #143840](https://github.com/openclaw/openclaw/pull/143840). Thanks to [forrystudio](https://github.com/forrystudio) and [steipete](https://github.com/steipete).
  - Successful native compaction skips complete plugin hooks, and the bundled notifier reports when nothing was compacted. [PR #150920](https://github.com/openclaw/openclaw/pull/150920), [related issue #81925](https://github.com/openclaw/openclaw/issues/81925). Thanks to [DonnieFi](https://github.com/DonnieFi), [steipete](https://github.com/steipete), [vishwanathmuthuraman](https://github.com/vishwanathmuthuraman), and [castigiova](https://github.com/castigiova).
  - Hugging Face TGI input context-limit errors can trigger compaction and retry. [PR #158161](https://github.com/openclaw/openclaw/pull/158161), [related issue #158159](https://github.com/openclaw/openclaw/issues/158159). Thanks to [amittell](https://github.com/amittell) and [steipete](https://github.com/steipete).
  - Native Ollama subagent spawns can reuse more of a stable prompt prefix. Results depend on the model template, cache slots and unchanged instructions. [#164804](https://github.com/openclaw/openclaw/pull/164804), [#166271](https://github.com/openclaw/openclaw/issues/166271). Thanks to [aaa2015](https://github.com/aaa2015), [steipete](https://github.com/steipete) and [xyrolle](https://github.com/xyrolle).
  - Prompt-cache warnings distinguish Responses continuation input from history changes and identify changed fields and parameters without exposing their values. [#168019](https://github.com/openclaw/openclaw/pull/168019). Thanks to [steipete](https://github.com/steipete).
  - Claude conversation checkpoints preserve opportunities for reuse after large documents, images and tool exchanges. Bedrock checkpoint eligibility and lifetimes follow model and profile support. [#168042](https://github.com/openclaw/openclaw/pull/168042). Thanks to [steipete](https://github.com/steipete).
  - Eligible direct OpenAI Responses and Anthropic API-key conversations now use provider compaction by default, with existing opt-outs and local recovery. An OpenAI provider-compaction call can cost more than a local summary, even if later turns reuse more cached context ([#168164](https://github.com/openclaw/openclaw/pull/168164)). Thanks [@obviyus](https://github.com/obviyus).
  - Correct cache usage and cost estimates, provider routing hints, Gemini credential scoping and Bedrock checkpoint eligibility ([#168145](https://github.com/openclaw/openclaw/pull/168145)). Thanks [@steipete](https://github.com/steipete).
  - Advance byte-limited history in steadier steps for local-model prompt reuse. Some older context may leave the model's view sooner ([#168157](https://github.com/openclaw/openclaw/pull/168157), [#159799](https://github.com/openclaw/openclaw/issues/159799)). Thanks [@steipete](https://github.com/steipete), reporter [@8bitsforge](https://github.com/8bitsforge) and [@axeg0](https://github.com/axeg0) for the additional workload.
  - Preserve reusable prompt prefixes across date changes while keeping the agent aware of the current date and timezone ([#168169](https://github.com/openclaw/openclaw/pull/168169), [#148304](https://github.com/openclaw/openclaw/issues/148304)). Thanks [@steipete](https://github.com/steipete), [@arthur-drozdov](https://github.com/arthur-drozdov) and [@rsdancey](https://github.com/rsdancey).
  - Avoid unnecessary recovery during fitting tool-heavy turns when the optional mid-turn compaction check is enabled ([#168338](https://github.com/openclaw/openclaw/pull/168338), [#101929](https://github.com/openclaw/openclaw/issues/101929), [#168364](https://github.com/openclaw/openclaw/issues/168364)). Thanks [@steipete](https://github.com/steipete), reporters [@sercada](https://github.com/sercada) and [@KarimVKarmali](https://github.com/KarimVKarmali), and [@vincentkoc](https://github.com/vincentkoc) for investigating.
  - Explain when a message is too large for the selected model and what to try next. A single oversized message still needs shortening ([#168326](https://github.com/openclaw/openclaw/pull/168326), [#158159](https://github.com/openclaw/openclaw/issues/158159)). Thanks [@steipete](https://github.com/steipete) and [@amittell](https://github.com/amittell).
  - Automatic compaction uses the normal request context and retains provider checkpoints for eligible native ChatGPT sign-in sessions. Existing opt-outs apply. [#168401](https://github.com/openclaw/openclaw/pull/168401), [issue #168088](https://github.com/openclaw/openclaw/issues/168088). Thanks to [@obviyus](https://github.com/obviyus) and [@RomneyDa](https://github.com/RomneyDa).
  - Preserve bounded tool results across replay, stable browser cache keys during private subagent completion, and an Anthropic cache prefix that excludes temporary context. [#168392](https://github.com/openclaw/openclaw/pull/168392), [prompt caching guide](/reference/prompt-caching). Thanks to [@steipete](https://github.com/steipete).
  - Read opted-in `AGENTS.md` sections from the effective agent workspace during automatic and explicit safeguard compaction, with warnings when files or selected headings are unavailable. [#168446](https://github.com/openclaw/openclaw/pull/168446), [issue #168131](https://github.com/openclaw/openclaw/issues/168131), [compaction configuration](/gateway/config-agents/heartbeat-compaction-and-streaming). Thanks to [@steipete](https://github.com/steipete) and [@jakeaadams](https://github.com/jakeaadams) for the report and advice.
  - Prevent session-store admission stack overflows in large agent fleets and preserve the original operation error. [#168354](https://github.com/openclaw/openclaw/pull/168354), [issue #168160](https://github.com/openclaw/openclaw/issues/168160). Thanks to [@steipete](https://github.com/steipete) and [@609NFT](https://github.com/609NFT) for the report and verification.
  - Compact before a managed OpenAI-compatible tool request is sent with too little output room ([#169085](https://github.com/openclaw/openclaw/pull/169085)). Thanks [@steipete](https://github.com/steipete). Thanks [@eightHundreds](https://github.com/eightHundreds) for the report.
  - Recognize the older LM Studio context-overflow error and attempt the existing compaction and retry flow ([#169189](https://github.com/openclaw/openclaw/pull/169189)). Thanks [@xpeng5278-web](https://github.com/xpeng5278-web) for the report and fix, and [@steipete](https://github.com/steipete) for the follow-up.
  - Preserve committed user metadata across later requests and improve cache-drop explanations after telemetry gaps ([#168848](https://github.com/openclaw/openclaw/pull/168848)). Thanks [@steipete](https://github.com/steipete).
  - Keep reusable prompt prefixes steadier across reply modes and preserve saved custom-context timestamps on replay ([#169091](https://github.com/openclaw/openclaw/pull/169091)). Thanks [@steipete](https://github.com/steipete).
  - Retain image and retry history more consistently for replay and provider prompt-cache reuse ([#169237](https://github.com/openclaw/openclaw/pull/169237)). Thanks [@steipete](https://github.com/steipete).
  - Keep subagent and cross-session message provenance consistent from first dispatch through replay ([#169238](https://github.com/openclaw/openclaw/pull/169238), [related issue #164515](https://github.com/openclaw/openclaw/issues/164515)). For these turns, model-prompt enrichment that omits the complete stored message is omitted. See [prompt caching](/reference/prompt-caching). Thanks [@RomneyDa](https://github.com/RomneyDa). Thanks [@TourAround](https://github.com/TourAround) for the report.
  - Fixes a large conversation stalling when its saved-turn receipt is too large to deliver. [PR #169843](https://github.com/openclaw/openclaw/pull/169843), [issue #169780](https://github.com/openclaw/openclaw/issues/169780). Thanks to [TheAngryPit](https://github.com/TheAngryPit) and [steipete](https://github.com/steipete).
  - Shorten a ChatGPT-signed-in conversation earlier, leaving more room for the next large message or tool result. [PR #169755](https://github.com/openclaw/openclaw/pull/169755). Thanks to [obviyus](https://github.com/obviyus).
  - Continue eligible direct OpenAI API-key sessions with the provider's retained messages after compaction and restart. Invalid or oversized windows still use the existing fallback. [PR #169771](https://github.com/openclaw/openclaw/pull/169771). Thanks to [obviyus](https://github.com/obviyus).
  - Wait for the previous writer before checking a transcript for manual compaction, so its final committed message can be included. [PR #169931](https://github.com/openclaw/openclaw/pull/169931). Thanks to [steipete](https://github.com/steipete).
  - Avoid repeating runtime context after every tool result in an OpenAI Responses turn. Existing duplicates remain until compaction. [PR #169632](https://github.com/openclaw/openclaw/pull/169632). Thanks to [steipete](https://github.com/steipete).
  - Keep encrypted reasoning replay consistent before and after transcript reload for OpenAI Responses SDK continuations. [PR #169689](https://github.com/openclaw/openclaw/pull/169689). Thanks to [steipete](https://github.com/steipete).
  - Allow Responses turns to reuse provider connections after a reply finishes. [PR #169802](https://github.com/openclaw/openclaw/pull/169802). Thanks to [steipete](https://github.com/steipete).
  - Keep WebChat tool definitions and retained Responses replay IDs stable across turns and history pruning to support prompt-cache reuse. [PR #170050](https://github.com/openclaw/openclaw/pull/170050). Thanks to [steipete](https://github.com/steipete).
  - Read-only forks retain completed parent answers and tool results. [#170973](https://github.com/openclaw/openclaw/pull/170973). Thanks [@steipete](https://github.com/steipete).
  - Prepared fork expiry no longer retains completed agent turns in memory unnecessarily. [#171012](https://github.com/openclaw/openclaw/pull/171012), following separate retention work in [#170855](https://github.com/openclaw/openclaw/pull/170855). Thanks [@steipete](https://github.com/steipete).
  - Omit-mode model history can preserve earlier goals by replacing selected tool-result bodies with notices. [#171239](https://github.com/openclaw/openclaw/pull/171239). Thanks [@YuriyPopovDev](https://github.com/YuriyPopovDev) and [@steipete](https://github.com/steipete).
  - Rewrites of large tool-heavy histories reuse unchanged content to reduce main-thread copying. [#171200](https://github.com/openclaw/openclaw/pull/171200). Thanks [@steipete](https://github.com/steipete).
  - Manual transcript truncation completes index rebuilding before success. [#171134](https://github.com/openclaw/openclaw/pull/171134), related to [#171085](https://github.com/openclaw/openclaw/issues/171085). Thanks [@steipete](https://github.com/steipete) and reporter [@dustytext-bot](https://github.com/dustytext-bot).
  - Native Codex Ultrafast turns cap automatic compaction at 260,000 total context tokens while retaining lower configured limits. Incognito turns with incompatible creation settings are refused while their history is preserved. [#170950](https://github.com/openclaw/openclaw/pull/170950), extending [#170844](https://github.com/openclaw/openclaw/pull/170844). Thanks [@steipete](https://github.com/steipete).
  - Doctor recognizes equivalent legacy attachments during imported session verification while continuing to reject real differences. [#171388](https://github.com/openclaw/openclaw/pull/171388), reported in [#171312](https://github.com/openclaw/openclaw/issues/171312) and related to [#171373](https://github.com/openclaw/openclaw/issues/171373). Thanks [@he-yufeng](https://github.com/he-yufeng), [@steipete](https://github.com/steipete), [@brookpw](https://github.com/brookpw), and [@junnie-stack](https://github.com/junnie-stack).
  - Continued a busy run after a follow-up triggers the optional mid-turn compaction precheck. [#172019](https://github.com/openclaw/openclaw/pull/172019). Thanks [@mirasrael](https://github.com/mirasrael) and [@obviyus](https://github.com/obviyus).
  - Fixed manual compaction for a small configured session limit on a model with a larger native window. [#172457](https://github.com/openclaw/openclaw/pull/172457), following the [summarization capacity check](https://github.com/openclaw/openclaw/pull/167916). Thanks [@steipete](https://github.com/steipete).
  - Preserved pending context-engine turn order through the agent database migration and maintenance. [#172074](https://github.com/openclaw/openclaw/pull/172074). Thanks [@steipete](https://github.com/steipete).
  - Reduced history copying during long-session transcript appends. [#172125](https://github.com/openclaw/openclaw/pull/172125). Thanks [@steipete](https://github.com/steipete).
  - Retained an active oversized session to reduce repeated reloads and contention with other updates. [#172454](https://github.com/openclaw/openclaw/pull/172454). Thanks [@steipete](https://github.com/steipete).
  - Load the full transcript for post-compaction maintenance only when a rewrite needs it. [#172564](https://github.com/openclaw/openclaw/pull/172564) Thanks to [@steipete](https://github.com/steipete).
  - Share encoded model request bytes with session fork replay to reduce duplicate retained request storage. [#172565](https://github.com/openclaw/openclaw/pull/172565) Thanks to [@steipete](https://github.com/steipete).
  - If automatic compaction fails, show its actual final error and recovery guidance instead of an earlier warning. [#173310](https://github.com/openclaw/openclaw/pull/173310) Thanks to [@TurboTheTurtle](https://github.com/TurboTheTurtle).
  - Keep idle Codex warm-session retention tied to elapsed time when the system clock changes ([#168771](https://github.com/openclaw/openclaw/pull/168771)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925).
  - Lets ordinary default-model and lowercase model checks start without loading an unused catalog. [#169354](https://github.com/openclaw/openclaw/pull/169354), [issue #88201](https://github.com/openclaw/openclaw/issues/88201). Thanks [@steipete](https://github.com/steipete) and [@adamdksaad-ops](https://github.com/adamdksaad-ops).
  - Reuse prepared model lists across equivalent sessions. [PR #169653](https://github.com/openclaw/openclaw/pull/169653). Thanks to [steipete](https://github.com/steipete).
  - Model catalog reads avoid unnecessary request-attribution work. [#170912](https://github.com/openclaw/openclaw/pull/170912). Thanks [@steipete](https://github.com/steipete).
  - Renew unknown native model readiness before selection in [7edce1f](https://github.com/openclaw/openclaw/commit/7edce1fbe322183a66ef4bce4cca218029069de4).
  - Reuse suitable model catalog data for covered cron and idle selection paths in [dd4b258](https://github.com/openclaw/openclaw/commit/dd4b258a3cfa6fdef41535e5518fe260f5665a9c).
  - Keep compaction's safety deadline stable across clock changes in [#184293](https://github.com/openclaw/openclaw/pull/184293), while retaining the SDK's epoch-valued deadline interface. Thanks to [SunnyShu0925](https://github.com/SunnyShu0925) and [obviyus](https://github.com/obviyus).
  - Preserve timeout and compaction recovery when a transcript append races finalization in [af82e00](https://github.com/openclaw/openclaw/commit/af82e00296de8698a147bbbf52786cd3cdd2c61d).
  - Continue from provider compaction checkpoints without a misleading truncated-tool notice in [591aa77](https://github.com/openclaw/openclaw/commit/591aa77c93c8591d0666ce1867b3671f1e5c57af).
  - Fixes an affected ChatGPT follow-up after a tool result carrying reasoning that cannot be verified in [#185774](https://github.com/openclaw/openclaw/pull/185774). Thanks to [anyech](https://github.com/anyech), [obviyus](https://github.com/obviyus), and [nikosml](https://github.com/nikosml).
  - Preserve compatible session authentication profiles during Codex and voice model selection ([commit](https://github.com/openclaw/openclaw/commit/f183f3867156a7fadc36af5e56983378de14fc80)).
  - Honor Qwen reasoning overrides supplied through payload hooks ([commit](https://github.com/openclaw/openclaw/commit/fad1c5fa15b5d9d31a050646bdbd27beefa4a5a6)). Thanks to [@vincentkoc](https://github.com/vincentkoc).
  - Keep text and images in their original order in OpenAI Responses tool results ([commit](https://github.com/openclaw/openclaw/commit/7b7f9ab9802d69db85ad1403b6c75cb1164aa080)).
  - Retain authorized trace diagnostics after native reply streaming ([commit](https://github.com/openclaw/openclaw/commit/81e7a2190441faf0ae5afc9d585151c7d00a68fc)).
  - The session-control documentation clarifies the successful response to a Stop request after the selected run has already finished ([commit](https://github.com/openclaw/openclaw/commit/ae76b06c149232245f1002c34f7d8137bca75461)).

  </details>

- Fixes replies on affected model streams that repeated the opening, lost answer text after reasoning, or showed tool-call markup instead of a readable answer.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Prevent duplicated opening text in affected OpenAI Responses and managed Completions streams. [#172653](https://github.com/openclaw/openclaw/pull/172653) Thanks to [@Richard355168](https://github.com/Richard355168) for the fix and [report](https://github.com/openclaw/openclaw/issues/136262), [@steipete](https://github.com/steipete) for investigation and verification, and [@Gavin-ifjc](https://github.com/Gavin-ifjc) and [@Lamer217](https://github.com/Lamer217) for related reports.
  - Allow bounded recovery from the recognized malformed OpenAI stream event using recorded tool results instead of repeating completed actions. [#173404](https://github.com/openclaw/openclaw/pull/173404) Thanks to [@steipete](https://github.com/steipete).
  - Preserve valid multiline Google Interactions stream events and report malformed event JSON instead of silently dropping content. [#173612](https://github.com/openclaw/openclaw/pull/173612) Thanks to [@steipete](https://github.com/steipete).
  - Enabled live previews receive answer text after reasoning from OpenAI-compatible Chat Completions streams. [PR #150685](https://github.com/openclaw/openclaw/pull/150685), [issue #132615](https://github.com/openclaw/openclaw/issues/132615). Thanks to [leapdragon](https://github.com/leapdragon) and [steipete](https://github.com/steipete).
  - Hide recognized DeepSeek-format tool markup from replies and recover valid tool calls in managed turns. Direct calls and tool-free finalization filter the markup without executing it. [PR #169728](https://github.com/openclaw/openclaw/pull/169728), [issue #159665](https://github.com/openclaw/openclaw/issues/159665). Thanks to [steipete](https://github.com/steipete) and [TOMUIV](https://github.com/TOMUIV).
  - Keep reasoning separate from answers for affected manually configured native Ollama models. [PR #169851](https://github.com/openclaw/openclaw/pull/169851), [issue #134662](https://github.com/openclaw/openclaw/issues/134662). Thanks to [steipete](https://github.com/steipete), [papakpmartin](https://github.com/papakpmartin) and [xydigitLybnnnn](https://github.com/xydigitLybnnnn).
  - Ask supported utility models to turn thinking off for short titles and summaries, reducing empty results. Models that require reasoning can still exhaust their output budget. [PR #169920](https://github.com/openclaw/openclaw/pull/169920), [issue #153391](https://github.com/openclaw/openclaw/issues/153391). Thanks to [jacobtomlinson](https://github.com/jacobtomlinson) and [dwalthour](https://github.com/dwalthour).

  </details>

- If you have [fallback models configured](/concepts/model-failover#model-fallback), a reply can switch to another eligible model after a safe-to-retry timeout, exhausted context recovery or an explicit organization token-quota error. A longer fallback chain can take longer overall; billing and sign-in problems still need their own remedies.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - A safe-to-retry reply that times out on the first model can try your configured fallback, with a separate time allowance for each model. [PR #141869](https://github.com/openclaw/openclaw/pull/141869), [issue #141838](https://github.com/openclaw/openclaw/issues/141838), [related issue #103697](https://github.com/openclaw/openclaw/issues/103697). Thanks to [von8794](https://github.com/von8794), [alkor2000](https://github.com/alkor2000), and [steipete](https://github.com/steipete).
  - OpenRouter, Kilo Gateway, and other enabled providers that manage their own transient availability can be retried after upstream recovery. Credential, billing, and subscription blocks remain enforced. [PR #141825](https://github.com/openclaw/openclaw/pull/141825). Thanks to [clement-paradex](https://github.com/clement-paradex) and [steipete](https://github.com/steipete).
  - Repeated unchanged usage counters no longer keep a stalled Chat Completions request alive, while advancing token counts still indicate progress. [PR #145850](https://github.com/openclaw/openclaw/pull/145850), [related issue #145203](https://github.com/openclaw/openclaw/issues/145203). Thanks to [RileyJJY](https://github.com/RileyJJY) and [steipete](https://github.com/steipete), with investigation by [anyech](https://github.com/anyech) and the report from [elharonyclaw](https://github.com/elharonyclaw).
  - Give each eligible retry or fallback its own recovery allowance, so a queued request may wait longer for the current reply to finish. [#164808](https://github.com/openclaw/openclaw/pull/164808), [#166497](https://github.com/openclaw/openclaw/issues/166497), [#165556](https://github.com/openclaw/openclaw/issues/165556), [#145203](https://github.com/openclaw/openclaw/issues/145203), [#133330](https://github.com/openclaw/openclaw/issues/133330). Thanks to [anyech](https://github.com/anyech), [steipete](https://github.com/steipete), [vinsew](https://github.com/vinsew), [belbix](https://github.com/belbix), [tre1d](https://github.com/tre1d) and [aleps001](https://github.com/aleps001).
  - An unfinished ChatGPT Responses turn can recover from a normal connection close using the existing bounded recovery policy. [#167512](https://github.com/openclaw/openclaw/pull/167512), [#167345](https://github.com/openclaw/openclaw/issues/167345). Thanks to [ericcurtin](https://github.com/ericcurtin), [obviyus](https://github.com/obviyus), reporter [mightyx](https://github.com/mightyx) and [aleps001](https://github.com/aleps001).
  - Continue an eligible model retry when an optional retry-status callback fails ([#169141](https://github.com/openclaw/openclaw/pull/169141)). Thanks [@sunlit-deng](https://github.com/sunlit-deng).
  - After shortening history still cannot fit a reply on the current model, try an eligible configured fallback without bypassing model locks or replay restrictions. [PR #170141](https://github.com/openclaw/openclaw/pull/170141), [issue #9986](https://github.com/openclaw/openclaw/issues/9986). Thanks to [steipete](https://github.com/steipete), [amirarenco-create](https://github.com/amirarenco-create), [KarimVKarmali](https://github.com/KarimVKarmali), [engagepy](https://github.com/engagepy) and [zhupeng0o0](https://github.com/zhupeng0o0).
  - Configured fallback can handle provider-wrapped transient errors such as 503 or 429 in text-only responses. [#170527](https://github.com/openclaw/openclaw/pull/170527), thanks to [@TUARAN](https://github.com/TUARAN), [@steipete](https://github.com/steipete) and [@diegoln](https://github.com/diegoln) for the [report](https://github.com/openclaw/openclaw/issues/170388).
  - An unclassified empty normal completion no longer consumes the model fallback chain after same-model recovery. [#171199](https://github.com/openclaw/openclaw/pull/171199). Thanks [@steipete](https://github.com/steipete).
  - Reset the rate-limit retry budget after a completed model response, and explain when automatic retries are exhausted. [#171760](https://github.com/openclaw/openclaw/pull/171760), thanks to [steipete](https://github.com/steipete).
  - Recognized SiliconFlow prompt-limit errors enter the existing compaction and retry path. [#181519](https://github.com/openclaw/openclaw/pull/181519), [#181518](https://github.com/openclaw/openclaw/issues/181518) Thanks [@xpeng5278-web](https://github.com/xpeng5278-web) and [@steipete](https://github.com/steipete).
  - Recognized vLLM context-limit errors enter the existing compaction and retry path or provide overflow guidance when recovery cannot make the prompt fit. [#181521](https://github.com/openclaw/openclaw/pull/181521), [#181520](https://github.com/openclaw/openclaw/issues/181520) Thanks [@xpeng5278-web](https://github.com/xpeng5278-web).
  - Apply Ollama web search's configured result count and per-attempt timeout. An explicit search count takes precedence. [#182052](https://github.com/openclaw/openclaw/pull/182052) Thanks [@masatohoshino](https://github.com/masatohoshino).
  - Align tool-call and result names when replaying provider-prefixed transcript entries to native Ollama. [#181549](https://github.com/openclaw/openclaw/pull/181549) Thanks [@xpeng5278-web](https://github.com/xpeng5278-web).
  - Apply provider-specific thinking controls to Kimi K3.1 Pro and Highspeed. The direct Moonshot route also handles native video and reasoning replay. Kimi Code cannot turn thinking off. [#181923](https://github.com/openclaw/openclaw/pull/181923) Thanks [@obviyus](https://github.com/obviyus).
  - Avoid a false model-refresh warning when the optional Claude CLI is absent, and give installation guidance when its authentication is explicitly selected. [#182729](https://github.com/openclaw/openclaw/pull/182729) Thanks [@masatohoshino](https://github.com/masatohoshino) and [@steipete](https://github.com/steipete).
  - Shorten oversized Claude CLI option descriptions instead of rejecting the entire question set. Oversized question text and labels still fail. [#182938](https://github.com/openclaw/openclaw/pull/182938) Thanks [@ericcurtin](https://github.com/ericcurtin) and [@steipete](https://github.com/steipete).
  - A temporary agent run no longer removes the default local llama.cpp model needed by a later memory search. [#182781](https://github.com/openclaw/openclaw/pull/182781) Thanks [@rjdotdev](https://github.com/rjdotdev), [@steipete](https://github.com/steipete) and [@kir1ll](https://github.com/kir1ll).
  - Retry smaller embedding batches for the specific Mistral aggregate-token-limit response. A single input that still exceeds the limit remains an error. [#183567](https://github.com/openclaw/openclaw/pull/183567) Thanks [@lonexreb](https://github.com/lonexreb) and [@drewjocham](https://github.com/drewjocham).
  - Leave fully redacted HTTP 400 and 422 provider errors unclassified instead of incorrectly labeling them as request-format errors. [#183006](https://github.com/openclaw/openclaw/pull/183006) Thanks [@amittell](https://github.com/amittell), [@obviyus](https://github.com/obviyus) and [@steipete](https://github.com/steipete).
  - Prevent part of a MiniMax tool argument from appearing in the visible reply when it contains a closing tag. [#183413](https://github.com/openclaw/openclaw/pull/183413) Thanks [@gdpu11](https://github.com/gdpu11) and [@steipete](https://github.com/steipete).
  - Avoid Gateway stalls when assistant text resembles an incomplete or malformed tool call. [#183252](https://github.com/openclaw/openclaw/pull/183252) Thanks [@LeizhenZhang](https://github.com/LeizhenZhang) and [@steipete](https://github.com/steipete).

  - When a provider explicitly says the organization's token quota is exhausted, move a safe-to-retry turn to an available configured fallback instead of repeating the same model. Other rate limits keep their usual retries. [#171873](https://github.com/openclaw/openclaw/pull/171873), thanks to [steipete](https://github.com/steipete).

  </details>

- Switching models now keeps your requested thinking level, using a supported level for the current model and restoring your preference when you switch back. If an earlier switch already overwrote it, set it again once.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Self-hosted Kimi K3 thinking selections reach the supported reasoning effort while retaining the existing Off default. [PR #139980](https://github.com/openclaw/openclaw/pull/139980), [unrelated issue reference #139040](https://github.com/openclaw/openclaw/issues/139040). Thanks to [jsf9789](https://github.com/jsf9789) and [steipete](https://github.com/steipete).
  - Selected Qwen chat-template reasoning levels reach backends that declare supported efforts, while unselected turns keep the server default. [PR #148397](https://github.com/openclaw/openclaw/pull/148397). Thanks to [areslp](https://github.com/areslp), [hippoley](https://github.com/hippoley), and [steipete](https://github.com/steipete).
  - Configured `top_p` sampling values reach supported providers, including zero. When both spellings remain, `topP` takes precedence. [PR #148538](https://github.com/openclaw/openclaw/pull/148538), [issue #127561](https://github.com/openclaw/openclaw/issues/127561). Thanks to [Raymondriter](https://github.com/Raymondriter) and reporter [steipete](https://github.com/steipete).
  - Copilot now uses the matching account's reported context capacity when available instead of a guessed number, while respecting configured caps. Refresh the model list to replace an older cached estimate. [PR #156636](https://github.com/openclaw/openclaw/pull/156636), [related issue #156635](https://github.com/openclaw/openclaw/issues/156635). Thanks to [saju01](https://github.com/saju01) and [RomneyDa](https://github.com/RomneyDa), with design advice from [snotty](https://github.com/snotty), related reproduction from [vinaycodeaxe](https://github.com/vinaycodeaxe), and prior groundwork by [zhangguiping-xydt](https://github.com/zhangguiping-xydt) and [Yigtwxx](https://github.com/Yigtwxx).
  - An eligible MiniMax account can choose the M3.1 Flash Preview model and its five supported reasoning levels; OpenClaw no longer sends that model an unsupported thinking-off choice. [PR #160089](https://github.com/openclaw/openclaw/pull/160089), [issues #160037](https://github.com/openclaw/openclaw/issues/160037) and [#160491](https://github.com/openclaw/openclaw/issues/160491). Thanks to [NianJiuZst](https://github.com/NianJiuZst), [steipete](https://github.com/steipete), [Takhoffman](https://github.com/Takhoffman), and [RomneyDa](https://github.com/RomneyDa), with provider evidence from [php737](https://github.com/php737) and reports and investigation from [ns-spec](https://github.com/ns-spec), [Hansen1018](https://github.com/Hansen1018), and [olveww-dot](https://github.com/olveww-dot).
  - Select `openai/gpt-6-luna` for typed evaluations. ChatGPT and Codex subscription sign-in do not authorize this Platform API route. [#166320](https://github.com/openclaw/openclaw/pull/166320). Thanks to [jjjhenriksen](https://github.com/jjjhenriksen), [obviyus](https://github.com/obviyus), [Kimiyu-186](https://github.com/Kimiyu-186) and [steipete](https://github.com/steipete).
  - llama.cpp discovery honors the existing private-network opt-in for link-local servers. Enable it only for trusted endpoints because it also permits metadata addresses. [#163634](https://github.com/openclaw/openclaw/pull/163634), [#160389](https://github.com/openclaw/openclaw/issues/160389). Thanks to [harshitgavita-07](https://github.com/harshitgavita-07), [davidgrinc](https://github.com/davidgrinc) and [steipete](https://github.com/steipete).
  - Direct Z.AI GLM-5.3 and GLM-5.3-Flash calls apply the existing reasoning policy when thinking is omitted or set to off. [#164407](https://github.com/openclaw/openclaw/pull/164407), [#164328](https://github.com/openclaw/openclaw/issues/164328). Thanks to [Ayushdevo](https://github.com/Ayushdevo), [steipete](https://github.com/steipete) and [nina-grech](https://github.com/nina-grech).
  - Map native Ollama thinking controls to each model's advertised values, including XHigh when supported ([#168166](https://github.com/openclaw/openclaw/pull/168166), [#157762](https://github.com/openclaw/openclaw/issues/157762)). Thanks [@steipete](https://github.com/steipete).
  - Agent commands, replies and scheduled runs now offer the thinking levels supported by their selected provider while respecting your explicit choice. [#168566](https://github.com/openclaw/openclaw/pull/168566). Thanks to [@obviyus](https://github.com/obviyus).
  - Pass configured context caps to Codex catalog-model threads on start and resume ([#168986](https://github.com/openclaw/openclaw/pull/168986)). Thanks [@steipete](https://github.com/steipete).
  - Keep the thinking level you requested across model switches and show when the current model uses a lower supported level. [#169435](https://github.com/openclaw/openclaw/pull/169435), [issue #87925](https://github.com/openclaw/openclaw/issues/87925). Thanks [@steipete](https://github.com/steipete), [@hoobnn](https://github.com/hoobnn) and [@amittell](https://github.com/amittell).
  - Keeps a selected Codex Ultrafast tier across resumed and follow-up ChatGPT-authenticated turns when the account's model catalog supports it. [#169265](https://github.com/openclaw/openclaw/pull/169265), [issue #169264](https://github.com/openclaw/openclaw/issues/169264). Thanks [@SanderHelgesen](https://github.com/SanderHelgesen).
  - Preserves prior thinking-effort changes when OpenAI Responses streaming requests overlap in a conversation. [#169322](https://github.com/openclaw/openclaw/pull/169322) Thanks [@steipete](https://github.com/steipete).
  - Retains native Ollama reasoning across tool continuations and reopened sessions. Retained reasoning uses context and remains subject to compaction. [#169312](https://github.com/openclaw/openclaw/pull/169312), [related issue #147171](https://github.com/openclaw/openclaw/issues/147171). Thanks [@steipete](https://github.com/steipete) and [@wpu911](https://github.com/wpu911).
  - If your custom provider maps a model alias to the same served model, you can mark that configured row as equivalent to avoid a misleading model-change notice. Real fallback changes still appear. [PR #170009](https://github.com/openclaw/openclaw/pull/170009), [issue #170008](https://github.com/openclaw/openclaw/issues/170008). Thanks to [xyrolle](https://github.com/xyrolle) and [steipete](https://github.com/steipete).
  - Avoid false model-route change notices for equivalent or dated OpenAI response IDs. [PR #169977](https://github.com/openclaw/openclaw/pull/169977), [issue #169976](https://github.com/openclaw/openclaw/issues/169976). Thanks to [xyrolle](https://github.com/xyrolle), [Yigtwxx](https://github.com/Yigtwxx) and [obviyus](https://github.com/obviyus).
  - Estimate GPT-6.1 Sol capacity on an OpenClaw subscription route at 500,000 tokens only when your account and configuration give no more specific limit; direct API and native Codex limits are separate. [PR #169686](https://github.com/openclaw/openclaw/pull/169686). Thanks to [obviyus](https://github.com/obviyus).
  - Restore `/think off` for eligible native Claude CLI models without an Anthropic API key. Models requiring adaptive thinking continue to omit Off. [PR #169657](https://github.com/openclaw/openclaw/pull/169657), [issue #169641](https://github.com/openclaw/openclaw/issues/169641). Thanks to [obviyus](https://github.com/obviyus).
  - Show the explicit Claude Code model name in the picker when the default alias resolves to that model. [PR #169670](https://github.com/openclaw/openclaw/pull/169670). Thanks to [obviyus](https://github.com/obviyus).
  - Update MiMo and Mistral recommendation order and include Muse Wonder in recommendations when a provider serves it. [PR #170106](https://github.com/openclaw/openclaw/pull/170106). Thanks to [obviyus](https://github.com/obviyus).
  - OpenClaw uses a 260,000-token context cap for Ultrafast client and server compaction paths, respecting smaller configured limits. [#170844](https://github.com/openclaw/openclaw/pull/170844), thanks to [@steipete](https://github.com/steipete).
  - Standard, Fast and Ultrafast choices override an inherited speed tier where the model, account and route support them. The current request keeps its original choice. Keyboard navigation also reaches nested hovercard content. [#171783](https://github.com/openclaw/openclaw/pull/171783), thanks to [fuller-stack-dev](https://github.com/fuller-stack-dev).
  - Allowed automatic child-session model selections are kept when stale routing is repaired. [#183728](https://github.com/openclaw/openclaw/pull/183728) Thanks [@LiuwqGit](https://github.com/LiuwqGit) and [@steipete](https://github.com/steipete). Thanks [@Iolaum](https://github.com/Iolaum) for the report.
  - Recognize self-hosted reasoning aliases and make `/think off` work with underscore-prefixed Nemotron aliases. An explicit reasoning opt-out still applies. [#122022](https://github.com/openclaw/openclaw/pull/122022), [reported in #121597](https://github.com/openclaw/openclaw/issues/121597). Thanks to [krell11](https://github.com/krell11) and [steipete](https://github.com/steipete).
  - Typed level directives recognize existing digit and underscore aliases, including `/verbose 1` and `/think extra_high`. [Typed level aliases](https://github.com/openclaw/openclaw/pull/168470), [report](https://github.com/openclaw/openclaw/issues/168254). Thanks [@DonnieFi](https://github.com/DonnieFi), [@yetval](https://github.com/yetval) and [@obviyus](https://github.com/obviyus).
  - Deprecated-model errors use configured fallback or guide you to choose another model instead of suggesting a retry. [Deprecated model guidance](https://github.com/openclaw/openclaw/pull/168187). Thanks [@obviyus](https://github.com/obviyus).
  - Fixes a personal-account reply stopping during quota or credential refresh because an optional saved field was represented differently. See [#170065](https://github.com/openclaw/openclaw/pull/170065) and [#169850](https://github.com/openclaw/openclaw/issues/169850). Thanks [@steipete](https://github.com/steipete), [@modlethub](https://github.com/modlethub) and [@Yigtwxx](https://github.com/Yigtwxx).
  - Personal Codex requests avoid an extra blocking credential read but still check account access before sending; a reconnect or account-profile merge can invalidate a prepared request. [PR #170330](https://github.com/openclaw/openclaw/pull/170330). Thanks [@steipete](https://github.com/steipete).
  - Preserve the selected Codex account configuration for online `status --usage --json`, avoiding a misleading generic expiration result ([#170692](https://github.com/openclaw/openclaw/pull/170692)). Thanks [@steipete](https://github.com/steipete).
  - Stop retrying a request that has been withdrawn or permanently rejected, while keeping recovery for temporary errors and recoverable context limits ([#170925](https://github.com/openclaw/openclaw/pull/170925)). Thanks [@steipete](https://github.com/steipete).
  - Recognize the provider's input-length error as a context overflow. [#171712](https://github.com/openclaw/openclaw/pull/171712) by [ruel225](https://github.com/ruel225). Thanks to [xpeng5278-web](https://github.com/xpeng5278-web). See [#171673](https://github.com/openclaw/openclaw/issues/171673).
  - Async tool calls preserve reasoning replay context for later OpenAI Responses requests. [#171763](https://github.com/openclaw/openclaw/pull/171763) follows [#171431](https://github.com/openclaw/openclaw/pull/171431). Thanks to [steipete](https://github.com/steipete).
  - DashScope and Model Studio routes use registered Qwen quota hooks. A custom native URL alone does not guarantee Qwen activation from a cold start. [#171750](https://github.com/openclaw/openclaw/pull/171750) by [steipete](https://github.com/steipete). The separate [input-length report](https://github.com/openclaw/openclaw/issues/171673) from [xpeng5278-web](https://github.com/xpeng5278-web) is addressed by [#171712](https://github.com/openclaw/openclaw/pull/171712).
  - If OpenClaw cannot safely add a turn to the conversation history, it stops that turn instead of switching models as though the provider failed. [#177956](https://github.com/openclaw/openclaw/pull/177956). Thanks [@hootrock](https://github.com/hootrock), [@obviyus](https://github.com/obviyus) and [@hussont](https://github.com/hussont).
  - Preserve person-linked model account selections across session resets and rollovers ([#179433](https://github.com/openclaw/openclaw/pull/179433), [#179432](https://github.com/openclaw/openclaw/issues/179432)). Thanks [@masatohoshino](https://github.com/masatohoshino).
  - An isolated task can still choose from the models discovered for its agent. [#182952](https://github.com/openclaw/openclaw/pull/182952) Thanks [@steipete](https://github.com/steipete).
  - Settle fallback notices against the model admitted for the session after a successful reply. [Commit](https://github.com/openclaw/openclaw/commit/b68da67ec7594e50734cb3333b2f3cf9707b8659), thanks to [joshavant](https://github.com/joshavant).

  </details>

- You can sign in to supported providers from the terminal while your local Gateway keeps running, and saved credentials are more reliably reflected in the available-model list. Older Gateways and unsupported sign-in options still need the documented offline or update path.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Startup cleanup logs and skips an unreadable managed GitHub profile directory while continuing to clean up other eligible retired profiles. [PR #171226](https://github.com/openclaw/openclaw/pull/171226), [issue #171035](https://github.com/openclaw/openclaw/issues/171035). Thanks [fhgffy](https://github.com/fhgffy) and [steipete](https://github.com/steipete).
  - Resolve identity before the first self-profile read ([commit](https://github.com/openclaw/openclaw/commit/466573573374954076729309c765ba457505ba57)).
  - MiniMax Portal OAuth renews access tokens through their issuing region. [PR #160459](https://github.com/openclaw/openclaw/pull/160459), [issue #77467](https://github.com/openclaw/openclaw/issues/77467). Thanks to [masatohoshino](https://github.com/masatohoshino) and [RomneyDa](https://github.com/RomneyDa), with reports from [rongtianhua](https://github.com/rongtianhua) and [mychataa](https://github.com/mychataa).
  - ChatGPT device-code sign-in keeps its polling timeout through system clock changes. [#162828](https://github.com/openclaw/openclaw/pull/162828). Thanks to [SunnyShu0925](https://github.com/SunnyShu0925) and [fuller-stack-dev](https://github.com/fuller-stack-dev).
  - OAuth refresh waits retain their timeout budget when the system clock changes. [#167619](https://github.com/openclaw/openclaw/pull/167619). Thanks to [sunnyshu0925](https://github.com/sunnyshu0925) and [fuller-stack-dev](https://github.com/fuller-stack-dev).
  - Save a supported provider API key through your running local Gateway and see its models without restarting. An explicit profile ID and unsupported setup paths still require offline setup. [#168588](https://github.com/openclaw/openclaw/pull/168588). Thanks to [@obviyus](https://github.com/obviyus).
  - Complete supported provider sign-in in the terminal without stopping your local Gateway. Unsupported options still need offline setup; an older Gateway needs updating and restarting first. [#168671](https://github.com/openclaw/openclaw/pull/168671). Thanks to [@obviyus](https://github.com/obviyus).
  - Resolve saved API keys correctly during provider model discovery so model lists can populate after sign-in. [#168617](https://github.com/openclaw/openclaw/pull/168617). Thanks to [@obviyus](https://github.com/obviyus).
  - Use the configured managed proxy for a standalone `openclaw models list --refresh`. [#168554](https://github.com/openclaw/openclaw/pull/168554). Thanks to [@obviyus](https://github.com/obviyus).
  - Make models found by an offline refresh available to a separate local agent turn while their provider credentials remain valid. [#168618](https://github.com/openclaw/openclaw/pull/168618). Thanks to [@obviyus](https://github.com/obviyus).
  - Reject the local-only `ollama-local` placeholder during Ollama Cloud setup and point to the hosted key page. Local Ollama setup is unchanged. [#168652](https://github.com/openclaw/openclaw/pull/168652). Thanks to [@obviyus](https://github.com/obviyus).
  - Allow shared OAuth credentials to refresh during model discovery when historical or empty agent databases exist ([#168957](https://github.com/openclaw/openclaw/pull/168957)). Thanks [@obviyus](https://github.com/obviyus).
  - Lets a newly saved API key be tried on the next request after the old key hit a rate limit. [#169528](https://github.com/openclaw/openclaw/pull/169528), [issue #151354](https://github.com/openclaw/openclaw/issues/151354). Thanks [@obviyus](https://github.com/obviyus), [@masatohoshino](https://github.com/masatohoshino) and [@blance2599](https://github.com/blance2599).
  - Fixes local Codex model discovery with an environment OpenAI API key in an isolated agent home without a selected profile. [#169350](https://github.com/openclaw/openclaw/pull/169350) Thanks [@steipete](https://github.com/steipete).
  - An explicit model authentication refresh reflects removed saved credentials. [#170201](https://github.com/openclaw/openclaw/pull/170201), thanks to [@steipete](https://github.com/steipete).
  - Claude CLI authentication checks allow up to ten seconds and distinguish a timeout from a confirmed logout. [#170604](https://github.com/openclaw/openclaw/pull/170604), thanks to [@steipete](https://github.com/steipete) and [@veritasaiflows-cell](https://github.com/veritasaiflows-cell).
  - Eligible account-only Codex models retain their subscription-backed route and OAuth profile during native model selection. [#170639](https://github.com/openclaw/openclaw/pull/170639), thanks to [@steipete](https://github.com/steipete).
  - Model Setup guides device sign-in and configures the selected agent for Muse Code. [#171526](https://github.com/openclaw/openclaw/pull/171526), thanks to [obviyus](https://github.com/obviyus).
  - Provider Access offers the same sign-in while leaving the active model in place, so you can choose a Muse model separately. [#171790](https://github.com/openclaw/openclaw/pull/171790), thanks to [obviyus](https://github.com/obviyus).
  - Keep recommendations for currently served models visible after upgrades, even when older catalog rows and prices cannot be used. [#172622](https://github.com/openclaw/openclaw/pull/172622) Thanks to [@obviyus](https://github.com/obviyus).
  - A model-list update for one agent no longer interrupts another agent's pending model picker; operators also get a counter for model-list requests. [#172514](https://github.com/openclaw/openclaw/pull/172514) Thanks to [@steipete](https://github.com/steipete).
  - If Sign in with ChatGPT expires, renew the credential and try your selected model once more before switching to a fallback. [#172593](https://github.com/openclaw/openclaw/pull/172593) Thanks to [@steipete](https://github.com/steipete) and [@vinsew](https://github.com/vinsew) for the [expiry](https://github.com/openclaw/openclaw/issues/172562) and [recovery](https://github.com/openclaw/openclaw/issues/172563) reports.
  - Reuse provider ownership lookups within each model registry. [#172481](https://github.com/openclaw/openclaw/pull/172481) Thanks to [@steipete](https://github.com/steipete).
  - Restore automatic conversation titles for custom Zhipu and Z.AI GLM endpoints, with a clearer warning when a title cannot be generated. [#172580](https://github.com/openclaw/openclaw/pull/172580) Thanks to [@steipete](https://github.com/steipete) and [@TommyLei666](https://github.com/TommyLei666) for the [report](https://github.com/openclaw/openclaw/issues/171068).
  - Preserve valid `__proto__` keys in cloned Mistral tool schemas. [#172587](https://github.com/openclaw/openclaw/pull/172587) Thanks to [@steipete](https://github.com/steipete).
  - Fix OpenRouter setup incorrectly rejecting valid keys or saved models because of a model identity mismatch. [#173292](https://github.com/openclaw/openclaw/pull/173292) Thanks to [@chandraveshchaudhari](https://github.com/chandraveshchaudhari) and [@obviyus](https://github.com/obviyus).
  - Recover valid DeepSeek tool requests in managed sessions through OpenRouter and compatible routes without exposing their markup or duplicating normal tool calls. Direct mode filters the markup without executing recovered calls. [#175058](https://github.com/openclaw/openclaw/pull/175058) Thanks to [@Linux2010](https://github.com/Linux2010), [@steipete](https://github.com/steipete), and [@ZhimingQ](https://github.com/ZhimingQ) for the [report](https://github.com/openclaw/openclaw/issues/174909).
  - Affected OpenAI models through GMI can use tools without the incompatible reasoning request. For those tool requests, enabled reasoning is automatically disabled or omitted. [#176709](https://github.com/openclaw/openclaw/pull/176709) Thanks [@steipete](https://github.com/steipete).
  - If you pinned an agent to a usable account, the model list no longer reports that account as missing. [#178522](https://github.com/openclaw/openclaw/pull/178522), [#178502](https://github.com/openclaw/openclaw/issues/178502), [#178549](https://github.com/openclaw/openclaw/issues/178549) Thanks [@ericcaiwx-star](https://github.com/ericcaiwx-star) and [@steipete](https://github.com/steipete).
  - Admitted embedded and CLI agent turns retain their prepared model alias guidance during a configuration refresh. [#179192](https://github.com/openclaw/openclaw/pull/179192) Thanks [@ensignwesley](https://github.com/ensignwesley) and [@steipete](https://github.com/steipete).
  - OpenAI-compatible model retrieval accepts existing agent aliases and returns the canonical model object. [#180057](https://github.com/openclaw/openclaw/pull/180057) Thanks [@yetval](https://github.com/yetval).
  - A billing failure now points you to account credit and usage limits instead of telling you to wait out a rate limit. [#180867](https://github.com/openclaw/openclaw/pull/180867), [#180856](https://github.com/openclaw/openclaw/issues/180856) Thanks [@eliavb43](https://github.com/eliavb43).
  - Known OpenAI models without an explicitly configured custom route can use their official routes when stale catalog metadata would otherwise block credentials. [#181356](https://github.com/openclaw/openclaw/pull/181356), [#181353](https://github.com/openclaw/openclaw/issues/181353) Thanks [@sasan1200](https://github.com/sasan1200).

  - Keep provider sign-in status visible while settings change, then refresh it when new account information arrives. [#171579](https://github.com/openclaw/openclaw/pull/171579), thanks to [steipete](https://github.com/steipete).

  </details>

- [Model pickers](/concepts/models#choose-a-model-for-a-session) make supported choices easier to find and show more useful errors when a configured model is missing. A catalog change does not replace a model you pinned earlier.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - `openclaw models auth list` now shows why a subscription account is blocked, when it expires and which account source and scope apply, in both text and JSON. [PR #133087](https://github.com/openclaw/openclaw/pull/133087), [issue #133065](https://github.com/openclaw/openclaw/issues/133065). Thanks to [Leon-SK668](https://github.com/Leon-SK668) and [vincentkoc](https://github.com/vincentkoc).
  - Expanding a model catalog to additional providers can reuse unchanged plugin registrations and avoid repeated preparation work. [PR #162226](https://github.com/openclaw/openclaw/pull/162226), [issues #161379](https://github.com/openclaw/openclaw/issues/161379) and [#162230](https://github.com/openclaw/openclaw/issues/162230). Thanks to [netcrazed](https://github.com/netcrazed) and [RomneyDa](https://github.com/RomneyDa), with verification by [kiralee](https://github.com/kiralee).
  - Copilot setup checks and Ask OpenClaw now work when you explicitly select a Copilot model. After replacing the packaged runtime, restart and verify setup again. [#163578](https://github.com/openclaw/openclaw/pull/163578), [#163406](https://github.com/openclaw/openclaw/issues/163406). Thanks to [lifuyue](https://github.com/lifuyue), [RomneyDa](https://github.com/RomneyDa) and reporter [tjegbejimba](https://github.com/tjegbejimba).
  - Model alias and fallback additions reject known-invalid provider names before saving when the provider inventory is available. When it cannot be checked, the selection saves with a warning. [#165744](https://github.com/openclaw/openclaw/pull/165744). Thanks to [Sedrak-Hovhannisyan](https://github.com/Sedrak-Hovhannisyan) and [steipete](https://github.com/steipete).
  - Preparing model lists for large configured provider catalogs avoids repeated reference parsing. [#166223](https://github.com/openclaw/openclaw/pull/166223). Thanks to [fede-kamel](https://github.com/fede-kamel) and [steipete](https://github.com/steipete).
  - See Ollama Cloud usage in chat `/status` and `openclaw status --usage` when your configured, signed-in server runs Ollama 0.40.1 or newer. [#167474](https://github.com/openclaw/openclaw/pull/167474). Thanks to [usimic](https://github.com/usimic) and [steipete](https://github.com/steipete).
  - `openclaw infer model run` reports failed local checks and failed, timed-out or cancelled Gateway checks as failures even when partial text arrived. [#167874](https://github.com/openclaw/openclaw/pull/167874). Thanks to [ly85206559](https://github.com/ly85206559) and [steipete](https://github.com/steipete).
  - Default Codex chats can use a ChatGPT-signed-in model listed by your account even if it is not yet in OpenClaw's built-in model list. [#168033](https://github.com/openclaw/openclaw/pull/168033). Thanks to [obviyus](https://github.com/obviyus).
  - Refresh LM Studio models with `openclaw models list --provider lmstudio --refresh`. Merge mode preserves configured rows and metadata; explicit replace mode keeps only configured models. [#168039](https://github.com/openclaw/openclaw/pull/168039), [#150262](https://github.com/openclaw/openclaw/issues/150262). Thanks to [steipete](https://github.com/steipete) and reporter [jb-lopez](https://github.com/jb-lopez).
  - LM Studio models get more time for a cold start, and a failed capacity upgrade now gives recovery guidance. You can adjust the timeout using the [LM Studio guide](/providers/lmstudio). [#168044](https://github.com/openclaw/openclaw/pull/168044), [#141357](https://github.com/openclaw/openclaw/issues/141357). Thanks to [steipete](https://github.com/steipete).
  - New Ollama chat choices leave out models meant only for embeddings. If you already saved one or a memory model is missing, the error explains how to choose or download the right model. Re-onboarding replaces your provider list, so save custom entries first ([#168075](https://github.com/openclaw/openclaw/pull/168075)). Thanks [@steipete](https://github.com/steipete).
  - Honor selected llama.cpp model aliases and profile-qualified references, and report credential-save failures during existing-server setup ([#168232](https://github.com/openclaw/openclaw/pull/168232)). Thanks [@steipete](https://github.com/steipete).
  - Refresh loaded llama.cpp router models with verified context limits and tool support while preserving explicit pins ([#168309](https://github.com/openclaw/openclaw/pull/168309), [#139802](https://github.com/openclaw/openclaw/issues/139802)). Thanks [@steipete](https://github.com/steipete) and reporter [@guarismo](https://github.com/guarismo).
  - Show a healthy managed llama.cpp embedding server as ready even when its optional metrics endpoint is unavailable ([#168204](https://github.com/openclaw/openclaw/pull/168204)). Thanks [@steipete](https://github.com/steipete).
  - When you remove a configured provider with its own URL, its matching models disappear from the live picker. Models left by earlier removals are not cleaned up automatically. [#168724](https://github.com/openclaw/openclaw/pull/168724). Thanks to [@obviyus](https://github.com/obviyus).
  - Reduce synchronous work in personal model lists after a model configuration reload. [#168733](https://github.com/openclaw/openclaw/pull/168733). Thanks to [@steipete](https://github.com/steipete).
  - Show account-listed OpenCode Zen models even when public metadata is missing, and explain client-restricted free-tier refusals without placing the shared credential in cooldown. Listing a model does not guarantee access. [#168601](https://github.com/openclaw/openclaw/pull/168601). Thanks to [@obviyus](https://github.com/obviyus).
  - Choose an advertised GitHub Copilot model API when endpoint paths have a version prefix or trailing slash. [#168672](https://github.com/openclaw/openclaw/pull/168672). Thanks to [@RomneyDa](https://github.com/RomneyDa).
  - Scheduled and chat turns no longer fail just because their model list updated during startup. [#168410](https://github.com/openclaw/openclaw/pull/168410). Thanks to [@RomneyDa](https://github.com/RomneyDa).
  - Repair configurations using the `https://ollama.com` origin with `openclaw doctor --fix` or update repair, including saved session and scheduled-job routes ([#168782](https://github.com/openclaw/openclaw/pull/168782)). Thanks [@obviyus](https://github.com/obviyus).
  - Preserve fallback eligibility and later default changes when selecting the agent's effective default model ([#169030](https://github.com/openclaw/openclaw/pull/169030)). Thanks [@steipete](https://github.com/steipete).
  - Identify enabled external official Codex plugins older than 2026.9.7 before registration and show repair guidance. Plugin update failures also show their reason ([#168930](https://github.com/openclaw/openclaw/pull/168930)). Thanks [@steipete](https://github.com/steipete). Thanks [@ezimerman](https://github.com/ezimerman) and [@ADLBAS26](https://github.com/ADLBAS26) for the reports. For an official npm installation, run `openclaw update repair` or `openclaw plugins update codex` and restart the Gateway. For a linked-source installation, update the source or remove the load-path override.
  - Reduce model availability lookup work for large native catalogs and the model picker ([#169048](https://github.com/openclaw/openclaw/pull/169048)). Thanks [@steipete](https://github.com/steipete).
  - Fresh setup checks available inference options and activates a verified model, while keeping an existing configured model. Codex access can use a shared home or a separate login. [#169628](https://github.com/openclaw/openclaw/pull/169628) Thanks [@steipete](https://github.com/steipete).
  - AI choices can appear sooner during macOS, Control UI and CLI setup. [#169562](https://github.com/openclaw/openclaw/pull/169562) Thanks [@steipete](https://github.com/steipete).
  - If model discovery fails, the picker now shows the reported error beside Retry and keeps your saved choices available. [#169316](https://github.com/openclaw/openclaw/pull/169316) Thanks [@steipete](https://github.com/steipete).
  - Keep model browsing available while a refreshed catalog replaces the old one, without a brief picker failure. [#169478](https://github.com/openclaw/openclaw/pull/169478) Thanks [@obviyus](https://github.com/obviyus).
  - Show more of your configured fallback models and tell you how many will be removed before clearing the chain. [#169511](https://github.com/openclaw/openclaw/pull/169511) Thanks [@obviyus](https://github.com/obviyus).
  - Fixes a model supplied by an installed plugin failing when you open its session outside that agent's workspace. [#169539](https://github.com/openclaw/openclaw/pull/169539), [issue #169205](https://github.com/openclaw/openclaw/issues/169205). Thanks [@ericcaiwx-star](https://github.com/ericcaiwx-star), [@steipete](https://github.com/steipete) and [@AVCarp](https://github.com/AVCarp).
  - Restores the requested configuration for installed native ESM provider plugins after a failed catalog refresh. [#169321](https://github.com/openclaw/openclaw/pull/169321), [related #169272](https://github.com/openclaw/openclaw/pull/169272). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - If a model-list change refuses a request before the turn starts, tell the client that it is safe to retry. [#169623](https://github.com/openclaw/openclaw/pull/169623) Thanks [@steipete](https://github.com/steipete).
  - Fixes switching to an OpenAI model without the Codex plugin when the built-in runtime can serve it. An explicit Codex runtime selection still requires the plugin. [#169412](https://github.com/openclaw/openclaw/pull/169412) Thanks [@obviyus](https://github.com/obviyus).
  - If a successfully queried Ollama, LM Studio or supported OpenAI-compatible server does not list a model you configured, model diagnostics now suggest checking its name or downloading it. An offline server cannot confirm this, and custom models remain selectable. [PR #169708](https://github.com/openclaw/openclaw/pull/169708), [issue #39811](https://github.com/openclaw/openclaw/issues/39811). Thanks to [steipete](https://github.com/steipete), [LindalyX-Lee](https://github.com/LindalyX-Lee), [dsantoreis](https://github.com/dsantoreis) and [exisz](https://github.com/exisz).
  - A healthy agent keeps its commands and model choices during a reload even if another agent's model provider is unavailable. [#170805](https://github.com/openclaw/openclaw/pull/170805), thanks to [@steipete](https://github.com/steipete).
  - Models with invalid pricing are skipped with a warning while valid siblings remain available. [#170882](https://github.com/openclaw/openclaw/pull/170882), related to [#170458](https://github.com/openclaw/openclaw/issues/170458). Thanks [@steipete](https://github.com/steipete).
  - Managed Codex version checks avoid a pipe race that could leave Doctor without JSON output. [#171248](https://github.com/openclaw/openclaw/pull/171248), reported in [#171169](https://github.com/openclaw/openclaw/issues/171169). Thanks [@steipete](https://github.com/steipete), [@dtump](https://github.com/dtump), and [@joshpetras](https://github.com/joshpetras).
  - The NVIDIA guide shows how to pair a text-only Nemotron primary model with a separate Super VL image-understanding model. [#171072](https://github.com/openclaw/openclaw/pull/171072). Thanks [@jacobtomlinson](https://github.com/jacobtomlinson) for confirming the model reference.
  - Removed unavailable bundled models and updated Cerebras, Together, DeepInfra and OpenCode defaults. The retired Groq model's oversized-request retry was also removed. [#171879](https://github.com/openclaw/openclaw/pull/171879), with related [hosted catalog work](https://github.com/openclaw/openclaw/pull/167855) and [Doctor model-choice discussion](https://github.com/openclaw/openclaw/issues/169473). Thanks [@steipete](https://github.com/steipete).
  - Updated Google setup, Gemini aliases and model selection, including core Gemini 4 shorthand normalization. [#172339](https://github.com/openclaw/openclaw/pull/172339), following [Gemini 4 Argon support](https://github.com/openclaw/openclaw/pull/171852). Thanks [@steipete](https://github.com/steipete).
  - Set the default endpoint for key-only Qwen Coding Plan requests. [#172447](https://github.com/openclaw/openclaw/pull/172447). Thanks [@steipete](https://github.com/steipete).
  - NVIDIA setup and fallback choices now offer Nemotron 3.5 Super VL in place of Nemotron 3 Super, with its declared video input support. Nemotron 3 Ultra stays the default. [#172449](https://github.com/openclaw/openclaw/pull/172449). Thanks [@nv-kasikritc](https://github.com/nv-kasikritc) and [@jacobtomlinson](https://github.com/jacobtomlinson).
  - Moved Kimi K3 immediately after GPT-6 Luna in the recommended-model list. [#172461](https://github.com/openclaw/openclaw/pull/172461). Thanks [@obviyus](https://github.com/obviyus).
  - Reduced repeated readiness work when listing large native model catalogs. [#172311](https://github.com/openclaw/openclaw/pull/172311). Thanks [@steipete](https://github.com/steipete).
  - Model choices for other agents stay visible in the Control UI when one agent's catalog changes. [#172418](https://github.com/openclaw/openclaw/pull/172418). Thanks [@steipete](https://github.com/steipete).
  - Added explicit Imagine Image 2.0 selection and errors for unknown bare image-model overrides. [#172445](https://github.com/openclaw/openclaw/pull/172445). Thanks [@steipete](https://github.com/steipete) and [@JFLeonM](https://github.com/JFLeonM) for [the report](https://github.com/openclaw/openclaw/issues/141547).

  </details>

- Fixes supported provider routes rejecting otherwise valid tool history, settings or follow-up turns. The affected routes keep their own model and account limits.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - OpenAI and Azure Responses output requests respect declared model limits. [PR #128282](https://github.com/openclaw/openclaw/pull/128282), [issue #127560](https://github.com/openclaw/openclaw/issues/127560). Thanks to [parker-fawcett](https://github.com/parker-fawcett) and [obviyus](https://github.com/obviyus), with the report from [steipete](https://github.com/steipete).
  - A conversation that used tools can continue on a managed Chat Completions model without tool support; earlier tool activity is passed along as text, not executable calls. [PR #148106](https://github.com/openclaw/openclaw/pull/148106). Thanks to [jimmy00415](https://github.com/jimmy00415) and [steipete](https://github.com/steipete).
  - Keep provider-specific request settings when a plugin hook replaces the outgoing request, whether the hook finishes immediately or later. [PR #160567](https://github.com/openclaw/openclaw/pull/160567). Thanks to [YangManBOBO](https://github.com/YangManBOBO) and [obviyus](https://github.com/obviyus).
  - Send runtime context to compatible Responses servers using a user-role message they can accept. [#168546](https://github.com/openclaw/openclaw/pull/168546), [issue #164791](https://github.com/openclaw/openclaw/issues/164791), [provider roles guide](/concepts/context#runtime-context-and-provider-roles). Thanks to [@steipete](https://github.com/steipete) and [@flanker-stack](https://github.com/flanker-stack) for the report and investigation.
  - Let a model request try IPv6 if IPv4 fails when Node's address-family selection is enabled ([#168973](https://github.com/openclaw/openclaw/pull/168973)). Thanks [@steipete](https://github.com/steipete), [@an2in](https://github.com/an2in), [@georgenaz](https://github.com/georgenaz), [@motookoyama](https://github.com/motookoyama), and [@orthogonalistic](https://github.com/orthogonalistic).
  - If you enable cache-age-based history trimming, apply it to eligible OpenRouter Grok and Gemini 2.5/3 conversations too. It remains off by default for them. [#169548](https://github.com/openclaw/openclaw/pull/169548), [issue #169133](https://github.com/openclaw/openclaw/issues/169133). Thanks [@RomneyDa](https://github.com/RomneyDa) and [@gregb100](https://github.com/gregb100).
  - Responses tool continuations and transcript reloads avoid spurious assistant-history mismatch warnings. [#170901](https://github.com/openclaw/openclaw/pull/170901). Thanks [@steipete](https://github.com/steipete).
  - Corrected Groq Qwen thinking and reasoning output, and marked the Groq and Cohere models as text-only. [#171914](https://github.com/openclaw/openclaw/pull/171914). Thanks [@steipete](https://github.com/steipete).
  - Fixes Ollama requests failing when OpenClaw runs as an in-process Gateway from source. [#172013](https://github.com/openclaw/openclaw/pull/172013). Thanks [@steipete](https://github.com/steipete).
  - Reduced repeated Ultrafast rejections within a run while retaining the saved preference. [#172315](https://github.com/openclaw/openclaw/pull/172315), following [tier selection work](https://github.com/openclaw/openclaw/pull/165990). Thanks [@steipete](https://github.com/steipete).
  - Fixed thinking-off requests for Baseten DeepSeek V4 Pro 0813. [#172330](https://github.com/openclaw/openclaw/pull/172330). Thanks [@steipete](https://github.com/steipete).
  - Preserved OpenAI Responses reasoning prefixes across session reopen and completed async calls across interrupted streams. [#172455](https://github.com/openclaw/openclaw/pull/172455). Thanks [@steipete](https://github.com/steipete).
  - Fixes Moonshot and Kimi rejecting some MCP tool definitions that omit a supported type in a choice of input shapes. [#172478](https://github.com/openclaw/openclaw/pull/172478). Thanks [@steipete](https://github.com/steipete) and [@rmoskal](https://github.com/rmoskal) for [the report](https://github.com/openclaw/openclaw/issues/113130).

  </details>

- [Claude ACP sessions](/tools/acp-agents) now use an updated Claude Code binary that adds a remediation for the brotli decoder vulnerability.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - The Claude ACP adapter is updated to 0.95.0, with Claude Agent SDK 0.3.309 and the corrected decoder. [#182664](https://github.com/openclaw/openclaw/pull/182664). Thanks [@VACInc](https://github.com/VACInc).

  </details>

- Adding a working [model provider](/concepts/model-providers/control-ui-and-keys#configure-providers-in-the-control-ui) no longer shows another provider's discovery failure as a problem with the key you just saved. Discovery warnings name the unavailable provider when it is known.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  [#188541](https://github.com/openclaw/openclaw/pull/188541). Thanks [@obviyus](https://github.com/obviyus).

  </details>

- Fixes API-key setup for a new agent failing when its database is created during setup.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  [#175656](https://github.com/openclaw/openclaw/pull/175656), adapted for the release in [#188842](https://github.com/openclaw/openclaw/pull/188842). Thanks [@steipete](https://github.com/steipete) for the original repair and [@RomneyDa](https://github.com/RomneyDa) for the adaptation.

  </details>

- Fixes local ONNX model checks hanging on a pipe used as a model file or manifest; ordinary files and links to them still work.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - ONNX verification rejects pipe-backed manifests and model artifacts without hanging. Regular files and links to them remain supported. [#183621](https://github.com/openclaw/openclaw/pull/183621) Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@obviyus](https://github.com/obviyus).

  </details>

- Fixes a pinned Codex conversation failing before its next turn starts.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Restore turn preparation for pinned native Codex sessions after their writer is claimed ([#169101](https://github.com/openclaw/openclaw/pull/169101)). Thanks [@RomneyDa](https://github.com/RomneyDa).

  </details>

- Fixes reasoning-capable utility models returning no visible title, observer digest or recap when their output budget was too small.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Gives reasoning-capable utility models room to produce visible titles, observer digests and recaps within the configured and model limits. [#169331](https://github.com/openclaw/openclaw/pull/169331), [issue #153391](https://github.com/openclaw/openclaw/issues/153391). Thanks [@steipete](https://github.com/steipete), [@dwalthour](https://github.com/dwalthour), [@Alix-007](https://github.com/Alix-007) and [@obviyus](https://github.com/obviyus).

  </details>

- A history-free run that reaches its output limit now stops rather than sending the same request again.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - History-free runs stop at an output limit without replaying their request, and model-call logs carry correlated timing and completion information. [#170981](https://github.com/openclaw/openclaw/pull/170981), following [#161082](https://github.com/openclaw/openclaw/pull/161082). Thanks [@steipete](https://github.com/steipete).

  </details>

- Shortening a conversation now keeps each tool result paired with the call that produced it.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Preparation diagnostics distinguish request encoding without exposing prompt content, and context-engine input and output keep tool calls paired within the history limit. [#170830](https://github.com/openclaw/openclaw/pull/170830), thanks to [@steipete](https://github.com/steipete).

  </details>

### Tools, browsing and permissions

- If someone's access to a shared session is revoked while a tool is waiting, that pending tool checks access again before it runs. A dashboard save admitted before revocation may still finish.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Check current membership before a pending tool executes. [#170539](https://github.com/openclaw/openclaw/pull/170539) Thanks [@steipete](https://github.com/steipete).
  - Save dashboards backed by another database without blocking the Gateway during the write, after checking access to the source session. [#170541](https://github.com/openclaw/openclaw/pull/170541) Thanks [@steipete](https://github.com/steipete).

  </details>

- A plugin can no longer change the arguments of a trusted-approved inline tool call under the original approval. Its changed call needs separate approval, so plugins that rewrite those calls may need an update; other file and tool fixes here cover specific invalid inputs, not every permission path.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Require separate approval when a plugin changes the arguments of a trusted-approved inline tool call. Transforming plugins must request approval for their final arguments, or the call stops. This applies to the inline path, not every deferred approval route, [#142700](https://github.com/openclaw/openclaw/pull/142700) and [reported issue](https://github.com/openclaw/openclaw/issues/152465). Thanks to [giodl73-repo](https://github.com/giodl73-repo) and [giodl73](https://github.com/giodl73).
  - Bounded thinking allowance for exec approval reviewers, [#150200](https://github.com/openclaw/openclaw/pull/150200). Thanks to [leapdragon](https://github.com/leapdragon) and [steipete](https://github.com/steipete).
  - Preserve valid union values during argument repair, [#158974](https://github.com/openclaw/openclaw/pull/158974). Thanks to [Shenrui-Ma](https://github.com/Shenrui-Ma) and [steipete](https://github.com/steipete).
  - Keep tools available when literal schema examples or defaults contain dynamic-reference keys, [#160542](https://github.com/openclaw/openclaw/pull/160542). Thanks to [Shenrui-Ma](https://github.com/Shenrui-Ma).
  - Keep deeply nested tool schemas callable with a 128-level validation boundary, [#164836](https://github.com/openclaw/openclaw/pull/164836), with reports [#141306](https://github.com/openclaw/openclaw/issues/141306), [#153700](https://github.com/openclaw/openclaw/issues/153700), [#153701](https://github.com/openclaw/openclaw/issues/153701), [#153713](https://github.com/openclaw/openclaw/issues/153713) and [#153743](https://github.com/openclaw/openclaw/issues/153743). Thanks to [RXQ6](https://github.com/RXQ6), [qxr666-sga](https://github.com/qxr666-sga) and [steipete](https://github.com/steipete).
  - Reject overlapping agent edit and Skill Workshop patch matches, [#168125](https://github.com/openclaw/openclaw/pull/168125). Thanks to [yetval](https://github.com/yetval).
  - Generic agent node invocations cannot bypass a denied browser tool through browser proxy commands. [#179880](https://github.com/openclaw/openclaw/pull/179880). Thanks [@eleqtrizit](https://github.com/eleqtrizit).
  - Unsafe `test` and `[` predicates no longer pass automatically as safe builtins in POSIX exec allowlist mode. [#180880](https://github.com/openclaw/openclaw/pull/180880). Thanks [@eleqtrizit](https://github.com/eleqtrizit).
  - Reject malformed UTF-8 secrets plans before applying them, [#167379](https://github.com/openclaw/openclaw/pull/167379). Thanks to [Alix-007](https://github.com/Alix-007) and [steipete](https://github.com/steipete).
  - Prevent redundant preparation of existing stores from revoking an active tool caller's authority in [#170658](https://github.com/openclaw/openclaw/pull/170658). Thanks [@steipete](https://github.com/steipete).
  - `agent --message-file` now reads the exact path you typed, including spaces at its ends, rather than a nearby file. Only an exact `-` selects stdin for `agent exec`. [PR #171585](https://github.com/openclaw/openclaw/pull/171585). Thanks [Alix-007](https://github.com/Alix-007) and [steipete](https://github.com/steipete).
  - Browser fill now rejects a pipe or other special file as input instead of hanging; regular files and links to them still work. [#183420](https://github.com/openclaw/openclaw/pull/183420). Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@steipete](https://github.com/steipete).
  - Completion installation and profile inspection reject pipes and other special-file profiles instead of hanging. [#181763](https://github.com/openclaw/openclaw/pull/181763). Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@steipete](https://github.com/steipete).
  - Keep the transcript-reading tool available on turns without a caller, while still checking who may use it ([commit](https://github.com/openclaw/openclaw/commit/d499b183f2938c5ad3b3f6f0c79402863ee695c5)).
  - A multi-file `apply_patch` now catches predictable patch mismatches before writing to any of its files. [PR #160409](https://github.com/openclaw/openclaw/pull/160409), [issues #117742](https://github.com/openclaw/openclaw/issues/117742) and [#127496](https://github.com/openclaw/openclaw/issues/127496). Thanks to [masatohoshino](https://github.com/masatohoshino) and [obviyus](https://github.com/obviyus), with reports from [yetval](https://github.com/yetval) and [steipete](https://github.com/steipete).
  - Denied filesystem glob checks in the experimental opt-in Codex sandbox avoid stalling the Gateway on crafted patterns. [#167296](https://github.com/openclaw/openclaw/pull/167296), [#166684](https://github.com/openclaw/openclaw/issues/166684). Thanks to [xialonglee](https://github.com/xialonglee) and [Takhoffman](https://github.com/Takhoffman).
  - When workspace-only file access is disabled, accept active session workspace images in Codex steering and reject sibling or shared workspace images in the covered cases. [#181528](https://github.com/openclaw/openclaw/pull/181528) Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Recheck a plain host assertion before embedded prompt submission when the host may have become inactive in [1fe1e63](https://github.com/openclaw/openclaw/commit/1fe1e63fe00d3cdb8da09920146cf273b8b4e2f8).
  - The runtime runs on the Gateway host and refuses policies it cannot enforce. [#170487](https://github.com/openclaw/openclaw/pull/170487), thanks to [@obviyus](https://github.com/obviyus).
  - Set `plugins.entries.agentsapi.config.forwarding.gatewayTools` or `forwarding.mcpServers` to `false` to disable the corresponding forwarding path. [#170728](https://github.com/openclaw/openclaw/pull/170728), thanks to [@steipete](https://github.com/steipete).

  </details>

- [Code Mode](/tools/code-mode/quickstart) can use browser observations and gives more useful errors when a wait, command or worker fails. Check whether an action already happened before retrying a failed wait.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Wrapped Browser observations and snapshot references in Code Mode, [#164833](https://github.com/openclaw/openclaw/pull/164833) and [#164641](https://github.com/openclaw/openclaw/issues/164641). Thanks to [alkor2000](https://github.com/alkor2000) and reporter [potterdigital](https://github.com/potterdigital).
  - Recovery guidance for invalid Code Mode waits, [#128886](https://github.com/openclaw/openclaw/pull/128886), [#128859](https://github.com/openclaw/openclaw/issues/128859) and [#167610](https://github.com/openclaw/openclaw/issues/167610). Thanks to [sashankh](https://github.com/sashankh), [steipete](https://github.com/steipete), [VACInc](https://github.com/VACInc), [shad0wca7](https://github.com/shad0wca7), [potterdigital](https://github.com/potterdigital) and [benprotzekmuntoni](https://github.com/benprotzekmuntoni).
  - Enabled-tool guidance when Code Mode rejects module access, [#158716](https://github.com/openclaw/openclaw/pull/158716) and [#158675](https://github.com/openclaw/openclaw/issues/158675). Thanks to [sxh313](https://github.com/sxh313), [pennymolt](https://github.com/pennymolt) and [VACInc](https://github.com/VACInc).
  - Reuse prepared catalog data across repeated Node Code Mode calls in [#169045](https://github.com/openclaw/openclaw/pull/169045). Thanks [@steipete](https://github.com/steipete).
  - Release closed-database metadata that could exhaust Code Mode worker memory in [#169956](https://github.com/openclaw/openclaw/pull/169956). Thanks [@steipete](https://github.com/steipete).
  - Keep control tool declarations stable across catalog changes in [#170282](https://github.com/openclaw/openclaw/pull/170282), addressing [#170233](https://github.com/openclaw/openclaw/issues/170233). Thanks [@steipete](https://github.com/steipete) and reporter [@imadal1n](https://github.com/imadal1n).
  - Give invalid shell commands and Node worker memory exhaustion more useful errors in [#170947](https://github.com/openclaw/openclaw/pull/170947). Thanks [@steipete](https://github.com/steipete).
  - When Code Mode runs out of worker memory, it now reports a bounded amount of captured output and attempts recovery instead of hanging or losing the whole result. [PR #172134](https://github.com/openclaw/openclaw/pull/172134). Thanks [steipete](https://github.com/steipete).
  - Retirement of workers making frequent major collections near their heap limit, including when individual collections are cheap. [PR #172552](https://github.com/openclaw/openclaw/pull/172552). Thanks [steipete](https://github.com/steipete).
  - Per-worker GC and heap metrics use up to 64 reusable worker slots, with script-level attribution for overflow. [PR #172486](https://github.com/openclaw/openclaw/pull/172486). Thanks [steipete](https://github.com/steipete).
  - Node Code Mode leaves collection timing to V8 instead of forcing idle inspector collections between or during cells. [PR #172284](https://github.com/openclaw/openclaw/pull/172284). Thanks [steipete](https://github.com/steipete).
  - Healthy Node workers can be reused after settled validation, guest, and bridge failures without retaining failed-cell globals. [PR #172305](https://github.com/openclaw/openclaw/pull/172305). Thanks [steipete](https://github.com/steipete).
  - A pending Code Mode command or wait can still be found for recovery after a nested tool call finishes, subject to the usual deadlines. [PR #171570](https://github.com/openclaw/openclaw/pull/171570), [issue #171366](https://github.com/openclaw/openclaw/issues/171366). Thanks [steipete](https://github.com/steipete) and reporter [davidcittadini](https://github.com/davidcittadini).
  - Code Mode now distinguishes an error that stopped the code from a tool result reporting failure, and reminds you to check effects before retrying. [PR #171815](https://github.com/openclaw/openclaw/pull/171815). Thanks [vincentkoc](https://github.com/vincentkoc).
  - Truncated syntax feedback preserves Unicode characters at the clipping boundary. [PR #176230](https://github.com/openclaw/openclaw/pull/176230). Thanks [hugenshen](https://github.com/hugenshen) and [obviyus](https://github.com/obviyus).
  - Suspended Code Mode runs expire according to elapsed time even when the system clock changes. [#180599](https://github.com/openclaw/openclaw/pull/180599). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@steipete](https://github.com/steipete).
  - Concurrent large shell analyses release parser memory sooner. [#183312](https://github.com/openclaw/openclaw/pull/183312). Thanks [@steipete](https://github.com/steipete).
  - Missing-subcommand JSON errors ([#184128](https://github.com/openclaw/openclaw/pull/184128)). Thanks [@Leon-SK668](https://github.com/Leon-SK668).
  - Preserve cleanup uncertainty in buffered command results ([#187271](https://github.com/openclaw/openclaw/pull/187271), backport of [#184270](https://github.com/openclaw/openclaw/pull/184270), addressing [#184237](https://github.com/openclaw/openclaw/issues/184237)). Thanks [@RomneyDa](https://github.com/RomneyDa) and [@shakkernerd](https://github.com/shakkernerd).

  </details>

- An MCP agent now releases computer control when its run ends, so the session no longer keeps that control open. Recording and file transfer remain restricted on this path.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - MCP computer control follows the agent run and is released at its end. Recording and file transfer remain restricted on this path, [#151127](https://github.com/openclaw/openclaw/pull/151127) and [#147420](https://github.com/openclaw/openclaw/issues/147420). Thanks to [ylcn91](https://github.com/ylcn91), [steipete](https://github.com/steipete), [vovarbv](https://github.com/vovarbv), [ghbalf](https://github.com/ghbalf) and [aleps001](https://github.com/aleps001).

  </details>

- The [browser panel](/web/control-ui/panels#browser-panel) now shows when a browser is starting and offers Retry if startup fails. Scrolling and slow-page handling improve too; on supported headless Chromium, a new modal passkey request is dismissed so you can choose another sign-in method. Actual passkey sign-in still needs a headed browser, and a prompt already stuck before connection may require reloading the page.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Cancel stalled browser navigation checks so profile stop can finish, [#154246](https://github.com/openclaw/openclaw/pull/154246) and related [#141853](https://github.com/openclaw/openclaw/issues/141853). Thanks to [LLagoon3](https://github.com/LLagoon3), [obviyus](https://github.com/obviyus) and reporter [Ewo8om3](https://github.com/Ewo8om3).
  - Pen scrolling in the Browser panel, [#158124](https://github.com/openclaw/openclaw/pull/158124). Thanks to [Oldrich333](https://github.com/Oldrich333) and [altaywtf](https://github.com/altaywtf).
  - Browser Use remote CDP setup example in the [remote browser guide](/tools/browser/remote), [#124188](https://github.com/openclaw/openclaw/pull/124188). Thanks to [MagMueller](https://github.com/MagMueller) and [vincentkoc](https://github.com/vincentkoc).
  - Private browser handoff for dashboard and onboarding pairing in [#170289](https://github.com/openclaw/openclaw/pull/170289). Thanks [@eleqtrizit](https://github.com/eleqtrizit).
  - Browser startup progress, errors and retry in the Control UI in [#169215](https://github.com/openclaw/openclaw/pull/169215). Thanks [@steipete](https://github.com/steipete).
  - Native computer-control session renewal after expiry in [#169385](https://github.com/openclaw/openclaw/pull/169385), addressing [#169353](https://github.com/openclaw/openclaw/issues/169353). Thanks [@stackingrockss](https://github.com/stackingrockss) and [@steipete](https://github.com/steipete).
  - A browser tab opened through Playwright now respects your timeout up to 120 seconds; a tab safely opened before page loading timed out can remain available in [#170053](https://github.com/openclaw/openclaw/pull/170053), addressing [#169944](https://github.com/openclaw/openclaw/issues/169944). Thanks [@wr-web](https://github.com/wr-web), [@steipete](https://github.com/steipete) and reporter [@aleps001](https://github.com/aleps001).
  - Cancelling an in-progress browser open closes its new tab while leaving existing tabs open in [#170931](https://github.com/openclaw/openclaw/pull/170931). Thanks [@steipete](https://github.com/steipete).
  - Modal passkey requests no longer block other sign-in methods in managed headless Chromium in [#170857](https://github.com/openclaw/openclaw/pull/170857), related to [#170856](https://github.com/openclaw/openclaw/issues/170856). Thanks [@trukhinyuri](https://github.com/trukhinyuri) and [@steipete](https://github.com/steipete).
  - Pointer-targeted wheel and touch scrolling in nested Browser panel panes, with scrolling passed to an eligible parent at the edge. [PR #171215](https://github.com/openclaw/openclaw/pull/171215), [issue #171108](https://github.com/openclaw/openclaw/issues/171108). Thanks [wr-web](https://github.com/wr-web), [obviyus](https://github.com/obviyus), and reporter [DarkJuanFra](https://github.com/DarkJuanFra).
  - Wheel scrolling for reversed vertical and horizontal lists in left-to-right and right-to-left layouts. [PR #171702](https://github.com/openclaw/openclaw/pull/171702). Thanks [steipete](https://github.com/steipete).
  - Chrome relay keeps your cache, header and service-worker bypass settings as you navigate an allowed page, without falsely reporting revoked access. [PR #173486](https://github.com/openclaw/openclaw/pull/173486), [issue #173453](https://github.com/openclaw/openclaw/issues/173453). Thanks [LiuwqGit](https://github.com/LiuwqGit), [steipete](https://github.com/steipete), and reporter [ValantisV](https://github.com/ValantisV).
  - Browser proxy deadlines during clock changes ([#185753](https://github.com/openclaw/openclaw/pull/185753)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@obviyus](https://github.com/obviyus).
  - Invalid browser action inputs return a JSON error and exit with status 1 when JSON output is requested. [#180797](https://github.com/openclaw/openclaw/pull/180797). Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@obviyus](https://github.com/obviyus).
  - Invalid browser tab indexes also return a structured JSON error before the action is sent. [#183603](https://github.com/openclaw/openclaw/pull/183603). Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@obviyus](https://github.com/obviyus).

  </details>

- [Web fetch](/tools/web-fetch) now keeps more numbers, code examples, headings and list boundaries intact, so retrieved pages are less likely to arrive garbled. It also excludes a recognized form of visually hidden text.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Decode UTF-8 pages and feeds with false UTF-16 metadata when no byte-order mark or HTTP charset overrides it, [#168115](https://github.com/openclaw/openclaw/pull/168115). Thanks to [yetval](https://github.com/yetval) and [obviyus](https://github.com/obviyus).
  - Preserve numeric values in fetched JSON in [#170123](https://github.com/openclaw/openclaw/pull/170123). Thanks [@ly85206559](https://github.com/ly85206559) and [@obviyus](https://github.com/obviyus).
  - Fetched Markdown now keeps code text intact even if the page ends before its code block closes. [PR #171221](https://github.com/openclaw/openclaw/pull/171221). Thanks [ly85206559](https://github.com/ly85206559).
  - Fetched pages now separate headings, paragraphs and list items instead of running them together. [#178569](https://github.com/openclaw/openclaw/pull/178569), [issue #178499](https://github.com/openclaw/openclaw/issues/178499). Thanks [@HeZ2z](https://github.com/HeZ2z) and [@steipete](https://github.com/steipete), and [@yetval](https://github.com/yetval) for reporting the issue.
  - Basic HTML extraction separates definition-list terms and values in text and Markdown. [#180557](https://github.com/openclaw/openclaw/pull/180557). Thanks [@AmelioMansour](https://github.com/AmelioMansour) and [@steipete](https://github.com/steipete).
  - Fetched text keeps readable link labels without fragments of unusual link destinations. [#180605](https://github.com/openclaw/openclaw/pull/180605). Thanks [@AmelioMansour](https://github.com/AmelioMansour) and [@steipete](https://github.com/steipete).
  - HTML extraction preserves boundaries around more blocks, including quotes, captions, and navigation. [#181740](https://github.com/openclaw/openclaw/pull/181740), related [issue #176244](https://github.com/openclaw/openclaw/issues/176244). Thanks [@l4xb](https://github.com/l4xb) and [@steipete](https://github.com/steipete), and [@yetval](https://github.com/yetval) for the related report.
  - Web fetch excludes text hidden by recognized zero-X or zero-Y inline scale transforms. [#181785](https://github.com/openclaw/openclaw/pull/181785), [issue #105438](https://github.com/openclaw/openclaw/issues/105438). Thanks [@Jimmy-xuzimo](https://github.com/Jimmy-xuzimo) and [@obviyus](https://github.com/obviyus), and [@aniruddhaadak80](https://github.com/aniruddhaadak80) for reporting the issue.

  </details>

- [Web search](/tools/web) now honors more of your chosen provider settings, result counts and timeouts, and gives clearer errors when a search fails.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Preserve managed search timeout diagnostics in [#170372](https://github.com/openclaw/openclaw/pull/170372), addressing [#169972](https://github.com/openclaw/openclaw/issues/169972). Thanks [@xiajiahang](https://github.com/xiajiahang), [@steipete](https://github.com/steipete) and reporter [@letsc4](https://github.com/letsc4). See the [web tools guide](/tools/web).
  - Configured search provider names validate regardless of letter case. [#177836](https://github.com/openclaw/openclaw/pull/177836). Thanks [@wangmiao0668000666](https://github.com/wangmiao0668000666) and [@obviyus](https://github.com/obviyus).
  - A long snippet in an early search result no longer hides as many later result titles. [#179703](https://github.com/openclaw/openclaw/pull/179703). Thanks [@canvinus](https://github.com/canvinus) and [@obviyus](https://github.com/obviyus).
  - An enabled search plugin can now be chosen automatically when you have not pinned a search provider and its credentials are available. [#179781](https://github.com/openclaw/openclaw/pull/179781), [issue #179665](https://github.com/openclaw/openclaw/issues/179665). Thanks [@wr-web](https://github.com/wr-web) and [@obviyus](https://github.com/obviyus), and [@duardor968](https://github.com/duardor968) for reporting the issue.
  - Tavily, Firecrawl, Firecrawl-free, and DuckDuckGo respect configured search result limits and timeouts. An explicit result count takes precedence. [#180115](https://github.com/openclaw/openclaw/pull/180115), [issue #180062](https://github.com/openclaw/openclaw/issues/180062). Thanks [@mushuiyu886](https://github.com/mushuiyu886) and [@steipete](https://github.com/steipete), and [@yetval](https://github.com/yetval) for reporting the issue.
  - Invalid Exa and Parallel search endpoints no longer expose their configured values in errors shown to agents. [#182534](https://github.com/openclaw/openclaw/pull/182534). Thanks [@steipete](https://github.com/steipete).
  - Beam isolates unavailable mirror credentials and picks up restored credentials after a secrets reload. [#176510](https://github.com/openclaw/openclaw/pull/176510). Thanks [@steipete](https://github.com/steipete).
  - A native local Ollama agent can use permitted web search and fetch tools even without Tool Search configured. Search itself still needs a provider. [#169556](https://github.com/openclaw/openclaw/pull/169556), [issue #145137](https://github.com/openclaw/openclaw/issues/145137). Thanks [@steipete](https://github.com/steipete) and [@lator57-gif](https://github.com/lator57-gif).
  - Kimi search uses the replacement endpoint and supports a result count from one to ten. [#171835](https://github.com/openclaw/openclaw/pull/171835), thanks to [steipete](https://github.com/steipete) and [Glukmann](https://github.com/Glukmann) for [reporting the issue](https://github.com/openclaw/openclaw/issues/169072).

  </details>

- Terminal commands now preserve more exact path and argument values, and shell suggestions cover more options. If you use installed Bash or PowerShell completions, regenerate them to pick up the fixes.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Complete quoted PowerShell option choices, [#167421](https://github.com/openclaw/openclaw/pull/167421). Thanks to [LinzeShi](https://github.com/LinzeShi).
  - Reset the log cursor when the selected file path changes, [#150791](https://github.com/openclaw/openclaw/pull/150791) and [#150843](https://github.com/openclaw/openclaw/issues/150843). Thanks to [zhangguiping-xydt](https://github.com/zhangguiping-xydt) and [obviyus](https://github.com/obviyus).
  - Preserve Unicode joiners in exec and background process output, [#160403](https://github.com/openclaw/openclaw/pull/160403). Thanks to [Shenrui-Ma](https://github.com/Shenrui-Ma).
  - Avoid cold compile-cache writes delaying the exit of one-shot CLI commands in [#170684](https://github.com/openclaw/openclaw/pull/170684). Thanks [@steipete](https://github.com/steipete).
  - Fresh validated shell snapshots can be reused without another validation shell, and process diagnostics identify more helper launches. [PR #172310](https://github.com/openclaw/openclaw/pull/172310). Thanks [steipete](https://github.com/steipete).
  - Shell completion suggests accepted global flags after subcommands. Regenerate cached completion scripts with `openclaw completion --write-state` to pick up the suggestions. [PR #171571](https://github.com/openclaw/openclaw/pull/171571). Thanks [zhangguiping-xydt](https://github.com/zhangguiping-xydt) and [obviyus](https://github.com/obviyus).
  - Trajectory exports accept safe directory names beginning with two dots, such as `..diagnostics`. [PR #171609](https://github.com/openclaw/openclaw/pull/171609). Thanks [zhangguiping-xydt](https://github.com/zhangguiping-xydt) and [altaywtf](https://github.com/altaywtf).
  - Gateway SSH probes honor an explicitly specified port 22 even when the SSH alias specifies another port. [PR #171092](https://github.com/openclaw/openclaw/pull/171092), related [issue #127456](https://github.com/openclaw/openclaw/issues/127456). Thanks [zhangguiping-xydt](https://github.com/zhangguiping-xydt) and [obviyus](https://github.com/obviyus).
  - Bash completion keeps suggestions within the option value being entered. [#183778](https://github.com/openclaw/openclaw/pull/183778). Thanks [@LinzeShi](https://github.com/LinzeShi).
  - Preserve writer identity through CLI reply completion ([commit](https://github.com/openclaw/openclaw/commit/97e9b91f1f9413e32d31a8170dbafc8c9cfd7f3e)).
  - Separately installed ACPX can find the host bridges for enabled plugin and OpenClaw tools. The bridges remain opt-in. [#164272](https://github.com/openclaw/openclaw/pull/164272), [#164211](https://github.com/openclaw/openclaw/issues/164211). Thanks to [jayzhou2309](https://github.com/jayzhou2309), [obviyus](https://github.com/obviyus) and reporter [ajmtrz](https://github.com/ajmtrz).

  </details>

- Human-readable terminal reports now escape control characters in untrusted names and paths, making those reports safer to inspect. JSON and explicitly requested raw output may still contain the original characters.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Managed-worktree reports safely display control-bearing paths and names. [#181582](https://github.com/openclaw/openclaw/pull/181582). Thanks [@Alix-007](https://github.com/Alix-007) and [@steipete](https://github.com/steipete).
  - Model auth profile listings sanitize terminal controls in human-readable output. [#181584](https://github.com/openclaw/openclaw/pull/181584). Thanks [@Alix-007](https://github.com/Alix-007) and [@steipete](https://github.com/steipete).
  - DNS setup previews safely display control-bearing paths. [#181585](https://github.com/openclaw/openclaw/pull/181585). Thanks [@Alix-007](https://github.com/Alix-007) and [@steipete](https://github.com/steipete).
  - MCP registry reports and errors sanitize terminal controls in human-readable output. [#181587](https://github.com/openclaw/openclaw/pull/181587). Thanks [@Alix-007](https://github.com/Alix-007) and [@steipete](https://github.com/steipete).
  - Safe terminal rendering for readable environment values ([#184141](https://github.com/openclaw/openclaw/pull/184141)). Thanks [@Alix-007](https://github.com/Alix-007).
  - Gateway discovery reports escape control characters and line breaks from discovered beacons. [#183355](https://github.com/openclaw/openclaw/pull/183355) Thanks [@Alix-007](https://github.com/Alix-007) and [@steipete](https://github.com/steipete).
  - Storage list and initialization messages sanitize displayed locations. [#183359](https://github.com/openclaw/openclaw/pull/183359) Thanks [@Alix-007](https://github.com/Alix-007) and [@steipete](https://github.com/steipete).
  - Shell completion installation messages sanitize profile paths and suggest restarting the shell when a reload command would contain terminal controls. [#184120](https://github.com/openclaw/openclaw/pull/184120) Thanks [@alix-007](https://github.com/alix-007).
  - Session-list headers sanitize displayed store paths. [#184139](https://github.com/openclaw/openclaw/pull/184139) Thanks [@Alix-007](https://github.com/Alix-007).
  - Backup scheduling and record messages sanitize displayed paths and labels. [#184153](https://github.com/openclaw/openclaw/pull/184153) Thanks [@steipete](https://github.com/steipete) and [@Alix-007](https://github.com/Alix-007).

  - Sanitized paired-node camera metadata in the human-readable camera list. JSON retains the original values ([#175624](https://github.com/openclaw/openclaw/pull/175624)). Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@obviyus](https://github.com/obviyus).

  </details>

- After a background command, you can more reliably collect its actual result, including when a wait or cancellation fails. A running command is not a finished command, and a cancellation may still be cleaning up.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Wait recovery identifies resumable run IDs and, when the process tool is available and allowed, explains how to poll the original background shell session ([commit](https://github.com/openclaw/openclaw/commit/4d2255b5f901d33ac5900555f949e44f0d614eb5)).
  - Keep Codex and Agents API execution budgets steady when the system clock changes, [#155801](https://github.com/openclaw/openclaw/pull/155801). Thanks to [sunnyshu0925](https://github.com/sunnyshu0925) and [obviyus](https://github.com/obviyus).
  - Cancel a waiting CLI-backed turn without interrupting the active turn in [#169502](https://github.com/openclaw/openclaw/pull/169502). Thanks [@steipete](https://github.com/steipete).
  - Retry eligible queued background completions after a configuration change with current policy applied in [#169529](https://github.com/openclaw/openclaw/pull/169529), addressing [#169054](https://github.com/openclaw/openclaw/issues/169054). Thanks [@wangmiao0668000666](https://github.com/wangmiao0668000666), [@RomneyDa](https://github.com/RomneyDa) and reporter [@Oldrich333](https://github.com/Oldrich333).
  - If a background command cannot send a completion notification, tell the agent to poll its original session for the result in [#169645](https://github.com/openclaw/openclaw/pull/169645). Thanks [@steipete](https://github.com/steipete).
  - After cancelling a command, you can still retrieve a cleanup error once the run has settled. [PR #171708](https://github.com/openclaw/openclaw/pull/171708). Thanks [steipete](https://github.com/steipete).
  - Background process polling keeps its intended timeout when the system clock changes. [PR #173241](https://github.com/openclaw/openclaw/pull/173241). Thanks [wangmiao0668000666](https://github.com/wangmiao0668000666) and [obviyus](https://github.com/obviyus).
  - Delivered-turn settlement and history-confirmed Escape recovery in the TUI. [PR #171014](https://github.com/openclaw/openclaw/pull/171014), [issue #170974](https://github.com/openclaw/openclaw/issues/170974). Thanks [steipete](https://github.com/steipete) and reporter [KenYounge](https://github.com/KenYounge).
  - Interrupted CLI commands remove their plugin capture directories when signal cleanup completes. [PR #171162](https://github.com/openclaw/openclaw/pull/171162), [issue #170773](https://github.com/openclaw/openclaw/issues/170773). Thanks [steipete](https://github.com/steipete) and [rozenpl](https://github.com/rozenpl).
  - Fixes an immediate follow-up message being mistaken for a retry after you press Stop. [#172421](https://github.com/openclaw/openclaw/pull/172421). Thanks [@steipete](https://github.com/steipete).
  - Allowed a local follow-up while a stopped turn finishes cleanup when the destination remains unchanged. [#172458](https://github.com/openclaw/openclaw/pull/172458). Thanks [@shakkernerd](https://github.com/shakkernerd).

  </details>

- Workspace-restricted Gateway tools now require approval for affected delegated changes and reject local media outside allowed roots. Matching Google OAuth secrets are masked in console and log-tail output, but [raw local log files](/gateway/security/secrets-and-storage#logs-and-transcripts) can still contain credentials and need careful access.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Protect the active environment variable used by a whole-reference hook token from Gateway-hosted exec children, including across hook reloads ([#179199](https://github.com/openclaw/openclaw/pull/179199)). Thanks [@VACInc](https://github.com/VACInc). The broader credential-inheritance report came from [@nierob-cmd](https://github.com/nierob-cmd) ([#178368](https://github.com/openclaw/openclaw/issues/178368)).
  - Closing MCP Relay's Connected apps view releases its rendered grant rows and prevents detached controls or pending pairing replies from acting on the closed view. [#184213](https://github.com/openclaw/openclaw/pull/184213) Thanks [@steipete](https://github.com/steipete).
  - For workspace-restricted sessions, Gateway-built delegate tools now ask approval before persistent changes and reject media outside allowed roots even when a caller omitted the file policy. [#185094](https://github.com/openclaw/openclaw/pull/185094) Thanks [@eleqtrizit](https://github.com/eleqtrizit).
  - Security audit follows linked workspace skills roots when checking for nested symlink escapes. [#182384](https://github.com/openclaw/openclaw/pull/182384) Thanks [@steipete](https://github.com/steipete) and [@dineshsuthar123](https://github.com/dineshsuthar123) for the report.
  - Mask matching Google OAuth client secrets in console and log-tail output. Raw local file logs may still contain the secret. [#183193](https://github.com/openclaw/openclaw/pull/183193) Thanks [@leizhenzhang](https://github.com/leizhenzhang) and [@steipete](https://github.com/steipete). Thanks [@osher86](https://github.com/osher86) for the report.
  - Preserve workspace policy for Gateway-created delegate and media tools ([#187307](https://github.com/openclaw/openclaw/pull/187307)). Thanks to [@RomneyDa](https://github.com/RomneyDa) and [@eleqtrizit](https://github.com/eleqtrizit).
  - Local file logs now store raw values and WebSocket summaries omit text previews; direct reads of raw logs can expose credentials. This change is described in [#170023](https://github.com/openclaw/openclaw/pull/170023). Thanks [@steipete](https://github.com/steipete).

  </details>

- Authorized operators can still view and revoke standing grants on the Approvals page when its approval history fails to load, as long as the grants service is available.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Clarify expired and cancelled approvals and unconfirmed application of an approved setup change. [#172270](https://github.com/openclaw/openclaw/pull/172270). Thanks to [@steipete](https://github.com/steipete).
  - The Approvals page loads standing grants independently of approval history, so authorized operators can still see and revoke them. [#183769](https://github.com/openclaw/openclaw/pull/183769) Thanks [@AmelioMansour](https://github.com/AmelioMansour) and [@steipete](https://github.com/steipete).

  </details>

- Diagnostics exports now keep the destination you entered, including meaningful spaces, and patch views retain trailing whitespace and the final newline.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Preserve whitespace in nonblank, non-home destinations for Gateway diagnostics and stability exports ([#181775](https://github.com/openclaw/openclaw/pull/181775)). Thanks [@wangmiao0668000666](https://github.com/wangmiao0668000666) and [@steipete](https://github.com/steipete).
  - Preserve trailing whitespace and the final newline in Diffs patch viewers ([#181674](https://github.com/openclaw/openclaw/pull/181674)). Thanks [@ly85206559](https://github.com/ly85206559) and [@steipete](https://github.com/steipete).

  </details>

- Fixes OC Path failing to update YAML entries keyed by numbers, booleans or null while leaving neighboring entries unchanged. Very large patch hunks and affected Windows or Android storage paths also avoid specific file-operation failures.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Bun workspace helpers can run inline code without a false path-length error, while other workspace paths remain checked. [#171970](https://github.com/openclaw/openclaw/pull/171970) by [steipete](https://github.com/steipete).
  - OC Path can now edit YAML entries keyed by a number, boolean or null without changing adjacent entries. [#171957](https://github.com/openclaw/openclaw/pull/171957) by [steipete](https://github.com/steipete).
  - Update filesystem handling for affected Windows 9p mounts and Android/Termux temporary workspaces. [#172306](https://github.com/openclaw/openclaw/pull/172306), related to [#145589](https://github.com/openclaw/openclaw/issues/145589) and [#171406](https://github.com/openclaw/openclaw/issues/171406). Thanks to [@steipete](https://github.com/steipete), [@Hawk5150](https://github.com/Hawk5150), [@iiAnthony](https://github.com/iiAnthony), [@jaisummagithub](https://github.com/jaisummagithub) and [@kukirin-ui](https://github.com/kukirin-ui).
  - Agents can apply very large file patch hunks without hitting the JavaScript argument-limit crash. [#174477](https://github.com/openclaw/openclaw/pull/174477). Thanks [@steipete](https://github.com/steipete).

  </details>

- Scripts using experimental `claws remove --json` now receive a JSON error for two invalid cleanup-option combinations instead of only a plain-text error.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Returns a parseable JSON failure for two invalid cleanup option combinations in the experimental `claws remove --json` command. [#172281](https://github.com/openclaw/openclaw/pull/172281), thanks to [@Leon-SK668](https://github.com/Leon-SK668).

  </details>

- New network results reached through Tool Search or Code Mode now keep their untrusted-source label in later replies, so memory can treat them like directly retrieved network content. Existing history and stored memory are not relabeled.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Preserves network-source labels through Tool Search and Code Mode for new tool results and subsequent replies. Existing history and stored memory are not rewritten. [#169560](https://github.com/openclaw/openclaw/pull/169560), [issue #169332](https://github.com/openclaw/openclaw/issues/169332). Thanks [@RomneyDa](https://github.com/RomneyDa) and [@farisoftfry](https://github.com/farisoftfry).

  </details>

### Diagnostics and service maintenance

- Fixes update and Doctor cleanup failing after another database opening was refused.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Finishes closing affected shared database workers without reporting the refused opening again as a second cleanup failure. [#173813](https://github.com/openclaw/openclaw/pull/173813).

  </details>

- A refused database opening no longer unnecessarily interrupts other readers, and affected operations can retry.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Preserves shared readers and settles refused openings in the release branch. [#175987](https://github.com/openclaw/openclaw/pull/175987), [#163258](https://github.com/openclaw/openclaw/pull/163258) and [#179320](https://github.com/openclaw/openclaw/pull/179320), included in the combined backup and platform backport.

  </details>

- Status shows the selected model's actual context limit, and diagnostics distinguish a timed-out local worker from a provider error. Startup messages also report the setting or channel that needs attention.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Status, context and session reports use the selected model and runtime capacity instead of a stale or guessed limit. [#165991](https://github.com/openclaw/openclaw/pull/165991). Thanks to [snotty](https://github.com/snotty) and [steipete](https://github.com/steipete).
  - Startup warnings point to the work actually taking time, and channel start messages say why an account is starting. [#169221](https://github.com/openclaw/openclaw/pull/169221). Thanks [@steipete](https://github.com/steipete).
  - A local worker timeout is reported as a local timeout, not as a provider HTTP 408; configured fallback remains available. [#156650](https://github.com/openclaw/openclaw/pull/156650), [reported in #155627](https://github.com/openclaw/openclaw/issues/155627). Thanks to [YangManBOBO](https://github.com/YangManBOBO), [EndeavorPioneer](https://github.com/EndeavorPioneer), and [altaywtf](https://github.com/altaywtf).
  - Logs now identify session-list requests from the sidebar correctly. [#170512](https://github.com/openclaw/openclaw/pull/170512). Thanks to [steipete](https://github.com/steipete).
  - The startup banner shows the effective thinking setting when it is off, rather than implying another setting is active. [#170627](https://github.com/openclaw/openclaw/pull/170627). Thanks to [obviyus](https://github.com/obviyus) for the fix and [chughtapan](https://github.com/chughtapan) for the [report](https://github.com/openclaw/openclaw/issues/170180).
  - Logbook warns about a missing vision model only when image analysis is actually waiting. [#170608](https://github.com/openclaw/openclaw/pull/170608). Thanks to [duyufansh2008](https://github.com/duyufansh2008).

  </details>

- Diagnostics keep useful failure details when a service cannot shut down cleanly, while optional logging failures no longer stop an agent's work.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Long-lived chats no longer keep growing their send-timing diagnostics without bound ([#171146](https://github.com/openclaw/openclaw/pull/171146)). Thanks [@steipete](https://github.com/steipete).
  - Recorded Codex and plugin activity can finish saving when the service closes or restarts. [#171293](https://github.com/openclaw/openclaw/pull/171293), reported in [#171197](https://github.com/openclaw/openclaw/issues/171197). Thanks [@steipete](https://github.com/steipete) and [@arquiteto-raiz](https://github.com/arquiteto-raiz).
  - Stall reports still identify the responsible script when its name contains quotes or escapes, without exposing unredacted details. [#170505](https://github.com/openclaw/openclaw/pull/170505). Thanks to [steipete](https://github.com/steipete).
  - If optional cache or Anthropic diagnostic files cannot be saved, OpenClaw warns once and keeps the agent running. [#174622](https://github.com/openclaw/openclaw/pull/174622). Thanks [@steipete](https://github.com/steipete), [@jamie8johnson](https://github.com/jamie8johnson) and [@aniruddhaadak80](https://github.com/aniruddhaadak80).
  - A shutdown timeout now records which child process remained and whether the stop signal failed. [#175625](https://github.com/openclaw/openclaw/pull/175625). Thanks [@vincentkoc](https://github.com/vincentkoc).
  - Linux service inspection reports when it cannot confirm that its systemd check has stopped. [#175689](https://github.com/openclaw/openclaw/pull/175689). Thanks [@steipete](https://github.com/steipete), and [@fuller-stack-dev](https://github.com/fuller-stack-dev) for the earlier inspection work.
  - Linux update and service-repair checks report a systemd cleanup failure instead of treating unfinished inspection as complete. [#175703](https://github.com/openclaw/openclaw/pull/175703). Thanks [@steipete](https://github.com/steipete).
  - Startup recovery reports cleanup or ownership errors directly instead of incorrectly saying the service is missing. [#175726](https://github.com/openclaw/openclaw/pull/175726). Thanks [@steipete](https://github.com/steipete).

  - Channel logs identify the event and underlying error when refreshing a message claim encounters a storage failure. [#171365](https://github.com/openclaw/openclaw/pull/171365). Thanks to [@ynaamane](https://github.com/ynaamane), [@obviyus](https://github.com/obviyus) and [@yolo521-bot](https://github.com/yolo521-bot) for the [report](https://github.com/openclaw/openclaw/issues/171034).

  </details>

- Scheduled maintenance keeps its timing after a clock correction, and a failed worker start no longer leaves its database in use.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Maintenance schedules stay on track after clock corrections; uncertain worker results refresh their connection before another attempt, and failed memory-worker starts finish cleanup before releasing the database. [#171415](https://github.com/openclaw/openclaw/pull/171415), thanks to [steipete](https://github.com/steipete).

  </details>

- Gateway [readiness checks](/gateway/health) now wait for the final startup work to finish instead of reporting ready while it is still running.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  [#188873](https://github.com/openclaw/openclaw/pull/188873), its release adaptation [#188898](https://github.com/openclaw/openclaw/pull/188898), and the [readiness check follow-up](https://github.com/openclaw/openclaw/commit/591153e2fecccb86b1b4a30b3bb0b5eae913f600). Thanks [@RomneyDa](https://github.com/RomneyDa).

  </details>

### Desktop and mobile apps

> Regular Windows Tauri companion installers and automatic updates are paused for this release. Opt-in desktop-test builds and the separate Windows Hub release are unaffected. [Publication change](https://github.com/openclaw/openclaw/pull/173656).

- Saved Gateway connections in the Linux app keep their pairing when you switch between them or restart the app. Removing and re-adding a Gateway starts a fresh pairing.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keeps private persistent storage for each saved Gateway. [#158908](https://github.com/openclaw/openclaw/pull/158908).

  </details>

- The Mac Connection screen reports the actual local Gateway version and offers update or repair when needed, without proposing a downgrade for a healthy newer installation.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Uses the installed or connected local Gateway status instead of assuming the bundled version is running. [#181389](https://github.com/openclaw/openclaw/pull/181389).

  </details>

- [Mac permission prompts](/platforms/mac/permissions) now show which computer needs access and where to grant it. Complete the permission step on that Mac, then confirm a retry in chat.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Permission cards connect missing native Mac access to the app's grant flow and a user-confirmed retry. Computer Control can show multiple missing grants together. [#169635](https://github.com/openclaw/openclaw/pull/169635) by [@steipete](https://github.com/steipete).
  - Chat permission cards offer the next step for the current macOS and OpenClaw access state, including requests handled in stages. [#171115](https://github.com/openclaw/openclaw/pull/171115) Thanks to [@steipete](https://github.com/steipete).
  - After a Screen Recording request, the card offers System Settings if access was denied. [#171175](https://github.com/openclaw/openclaw/pull/171175) Thanks to [@steipete](https://github.com/steipete).
  - Location cards direct you to System Settings after access is denied or unavailable, before offering to enable Location mode. [#171859](https://github.com/openclaw/openclaw/pull/171859) Thanks to [@steipete](https://github.com/steipete).
  - Mac setup does not inspect protected Chrome data until you explicitly ask to use the browser. [#171177](https://github.com/openclaw/openclaw/pull/171177) Thanks to [@steipete](https://github.com/steipete).
  - Quick Chat no longer crashes while setting up permissions. [Quick Chat permission setup crash fix](https://github.com/openclaw/openclaw/commit/94940fb3e3017a6fdb3eccb81c809a929a74a056).
  - When Host Desktop is disabled, chat offers setup guidance and lets an authorized connection enable it when the desktop server is ready. [#177888](https://github.com/openclaw/openclaw/pull/177888), [issue #174368](https://github.com/openclaw/openclaw/issues/174368) Thanks [@etzelm](https://github.com/etzelm) and [@hannesrudolph](https://github.com/hannesrudolph).
  - If the owner has granted and retained the native setup permission, eligible turns can use the access described in that prompt without repeating setup. Revoking consent still stops it, and other users do not inherit that access. [#185920](https://github.com/openclaw/openclaw/pull/185920) Thanks [@obviyus](https://github.com/obviyus).

  </details>

- Mac app navigation and panel controls no longer crowd or cover the native window buttons.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Desktop panel headers and navigation controls share the titlebar while leaving room for native window buttons. [#171131](https://github.com/openclaw/openclaw/pull/171131) Thanks to [@steipete](https://github.com/steipete).
  - The rail divider and collapsed sidebar background stay below macOS window controls. [#172451](https://github.com/openclaw/openclaw/pull/172451) Thanks to [@steipete](https://github.com/steipete).

  </details>

- Downloading a conversation or dashboard file in the Mac app opens the system Save dialog instead of replacing the page with raw file data.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Dashboard and conversation downloads in the Mac app use the system Save dialog instead of replacing the page with archive data. [#173654](https://github.com/openclaw/openclaw/pull/173654) Thanks [@Patrick-Erichsen](https://github.com/Patrick-Erichsen) and [@RomneyDa](https://github.com/RomneyDa).

  </details>

- iPhone, iPad and Mac chat show when a reply is preparing, waiting or retrying, and sending works again after a connection returns. Pairing and error messages are easier to follow in supported languages.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - iPad pairing and Gateway onboarding messages have translations in more languages. [#185480](https://github.com/openclaw/openclaw/pull/185480)
  - Apple chat now says when a reply is preparing, waiting or retrying, including labels available to screen readers. [#166356](https://github.com/openclaw/openclaw/pull/166356), related [#139926](https://github.com/openclaw/openclaw/issues/139926). Thanks [Marvinthebored](https://github.com/Marvinthebored), [Solvely-Colin](https://github.com/Solvely-Colin) and [noelillinger](https://github.com/noelillinger).
  - Apple chat shows when a helper is still working and provides a way to open that helper's conversation. [#166322](https://github.com/openclaw/openclaw/pull/166322), related [#52960](https://github.com/openclaw/openclaw/issues/52960). Thanks [Marvinthebored](https://github.com/Marvinthebored) and [Solvely-Colin](https://github.com/Solvely-Colin).
  - On iPhone or iPad, arrow-key history no longer disrupts selected text or text still being composed with an input method. [#143056](https://github.com/openclaw/openclaw/pull/143056). Thanks [vincentkoc](https://github.com/vincentkoc).
  - iOS buttons have clearer dark-mode contrast and room for larger text, and the Settings title keeps its spacing with the sidebar open. [#166379](https://github.com/openclaw/openclaw/pull/166379). Thanks [Rocuts](https://github.com/Rocuts), [jalehman](https://github.com/jalehman) and [steipete](https://github.com/steipete).
  - Apple apps reconnect after you change access or computer-use options. Mac Claude session browsing works through the app's worker and is unavailable while that worker is down; unchanged iOS reads no longer produce spurious updates. [#169617](https://github.com/openclaw/openclaw/pull/169617) by [@steipete](https://github.com/steipete).
  - iPhone manual connection setup explains invalid Gateway addresses before you try to connect. Enter a hostname or IP address without a scheme or port. [#169875](https://github.com/openclaw/openclaw/pull/169875), reported in [#144678](https://github.com/openclaw/openclaw/issues/144678). Thanks to [@masatohoshino](https://github.com/masatohoshino) and [@bjesuiter](https://github.com/bjesuiter).
  - iOS chat follows its message connection for online status, and dismissed warnings stay hidden through identical repeated failures. [#169912](https://github.com/openclaw/openclaw/pull/169912), reported in [#169911](https://github.com/openclaw/openclaw/issues/169911), by [@Solvely-Colin](https://github.com/Solvely-Colin).
  - If the Mac Dashboard receives an unexpected Gateway error, you can reload it; an old session link also retries the normal access check. [#170361](https://github.com/openclaw/openclaw/pull/170361) by [@steipete](https://github.com/steipete).
  - Mac Dashboard reload and Gateway error messages gain translations in 21 non-English locales. [#170475](https://github.com/openclaw/openclaw/pull/170475).
  - The existing subagent wait label gains translations in the iOS and macOS catalogs. [#170172](https://github.com/openclaw/openclaw/pull/170172).
  - Native chat startup and retry messages gain translated catalog entries for supported locales. [#171084](https://github.com/openclaw/openclaw/pull/171084).
  - Apple chat can send again when its connection returns and resumes the same conversation. [#171528](https://github.com/openclaw/openclaw/pull/171528) Thanks to [@jjjhenriksen](https://github.com/jjjhenriksen) and to [@azuretek](https://github.com/azuretek) for the report.
  - A failed Mac Dashboard can reload after its authenticated connection returns to the same Gateway, without discarding a healthy page or draft. [#172646](https://github.com/openclaw/openclaw/pull/172646) Thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen).
  - Mac Companion setup can finish AI verification with a saved sign-in after a wizard progress reply. [#171667](https://github.com/openclaw/openclaw/pull/171667) Thanks to [@steipete](https://github.com/steipete) and to [@enter501](https://github.com/enter501) for the report.
  - The Mac Codex catalog remains available when the valid `nativeHookRelay` plugin option is configured. [#172592](https://github.com/openclaw/openclaw/pull/172592) Thanks to [@steipete](https://github.com/steipete).
  - Mac CLI startup diagnostics print literally when the app cannot resolve the local CLI. [#171802](https://github.com/openclaw/openclaw/pull/171802) Thanks to [@steipete](https://github.com/steipete).
  - App lists and copied transcripts remain usable when data changes during a read, though a changing list may be incomplete. Android Talk settings changed mid-load may require a refresh or restart, and an iOS Talk session that fails to close may need stale-session cleanup. [#169336](https://github.com/openclaw/openclaw/pull/169336). Thanks [steipete](https://github.com/steipete).

  </details>

- Android now shows Gateway names with non-English characters intact and renders inline code correctly even after an unmatched backtick.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Android chat displays inline code correctly even if an earlier backtick was left unmatched. [#170478](https://github.com/openclaw/openclaw/pull/170478), with a follow-up from [@vincentkoc](https://github.com/vincentkoc).
  - Android shows Gateway names containing non-English characters correctly, and a fallback Google video result identifies the operation that returned it. [#171920](https://github.com/openclaw/openclaw/pull/171920) Thanks to [@steipete](https://github.com/steipete).

  </details>

- On Wear OS, Retry stays reachable on round screens and larger text remains scrollable; replies, speech and navigation also recover from more interrupted states.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Wear OS recovery keeps Retry visible on round displays, while shared lists and controls fit below the clock and remain scrollable with larger text. [#170321](https://github.com/openclaw/openclaw/pull/170321) by [@joshavant](https://github.com/joshavant).
  - Returning from the Wear keyboard keeps the current reply state, and final replies without a named sender no longer appear twice in history. [#171476](https://github.com/openclaw/openclaw/pull/171476) Thanks to [@joshavant](https://github.com/joshavant).
  - When Pulse is unavailable, a Wear OS watch returns to Chat, including after restoring a saved session. [#172136](https://github.com/openclaw/openclaw/pull/172136) Contribution from [@IWhatsskill](https://github.com/IWhatsskill).
  - Wear OS reply speech and Stop remain responsive if the speech engine stalls. [#172147](https://github.com/openclaw/openclaw/pull/172147) Contribution from [@IWhatsskill](https://github.com/IWhatsskill).

  </details>

- On Android, embedded browser, desktop and terminal views are unavailable when an active certificate pin cannot be enforced inside them. Native chat remains available on that connection.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Embedded pages are refused on actively pinned connections because the embedded browser cannot enforce the native pin throughout the connection. A saved fingerprint that is not active does not trigger the restriction. [#180843](https://github.com/openclaw/openclaw/pull/180843) Thanks [@eleqtrizit](https://github.com/eleqtrizit).

  </details>

- The Mac app is less likely to leave a healthy Gateway on a recovery screen after an update, and Retry can repair an incomplete installation. Direct connections with a learned certificate pin can reconnect after a trusted renewal for the same host; explicit pins remain fixed.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Native updates reduce stopped database backup and optional Doctor work while keeping recovery backups and required repairs. [#170087](https://github.com/openclaw/openclaw/pull/170087) by [@steipete](https://github.com/steipete).
  - Mac updates avoid waiting on their own lock when equivalent temporary-directory paths are used. [#169860](https://github.com/openclaw/openclaw/pull/169860) by [@steipete](https://github.com/steipete).
  - Mac update and recovery checks recognize valid app-managed Bun services, addressing a recovery screen that could remain despite a healthy Gateway. [#170006](https://github.com/openclaw/openclaw/pull/170006), with the report and investigation in [#169662](https://github.com/openclaw/openclaw/issues/169662). Thanks to [@steipete](https://github.com/steipete), [@jokerman1302-eng](https://github.com/jokerman1302-eng), [@davidmackrory-byte](https://github.com/davidmackrory-byte) and [@josephsilvagnoli](https://github.com/josephsilvagnoli).
  - Mac updates report why a LaunchAgent inspection failed and suggest a deep Gateway status check. [#170429](https://github.com/openclaw/openclaw/pull/170429), reported in [#169995](https://github.com/openclaw/openclaw/issues/169995). Thanks to [@steipete](https://github.com/steipete) and [@Yolo521-bot](https://github.com/Yolo521-bot).
  - Mac service repair handles overlapping service loading after confirming the service is loaded, without interrupting a running Gateway. [#170740](https://github.com/openclaw/openclaw/pull/170740) by [@RomneyDa](https://github.com/RomneyDa).
  - Mac app recovery preserves a newer managed Gateway and can restore a missing Node service using its selected CLI. The fix requires updated app recovery code. [#170766](https://github.com/openclaw/openclaw/pull/170766) by [@RomneyDa](https://github.com/RomneyDa).
  - A verified external Mac terminal can restart the Gateway when an ancestor process cannot be inspected. [#170354](https://github.com/openclaw/openclaw/pull/170354) by [@RomneyDa](https://github.com/RomneyDa).
  - The Mac app includes updated Peekaboo and process-handling dependencies. [#170713](https://github.com/openclaw/openclaw/pull/170713) by [@steipete](https://github.com/steipete).
  - Gateway startup in the Mac app can reach readiness sooner when using bundled Bun. [#169543](https://github.com/openclaw/openclaw/pull/169543) by [@steipete](https://github.com/steipete).
  - Mac app Retry can repair plugin links and clear an incomplete-update warning after the Gateway passes its required checks. [#171508](https://github.com/openclaw/openclaw/pull/171508) Thanks to [@RomneyDa](https://github.com/RomneyDa) and to [@shanselman](https://github.com/shanselman) for the report and investigation.
  - Updates under the macOS Gateway service prepare the selected pnpm installation's environment. [#171936](https://github.com/openclaw/openclaw/pull/171936) Thanks to [@steipete](https://github.com/steipete), [@AntaresGG](https://github.com/AntaresGG) for the report, and [@MoerAI](https://github.com/MoerAI) for the reproduction.
  - A Mac update started from a login shell can proceed when OpenClaw verifies it is not running inside the Gateway service, even if it cannot inspect the whole process tree. An older updater may still refuse the first update. [#172640](https://github.com/openclaw/openclaw/pull/172640) Thanks to [@steipete](https://github.com/steipete) and to [@giulianoaccorsi](https://github.com/giulianoaccorsi) for the report and diagnosis.
  - macOS service inspection and restart preserve multiline environment values and their whitespace. [#171740](https://github.com/openclaw/openclaw/pull/171740) Thanks to [@steipete](https://github.com/steipete) and to [@yetval](https://github.com/yetval) for the report.
  - Two Mac Gateway recovery messages are translated in 21 non-English locales. [#172422](https://github.com/openclaw/openclaw/pull/172422).
  - Before migrating an app-managed installation, the updater tries to repair supported bundled plugins and shows any repair warnings in the Mac app. [#174257](https://github.com/openclaw/openclaw/pull/174257), [issue #174120](https://github.com/openclaw/openclaw/issues/174120) Thanks [@steipete](https://github.com/steipete) and [@kazuyuki-eguchi](https://github.com/kazuyuki-eguchi).
  - On Macs with many skill folders, Gateway shutdown avoids waiting on every watcher separately. This applies to later stops after the updated Gateway is running. [#168273](https://github.com/openclaw/openclaw/pull/168273). Thanks [obviyus](https://github.com/obviyus).
  - A macOS LaunchAgent restart reports an error when its restart helper cannot start, instead of claiming that the restart was scheduled. [#175229](https://github.com/openclaw/openclaw/pull/175229) Thanks [@steipete](https://github.com/steipete).
  - Updated Mac apps can use compatible saved device credentials for remote Gateway connections after unrelated local database upgrades. [#166993](https://github.com/openclaw/openclaw/pull/166993). Thanks [fuller-stack-dev](https://github.com/fuller-stack-dev).
  - Direct Mac Gateway connections using a learned certificate pin can reconnect after a trusted renewal for the same host. Explicitly configured pins remain fixed. [#168151](https://github.com/openclaw/openclaw/pull/168151). Thanks [steipete](https://github.com/steipete) and [fuller-stack-dev](https://github.com/fuller-stack-dev) for the [earlier renewal work](https://github.com/openclaw/openclaw/pull/164435).
  - The Mac status menu explains when an incompatible bundled worker needs an app update and offers an update action when available. [#157948](https://github.com/openclaw/openclaw/pull/157948), related [#157444](https://github.com/openclaw/openclaw/issues/157444). Thanks [PollyBot13](https://github.com/PollyBot13).

  </details>

- Mac commands can find preferred tools when the app starts from Finder, the Dock or a login session. Relaunch after changing tool folders; if an older app added a wrapper to your shared PATH, remove that old entry manually.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Opening a named profile or temporary Mac app no longer adds its wrapper to your shared shell PATH. Named-profile wrappers still work by full path; remove old PATH entries yourself. [#169460](https://github.com/openclaw/openclaw/pull/169460). Thanks [steipete](https://github.com/steipete).
  - New Peekaboo skill dependency installs use the maintained OpenClaw Homebrew tap. Existing installations are not migrated automatically. [#166245](https://github.com/openclaw/openclaw/pull/166245), related [#166244](https://github.com/openclaw/openclaw/issues/166244). Thanks [holgergruenhagen](https://github.com/holgergruenhagen).
  - Mac node commands find preferred tool folders across Finder, Dock, and login launches. [#171460](https://github.com/openclaw/openclaw/pull/171460) Thanks to [@brianmcguire](https://github.com/brianmcguire), [@steipete](https://github.com/steipete), and to [@jamiezigelbaum](https://github.com/jamiezigelbaum) for the report.
  - Longer Mac companion commands can return within the requested time, and an unavailable result is no longer confused with an unreachable app. [#172117](https://github.com/openclaw/openclaw/pull/172117) Thanks to [@holgergruenhagen](https://github.com/holgergruenhagen), [@ylcn91](https://github.com/ylcn91), [@steipete](https://github.com/steipete), and to [@Colton-Harris](https://github.com/Colton-Harris) for the report and diagnosis.
  - Mac skills now recognize the macOS platform name when checking whether they can run, install dependencies or find a required tool. [#172214](https://github.com/openclaw/openclaw/pull/172214) Thanks to [@fhgffy](https://github.com/fhgffy), [@steipete](https://github.com/steipete), and to [@jessecq1995](https://github.com/jessecq1995) for the related report.
  - Apple app builds find a supported Node executable when a version-manager shim leads PATH. [#168139](https://github.com/openclaw/openclaw/pull/168139). Thanks [steipete](https://github.com/steipete).
  - Mac developer guidance covers signing and packaging a local build to replace a release installation. [#168527](https://github.com/openclaw/openclaw/pull/168527). Thanks [steipete](https://github.com/steipete).

  </details>

- The Mac memory readout now counts memory the system can reclaim, so available memory is no longer understated.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Mac host memory meters in Devices and the Gateway count reclaimable memory as available. [#144535](https://github.com/openclaw/openclaw/pull/144535), reports [#144176](https://github.com/openclaw/openclaw/issues/144176) and [#156578](https://github.com/openclaw/openclaw/issues/156578). Thanks [sunlit-deng](https://github.com/sunlit-deng), [altaywtf](https://github.com/altaywtf), and reporters [hengtested-design](https://github.com/hengtested-design) and [s3d1K0](https://github.com/s3d1K0).

  </details>

- Windows source and package updates avoid more path, backup and service failures, and an early failed source update can restore a verified previous build. Some repairs must already be in the updater performing the update; an older broken updater may still need manual recovery.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Windows update recovery accepts short-name or case-variant paths to the same verified backup, avoiding a false rollback. [#168968](https://github.com/openclaw/openclaw/pull/168968). Thanks [RomneyDa](https://github.com/RomneyDa).
  - The final plugin check for Windows updates from OpenClaw 2026.10.1 can use the pending-migration request expected by that updater. [#169031](https://github.com/openclaw/openclaw/pull/169031). Thanks [RomneyDa](https://github.com/RomneyDa).
  - Concurrent Windows updater starts coordinate initial handoff database creation to avoid false quarantine and lost records when the installed updater includes the fix. [#169404](https://github.com/openclaw/openclaw/pull/169404). Thanks [steipete](https://github.com/steipete).
  - Update service refresh recognizes equivalent Windows account names while protecting different or unresolved accounts. [#169481](https://github.com/openclaw/openclaw/pull/169481) by [@steipete](https://github.com/steipete).
  - Doctor preserves internal dependency junctions when copying plugin captures between phases. [#169672](https://github.com/openclaw/openclaw/pull/169672), related to [#169586](https://github.com/openclaw/openclaw/issues/169586), by [@n572770](https://github.com/n572770).
  - Windows Git-source updates avoid recursive directory copies and can recover the verified previous build after a qualifying staging failure. [#170940](https://github.com/openclaw/openclaw/pull/170940), reported in [#170700](https://github.com/openclaw/openclaw/issues/170700). Thanks to [@steipete](https://github.com/steipete) and [@stop-time](https://github.com/stop-time).
  - Windows updates now explain what to do when Task Scheduler denies access with an English error or `0x80070005`. [#171109](https://github.com/openclaw/openclaw/pull/171109) Thanks to [@steipete](https://github.com/steipete) and to [@Rene-F](https://github.com/Rene-F) for the report.
  - Piping the default Windows installer no longer fails because no Node version was specified. If you specify one yourself, use a three-part version. [#183145](https://github.com/openclaw/openclaw/pull/183145), [issue #183088](https://github.com/openclaw/openclaw/issues/183088) Thanks [@steipete](https://github.com/steipete), [@LiuwqGit](https://github.com/LiuwqGit) and [@ryandle](https://github.com/ryandle).
  - A Windows source install checks the checkout after a failed Git pull and stops with recovery guidance if it cannot confirm the original state. [#185378](https://github.com/openclaw/openclaw/pull/185378), [issue #127411](https://github.com/openclaw/openclaw/issues/127411) Thanks [@steipete](https://github.com/steipete).
  - Windows updates and plugin loading handle deep paths and 8.3 short-name state paths that could block candidate migration checks. [#172769](https://github.com/openclaw/openclaw/pull/172769) Thanks [@RomneyDa](https://github.com/RomneyDa).
  - A Windows pnpm update can proceed past a dangling link to an optional package that is not installed. If it fails before changing the installation or service, it no longer reports a restart failure; the installed updater must already contain this fix. [#181596](https://github.com/openclaw/openclaw/pull/181596), [issue #181577](https://github.com/openclaw/openclaw/issues/181577) Thanks [@steipete](https://github.com/steipete) and [@SMF12138](https://github.com/SMF12138).
  - Windows update checks no longer flash a console window for SQLite inspection. [#174969](https://github.com/openclaw/openclaw/pull/174969), [issue #174906](https://github.com/openclaw/openclaw/issues/174906) Thanks [@steipete](https://github.com/steipete) and [@throwingbones](https://github.com/throwingbones).
  - Windows update recovery retains the security helper it needs after replacing the original installation. [#187470](https://github.com/openclaw/openclaw/pull/187470) Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Windows runtime recovery and Bun-hosted Node discovery recognize quoted absolute PATH entries. [#181678](https://github.com/openclaw/openclaw/pull/181678) Thanks [@steipete](https://github.com/steipete) and [@Links2008](https://github.com/Links2008).
  - Forced Windows Gateway reinstall tolerates normal launcher timestamp settlement and can restore the previous task if activation fails. [#176945](https://github.com/openclaw/openclaw/pull/176945), [issue #176872](https://github.com/openclaw/openclaw/issues/176872) Thanks [@steipete](https://github.com/steipete) and [@cnnceart](https://github.com/cnnceart).
  - Windows Gateway stop and restart wait long enough to confirm a slow local connection refusal. If the check is still inconclusive, run `openclaw gateway status --deep` before retrying. [#174807](https://github.com/openclaw/openclaw/pull/174807), [issue #174563](https://github.com/openclaw/openclaw/issues/174563) Thanks [@steipete](https://github.com/steipete), [@sunlit-deng](https://github.com/sunlit-deng) and [@prizmizm](https://github.com/prizmizm).
  - Windows backup and Doctor cleanup can remove unused temporary backups without the recurring directory error. [#176836](https://github.com/openclaw/openclaw/pull/176836), [issue #176743](https://github.com/openclaw/openclaw/issues/176743) Thanks [@xutongxue233](https://github.com/xutongxue233), [@steipete](https://github.com/steipete) and [@wg-mojo](https://github.com/wg-mojo).
  - Windows service changes and Mac Gateway stops no longer time out early or wait too long after a system clock change. [#182859](https://github.com/openclaw/openclaw/pull/182859), [#183033](https://github.com/openclaw/openclaw/pull/183033) Thanks [@mikasa0818](https://github.com/mikasa0818), [@SunnyShu0925](https://github.com/SunnyShu0925) and [@steipete](https://github.com/steipete).

  </details>

- Windows commands now handle more paths with spaces, long paths and unusual characters without failing to start or misreading files. If an unattended command cannot use a Store PowerShell alias and its script needs PowerShell 7, install native PowerShell 7 rather than relying on the 5.1 fallback.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Windows node commands preserve prompts, links and file paths with quotes or spaces when started through `cmd.exe`. [#158160](https://github.com/openclaw/openclaw/pull/158160), reports [#142847](https://github.com/openclaw/openclaw/issues/142847) and [#158129](https://github.com/openclaw/openclaw/issues/158129). Thanks [Dimitri-lcht](https://github.com/Dimitri-lcht), [igs-rogenlo](https://github.com/igs-rogenlo), [steipete](https://github.com/steipete) and [kassol](https://github.com/kassol).
  - Windows ARM64 shell launches retain the `SystemRoot` value needed to start when a replacement environment omits it. An explicit caller value still takes precedence. [#169338](https://github.com/openclaw/openclaw/pull/169338). Thanks [steipete](https://github.com/steipete).
  - Installing the Windows Bun service no longer fails after a successful runtime check just because temporary-file cleanup must wait. [#169286](https://github.com/openclaw/openclaw/pull/169286). Thanks [steipete](https://github.com/steipete).
  - A Windows Bun Gateway can continue loading its settings when a temporary copy remains busy after a successful read. [#169337](https://github.com/openclaw/openclaw/pull/169337). Thanks [steipete](https://github.com/steipete).
  - Windows Gateways with installed plugins can use the small-file copy path during startup. [#168313](https://github.com/openclaw/openclaw/pull/168313). Thanks [RomneyDa](https://github.com/RomneyDa).
  - Windows file checks keep distinguishing the intended file when path aliases or filesystem behavior could confuse them. [#169469](https://github.com/openclaw/openclaw/pull/169469). Thanks [steipete](https://github.com/steipete).
  - Windows Bun plugins now use the same Gateway SDK state as the Gateway, avoiding a separate copy during loading. [#169482](https://github.com/openclaw/openclaw/pull/169482) by [@steipete](https://github.com/steipete).
  - Agent deletion supports large NTFS file IDs and recovery retains exact identities. Older numeric records keep their rounding ambiguity until they are verified and upgraded. [#169485](https://github.com/openclaw/openclaw/pull/169485), reported in [#137416](https://github.com/openclaw/openclaw/issues/137416). Thanks to [@steipete](https://github.com/steipete), [@pkinjo](https://github.com/pkinjo), [@xupeijian](https://github.com/xupeijian) and [@karljamoralin](https://github.com/karljamoralin).
  - On Windows with Bun, a successful Gateway startup or deep status check no longer fails solely because a temporary file is busy. Cleanup may wait until exit or a later start. [#169572](https://github.com/openclaw/openclaw/pull/169572) by [@steipete](https://github.com/steipete).
  - Skill preparation avoids repeated environment reads when required binaries are missing, reducing work on long Windows search paths. [#171066](https://github.com/openclaw/openclaw/pull/171066), reported in [#171040](https://github.com/openclaw/openclaw/issues/171040). Thanks to [@LiuwqGit](https://github.com/LiuwqGit), [@steipete](https://github.com/steipete) and [@funnysubaru](https://github.com/funnysubaru).
  - Windows reports incompatible AppContainer child-pipe operations and native helpers, and improves access to private paths. [#171728](https://github.com/openclaw/openclaw/pull/171728) Thanks to [@steipete](https://github.com/steipete), [@jonathanlindsay](https://github.com/jonathanlindsay), and [@chelsealong](https://github.com/chelsealong).
  - Windows startup spends less time reopening plugin files while checking the installed plugins. [#172333](https://github.com/openclaw/openclaw/pull/172333) Thanks to [@steipete](https://github.com/steipete) and to [@SBC2016](https://github.com/SBC2016) for the report.
  - Windows Gateway startup no longer fails its database checks when the environment cannot be sent to the inspection process. [#176194](https://github.com/openclaw/openclaw/pull/176194), [issue #176111](https://github.com/openclaw/openclaw/issues/176111) Thanks [@skyzhao1223](https://github.com/skyzhao1223), [@steipete](https://github.com/steipete) and [@easyteacher](https://github.com/easyteacher).
  - Windows onboarding, Gateway and CLI processes no longer crash when the state folder is reached through a short Windows path. [#172768](https://github.com/openclaw/openclaw/pull/172768) Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Windows can reopen small private database files and create them in long paths that previously failed. [Commit 47c7064](https://github.com/openclaw/openclaw/commit/47c7064d8fcd50515d1b220c6209b71a9aa4bfab)
  - Native plugins can load on affected Windows computers when security software changes only file metadata and the plugin's contents still verify. [#179949](https://github.com/openclaw/openclaw/pull/179949), [issue #179923](https://github.com/openclaw/openclaw/issues/179923) Thanks [@coaiMax](https://github.com/coaiMax) and [@paulcam206](https://github.com/paulcam206).
  - Unattended Windows Gateway commands skip inaccessible Store PowerShell aliases. If only the Store alias is available, the fallback is Windows PowerShell 5.1; commands requiring PowerShell 7 syntax need a native MSI or ZIP installation of PowerShell 7. [#182898](https://github.com/openclaw/openclaw/pull/182898), [issue #182652](https://github.com/openclaw/openclaw/issues/182652) Thanks [@RomneyDa](https://github.com/RomneyDa) and [@tre1d](https://github.com/tre1d).
  - Windows Claude CLI turns using stored credentials avoid a startup delivery stall. Claude Code may still use its own login instead of the selected OpenClaw profile. [#174571](https://github.com/openclaw/openclaw/pull/174571), [issue #174204](https://github.com/openclaw/openclaw/issues/174204), [account selection issue #163332](https://github.com/openclaw/openclaw/issues/163332) Thanks [@RomneyDa](https://github.com/RomneyDa), [@scalesmart](https://github.com/scalesmart), [@layne-11](https://github.com/layne-11) and [@pandysp](https://github.com/pandysp).
  - Windows port commands now explain that the operation is unsupported and suggest alternatives without changing the existing data or selected engine. [#183512](https://github.com/openclaw/openclaw/pull/183512) Thanks [@steipete](https://github.com/steipete).
  - Android and Termux accept the same state database after ordinary SQLite writes while retaining replacement-file checks. [#167719](https://github.com/openclaw/openclaw/pull/167719), report [#167623](https://github.com/openclaw/openclaw/issues/167623) and related [#167791](https://github.com/openclaw/openclaw/issues/167791). Thanks [yxshee](https://github.com/yxshee), [steipete](https://github.com/steipete) and reporter [grabowskidaniel359-design](https://github.com/grabowskidaniel359-design).
  - Secret entry under Rosetta avoids a crash, APFS worktrees can use a matching Rosetta helper, and Windows private files support long paths. [#168942](https://github.com/openclaw/openclaw/pull/168942), related [#167663](https://github.com/openclaw/openclaw/issues/167663). Thanks [steipete](https://github.com/steipete).
  - Windows source checkouts entered through short paths can prepare plugin SDK declarations. [#169427](https://github.com/openclaw/openclaw/pull/169427). Thanks [steipete](https://github.com/steipete).

  </details>

- Managed Linux desktops can start when a hidden display socket occupies the expected display, and host commands launched from an AppImage no longer inherit its conflicting library path.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - A Linux desktop can choose another display when a hidden socket already occupies the expected one. [#169392](https://github.com/openclaw/openclaw/pull/169392), report [#169391](https://github.com/openclaw/openclaw/issues/169391). Thanks [holgergruenhagen](https://github.com/holgergruenhagen) and [obviyus](https://github.com/obviyus).
  - SSH and other host commands launched from the Linux AppImage no longer inherit a conflicting library path. This also drops user-added `LD_LIBRARY_PATH` entries for those commands. [#183661](https://github.com/openclaw/openclaw/pull/183661), [issue #183656](https://github.com/openclaw/openclaw/issues/183656) Thanks [@demos-ra](https://github.com/demos-ra) and [@steipete](https://github.com/steipete).
  - A failed DNS lookup no longer replaces an existing zone, and Linux camera commands tell you when a folder cannot be read instead of claiming no cameras exist. [#174424](https://github.com/openclaw/openclaw/pull/174424) Thanks [@steipete](https://github.com/steipete).

  </details>

- Windows no longer reports a failed local-model shutdown when the service has stopped and only its termination helper is still finishing.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Windows now reports the local model as stopped when its service has exited, even if a helper is still finishing. [#171587](https://github.com/openclaw/openclaw/pull/171587), thanks to [steipete](https://github.com/steipete) and to [RomneyDa](https://github.com/RomneyDa) for the original repair and [report](https://github.com/openclaw/openclaw/issues/171472).

  </details>

### Installation, updates and backups

- On affected Linux filesystems, startup and Doctor can recover when a fast file copy is refused instead of failing outright. Credentials in covered process-cleanup errors are masked before the error is saved or shown.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Gateway startup and Doctor can retry a normal copy when ZFS refuses a fast reflink copy. [#170812](https://github.com/openclaw/openclaw/pull/170812) by [@steipete](https://github.com/steipete), with thanks to [@Glukmann](https://github.com/Glukmann) for reporting [#169071](https://github.com/openclaw/openclaw/issues/169071).
  - Credentials in host process cleanup errors are masked before they reach retained results or notifications. [#170941](https://github.com/openclaw/openclaw/pull/170941) by [@steipete](https://github.com/steipete), following [#169063](https://github.com/openclaw/openclaw/pull/169063).
  - A failed local check no longer discards an existing OpenShell copy or hides the remote skills view ([#176458](https://github.com/openclaw/openclaw/pull/176458)). Thanks [@steipete](https://github.com/steipete).
  - Supported Node versions are accepted again, with warnings for versions missing required security patches ([#186589](https://github.com/openclaw/openclaw/pull/186589)). Thanks [@steipete](https://github.com/steipete).
  - Install and update paths receive the same Node compatibility and security advisory corrections ([#187626](https://github.com/openclaw/openclaw/pull/187626)). Thanks [@romneyda](https://github.com/romneyda) and [@steipete](https://github.com/steipete).

  </details>

- [Doctor](/gateway/doctor/checks) and startup can bring back some older agent conversations blocked by an upgrade and rebuild certain damaged search indexes after backing up the database. Mixed or unexplained damage still needs manual attention; stop the Gateway and keep a verified backup before an offline repair.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Deleting one agent no longer falsely blocks registration for another with independent identity and database paths. [#170309](https://github.com/openclaw/openclaw/pull/170309), thanks to [@steipete](https://github.com/steipete).
  - Doctor and Gateway migration can read large compressed conversation archives without loading the whole archive as one string. A single record beyond Node's string limit is still unsupported. [#170853](https://github.com/openclaw/openclaw/pull/170853), thanks to [@iamonlv426](https://github.com/iamonlv426) and [@steipete](https://github.com/steipete).
  - Managed updates use private per-user temporary storage and can recover eligible old receipts when another user owns their former directory. [#170174](https://github.com/openclaw/openclaw/pull/170174), thanks to [@steipete](https://github.com/steipete) and [@holgergruenhagen](https://github.com/holgergruenhagen) for the [report](https://github.com/openclaw/openclaw/issues/169382).
  - Updates and Doctor can retain SQLite recovery backups in deeply nested paths that previously ran out of temporary path space. [#170867](https://github.com/openclaw/openclaw/pull/170867), thanks to [@steipete](https://github.com/steipete).
  - On Linux, eligible child tools such as Claude CLI can be given a lower priority under memory pressure. This is best effort and can be changed or disabled. [#170899](https://github.com/openclaw/openclaw/pull/170899), reported in [#170869](https://github.com/openclaw/openclaw/issues/170869). Thanks [@steipete](https://github.com/steipete) and [@eliavb43](https://github.com/eliavb43).
  - On Linux and Mac, Claude CLI processes no longer remain running after their Gateway disappears in the covered cases. [#171016](https://github.com/openclaw/openclaw/pull/171016), reported in [#170868](https://github.com/openclaw/openclaw/issues/170868). Thanks [@steipete](https://github.com/steipete) and [@eliavb43](https://github.com/eliavb43).
  - Installations with many agents spend less time repeating checks when listing or starting them. [#171371](https://github.com/openclaw/openclaw/pull/171371), reported in [#171351](https://github.com/openclaw/openclaw/issues/171351). Thanks [@steipete](https://github.com/steipete) and [@609NFT](https://github.com/609NFT).
  - An unused agent database no longer blocks Gateway startup. If a secondary agent's database is incompatible, healthy agents can still start and the affected agent gets `openclaw doctor --fix` guidance. [#171372](https://github.com/openclaw/openclaw/pull/171372), related to [#171348](https://github.com/openclaw/openclaw/issues/171348). Thanks [@steipete](https://github.com/steipete) and [@LifeViwer](https://github.com/LifeViwer).
  - Credential file updates reuse Gateway readers and reconnect retained observers after a restart. [#171246](https://github.com/openclaw/openclaw/pull/171246). Thanks [@steipete](https://github.com/steipete).
  - Long streamed replies use less Gateway CPU while preserving text corrections and Unicode boundaries. [#171361](https://github.com/openclaw/openclaw/pull/171361), reported in [#171360](https://github.com/openclaw/openclaw/issues/171360). Thanks [@boeingchoco](https://github.com/boeingchoco) and [@steipete](https://github.com/steipete).
  - If you delete an agent that is still working, the wait ends with the conversation you need to let finish before retrying. [#172511](https://github.com/openclaw/openclaw/pull/172511), [issue #172416](https://github.com/openclaw/openclaw/issues/172416). Thanks to [@steipete](https://github.com/steipete).
  - Starting a helper does less repeated work on installations with many saved runs. [#172480](https://github.com/openclaw/openclaw/pull/172480) Thanks to [@steipete](https://github.com/steipete).
  - Installations with many conversations spend less time dispatching database work. [#172532](https://github.com/openclaw/openclaw/pull/172532) Thanks to [@steipete](https://github.com/steipete).
  - Migration refuses a Claude instruction file with invalid UTF-8 instead of importing changed text. Convert or save the file as UTF-8, then retry. [#172953](https://github.com/openclaw/openclaw/pull/172953) Thanks to [@Leon-SK668](https://github.com/Leon-SK668) and [@obviyus](https://github.com/obviyus).
  - Starting two agents at once no longer lets the later initialization displace the first agent's database. [#174251](https://github.com/openclaw/openclaw/pull/174251) Thanks to [@steipete](https://github.com/steipete).
  - Upgrades can restore verified empty agent stores created by the Mac app. A required store that remains unavailable now makes Doctor report failure; populated or uncertain stores need their own eligible repair. [#174297](https://github.com/openclaw/openclaw/pull/174297) Thanks to [@steipete](https://github.com/steipete).
  - Affected Mac-created agents with existing conversations can become available again through update repair or `openclaw doctor --fix --non-interactive` after verified backups. This narrowly scoped recovery may restore data from a pending deletion; other uncertain stores stay unavailable and may need manual restoration. See the [database recovery guidance](/reference/database-schemas/integrity-and-recovery). [#175007](https://github.com/openclaw/openclaw/pull/175007) Thanks to [@steipete](https://github.com/steipete).
  - When Gateway startup or media migration detects a corrupt agent database, the notice now points to that agent's recovery command instead of suggesting only a general fix. Stop the Gateway and back up the database and its SQLite sidecars before running `openclaw doctor --session-sqlite recover --session-sqlite-agent <id>` with the same state and configuration. Recovery is not automatic, and some earlier Doctor refusals may not show this hint. [PR #170249](https://github.com/openclaw/openclaw/pull/170249), reported in [#169390](https://github.com/openclaw/openclaw/issues/169390). Thanks [@steipete](https://github.com/steipete), [@xiajiahang](https://github.com/xiajiahang), [@nkeil](https://github.com/nkeil), and [@jonathanlindsay](https://github.com/jonathanlindsay) for the report.
  - If an older sign-in file cannot be read, Doctor keeps the saved profiles and points to the file to inspect or restore instead of removing them. [PR #170256](https://github.com/openclaw/openclaw/pull/170256), fixing [#168959](https://github.com/openclaw/openclaw/issues/168959). Thanks [@steipete](https://github.com/steipete), [@nosmile99](https://github.com/nosmile99), and [@Yolo521-bot](https://github.com/Yolo521-bot) for the report.
  - Gateway commands refuse SQLite file links that could reach live OpenClaw data through variables. You can still inspect a private database copy. [PR #170253](https://github.com/openclaw/openclaw/pull/170253). The separate working-directory issue [#134612](https://github.com/openclaw/openclaw/issues/134612) was reported by [@phuc-nt](https://github.com/phuc-nt). Thanks [@eleqtrizit](https://github.com/eleqtrizit).
  - The first database open can wait briefly when another operation is temporarily changing its structure. [PR #170300](https://github.com/openclaw/openclaw/pull/170300). Thanks [@steipete](https://github.com/steipete).
  - A first conversation can be saved while usage information refreshes, even if its database has not yet been created. [PR #170308](https://github.com/openclaw/openclaw/pull/170308). Thanks [@steipete](https://github.com/steipete).
  - Saving a conversation no longer rolls back when its database connection changes at the same moment. [PR #170423](https://github.com/openclaw/openclaw/pull/170423). Thanks [@steipete](https://github.com/steipete).
  - Recovery leaves your configuration alone and warns you if it cannot save the original before replacing it. [#171217](https://github.com/openclaw/openclaw/pull/171217), thanks to [steipete](https://github.com/steipete) and [Yolo521-bot](https://github.com/Yolo521-bot) for [reporting](https://github.com/openclaw/openclaw/issues/171187).
  - Doctor and legacy SDK data selection respect the active profile and its state directory. [#171439](https://github.com/openclaw/openclaw/pull/171439), thanks to [steipete](https://github.com/steipete).
  - Doctor can import older conversations whose repeated session headers differ only by timestamp and keeps the original archive. Conflicting headers still stop the import. [#172133](https://github.com/openclaw/openclaw/pull/172133), reported in [#172109](https://github.com/openclaw/openclaw/issues/172109). Thanks to [steipete](https://github.com/steipete) and [wangxiajun68](https://github.com/wangxiajun68).
  - Migration leaves an older notes file untouched if it contains invalid text encoding, rather than changing its contents. [#172293](https://github.com/openclaw/openclaw/pull/172293). Thanks to [@wangmiao0668000666](https://github.com/wangmiao0668000666) and [@obviyus](https://github.com/obviyus).
  - Repair leaves retired agents' saved data untouched and points to their locations while fixing active conversations. [#172295](https://github.com/openclaw/openclaw/pull/172295), related to [#172259](https://github.com/openclaw/openclaw/issues/172259). Thanks to [@steipete](https://github.com/steipete) and [@hannesrudolph](https://github.com/hannesrudolph).
  - Doctor can finish pending repairs on the same version without pulling unrelated old repair work into a newer upgrade. [#172390](https://github.com/openclaw/openclaw/pull/172390). Thanks to [@steipete](https://github.com/steipete).
  - Bun installations no longer interrupt some Doctor and update maintenance work when passing database tasks to a worker. [#172175](https://github.com/openclaw/openclaw/pull/172175). Thanks to [@steipete](https://github.com/steipete).
  - Startup now stops with an incompatibility error rather than opening a database whose version or structure it cannot safely use. [#172265](https://github.com/openclaw/openclaw/pull/172265). Thanks to [@steipete](https://github.com/steipete).
  - Doctor avoids repeatedly scanning migration history when stale session import records point to archived transcripts. [#172890](https://github.com/openclaw/openclaw/pull/172890), thanks [@steipete](https://github.com/steipete), [@DongwonGim](https://github.com/DongwonGim) for the [report](https://github.com/openclaw/openclaw/issues/172809), and [@skyzhao1223](https://github.com/skyzhao1223) for investigating.
  - Doctor can back up and rebuild certain incompatible search indexes while keeping agent data. For offline repair, stop the Gateway and use its Node runtime with `openclaw doctor --fix`; mixed damage still needs another recovery path. [Recovery guidance](/reference/database-schemas/integrity-and-recovery) · [#176234](https://github.com/openclaw/openclaw/pull/176234). Thanks [@steipete](https://github.com/steipete) and [@ndakota79](https://github.com/ndakota79).
  - Startup can back up and rebuild a stale agent search index before the agent opens; unexplained damage or a failed repair still keeps that agent unavailable. [#176833](https://github.com/openclaw/openclaw/pull/176833). Thanks [@steipete](https://github.com/steipete) and [@ndakota79](https://github.com/ndakota79).
  - `openclaw doctor --fix` can restore eligible built-in agent databases held after a schema update. Until then, the affected agent stays unavailable, while healthy agents can start. [#176783](https://github.com/openclaw/openclaw/pull/176783). Thanks [@steipete](https://github.com/steipete) and [@PennyVibe](https://github.com/PennyVibe).
  - After you free disk space and the checks pass, an affected agent can save new work without restarting the Gateway. Check any interrupted writes yourself; OpenClaw does not replay them. [#176902](https://github.com/openclaw/openclaw/pull/176902). Thanks [@steipete](https://github.com/steipete).
  - A migration leaves unreadable text files or their original archives intact instead of importing altered text, and keeps damaged Skill Workshop recovery bundles available ([#180861](https://github.com/openclaw/openclaw/pull/180861)). Thanks [@steipete](https://github.com/steipete) and [@wangmiao0668000666](https://github.com/wangmiao0668000666).
  - Doctor stops before moving or discarding unreadable node-host and Web Push files or an interrupted claim. Back up the affected files and correct the copies before retrying ([#180850](https://github.com/openclaw/openclaw/pull/180850)). Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@steipete](https://github.com/steipete).
  - Doctor can finish repairing plugins after importing verified conversations even when an older archive is missing, while still warning about that gap ([#178779](https://github.com/openclaw/openclaw/pull/178779), [#167385](https://github.com/openclaw/openclaw/issues/167385)). Thanks [@steipete](https://github.com/steipete), [@jayzhou2309](https://github.com/jayzhou2309), [@lostsock1](https://github.com/lostsock1) and [@IliyaNexus](https://github.com/IliyaNexus).
  - Doctor no longer repeats old migration checks and notices on unchanged data during the same repair ([#180576](https://github.com/openclaw/openclaw/pull/180576)). Thanks [@steipete](https://github.com/steipete) and [@MertBasar0](https://github.com/MertBasar0).
  - Existing agent database reads can continue after a compatible structure refresh without reopening unnecessarily. [Commit](https://github.com/openclaw/openclaw/commit/0644d3a70aa1397d61b8d4ac66c9b815fcb432fb)
  - After an unsafe database open or cleanup failure, OpenClaw no longer trusts an earlier read check; a refusal before opening leaves healthy reads intact. [Commit](https://github.com/openclaw/openclaw/commit/acc5395d48360aedc1dd7353085e1d9d315b3efc)
  - Startup does less repeat checking of old migration files, and Doctor clears obsolete missing-history notices. A temporary ownership interruption gets a bounded retry. [#170936](https://github.com/openclaw/openclaw/pull/170936), [report #170693](https://github.com/openclaw/openclaw/issues/170693). Thanks to [@steipete](https://github.com/steipete) and [@NOVA-Openclaw](https://github.com/NOVA-Openclaw).
  - After storage recovers, closing the database can clear a lock left by completed work so later protected operations can proceed. [#173225](https://github.com/openclaw/openclaw/pull/173225), thanks [@steipete](https://github.com/steipete).

  - Existing agent databases are updated on first use of this version; the upgrade can take longer when you have more agents or saved data. [#169315](https://github.com/openclaw/openclaw/pull/169315), [issue #169254](https://github.com/openclaw/openclaw/issues/169254). Thanks [@steipete](https://github.com/steipete).

  </details>

- Changing settings, plugins or credentials is less likely to interrupt work already underway or discard unrelated changes. Some plugin reloads wait until active work finishes; if it never finishes, the saved change can remain pending.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - An authorized Main-session reset can bring back a conversation archived during restart recovery, retaining its transcript and starting with fresh model context. It does not resume the interrupted task. [#176675](https://github.com/openclaw/openclaw/pull/176675), [#137264](https://github.com/openclaw/openclaw/issues/137264), [#173412](https://github.com/openclaw/openclaw/issues/173412) Thanks [@steipete](https://github.com/steipete), [@enki](https://github.com/enki), [@r3n3x](https://github.com/r3n3x) and [@cavatison](https://github.com/cavatison).
  - Managed installs use the supported patched Node version, and source builders use pnpm 12.15.0. Immediate join and hook turns now follow the event's access rules; restarted subagents use the accepted caller's authority. [#181074](https://github.com/openclaw/openclaw/pull/181074), [#179992](https://github.com/openclaw/openclaw/pull/179992) Thanks [@RomneyDa](https://github.com/RomneyDa) and [@joshavant](https://github.com/joshavant).
  - Partial HTML-like tags in streamed replies avoid unnecessary full parsing where their meaning is clear. [#180765](https://github.com/openclaw/openclaw/pull/180765), [#180720](https://github.com/openclaw/openclaw/issues/180720) Thanks [@JasonBuildAI](https://github.com/JasonBuildAI) and [@steipete](https://github.com/steipete).
  - Long streams containing tool-call XML avoid repeated parsing of settled text. [#181397](https://github.com/openclaw/openclaw/pull/181397), [#175156](https://github.com/openclaw/openclaw/issues/175156) Thanks [@steipete](https://github.com/steipete) and [@JasonBuildAI](https://github.com/JasonBuildAI).
  - When a turn inherits sign-in access, it now uses the configured credential owner rather than another profile. [#181812](https://github.com/openclaw/openclaw/pull/181812) Thanks [@steipete](https://github.com/steipete).
  - If your role grants access to no agents, the agent list returns promptly instead of waiting for model information. [#182159](https://github.com/openclaw/openclaw/pull/182159) Thanks [@vincentkoc](https://github.com/vincentkoc).
  - Reject explicitly blank `--identity-file` and `--workspace` values in `openclaw agents set-identity`. Omit a flag to use its normal default. [#182622](https://github.com/openclaw/openclaw/pull/182622) Thanks [@wangmiao0668000666](https://github.com/wangmiao0668000666), [@steipete](https://github.com/steipete) and [@obviyus](https://github.com/obviyus).
  - Agent and team creation messages no longer display unsafe formatting from names; stored names and JSON results remain unchanged. [#183360](https://github.com/openclaw/openclaw/pull/183360) Thanks [@Alix-007](https://github.com/Alix-007) and [@steipete](https://github.com/steipete).
  - When conversation compaction fails, JSON callers receive a usable error tied to the conversation they requested. [#184131](https://github.com/openclaw/openclaw/pull/184131) Thanks [@Leon-SK668](https://github.com/Leon-SK668) and [@obviyus](https://github.com/obviyus).
  - Browsing OpenCode conversations no longer times out early or waits too long after a system clock change. [#182295](https://github.com/openclaw/openclaw/pull/182295) Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@steipete](https://github.com/steipete).
  - Mac conversation navigation keeps its intended wait time even if the system clock changes. [#182627](https://github.com/openclaw/openclaw/pull/182627) Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@steipete](https://github.com/steipete).
  - Starting or stopping a managed local model no longer waits the wrong length of time after a clock change. [#182778](https://github.com/openclaw/openclaw/pull/182778) Thanks [@mikasa0818](https://github.com/mikasa0818) and [@obviyus](https://github.com/obviyus).
  - Setting or removing configuration no longer applies an edit based on an outdated view of its references or owner; a cleared copied conversation owner is reported in [#184194](https://github.com/openclaw/openclaw/pull/184194). Thanks to [RomneyDa](https://github.com/RomneyDa).
  - A configuration change now retries preparation if newer settings supersede it, and a plugin reload waits for active work to finish in [#185573](https://github.com/openclaw/openclaw/pull/185573). A saved configuration can remain pending if that work never settles. Thanks to [steipete](https://github.com/steipete).
  - Changing only whether sign-in is available no longer unnecessarily rebuilds an agent's prepared runtime in [#185250](https://github.com/openclaw/openclaw/pull/185250). Thanks to [steipete](https://github.com/steipete), and to [DonnieFi](https://github.com/DonnieFi) for reporting [#161468](https://github.com/openclaw/openclaw/issues/161468).
  - A helper turn waits for its owner's newly published sign-in settings before it starts in [8501893](https://github.com/openclaw/openclaw/commit/85018936a3383184812792bdc58c98d1b53311dc).
  - A later model or credential change no longer causes an unnecessary restart from an older reload in [b285a4e](https://github.com/openclaw/openclaw/commit/b285a4e9d8915c48d3164125ee515f0f9a1a2123).
  - Replacing or disabling the Muse plugin now releases its open native sessions in [#184941](https://github.com/openclaw/openclaw/pull/184941). Thanks to [steipete](https://github.com/steipete) and [pstarkgit](https://github.com/pstarkgit).
  - Binding or unbinding an agent by channel name now recognizes that channel consistently in [#184717](https://github.com/openclaw/openclaw/pull/184717), addressing [#184636](https://github.com/openclaw/openclaw/issues/184636). Thanks to [a-raphie](https://github.com/a-raphie), [obviyus](https://github.com/obviyus), and [yetval](https://github.com/yetval).
  - A false conversation conflict no longer blocks recording native token usage in [#184427](https://github.com/openclaw/openclaw/pull/184427). Thanks to [steipete](https://github.com/steipete).
  - Cleanup no longer repeatedly waits on an outdated native binding view, including when request tracing is active, in [7cc1ca6](https://github.com/openclaw/openclaw/commit/7cc1ca64798cf9897b3f27e1751ae2a8e73d462d).
  - Deleting an agent waits for its usage cleanup, and failed usage refresh cleanup can retry in [5ac29c6](https://github.com/openclaw/openclaw/commit/5ac29c6c966ea36ca05fe3585fe56520f70bc474) and [6a3b706](https://github.com/openclaw/openclaw/commit/6a3b7067d5e98fa9eb4055eb10e99c85591d352e). Thanks to [steipete](https://github.com/steipete).
  - A heartbeat check blocked by an agent being deleted can resume without restarting the Gateway in [8484ee5](https://github.com/openclaw/openclaw/commit/8484ee5268faea844415392eff5a965068d8c207).
  - Retrying a hook no longer spends as long waiting to check whether its agent is being deleted in [20d12e8](https://github.com/openclaw/openclaw/commit/20d12e8a4dce7af751315e08494467d38d14d35f). Thanks to [VACInc](https://github.com/VACInc).
  - Node 26 worker processes no longer abort when their input comes from a file or is ignored in [#187516](https://github.com/openclaw/openclaw/pull/187516) and its backport [#187553](https://github.com/openclaw/openclaw/pull/187553). Thanks to [RomneyDa](https://github.com/RomneyDa).
  - The upgrade adds indexes used by conversation lookups and delivery cleanup, and scans existing records as it applies them. [#169414](https://github.com/openclaw/openclaw/pull/169414). Thanks [@steipete](https://github.com/steipete).
  - Use the committed role policy after profile lookup for a pending operator turn, so a temporary downgrade restored during lookup does not reject it. A persistent downgrade still restricts the turn. [#169607](https://github.com/openclaw/openclaw/pull/169607). Thanks [@steipete](https://github.com/steipete).
  - Preserve unrelated credential updates when Model Setup activation fails, and provide async replacements for deprecated synchronous OAuth SDK methods. [#169633](https://github.com/openclaw/openclaw/pull/169633). Thanks [@steipete](https://github.com/steipete).
  - `/status` and `session_status` show which sign-in profile or safe credential source the session is using, without displaying the secret. [#169721](https://github.com/openclaw/openclaw/pull/169721), [issue #82020](https://github.com/openclaw/openclaw/issues/82020) and [earlier investigation #90689](https://github.com/openclaw/openclaw/pull/90689). Thanks [@steipete](https://github.com/steipete), [@ly85206559](https://github.com/ly85206559) and reporter [@davidjoshua7692-code](https://github.com/davidjoshua7692-code).
  - Gateway access checks now respect a profile role downgrade or deletion instead of retaining its old access. [#169799](https://github.com/openclaw/openclaw/pull/169799). Thanks [@steipete](https://github.com/steipete).
  - A Claw MCP setup retry that succeeds no longer returns an old failure message. [#169756](https://github.com/openclaw/openclaw/pull/169756). Thanks [@steipete](https://github.com/steipete).
  - Config set, patch and unset dry runs work while the Gateway owns state, and an unchanged offline set no longer creates an absent state database in [#170202](https://github.com/openclaw/openclaw/pull/170202). Thanks [@steipete](https://github.com/steipete).
  - The database upgrade retains ACP resume information and saved update progress. It does not make PostgreSQL a supported runtime database. [PR #170280](https://github.com/openclaw/openclaw/pull/170280), with the storage design in [#169254](https://github.com/openclaw/openclaw/issues/169254). Thanks [@steipete](https://github.com/steipete).

  </details>

- [Update preparation](/install/updating) refreshes the selected target before you confirm, and supported package and Bun installs handle more interrupted or unusual first-upgrade paths.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - The Inbox's Dev Git update card refreshes the target when opened and checks it again before you confirm. Opening the card alone does not update anything. [#158053](https://github.com/openclaw/openclaw/pull/158053). Thanks to [vincentkoc](https://github.com/vincentkoc), [steipete](https://github.com/steipete), and [RomneyDa](https://github.com/RomneyDa).
  - A specified update timeout now also covers Doctor and service preparation; if stopping the service has begun, OpenClaw can still finish that stop and restore it. [#166000](https://github.com/openclaw/openclaw/pull/166000). Thanks to [dankarization](https://github.com/dankarization) and [steipete](https://github.com/steipete).
  - Allow valid Dev updates and Mac recovery to proceed when saved receipt hints are missing or stale. An older updater may still need the documented manual route for its first upgrade. [#167459](https://github.com/openclaw/openclaw/pull/167459), [reported in #167441](https://github.com/openclaw/openclaw/issues/167441). Thanks to [fuller-stack-dev](https://github.com/fuller-stack-dev).
  - On supported hosts, `install.sh --runtime bun` can install with a verified pinned Bun runtime and set up the Gateway service. A fresh `--no-onboard` install does not create that service. [#168832](https://github.com/openclaw/openclaw/pull/168832) by [@steipete](https://github.com/steipete).
  - On FreeBSD, an interrupted npm update can be repaired when its helper was created by an updater with this fix. Package repair alone does not restart or verify the Gateway. [#168775](https://github.com/openclaw/openclaw/pull/168775) by [@steipete](https://github.com/steipete).
  - The first upgrade from stable 2026.10.1 retains the files needed to finish its cleanup after package replacement. [#168740](https://github.com/openclaw/openclaw/pull/168740) and [#168849](https://github.com/openclaw/openclaw/pull/168849) by [@RomneyDa](https://github.com/RomneyDa), with thanks to [@steipete](https://github.com/steipete) for independently checking the compatibility mappings in #168740.
  - A configuration edit during an update no longer silently changes the selected target, and a busy plugin change asks you to retry. [#168882](https://github.com/openclaw/openclaw/pull/168882) by [@steipete](https://github.com/steipete).
  - Update subprocesses retain your configured Gateway memory limits and any explicit override. [#168889](https://github.com/openclaw/openclaw/pull/168889), thanks [@steipete](https://github.com/steipete) and issue reporter [@bluet](https://github.com/bluet).
  - If an update fails after migrating data, its error points to repair for the affected profile and explains why maintenance stopped. [#168905](https://github.com/openclaw/openclaw/pull/168905), thanks [@steipete](https://github.com/steipete) and [@ezimerman](https://github.com/ezimerman) for the incident report and repair follow-up.
  - An updater with this fix no longer copies unrelated neighboring packages or fails when those packages change. [#168927](https://github.com/openclaw/openclaw/pull/168927), thanks [@steipete](https://github.com/steipete).
  - Package updates spend less time checking the same unchanged runtime files repeatedly. [#168958](https://github.com/openclaw/openclaw/pull/168958), thanks [@steipete](https://github.com/steipete).
  - A managed update accepted for background work now says it is pending, not failed; the helper still has to finish before the result is known. [#168993](https://github.com/openclaw/openclaw/pull/168993), thanks [@steipete](https://github.com/steipete) and issue reporter [@sayitfast](https://github.com/sayitfast).
  - An installation managed by pacman now tells you to update through your system package manager rather than trying to replace itself. [#169055](https://github.com/openclaw/openclaw/pull/169055), thanks [@steipete](https://github.com/steipete), [@sahilsatralkar](https://github.com/sahilsatralkar), and issue reporter [@Pegorim](https://github.com/Pegorim).
  - Uninterrupted npm updates on Unix-like systems avoid repeat checks of a newly prepared package; recovery still verifies its contents. [#169075](https://github.com/openclaw/openclaw/pull/169075), thanks [@steipete](https://github.com/steipete).
  - Recovery from an interrupted update no longer waits the wrong length of time after a clock change. [#169168](https://github.com/openclaw/openclaw/pull/169168), thanks [@SunnyShu0925](https://github.com/SunnyShu0925).
  - The first update from a Bun-pinned macOS npm-global 2026.9.9 install needs a temporary switch to Node, an update through 2026.10.1, then a return to Bun. [Bun guide](/install/bun), [#168901](https://github.com/openclaw/openclaw/pull/168901), thanks [@steipete](https://github.com/steipete).
  - Installation now checks a custom Bun path before changing anything and explains that the executable must be named `bun` or `bun.exe`. [#168982](https://github.com/openclaw/openclaw/pull/168982), thanks [@steipete](https://github.com/steipete).
  - Opt-in Bun installations receive the updated build's memory-limit and worker-lifecycle fixes. [#169009](https://github.com/openclaw/openclaw/pull/169009), thanks [@steipete](https://github.com/steipete).
  - Source builders can make a runtime-only build, also used by Team server deployments. [#169039](https://github.com/openclaw/openclaw/pull/169039), thanks [@steipete](https://github.com/steipete).

  </details>

- Updates and [rollback](/install/updating/rollback-and-recovery) now leave more unrelated settings and checkout edits alone when a later step fails.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - A suspiciously shortened configuration file no longer replaces the healthy recovery copy that Doctor can use to restore your settings. [#152565](https://github.com/openclaw/openclaw/pull/152565), [reported in #152509](https://github.com/openclaw/openclaw/issues/152509). Thanks to [LiuwqGit](https://github.com/LiuwqGit), [RomneyDa](https://github.com/RomneyDa), and [yetval](https://github.com/yetval).
  - Doctor and updates now keep a blocked local plugin's saved settings intact. The plugin stays blocked until you fix its unsafe path. [#168111](https://github.com/openclaw/openclaw/pull/168111), [reported in #168066](https://github.com/openclaw/openclaw/issues/168066). Thanks to [obviyus](https://github.com/obviyus).
  - A Linux Gateway keeps running if its log folder disappears during log rotation. File logs may still be lost, and OpenClaw warns about that. [#160433](https://github.com/openclaw/openclaw/pull/160433), [related report #130807](https://github.com/openclaw/openclaw/issues/130807). Thanks to [masatohoshino](https://github.com/masatohoshino), [WadeOwenWatts](https://github.com/WadeOwenWatts), [Patrick-Erichsen](https://github.com/Patrick-Erichsen), and [obviyus](https://github.com/obviyus).
  - A Tailscale outage during startup no longer leaves channels suppressed after the connection returns. Restore Tailscale and restart the Gateway to recover. [#162266](https://github.com/openclaw/openclaw/pull/162266), [related report #144845](https://github.com/openclaw/openclaw/issues/144845). Thanks to [RomneyDa](https://github.com/RomneyDa) and [odrobnik](https://github.com/odrobnik).
  - Gateway worker memory limits work again with ordinary combinations of Node memory flags. The explicit `--exit-on-contradictory-flags` mode remains incompatible with some heap flags. [#166581](https://github.com/openclaw/openclaw/pull/166581), [reports #157575](https://github.com/openclaw/openclaw/issues/157575) and [#157630](https://github.com/openclaw/openclaw/issues/157630). Thanks to [valkyriweb](https://github.com/valkyriweb), [xydigitLybnnnn](https://github.com/xydigitLybnnnn), [goslingmanagment](https://github.com/goslingmanagment), and [waynegault](https://github.com/waynegault).
  - Checking a remote Gateway restart no longer waits the wrong length of time after a clock change. [#168087](https://github.com/openclaw/openclaw/pull/168087). Thanks to [SunnyShu0925](https://github.com/SunnyShu0925).
  - Cleanup keeps the latest recovery copy and other copies still needed to investigate an uncertain update. [Update capture cleanup](https://github.com/openclaw/openclaw/pull/168177). Thanks [@obviyus](https://github.com/obviyus).
  - Updates without a restart and older installed updaters continue running Doctor checks in their supported order. [Doctor inspection timing](https://github.com/openclaw/openclaw/pull/168350). Thanks [@obviyus](https://github.com/obviyus).
  - `openclaw database verify-preservation` compares sealed original and candidate captures for the supported schema 24-to-25 migration. It requires both manifest digests and does not approve activation. Inspection of vector-backed tables may fail. [Database preservation check](https://github.com/openclaw/openclaw/pull/168321). Thanks [@steipete](https://github.com/steipete).
  - A linked plugin whose path and health are verified can finish migration during an update; unavailable or unrecognized plugin paths remain pending. [Linked plugin migration](https://github.com/openclaw/openclaw/pull/168190). Thanks [@obviyus](https://github.com/obviyus).
  - Repair can recognize an update still legitimately running instead of taking over its files. [Concurrent update repair](https://github.com/openclaw/openclaw/pull/168197), [related report](https://github.com/openclaw/openclaw/issues/168000). Thanks [@steipete](https://github.com/steipete) and [@farisoftfry](https://github.com/farisoftfry).
  - An updater with this fix can continue if a busy database prevents an optional progress entry, while still requiring records needed for recovery. [Update database contention](https://github.com/openclaw/openclaw/pull/168210), [contention report](https://github.com/openclaw/openclaw/issues/168072). Thanks [@steipete](https://github.com/steipete) and [@jlapenna](https://github.com/jlapenna).
  - If an update cannot finish backing up the original state, its warning identifies the affected databases and backup error; the incomplete copy remains for investigation, not automatic restore. [#169282](https://github.com/openclaw/openclaw/pull/169282), [report](https://github.com/openclaw/openclaw/issues/169259). Thanks [@DonnieFi](https://github.com/DonnieFi).
  - New pre-migration recovery copies now include older Canvas and Memory files. Existing backups do not gain files they already missed. [#169436](https://github.com/openclaw/openclaw/pull/169436). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Backup SQLite discovery uses the current runtime, so affected Bun installations do not need a separate Node executable for this step. [#183476](https://github.com/openclaw/openclaw/pull/183476) Thanks [@steipete](https://github.com/steipete).
  - If you cancel workspace preparation and Git cleanup is uncertain, OpenClaw reports that uncertainty and keeps temporary recovery copies. [#184226](https://github.com/openclaw/openclaw/pull/184226) Thanks [@shakkernerd](https://github.com/shakkernerd).
  - Retry temporary Windows package rollback failures and report retained recovery paths when the installed package root is missing ([#185160](https://github.com/openclaw/openclaw/pull/185160), [#187274](https://github.com/openclaw/openclaw/pull/187274)). Thanks to [@liuwqgit](https://github.com/liuwqgit), [@RomneyDa](https://github.com/RomneyDa), and reporter [@syxscott](https://github.com/syxscott).
  - An immediate Git rollback now leaves newly detected checkout edits alone and shows manual recovery commands. Updater staging and built Control UI files are outside this check ([#185201](https://github.com/openclaw/openclaw/pull/185201)). Thanks to [@wr-web](https://github.com/wr-web) and reporter [@syxscott](https://github.com/syxscott).
  - Completed supervised updates now appear in update history, allowing eligible earlier migration backups to be cleaned up explicitly while offline ([#185392](https://github.com/openclaw/openclaw/pull/185392)). Thanks to [@steipete](https://github.com/steipete).
  - Update verification now stops repeating a confirmed access refusal and can check local Gateway readiness when its other safeguards allow it ([#185995](https://github.com/openclaw/openclaw/pull/185995)). Thanks to [@Yun-0000](https://github.com/Yun-0000) and reporter [@lakemike](https://github.com/lakemike).
  - Retain the selected installed Node runtime and service authority through eligible managed package updates ([#187108](https://github.com/openclaw/openclaw/pull/187108)). Thanks to [@RomneyDa](https://github.com/RomneyDa).
  - Retain failed Doctor details in update history and advise stopping the Gateway through its owner and running `openclaw update repair` when service inspection is unavailable ([#187574](https://github.com/openclaw/openclaw/pull/187574)). Thanks to [@RomneyDa](https://github.com/RomneyDa), [@steipete](https://github.com/steipete), and [@patrick-erichsen](https://github.com/patrick-erichsen).
  - Verified package updates can clean up migration copies that are no longer needed, including copies associated with a recorded restore refusal ([#187581](https://github.com/openclaw/openclaw/pull/187581)). Thanks to [@RomneyDa](https://github.com/RomneyDa).
  - Doctor can repair an app-managed Gateway's settings and data after confirming it is offline; the app still owns service startup and shutdown. [Commit](https://github.com/openclaw/openclaw/commit/b5176e33011942035ea43cbdcbd2cae0df944934)
  - Recovery checks that a migration backup is still the same file before using it. [Commit](https://github.com/openclaw/openclaw/commit/28df9fe159fc9fb833d25e2c534d5e780f9e4c50)
  - Offline Doctor and update maintenance can finish cleanup even if an older maintenance policy was retired. [Commit](https://github.com/openclaw/openclaw/commit/019fdde9a9ba6d9dbf6d1f41733d3e685df67220)
  - If Doctor cannot capture the original state in time, the warning names the deadline and advises checking your backup before retrying after the failure is resolved. Helper maintenance also stops after its parent disappears. [Commit](https://github.com/openclaw/openclaw/commit/0b5fb78e3a2db38bf1b915a1bb7a8b2797d4867b), thanks to [RomneyDa](https://github.com/RomneyDa).
  - After repairing the Gateway service, OpenClaw checks the current app autostart setting again. [Commit](https://github.com/openclaw/openclaw/commit/215cadc147444a22bf7f2d20963a8c56c961e1c9), thanks to [RomneyDa](https://github.com/RomneyDa).
  - A healthy Gateway can pass update restart checks despite an old authentication warning; an actual failed health check or version mismatch still blocks verification. [Commit](https://github.com/openclaw/openclaw/commit/b391dee01d810309067c18c8c681e2d984758724), thanks to [RomneyDa](https://github.com/RomneyDa).

  </details>

- After an update, the result now says whether the core installation finished but channel, plugin or restart checks still need attention. A recorded success describes that update, not the Gateway's current health.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Update status shows the recorded failure, recovery steps and last completed activation. That history does not establish whether the Gateway is healthy right now. [Update status and recovery](https://github.com/openclaw/openclaw/pull/168203). Thanks [@steipete](https://github.com/steipete).
  - Before an update, status and dry run can show database differences for a prepared candidate. They cannot judge an unprepared target or promise activation just because versions match. [Immutable update inspection](https://github.com/openclaw/openclaw/pull/168295). Thanks [@steipete](https://github.com/steipete).
  - Update output shows how long preparation, cleanup, activation and Doctor checks took. Most of these timings become available on the next update after installing this version. [Update phase timings](https://github.com/openclaw/openclaw/pull/168290). Thanks [@obviyus](https://github.com/obviyus).
  - Update results show time spent preparing the runtime and service. The handoff time may appear during this installation; other new timings need the updated updater on a later run. [Updater and service timings](https://github.com/openclaw/openclaw/pull/168409). Thanks [@obviyus](https://github.com/obviyus).
  - A recovery helper can clear a completed update record blocking an older updater while keeping the record for inspection. [Completed receipt recovery](https://github.com/openclaw/openclaw/pull/168388), [reported macOS blocker](https://github.com/openclaw/openclaw/issues/168092), [related Linux report](https://github.com/openclaw/openclaw/issues/166135). Thanks [@steipete](https://github.com/steipete), [@k94118](https://github.com/k94118), [@kimjinsuhh](https://github.com/kimjinsuhh), [@GoldenrodScript](https://github.com/GoldenrodScript) and [@neilofneils404](https://github.com/neilofneils404).
  - Remove obsolete warnings for completed plugin migrations and keep package-verification time limits steady when the system clock changes. [#169004](https://github.com/openclaw/openclaw/pull/169004), thanks [@steipete](https://github.com/steipete), [@adenzhou1350](https://github.com/adenzhou1350), and issue reporter [@WG-Mojo](https://github.com/WG-Mojo).
  - A newer CLI can clear some aborted 2026.9.8 update records, but warns when it cannot recheck their old contents. If that cleanup fails, repair reports the failure. [#169027](https://github.com/openclaw/openclaw/pull/169027), thanks [@steipete](https://github.com/steipete) and [@chedong](https://github.com/chedong) for the report and investigation.
  - A completed update keeps its success record even if reporting it fails, while accounts still stopped after repair receive a warning. [#169037](https://github.com/openclaw/openclaw/pull/169037), thanks [@steipete](https://github.com/steipete), [@kvnloo](https://github.com/kvnloo), and [@RomneyDa](https://github.com/RomneyDa).
  - Before another update, repair can clear eligible stale package records and archive completed results. A dry run shows the plan without changing files. [#169038](https://github.com/openclaw/openclaw/pull/169038), thanks [@steipete](https://github.com/steipete), [@mkdelta221](https://github.com/mkdelta221), [@waynegault](https://github.com/waynegault), [@clawdgawd](https://github.com/clawdgawd), [@yoyo837](https://github.com/yoyo837), [@lishewen](https://github.com/lishewen), [@nukk-pain](https://github.com/nukk-pain), [@jullianatolentino](https://github.com/jullianatolentino), [@joshpetras](https://github.com/joshpetras), and [@creanet-64](https://github.com/creanet-64) for the reports and recovery follow-ups.
  - Update failures explain dependency links that reach OpenClaw-owned files and show the observed Gateway service status when readiness cannot be verified. See the [runtime retention guidance](/cli/update#runtime-retention-failures). [#169280](https://github.com/openclaw/openclaw/pull/169280). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - If an update cannot read an optional setting, its warning now says why and leaves the current service unchanged. [#169284](https://github.com/openclaw/openclaw/pull/169284), [report](https://github.com/openclaw/openclaw/issues/169261). Thanks [@DonnieFi](https://github.com/DonnieFi) and [@RomneyDa](https://github.com/RomneyDa).
  - Doctor avoids misleading backup warnings for several bundled migrations and gives guidance when a plugin's migration coverage is unknown. See [plugin migration recovery coverage](/cli/doctor/state-migrations#plugin-migration-recovery-coverage). [#169295](https://github.com/openclaw/openclaw/pull/169295). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - An update can finish with a channel warning only after the Gateway itself passes service, version and readiness checks. The channel still needs attention. [#172494](https://github.com/openclaw/openclaw/pull/172494), reported in [#172391](https://github.com/openclaw/openclaw/issues/172391). Thanks to [@steipete](https://github.com/steipete) and [@sbc2016](https://github.com/sbc2016).
  - If refreshing shell completions times out after the installation and cleanup finish, the update can still report success with a warning. Run `openclaw completion --write-state` to refresh completions manually. [#172502](https://github.com/openclaw/openclaw/pull/172502), thanks [@steipete](https://github.com/steipete).
  - Doctor no longer drops older channel settings that still await migration while saving unrelated update repairs. [#172791](https://github.com/openclaw/openclaw/pull/172791), thanks [@RomneyDa](https://github.com/RomneyDa).
  - An upgrade can replace eligible old Linux Gateway service files with private permissions; a separate Doctor repair still needs your approval. [#172790](https://github.com/openclaw/openclaw/pull/172790), thanks [@obviyus](https://github.com/obviyus) and [@wei887-os](https://github.com/wei887-os) for the [report](https://github.com/openclaw/openclaw/issues/152533).
  - Update warnings identify a missing pacman or FreeBSD pkg executable instead of suggesting a database repair for a package manager that is unavailable. [#173293](https://github.com/openclaw/openclaw/pull/173293), thanks [@steipete](https://github.com/steipete), [@wangmiao0668000666](https://github.com/wangmiao0668000666), [@sunlit-deng](https://github.com/sunlit-deng), and [@DonnieFi](https://github.com/DonnieFi).
  - A verified core installation can finish with a warning if later plugin checks cannot complete. Retry them with `openclaw update repair`, stopping the Gateway first if exclusive access is required; a failed readiness check or uncertain cleanup still blocks completion. [#173341](https://github.com/openclaw/openclaw/pull/173341), thanks [@steipete](https://github.com/steipete) and [@yoyo837](https://github.com/yoyo837) for the [report](https://github.com/openclaw/openclaw/issues/171096).
  - Updating an unhealthy Gateway in the same installation no longer consumes the new Gateway's startup window waiting for the old one; the replacement still must pass its checks. [#173358](https://github.com/openclaw/openclaw/pull/173358), thanks [@steipete](https://github.com/steipete).
  - A successful update report clears plugin warnings that have been resolved and points to Doctor when more work remains. [#173395](https://github.com/openclaw/openclaw/pull/173395), thanks [@steipete](https://github.com/steipete), [@DonnieFi](https://github.com/DonnieFi), and [@bhedanikhilkumar-code](https://github.com/bhedanikhilkumar-code).
  - A global package update using `--no-restart` can still be followed by a Gateway-initiated restart. The flag skips only the updater's restart; check Gateway status after startup and keep recovery backups until it is verified. [#173409](https://github.com/openclaw/openclaw/pull/173409), thanks [@steipete](https://github.com/steipete) and [@mwbroxson](https://github.com/mwbroxson) for the [report](https://github.com/openclaw/openclaw/issues/171311).

  </details>

- Supported [update recovery](/cli/update/repair-and-recovery) can resume more updates blocked by temporary contention or abandoned work, while refusing to repeat steps whose outcome is uncertain. An older broken updater may still need the documented manual recovery path.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Slow database checks no longer falsely exhaust systemd service-inspection time during Linux Doctor or update repair. The checks can still make the overall command slow. [Linux maintenance inspection](https://github.com/openclaw/openclaw/pull/168161), [report](https://github.com/openclaw/openclaw/issues/168031). Thanks [@obviyus](https://github.com/obviyus) and [@Tosko4](https://github.com/Tosko4).
  - Temporary progress-output congestion no longer aborts database metadata inventory in an updater containing the fix. An older updater that fails before activation cannot acquire this fix during that attempt. [Update progress output](https://github.com/openclaw/openclaw/pull/168493), [related report](https://github.com/openclaw/openclaw/issues/161042). Thanks [@vincentkoc](https://github.com/vincentkoc) and [@creanet-64](https://github.com/creanet-64).
  - The restart check for an update now uses its intended time limit. [Update readiness deadline](https://github.com/openclaw/openclaw/pull/168496). Thanks [@steipete](https://github.com/steipete).
  - A newly activated Gateway is not reported as ready until its session list can be read. An empty list counts as a successful read. [Activation session check](https://github.com/openclaw/openclaw/pull/168561). Thanks [@steipete](https://github.com/steipete).
  - Team-managed updates can finish migration verification after Doctor removes an obsolete optional Workshop table. [Managed update verification](https://github.com/openclaw/openclaw/pull/168577). Thanks [@steipete](https://github.com/steipete).
  - Recording an update no longer holds the database writer while waiting for its first approval, so scheduled work and cleanup have more room to run. The final save still requires the lock. [#169283](https://github.com/openclaw/openclaw/pull/169283), [report](https://github.com/openclaw/openclaw/issues/169260). Thanks [@DonnieFi](https://github.com/DonnieFi).
  - Windows updates entered through short or differently cased paths keep the files their running updater needs and can clean up abandoned copies. [#169292](https://github.com/openclaw/openclaw/pull/169292). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Windows database-recovery helpers now pass their temporary-folder checks; this does not make every update command available on Windows. [#169397](https://github.com/openclaw/openclaw/pull/169397). Thanks [@steipete](https://github.com/steipete).
  - If a disk remount changes device numbers during an update, a separately installed helper can resolve an eligible unfinished installation without discarding its recovery evidence. Follow the [remount recovery guide](/install/updating#recover-an-unfinished-publication-after-a-remount) before using it. [#169410](https://github.com/openclaw/openclaw/pull/169410), [report](https://github.com/openclaw/openclaw/issues/169050). Thanks [@patrickschiller](https://github.com/patrickschiller) and [@RomneyDa](https://github.com/RomneyDa).
  - Git updates clean up their temporary worktree when progress reporting fails and retain the original update error alongside cleanup diagnostics. [#169454](https://github.com/openclaw/openclaw/pull/169454), [report](https://github.com/openclaw/openclaw/issues/169446). Thanks [@hannesrudolph](https://github.com/hannesrudolph).
  - Update and Doctor checks no longer fail just because an installation has no agents, and they refuse unsafe links in Canvas folders before migration. [#169516](https://github.com/openclaw/openclaw/pull/169516). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - On resolved npm-global installations, the updater avoids retaining unrelated global packages while keeping the dependencies it reaches. The first upgrade from an older updater still uses that updater's behavior. [#169551](https://github.com/openclaw/openclaw/pull/169551), [report](https://github.com/openclaw/openclaw/issues/169373), [related investigation](https://github.com/openclaw/openclaw/pull/169521). Thanks [@RomneyDa](https://github.com/RomneyDa), [@holgergruenhagen](https://github.com/holgergruenhagen) and [@goutamadwant](https://github.com/goutamadwant).
  - Doctor can keep an update going if a later process check fails after it already verified the updater. It still refuses one it never verified. [#169563](https://github.com/openclaw/openclaw/pull/169563). Thanks [@RomneyDa](https://github.com/RomneyDa).

  Several of these update fixes depend on the updater already installed when an update starts. Installing a corrected candidate does not change an older updater's earlier steps.

  - If service refresh refuses before changing anything, repair can restart the preserved and rechecked Gateway service while still reporting the refusal. [#169658](https://github.com/openclaw/openclaw/pull/169658). Thanks [@steipete](https://github.com/steipete).
  - Doctor can continue under a verified updater even if it cannot inspect a higher supervisor. New repair commands keep their identity if setup fails; older anonymous records still need attention. [#169665](https://github.com/openclaw/openclaw/pull/169665). Thanks [@steipete](https://github.com/steipete).
  - Managed Team upgrades use the candidate version's Doctor migration when supported; unknown future database versions and downgrades remain blocked. [#169752](https://github.com/openclaw/openclaw/pull/169752). Thanks [@steipete](https://github.com/steipete).
  - Saved ACP conversation information can be brought over once its plugin is available, without adding it to a conversation that has closed or been replaced. [#169759](https://github.com/openclaw/openclaw/pull/169759). Thanks [@romneyda](https://github.com/romneyda).
  - Doctor can try to restore the Gateway after a temporary cleanup failure clears on retry, but still reports the failure; unfinished cleanup continues to block restart. [#169783](https://github.com/openclaw/openclaw/pull/169783). Thanks [@romneyda](https://github.com/romneyda).
  - Update recovery no longer rolls back a verified healthy Gateway after migration and discards its newer saved work. [#169841](https://github.com/openclaw/openclaw/pull/169841). Thanks [@steipete](https://github.com/steipete).
  - Supported older Node updaters no longer mistake a clock transition for lost ownership and undo an already activated update. [#169915](https://github.com/openclaw/openclaw/pull/169915). Thanks [@vincentkoc](https://github.com/vincentkoc).
  - A Doctor command that never started no longer leaves a false running-process record that blocks another recovery attempt. [#169936](https://github.com/openclaw/openclaw/pull/169936). Thanks [@steipete](https://github.com/steipete).
  - Doctor checks deferred until after restart now run against the updated Gateway and report any work they could not finish. [#169940](https://github.com/openclaw/openclaw/pull/169940), building on [#168350](https://github.com/openclaw/openclaw/pull/168350). Thanks [@steipete](https://github.com/steipete) and [@obviyus](https://github.com/obviyus).
  - New or repaired pnpm Gateway services use a stable project path, and nested pnpm installations can be recognized for updates. Existing version-pinned service commands may need repair. See [#170003](https://github.com/openclaw/openclaw/pull/170003) and [the report](https://github.com/openclaw/openclaw/issues/169059). Thanks [@steipete](https://github.com/steipete), [@xilopaint](https://github.com/xilopaint) and [@k-sekula](https://github.com/k-sekula).
  - Offline Doctor and update recovery now pause scheduled database housekeeping so it cannot alter a recovery copy while one is being made in [#170022](https://github.com/openclaw/openclaw/pull/170022). Thanks [@steipete](https://github.com/steipete).
  - Update repair can settle eligible journals after filesystem device numbers change, including a verified newer manual installation. Older updaters may need the documented recovery helper first. See [#170046](https://github.com/openclaw/openclaw/pull/170046), [#169050](https://github.com/openclaw/openclaw/issues/169050) and [#169352](https://github.com/openclaw/openclaw/issues/169352). Thanks [@steipete](https://github.com/steipete), [@patrickschiller](https://github.com/patrickschiller) and [@SergeiAug](https://github.com/SergeiAug).
  - Doctor now checks for unsupported old files before changing a database, so you can take the supported intermediate upgrade route if it refuses. See [#170051](https://github.com/openclaw/openclaw/pull/170051) and [#169918](https://github.com/openclaw/openclaw/issues/169918). Thanks [@steipete](https://github.com/steipete) and [@bautrey](https://github.com/bautrey).
  - Once the installed updater contains this fix, pnpm 12 update cleanup leaves the launcher pointing at the new package. A launcher already broken still needs manual repair. See [#170131](https://github.com/openclaw/openclaw/pull/170131) and [#169244](https://github.com/openclaw/openclaw/issues/169244). Thanks [@steipete](https://github.com/steipete), [@goutamadwant](https://github.com/goutamadwant) and [@k-sekula](https://github.com/k-sekula).
  - Standalone repair that must wait now reports an incomplete result and tells you how to stop the right Gateway. An update's own final step instead reports a warning. See [#170139](https://github.com/openclaw/openclaw/pull/170139) and [#169462](https://github.com/openclaw/openclaw/issues/169462). Thanks [@steipete](https://github.com/steipete) and [@jjgao](https://github.com/jjgao).
  - Doctor can find abandoned updater files that were blocking later npm updates. See [#170170](https://github.com/openclaw/openclaw/pull/170170) and [#169463](https://github.com/openclaw/openclaw/issues/169463). Thanks [@steipete](https://github.com/steipete), [@sunnyshu0925](https://github.com/sunnyshu0925) and [@warhangel](https://github.com/warhangel).
  - Linux update repair can clean up abandoned updater files even when ordinary login processes use their parent directory. A live holder still blocks cleanup. [#171488](https://github.com/openclaw/openclaw/pull/171488) by [RomneyDa](https://github.com/RomneyDa). Thanks to [DonnieFi](https://github.com/DonnieFi) for [reporting the issue](https://github.com/openclaw/openclaw/issues/171410).
  - Scheduled work can proceed while an update waits for permission to save its result. Both the installed updater and its worker need this fix. [#171493](https://github.com/openclaw/openclaw/pull/171493) by [RomneyDa](https://github.com/RomneyDa). Thanks to [DonnieFi](https://github.com/DonnieFi) for the reports and investigation in [#169260](https://github.com/openclaw/openclaw/issues/169260) and [#171411](https://github.com/openclaw/openclaw/issues/171411), and for the earlier partial repair.
  - If Doctor fails before changing databases, an update can restore the previous package and databases. Unattributed database writes still prevent automatic restoration. [#172151](https://github.com/openclaw/openclaw/pull/172151). Thanks to [@RomneyDa](https://github.com/RomneyDa).
  - An update no longer refuses its database check just because an active agent is writing. Older installed updaters may still warn while capturing the original state. [#172196](https://github.com/openclaw/openclaw/pull/172196). Thanks to [@RomneyDa](https://github.com/RomneyDa).
  - If Doctor cannot inspect the updater's process tree after an otherwise verified installation, the update stays installed and reports how to finish maintenance. [#172247](https://github.com/openclaw/openclaw/pull/172247), reported in [#172213](https://github.com/openclaw/openclaw/issues/172213). Thanks to [@steipete](https://github.com/steipete) and [@homeworld520](https://github.com/homeworld520).
  - Agent data can migrate correctly when updating from 2026.10.5 beta.2 or beta.3 to a main-based build. [#172249](https://github.com/openclaw/openclaw/pull/172249). Thanks to [@RomneyDa](https://github.com/RomneyDa).
  - A dev-channel Git update fetches the selected upstream and stops with an explanation if that remote is invalid or excluded. [#172199](https://github.com/openclaw/openclaw/pull/172199). Thanks to [@steipete](https://github.com/steipete).
  - If cleanup of a prepared update copy fails, the recovery guide explains how to proceed and what safe error detail to include in a report. [#172171](https://github.com/openclaw/openclaw/pull/172171), related to [#172104](https://github.com/openclaw/openclaw/issues/172104). Thanks to [@steipete](https://github.com/steipete) and [@warezio](https://github.com/warezio).

  </details>

- Doctor and common configuration commands do less repeated scanning, and warnings better distinguish a real repair problem from an unchanged or already-settled one.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Read-only Doctor checks no longer repeatedly scan the entire database when no writer is cached. [#169745](https://github.com/openclaw/openclaw/pull/169745). Thanks [@steipete](https://github.com/steipete).
  - Doctor repair spends less time rescanning unchanged state while it continues. [#169905](https://github.com/openclaw/openclaw/pull/169905). Thanks [@steipete](https://github.com/steipete).
  - Routine configuration reads no longer check the deferred plugin migration ledger. Doctor and managed updates retain pending repair information. [PR #170230](https://github.com/openclaw/openclaw/pull/170230). Thanks [@steipete](https://github.com/steipete).
  - Doctor and conversation reads no longer load model-provider connections just to clean up saved transcript checkpoints. [#170585](https://github.com/openclaw/openclaw/pull/170585). Thanks to [steipete](https://github.com/steipete).
  - Common `openclaw config get`, `set` and `validate` commands no longer wait for plugin database checks they do not need. [#170685](https://github.com/openclaw/openclaw/pull/170685). Thanks to [steipete](https://github.com/steipete).
  - Doctor reuses a valid database check while backing up plugins instead of making you wait for the same scan repeatedly. [#170934](https://github.com/openclaw/openclaw/pull/170934), [report #170773](https://github.com/openclaw/openclaw/issues/170773), related [#169745](https://github.com/openclaw/openclaw/pull/169745). Thanks to [@steipete](https://github.com/steipete), [@rozenpl](https://github.com/rozenpl), and [@jb510](https://github.com/jb510).
  - Database workers can reuse a valid check when they reopen the same file instead of rescanning it. [#167739](https://github.com/openclaw/openclaw/pull/167739). Thanks to [steipete](https://github.com/steipete).
  - Chat turns spend less time on repeated database checks and bookkeeping. [#167965](https://github.com/openclaw/openclaw/pull/167965). Thanks to [steipete](https://github.com/steipete).
  - Chat turns and idle pairing checks do less database work; an external supervisor must hold the installation offline before claiming it. [#168002](https://github.com/openclaw/openclaw/pull/168002). Thanks to [steipete](https://github.com/steipete).
  - Fixes a database-lock loss that could crash OpenClaw when an agent reads a live SQLite file. The broader recurring-crash report remains unresolved. [SQLite lock protection](https://github.com/openclaw/openclaw/pull/168274), [related crash report](https://github.com/openclaw/openclaw/issues/167671). Thanks [@steipete](https://github.com/steipete) and [@3n8](https://github.com/3n8).
  - Gateway startup and later worker opens avoid repeated full database scans after index repair. [Database checks after index repair](https://github.com/openclaw/openclaw/pull/168517), [related startup investigation](https://github.com/openclaw/openclaw/issues/168468). Thanks [@steipete](https://github.com/steipete) and [@TommyLei666](https://github.com/TommyLei666).
  - A Gateway running for a long time no longer keeps finished-run histories from model versions it has already replaced. [Model generation memory retention](https://github.com/openclaw/openclaw/pull/168584). Thanks [@steipete](https://github.com/steipete).
  - Node uses its normal compiler settings again; some Mac watcher and certificate-related stalls are still unresolved. [Process shutdown](https://github.com/openclaw/openclaw/pull/168587). Thanks [@steipete](https://github.com/steipete).
  - Backup records do not silently retry an uncertain Gateway write. Approving a device while offline still requires exclusive access to its state. [Backup records and device approval](https://github.com/openclaw/openclaw/pull/168466). Thanks [@steipete](https://github.com/steipete).
  - Doctor no longer warns about node hosting on a local-only Gateway that never enabled it. A separate Windows connection problem is not fixed by this change. [Node-hosting diagnostics](https://github.com/openclaw/openclaw/pull/168218), [related report](https://github.com/openclaw/openclaw/issues/164396). Thanks [@steipete](https://github.com/steipete) and [@absol89](https://github.com/absol89).
  - Vault setup gives the specific correction for invalid secret IDs, including the required path and field format. [Vault setup errors](https://github.com/openclaw/openclaw/pull/168272). Thanks [@nocodet888-arch](https://github.com/nocodet888-arch) and [@obviyus](https://github.com/obviyus).
  - Termux can save a database snapshot when the usual filesystem copy path is unavailable. [#168629](https://github.com/openclaw/openclaw/pull/168629) by [@steipete](https://github.com/steipete), with thanks to [@yxshee](https://github.com/yxshee) for reporting the issue.
  - Doctor can check Telegram and WhatsApp settings without starting their full channel runtimes, reducing unnecessary waiting. [#168869](https://github.com/openclaw/openclaw/pull/168869) by [@steipete](https://github.com/steipete).
  - Rechecking an unchanged one-time schedule no longer creates an extra Doctor recovery copy. Actual repairs still keep backups. [#168938](https://github.com/openclaw/openclaw/pull/168938), thanks [@harshitgupta31415](https://github.com/harshitgupta31415) and issue reporter [@wg-mojo](https://github.com/wg-mojo).
  - Doctor no longer warns about a different system Node when the Node selected for the Gateway passes; if the system Node fails its database check, the message names that executable. [#169007](https://github.com/openclaw/openclaw/pull/169007), thanks [@steipete](https://github.com/steipete), [@Yun-0000](https://github.com/Yun-0000), and issue reporter [@amueller80](https://github.com/amueller80).
  - Doctor cleans up its private plugin inspection copies after checking them ([01ead786](https://github.com/openclaw/openclaw/commit/01ead786dc19b1cf9921dfcf90917206d876dfc1)).
  - Doctor keeps plugin repair and diagnostic steps available until its remaining checks finish ([310bce6a](https://github.com/openclaw/openclaw/commit/310bce6a751791a9f61ce7a3bfcb3fd79653642b)).

  </details>

- Package and source updates are less likely to lose their launcher or running updater files during replacement, and verified early failures can leave the previous Gateway usable. Several protections must already be in the installed updater before that attempt begins.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Older updaters can validate a candidate without rejecting it solely for Doctor bookkeeping changes in [#170195](https://github.com/openclaw/openclaw/pull/170195). The separate startup hang in [#169953](https://github.com/openclaw/openclaw/issues/169953) remains unresolved. Thanks [@steipete](https://github.com/steipete), [@maestrokling](https://github.com/maestrokling) and [@frxiaobei](https://github.com/frxiaobei).
  - An update or Doctor repair can retry if another database writer finishes just as it checks for access in [#170196](https://github.com/openclaw/openclaw/pull/170196). Thanks [@steipete](https://github.com/steipete).
  - Repair now loads the target's settings before choosing a repair model; temporary settings used for that repair do not replace your saved configuration. [PR #170276](https://github.com/openclaw/openclaw/pull/170276). Thanks [@steipete](https://github.com/steipete).
  - Managed updates record a refusal and restore the Gateway when a requester's access is revoked while its channel is disabled. [PR #170365](https://github.com/openclaw/openclaw/pull/170365). Thanks [@steipete](https://github.com/steipete).
  - Large configuration responses no longer truncate the candidate read that refreshes eligible Gateway service definitions. If that optional read still fails, wait for the update to finish and run `openclaw gateway install --force` with the same `--profile` or `--dev` option. [PR #170373](https://github.com/openclaw/openclaw/pull/170373), fixing [#170331](https://github.com/openclaw/openclaw/issues/170331). Thanks [@RomneyDa](https://github.com/RomneyDa), [@DonnieFi](https://github.com/DonnieFi) for reporting and investigation, and [@steipete](https://github.com/steipete) for advice.
  - Run eligible Linux managed update handoffs in a separate user service, outside the invoking agent and Gateway lifetime and the Gateway unit's memory limit. [#187215](https://github.com/openclaw/openclaw/pull/187215). Thanks [@steipete](https://github.com/steipete), [@RomneyDa](https://github.com/RomneyDa) and reporter [@masterdevill](https://github.com/masterdevill).
  - Bun updates no longer carry an already-finished database-copy lock into the next update step. [#170519](https://github.com/openclaw/openclaw/pull/170519). Thanks to [RomneyDa](https://github.com/RomneyDa).
  - Package repair can settle an untouched preparation after a remount once it verifies the installed package and launchers. It refuses changed live content or unfinished publication. [#170676](https://github.com/openclaw/openclaw/pull/170676). Thanks to [steipete](https://github.com/steipete) for the fix and [git-larry-roots](https://github.com/git-larry-roots) for the [report](https://github.com/openclaw/openclaw/issues/170443).
  - Successful snapshot-backed state reads no longer fail solely because best-effort temporary cleanup is busy. The warning remains and cleanup can happen later. [#170605](https://github.com/openclaw/openclaw/pull/170605). Thanks to [steipete](https://github.com/steipete).
  - An update or rollback can give a busy but responsive Gateway time to finish, while still checking that the expected version is ready ([#170696](https://github.com/openclaw/openclaw/pull/170696)). Thanks [@steipete](https://github.com/steipete).
  - Removing a Linux Gateway or node service now refreshes systemd so the removed service disappears. If that refresh fails, run `systemctl --user daemon-reload`; uninstalling again will not retry it. [#173048](https://github.com/openclaw/openclaw/pull/173048), thanks [@ericcurtin](https://github.com/ericcurtin) and [@steipete](https://github.com/steipete) for the [report](https://github.com/openclaw/openclaw/issues/127359).
  - Prepared source updaters retain database backup helpers before replacing the runtime, avoiding a missing-module failure when creating rollback snapshots. [#173587](https://github.com/openclaw/openclaw/pull/173587), thanks [@vishnusenthil-16](https://github.com/vishnusenthil-16) and [@hannesrudolph](https://github.com/hannesrudolph) for the [report](https://github.com/openclaw/openclaw/issues/173754).
  - Update restart preparation waits for a verified new Gateway to publish ownership before treating its startup as a failure. [#173588](https://github.com/openclaw/openclaw/pull/173588), thanks [@obviyus](https://github.com/obviyus).
  - Gateway and node service changes can check their selected runtime without copying the entire database again. [#172500](https://github.com/openclaw/openclaw/pull/172500), thanks [@vincentkoc](https://github.com/vincentkoc).
  - Source updates retain the running updater's modules after activation, avoiding missing-module errors during later update steps. [#174867](https://github.com/openclaw/openclaw/pull/174867). Thanks [@steipete](https://github.com/steipete) and [@vishnusenthil-16](https://github.com/vishnusenthil-16).
  - After an authentication rejection, update verification can use local readiness and runtime identity checks and record a warning. [#175735](https://github.com/openclaw/openclaw/pull/175735). Thanks [@steipete](https://github.com/steipete) and [@sesgoe](https://github.com/sesgoe).
  - Update repair reports available Gateway ownership details and the stalled inspection phase when a service check times out. [#177560](https://github.com/openclaw/openclaw/pull/177560). Thanks [@steipete](https://github.com/steipete) and [@sdamian](https://github.com/sdamian).
  - Doctor started by an update now uses the update's time limit when none is specified separately. [#173862](https://github.com/openclaw/openclaw/pull/173862). Thanks [@steipete](https://github.com/steipete) and [@jsf9789](https://github.com/jsf9789).
  - With `--no-restart`, an update checks the running build as well as its version before reporting verification. [#174649](https://github.com/openclaw/openclaw/pull/174649). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Setup reports a failed installed Gateway restart and shows recovery commands instead of reporting success. [#174767](https://github.com/openclaw/openclaw/pull/174767). Thanks [@steipete](https://github.com/steipete) and [@skyzhao1223](https://github.com/skyzhao1223).
  - Gateway service installation no longer lets the retired `CLAWDBOT_GATEWAY_PASSWORD` variable suppress token setup. Operators relying on it need a supported password or token. [#175416](https://github.com/openclaw/openclaw/pull/175416). Thanks [@steipete](https://github.com/steipete).
  - Fresh provider setup retains the selected model's metadata without inadvertently restricting the model picker to that model. Existing explicit restrictions still apply. [#175945](https://github.com/openclaw/openclaw/pull/175945). Thanks [@matthematics1137](https://github.com/matthematics1137), [@obviyus](https://github.com/obviyus) and [@jb-dev1](https://github.com/jb-dev1).
  - Interrupted update recovery accepts matching symlink launchers with different recorded modes while retaining the other integrity checks. An installation already blocked on an older updater needs a recovery helper containing this fix. [Recovery guidance](/install/updating#recover-an-unfinished-publication-after-a-remount) · [#177059](https://github.com/openclaw/openclaw/pull/177059). Thanks [@steipete](https://github.com/steipete) and [@BodegaClaw](https://github.com/BodegaClaw).

  </details>

- Restoring a supported older backup keeps its command-approval allowlist instead of turning it into a deny-all policy.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Preserves supported legacy approval policies while still refusing malformed data. [#164297](https://github.com/openclaw/openclaw/pull/164297), included in [#181464](https://github.com/openclaw/openclaw/pull/181464). Thanks [@RomneyDa](https://github.com/RomneyDa), [@wangmiao0668000666](https://github.com/wangmiao0668000666), [@dor-sr](https://github.com/dor-sr), [@steipete](https://github.com/steipete) and [@shanselman](https://github.com/shanselman) for the combined backport.

  </details>

- Supported [backups and rollback](/install/backups#restore) can restore more verified older archives and keep recovery copies when an update cannot safely undo database changes.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - An updater containing the snapshot fix avoids falsely reporting an unchanged agent database as changed when an exited writer left SQLite sidecars. Later database changes can still prevent restoration. See [rollback and recovery](/install/updating/rollback-and-recovery). [PR #170351](https://github.com/openclaw/openclaw/pull/170351), reported in [#170335](https://github.com/openclaw/openclaw/issues/170335). Thanks [@DonnieFi](https://github.com/DonnieFi) and [@RomneyDa](https://github.com/RomneyDa).
  - Supported older global and agent snapshots can be verified and restored. Newer, inconsistent or wrong-owner snapshots remain refused. [#170492](https://github.com/openclaw/openclaw/pull/170492). Thanks to [steipete](https://github.com/steipete) for the fix and [davidcittadini](https://github.com/davidcittadini) for the [report](https://github.com/openclaw/openclaw/issues/170244).
  - Package updates retain unsealed database snapshots for manual recovery after successful activation. The updater performing the update must contain this fix. [#170523](https://github.com/openclaw/openclaw/pull/170523). Thanks to [steipete](https://github.com/steipete) for the fix and [DonnieFi](https://github.com/DonnieFi) for the [report](https://github.com/openclaw/openclaw/issues/170335).
  - Updated installers report unsafe recovery-file permissions or a changed update owner before attempting recovery ([#170787](https://github.com/openclaw/openclaw/pull/170787), [#170076](https://github.com/openclaw/openclaw/issues/170076)). Thanks [@steipete](https://github.com/steipete), [@zrzavywa](https://github.com/zrzavywa), and [@niriakot](https://github.com/niriakot).
  - A Gateway can retain verified ownership after sleep or a backward clock change, and an authorized repair can restart it when access is blocked ([#170790](https://github.com/openclaw/openclaw/pull/170790), [#169829](https://github.com/openclaw/openclaw/issues/169829), [#170525](https://github.com/openclaw/openclaw/issues/170525), [#170597](https://github.com/openclaw/openclaw/issues/170597)). Thanks [@steipete](https://github.com/steipete), [@jjjhenriksen](https://github.com/jjjhenriksen), [@AnvinaLI](https://github.com/AnvinaLI), [@sgh6688](https://github.com/sgh6688), [@waynegault](https://github.com/waynegault), [@andersgreg](https://github.com/andersgreg), and [@shawnholt](https://github.com/shawnholt).
  - Private update checks help preserve database compatibility if an upgrade from 2026.9.2 with native plugins is refused. Databases already migrated by an earlier failed update still need a matching pre-update backup or a compatible newer package. [#171015](https://github.com/openclaw/openclaw/pull/171015), [report #170939](https://github.com/openclaw/openclaw/issues/170939), related [#153657](https://github.com/openclaw/openclaw/pull/153657), [#158414](https://github.com/openclaw/openclaw/pull/158414) and [#168340](https://github.com/openclaw/openclaw/pull/168340). Thanks to [@steipete](https://github.com/steipete) and [@bamorem](https://github.com/bamorem).
  - Update status checks current files and session history before showing old migration warnings, so resolved findings can disappear while uncertain ones remain. [#177096](https://github.com/openclaw/openclaw/pull/177096). Thanks [@steipete](https://github.com/steipete), [@ScientificProgrammer](https://github.com/ScientificProgrammer), [@jj5638521](https://github.com/jj5638521) and [@ourcoms2018](https://github.com/ourcoms2018).
  - If `TMPDIR` points to another volume, updates can put temporary plugin and database-check files there. Backups and durable files still need space on their usual volumes. [#178009](https://github.com/openclaw/openclaw/pull/178009). Thanks [@RomneyDa](https://github.com/RomneyDa) and [@DonnieFi](https://github.com/DonnieFi).
  - Update rehearsal omits the false loopback-only onboarding warning caused by its temporary configuration, while keeping genuine Doctor warnings. [#178155](https://github.com/openclaw/openclaw/pull/178155). Thanks [@steipete](https://github.com/steipete) and [@DonnieFi](https://github.com/DonnieFi).
  - Before downloading an incompatible package, an update checks the Gateway's Node version and explains how to change a pinned service runtime ([#180769](https://github.com/openclaw/openclaw/pull/180769)). Thanks [@steipete](https://github.com/steipete), [@sglion777](https://github.com/sglion777), [@Almost-Certified-ops](https://github.com/Almost-Certified-ops), [@billpang1-sketch](https://github.com/billpang1-sketch), [@rayluo88](https://github.com/rayluo88) and [@jcheng510](https://github.com/jcheng510).
  - Managed source installation repair can handle changed files without turning app autostart back on after you disabled it ([#180356](https://github.com/openclaw/openclaw/pull/180356)). Thanks [@RomneyDa](https://github.com/RomneyDa).
  - Keep snapshots marked for manual database recovery when Doctor refuses automatic restoration after capture. The installed updater must contain the fix to protect its own cleanup ([#180010](https://github.com/openclaw/openclaw/pull/180010), [#170335](https://github.com/openclaw/openclaw/issues/170335), [#170523](https://github.com/openclaw/openclaw/pull/170523)). Thanks [@RomneyDa](https://github.com/RomneyDa) and [@DonnieFi](https://github.com/DonnieFi).
  - An update can keep a verified database copy with an outdated search index for Doctor or startup to rebuild. The installed updater must already contain this fix ([#181206](https://github.com/openclaw/openclaw/pull/181206)). Thanks [@steipete](https://github.com/steipete) and [@ndakota79](https://github.com/ndakota79).
  - Use the installation's own pnpm 10 shim and global bin path during update preflight. The installed updater must already contain the repair ([#181456](https://github.com/openclaw/openclaw/pull/181456)). Thanks [@steipete](https://github.com/steipete) and [@rayluo88](https://github.com/rayluo88).
  - If an update or Doctor command loses its supervising process, its helper exits so a later command or Gateway start can recover. When maintenance is still active, the refusal names the holder and points to update status ([#181695](https://github.com/openclaw/openclaw/pull/181695)). Thanks [@steipete](https://github.com/steipete) and [@PonySlayer28](https://github.com/PonySlayer28).
  - Doctor limits media-repair scans and undoes an in-progress rewrite if it loses maintenance access. [#171655](https://github.com/openclaw/openclaw/pull/171655) by [steipete](https://github.com/steipete).
  - Cancelling a Doctor migration can now interrupt its pre-migration backup rather than leaving the backup running unnoticed. [#171947](https://github.com/openclaw/openclaw/pull/171947) by [steipete](https://github.com/steipete).
  - Supported Doctor migrations can back up only the tables they will change after verifying the source. Other repairs still use a full backup. [#172671](https://github.com/openclaw/openclaw/pull/172671), thanks [@steipete](https://github.com/steipete).
  - Older backups with hardlinks can be verified and restored when each link has one clear target. Missing or ambiguous targets are still refused. [#173070](https://github.com/openclaw/openclaw/pull/173070), thanks [@zhangguiping-xydt](https://github.com/zhangguiping-xydt), [@steipete](https://github.com/steipete), and [@mgonto](https://github.com/mgonto) for the [related report](https://github.com/openclaw/openclaw/issues/89257).
  - SQLite backup listing recognizes Git worktrees and points operators to Git backup history. [#176656](https://github.com/openclaw/openclaw/pull/176656). Thanks [@steipete](https://github.com/steipete).
  - Restarting the same official Docker container can reuse its verified recovery copy while Doctor continues repairs. Recreating the container or starting a new activation still needs a new copy. [#173711](https://github.com/openclaw/openclaw/pull/173711). Thanks [@RomneyDa](https://github.com/RomneyDa) and [@8bitsforge](https://github.com/8bitsforge).
  - Backup imports now reject an invalid file-size count instead of interpreting it as a different size ([#178585](https://github.com/openclaw/openclaw/pull/178585), [#178491](https://github.com/openclaw/openclaw/issues/178491)). Thanks [@YangManBOBO](https://github.com/YangManBOBO) and [@obviyus](https://github.com/obviyus).

  </details>

- Update checks refuse more unsafe replacements before changing a running installation and give clearer permission errors. Avoid editing installation files during an update; a shell command that combines maintenance with Gateway startup may not receive the same live-file protection.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - A source build no longer fails because a runtime check starts before Control UI files finish publishing. [#170455](https://github.com/openclaw/openclaw/pull/170455). Thanks to [steipete](https://github.com/steipete).
  - Repeated starts from a source checkout can reuse compiled modules rather than compiling them again. [#170514](https://github.com/openclaw/openclaw/pull/170514). Thanks to [steipete](https://github.com/steipete) for the fix and [LouisGameDev](https://github.com/LouisGameDev) for the [earlier report](https://github.com/openclaw/openclaw/issues/73037).
  - An optional dreaming-schedule check no longer stops a core update or Doctor repair when it fails. Existing jobs remain, and a warning points to `openclaw doctor --fix` to retry. A successful schedule read also remains usable if temporary cleanup fails ([#170754](https://github.com/openclaw/openclaw/pull/170754), [#147956](https://github.com/openclaw/openclaw/issues/147956)). Thanks [@RomneyDa](https://github.com/RomneyDa), [@aniruddhaadak80](https://github.com/aniruddhaadak80), and [@anhnt3](https://github.com/anhnt3).
  - Standalone Doctor can repair state for an app-owned Gateway after confirming it is offline and belongs to the same account. The Mac app still handles its restart and update ([#170768](https://github.com/openclaw/openclaw/pull/170768), [#170724](https://github.com/openclaw/openclaw/issues/170724)). Thanks [@RomneyDa](https://github.com/RomneyDa) and [@shanselman](https://github.com/shanselman).
  - Update repair and Doctor now wait longer for a force-stopped helper to exit before declaring cleanup uncertain ([#170779](https://github.com/openclaw/openclaw/pull/170779)). Thanks [@steipete](https://github.com/steipete).
  - Doctor no longer reports a false database-checkpoint failure while another authorized offline maintenance task owns the state ([#170783](https://github.com/openclaw/openclaw/pull/170783)). Thanks [@steipete](https://github.com/steipete).
  - Explain recovery after a failed Gateway restart preparation or failed embeddings cleanup. The related reports provide context for the broader cleanup ([#170826](https://github.com/openclaw/openclaw/pull/170826), [#40226](https://github.com/openclaw/openclaw/issues/40226), [#58789](https://github.com/openclaw/openclaw/issues/58789), [#82712](https://github.com/openclaw/openclaw/issues/82712), [#103736](https://github.com/openclaw/openclaw/issues/103736), [#112336](https://github.com/openclaw/openclaw/issues/112336), [#137417](https://github.com/openclaw/openclaw/issues/137417)). A failed restart preparation can require reapplying configuration or a manual restart. Failed embeddings cleanup blocks the affected agent and provider scope until restart. Thanks [@steipete](https://github.com/steipete).
  - An update can keep checking its state even if it cannot show one temporary progress message; that message may be missing. [#170955](https://github.com/openclaw/openclaw/pull/170955), related [#168493](https://github.com/openclaw/openclaw/pull/168493) and [#170978](https://github.com/openclaw/openclaw/pull/170978) by [@steipete](https://github.com/steipete).
  - Update processes can exit after finishing instead of remaining open because of migrated work. [#170978](https://github.com/openclaw/openclaw/pull/170978) by [@steipete](https://github.com/steipete).
  - Doctor loads valid settings before checking context-engine plugins, avoiding a plugin check based on incomplete configuration. [#170984](https://github.com/openclaw/openclaw/pull/170984), [report #170715](https://github.com/openclaw/openclaw/issues/170715) and [#170689](https://github.com/openclaw/openclaw/pull/170689). Thanks to [@steipete](https://github.com/steipete) and [@sasan1200](https://github.com/sasan1200).
  - An explicit `openclaw update --timeout` now covers both the update and its recovery. Recovery may still be pending while database writes finish. [#171077](https://github.com/openclaw/openclaw/pull/171077), [report #170666](https://github.com/openclaw/openclaw/issues/170666). Thanks to [@steipete](https://github.com/steipete) and [@davidcittadini](https://github.com/davidcittadini).
  - An update refuses to replace files used by a running Gateway if it cannot inspect the service. On Windows, it also refuses when it cannot identify the running Gateway's package; a failed maintenance resume is reported, not hidden. [#171101](https://github.com/openclaw/openclaw/pull/171101), [reports #170774](https://github.com/openclaw/openclaw/issues/170774) and [#171036](https://github.com/openclaw/openclaw/issues/171036). Thanks to [@steipete](https://github.com/steipete), reporter [@homeworld520](https://github.com/homeworld520) and source-audit reporter [@Yolo521-bot](https://github.com/Yolo521-bot).
  - After Doctor repair, channel tokens loaded from environment variables no longer appear to be saved as plaintext. Literal saved tokens still get a warning. [#171116](https://github.com/openclaw/openclaw/pull/171116), [report #171022](https://github.com/openclaw/openclaw/issues/171022). Thanks to [@steipete](https://github.com/steipete) and [@exGeni](https://github.com/exGeni).
  - Update checks no longer mistake a recognized maintenance command for a running Gateway. Avoid chaining maintenance and Gateway startup in one shell command, because that combined command may also evade the live-installation check. [#170462](https://github.com/openclaw/openclaw/pull/170462). Thanks to [vincentkoc](https://github.com/vincentkoc).

  </details>

- Installation and Doctor errors now point to the failed step and a more useful retry or repair path. If your configuration includes other files, review a proposed single-file repair before accepting it because it can revert settings from those included files.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Recognize the Dutch Scheduled Task access-denied message and show the existing Windows elevation or manual-update guidance. An older installed updater still needs the elevated or manual first update ([#178219](https://github.com/openclaw/openclaw/pull/178219), [#170956](https://github.com/openclaw/openclaw/issues/170956)). Thanks [@RomneyDa](https://github.com/RomneyDa), [@Rene-F](https://github.com/Rene-F) and [@steipete](https://github.com/steipete).
  - Return a structured JSON error for an invalid update repair channel without changing the configured channel ([#180822](https://github.com/openclaw/openclaw/pull/180822)). Thanks [@steipete](https://github.com/steipete) and [@leon-sk668](https://github.com/leon-sk668).
  - Escape invalid update-channel values in human and JSON diagnostics so control characters cannot create misleading terminal lines ([#181298](https://github.com/openclaw/openclaw/pull/181298)). Thanks [@steipete](https://github.com/steipete) and [@TUARAN](https://github.com/TUARAN).
  - Service inspection now preserves empty command arguments, so Windows tasks and Linux services are checked as they were configured ([#181213](https://github.com/openclaw/openclaw/pull/181213)). Thanks [@steipete](https://github.com/steipete), [@notlakshitha](https://github.com/notlakshitha) and [@aniruddhaadak80](https://github.com/aniruddhaadak80).
  - Blocked update messages distinguish retained installation custody from an updater that is still running and suggest status and repair commands. [#182774](https://github.com/openclaw/openclaw/pull/182774) Thanks [@fuller-stack-dev](https://github.com/fuller-stack-dev).
  - Source updates on Node or the pinned Bun runtime retain the files they still need while replacing the installation. [#183429](https://github.com/openclaw/openclaw/pull/183429) Thanks [@steipete](https://github.com/steipete).
  - Queued service maintenance commands keep their elapsed-time budgets when the system clock changes. [#183104](https://github.com/openclaw/openclaw/pull/183104) Thanks [@SunnyShu0925](https://github.com/SunnyShu0925) and [@steipete](https://github.com/steipete).
  - Debug logging no longer corrupts JSON results from update checks and Doctor recovery. Checking a candidate still requires a compatible updater. [#182850](https://github.com/openclaw/openclaw/pull/182850) Thanks [@steipete](https://github.com/steipete).
  - Doctor no longer suggests an ineffective Skill Workshop grant for an agent that deliberately denies the tool. It still offers a hint for a profile-only exclusion. [#171314](https://github.com/openclaw/openclaw/pull/171314), thanks to [steipete](https://github.com/steipete) and [davidcittadini](https://github.com/davidcittadini) for [reporting](https://github.com/openclaw/openclaw/issues/171274).
  - Repair missing session columns before opening affected agents. If a cold read-only access reports that repair is needed, restart the Gateway or run `openclaw doctor --fix`. [#171634](https://github.com/openclaw/openclaw/pull/171634) by [steipete](https://github.com/steipete).
  - Doctor advises retrying after SQLite snapshot contention instead of suggesting a backup restore for that condition. It still refuses repair when readiness cannot be verified. [#176779](https://github.com/openclaw/openclaw/pull/176779). Thanks [@steipete](https://github.com/steipete) and [@WG-Mojo](https://github.com/WG-Mojo).
  - In the demonstrated single-file configuration, Doctor can back up and remove empty retired plugin install metadata. If your configuration uses includes, this recovery may revert unrelated settings. [#173851](https://github.com/openclaw/openclaw/pull/173851). Thanks [@steipete](https://github.com/steipete) and [@fengfan201314-eng](https://github.com/fengfan201314-eng).
  - If Doctor spends ten minutes capturing the original state, it begins cancelling that work and shows how to check or start the Gateway if restoration fails. Cancellation itself can take longer ([#181941](https://github.com/openclaw/openclaw/pull/181941)). Thanks [@steipete](https://github.com/steipete), [@kenrohde](https://github.com/kenrohde) and [@kqtxmaster-boop](https://github.com/kqtxmaster-boop).
  - Provider registration keeps a default OAuth profile repair when explicit repairs are also declared. [#183183](https://github.com/openclaw/openclaw/pull/183183) Thanks [@steipete](https://github.com/steipete).
  - If a terminal hangup interrupts a repair, Doctor attempts to restore the managed Gateway it stopped. [#182901](https://github.com/openclaw/openclaw/pull/182901) Thanks [@steipete](https://github.com/steipete) and [@Null-Bug-Null](https://github.com/Null-Bug-Null) for the related report.
  - Doctor can bring older conversation text into its current format after reopening the database in [#170126](https://github.com/openclaw/openclaw/pull/170126). Thanks [@steipete](https://github.com/steipete).

  </details>

- [Doctor](/gateway/doctor/checks) no longer blocks recovery cleanup with a false warning that the database changed during its inspection.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  The sidecar-check repair from [#186411](https://github.com/openclaw/openclaw/pull/186411), adapted for Doctor in [#188854](https://github.com/openclaw/openclaw/pull/188854). Thanks to [@steipete](https://github.com/steipete) and [@kaguranananana](https://github.com/kaguranananana) for the original work, and [@RomneyDa](https://github.com/RomneyDa) for the adaptation.

  </details>

- Fixes supported [Bun-only installs](/install/bun-compatibility#bun-only-installs) leaving the `openclaw` command unavailable, including when a broken Node command is found first.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Installation recognizes the supported Bun executable selected for the package and can continue launcher setup past an unavailable Node command. A missing launcher can be created for Bun's standard global package and bin folders. [Runtime detection](https://github.com/openclaw/openclaw/commit/79c6be816494b1a7c7fc57223089570f443cc24b), [missing launcher](https://github.com/openclaw/openclaw/commit/dd896a5ef4834ec55be5be78f05cb6df7788d23f) and [Node fallback](https://github.com/openclaw/openclaw/commit/964e7558463b0999cb3de74786e51528c392a5ef). Thanks [@RomneyDa](https://github.com/RomneyDa).

  </details>

- Doctor's btrfs repair no longer leaves verified migration backups permanently ineligible for normal cleanup.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Keep verified migration backups eligible for `openclaw update cleanup` after Doctor repairs a btrfs database directory. Cleanup still needs its usual verification and consent; backups blocked by an earlier repair and retained NOCOW directories are not removed by this fix. [#169893](https://github.com/openclaw/openclaw/pull/169893) by [@xydigitLybnnnn](https://github.com/xydigitLybnnnn) and [@steipete](https://github.com/steipete), with thanks to [@farisoftfry](https://github.com/farisoftfry) for [the report](https://github.com/openclaw/openclaw/issues/169674).

  </details>

- [Git backup](/install/backups#versioned-backups-to-a-git-repository) and pruning now preserve unrelated files and staged edits. Opt-in secret exclusions omit identified bundled-plugin credentials, not every possible secret or anything already in Git history; restoring a redacted backup may require signing in again.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Apply `--exclude-secrets` to PostgreSQL Git exports while retaining the schema needed for restore. [#174698](https://github.com/openclaw/openclaw/pull/174698). Thanks [@steipete](https://github.com/steipete) and [@RomneyDa](https://github.com/RomneyDa).
  - Omit identified bundled-plugin credentials from redacted SQLite and PostgreSQL Git backups while preserving unrelated plugin state. Readable Discord thread bindings retain routing fields but omit their webhook token. [#186953](https://github.com/openclaw/openclaw/pull/186953). Thanks [@art22s](https://github.com/art22s), [@RomneyDa](https://github.com/RomneyDa) and [@jlapenna](https://github.com/jlapenna).
  - Recognize SQLite databases by header for managed snapshots and unmanaged-copy warnings. [#148857](https://github.com/openclaw/openclaw/pull/148857), [reported in #148796](https://github.com/openclaw/openclaw/issues/148796). Thanks to [LiuwqGit](https://github.com/LiuwqGit), [steipete](https://github.com/steipete), and [migelizaga-rgb](https://github.com/migelizaga-rgb).
  - Preserve unrelated files and staging in Git backups, and support verification and restoration of historical refs. Declared artifact collisions and corrupt backups still stop the operation. [#162706](https://github.com/openclaw/openclaw/pull/162706). Thanks to [oshaughnessy-junior](https://github.com/oshaughnessy-junior), [RomneyDa](https://github.com/RomneyDa), and [obviyus](https://github.com/obviyus).
  - When SQLite backup listing is pointed at a Git backup repository, explain the mismatch and suggest the Git history command. [#167935](https://github.com/openclaw/openclaw/pull/167935), [reported in #167934](https://github.com/openclaw/openclaw/issues/167934). Thanks to [PollyBot13](https://github.com/PollyBot13) and [obviyus](https://github.com/obviyus).

  </details>

- After a session database is replaced, new work refuses an old database location instead of silently using the wrong conversations. If a write's result is uncertain, check what was saved before retrying.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - After repairing a conversation, its participant list updates immediately instead of showing old membership. [#171481](https://github.com/openclaw/openclaw/pull/171481) by [steipete](https://github.com/steipete).
  - Opening a conversation with pending approvals no longer waits on unrelated database writes before showing them. [#171605](https://github.com/openclaw/openclaw/pull/171605) by [steipete](https://github.com/steipete).
  - Reads can resume after a temporary cleanup failure when it is safe to retry. Failed native retirement or a protected file replacement still blocks them. [#171709](https://github.com/openclaw/openclaw/pull/171709) by [RomneyDa](https://github.com/RomneyDa). Thanks to [residentb2b](https://github.com/residentb2b) for the [report and diagnosis](https://github.com/openclaw/openclaw/issues/162085), [homeworld520](https://github.com/homeworld520) for the detailed reproduction, and [sunny251008-debug](https://github.com/sunny251008-debug) for the affected-version report.
  - An interrupted main-session task remains eligible for another startup recovery if shutdown stops its accepted continuation before execution. The existing three-attempt limit and exhaustion notice still apply. [#172023](https://github.com/openclaw/openclaw/pull/172023), reported in [#172000](https://github.com/openclaw/openclaw/issues/172000). Thanks to [steipete](https://github.com/steipete) and [jeanmonet](https://github.com/jeanmonet).
  - An older finished database read no longer interferes with a newer read using the same query ([697e5bc1](https://github.com/openclaw/openclaw/commit/697e5bc126a32cbd2ab704938ade75e5d34ebc6d)).
  - Creating the first state database can wait briefly when another operation temporarily holds its structure ([fa23864b](https://github.com/openclaw/openclaw/commit/fa23864b643566823648ef8060ed5ba5e2442a40)). Thanks to [@steipete](https://github.com/steipete).
  - Reading conversation details no longer races a simultaneous save of its transcript. [Merge commit](https://github.com/openclaw/openclaw/commit/c0a235bbbb25df3938ffd2c1d13984e231de4557)
  - Accept session context through an alias of the same physical database while continuing to reject a different copied store. [Commit](https://github.com/openclaw/openclaw/commit/cba73231243d85ff0e9e34d7b3c35cd869b0430b), thanks to [steipete](https://github.com/steipete).
  - A first conversation turn now loads its settings before deciding where to save the transcript. [Commit](https://github.com/openclaw/openclaw/commit/accded4b85c7075b196475cfb3db95505115a1f4)
  - Initializing an unrelated database feature no longer changes who can access a profile. [Commit](https://github.com/openclaw/openclaw/commit/c445da4029e17aca9bf1288c08389dc35698d634), thanks to [joshavant](https://github.com/joshavant).
  - A completed conversation deletion stays completed after its database worker exits normally. [Commit](https://github.com/openclaw/openclaw/commit/3d9e3fb92051d8e5dc248b226599432aad8ccc26)
  - A repaired conversation view now shows the participant information copied during repair. [Commit](https://github.com/openclaw/openclaw/commit/4aa62334122ed29f605f9820c4604539b3ccee77)
  - If creating an outdated database is refused, another agent's healthy conversation reads continue. [#169895](https://github.com/openclaw/openclaw/pull/169895). Thanks [@steipete](https://github.com/steipete).
  - Queued database work can wait briefly for a temporary structure change without running out of order in [#170135](https://github.com/openclaw/openclaw/pull/170135). Thanks [@steipete](https://github.com/steipete).
  - Health checks can connect while conversations load in [#170151](https://github.com/openclaw/openclaw/pull/170151). Readiness continues to wait for initialization. Thanks [@steipete](https://github.com/steipete).
  - Reject first-send session creation if the prepared session database was replaced before confirmation ([#170716](https://github.com/openclaw/openclaw/pull/170716)). Thanks [@steipete](https://github.com/steipete).
  - An existing session-store handle stays with its admitted database if an alias changes, while a fresh lookup resolves the new target. [#171375](https://github.com/openclaw/openclaw/pull/171375), thanks to [steipete](https://github.com/steipete).
  - Memory-backed session callers receive publication errors after committed writes instead of false success. The data remains saved, and committed trajectory batches are not appended again on a later flush. [#171419](https://github.com/openclaw/openclaw/pull/171419), thanks to [steipete](https://github.com/steipete).
  - Agent setup now refuses an old conversation ownership view if the conversation changed while setup ran ([e338bef1](https://github.com/openclaw/openclaw/commit/e338bef1348d7c9842242be657b3f595169d9127)).
  - A conversation read no longer falsely reports that its data changed when tracking starts mid-read ([3a9aef66](https://github.com/openclaw/openclaw/commit/3a9aef6652a496192c3a98e046ec5bf961128559)).
  - The owner of a shared conversation can continue sending turns, and pending-input failures remain visible ([f1fbf170](https://github.com/openclaw/openclaw/commit/f1fbf170dea3c0c631031e477dc61dc06627fba1)).
  - Saving state gets one retry if a handoff removes its lock folder at the same moment ([5f925029](https://github.com/openclaw/openclaw/commit/5f925029e0800504fc04dd41c0cd297d37636c0f)).

  </details>

- On busy installations with many agents or sessions, Gateway startup and the first message do less blocking preparation work. A required agent still has to finish preparing before the Gateway reports ready.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Limits startup read bursts and retries temporary capacity rejections so healthy agents are less likely to remain degraded after a fleet starts. [#168638](https://github.com/openclaw/openclaw/pull/168638) by [@ruel225](https://github.com/ruel225) and [@steipete](https://github.com/steipete), with thanks to [@609NFT](https://github.com/609NFT), [@wr-web](https://github.com/wr-web), and [@karaaslanz](https://github.com/karaaslanz).
  - Move cold session and Memory preparation reads off the Gateway main thread. Before a Memory database exists, deep Memory status may incorrectly report an installed vector extension as unavailable. [#169164](https://github.com/openclaw/openclaw/pull/169164), thanks [@steipete](https://github.com/steipete).
  - Restore unmanaged in-process restarts after configuration reload recovery and show the cause of lock reacquisition failures. [#169167](https://github.com/openclaw/openclaw/pull/169167), thanks [@steipete](https://github.com/steipete).
  - Session catalog loading can finish when a Unix login shell ignores termination during executable-path discovery. [#169507](https://github.com/openclaw/openclaw/pull/169507). Thanks [@zhangguiping-xydt](https://github.com/zhangguiping-xydt) and [@obviyus](https://github.com/obviyus).
  - Catalog refreshes reuse unchanged installed native ESM plugin modules, avoiding repeated retained copies. Replacing installed source requires a worker restart. [#169272](https://github.com/openclaw/openclaw/pull/169272), [earlier work](https://github.com/openclaw/openclaw/pull/162080), [related report](https://github.com/openclaw/openclaw/issues/159662). Thanks [@obviyus](https://github.com/obviyus), [@mcooks-cmd](https://github.com/mcooks-cmd), [@svdinu-jpg](https://github.com/svdinu-jpg) and [@eduherranz](https://github.com/eduherranz).
  - Gateway startup can prepare independent services at the same time instead of waiting for each in sequence. [#169328](https://github.com/openclaw/openclaw/pull/169328). Thanks [@steipete](https://github.com/steipete).
  - Starting a built Gateway can reuse compiled modules for that build. [#169365](https://github.com/openclaw/openclaw/pull/169365). Thanks [@steipete](https://github.com/steipete).
  - Queued requests can run between plugins loading at startup or reload. One plugin that blocks while loading can still delay them. [#169519](https://github.com/openclaw/openclaw/pull/169519). Thanks [@steipete](https://github.com/steipete).
  - A first message can prepare its model while OpenClaw records the workspace starting state. [#169592](https://github.com/openclaw/openclaw/pull/169592). Thanks [@steipete](https://github.com/steipete).
  - A restart can reuse verified plugin migration information instead of checking it all again. [#169613](https://github.com/openclaw/openclaw/pull/169613). Thanks [@steipete](https://github.com/steipete).
  - After a clean shutdown, startup can reuse an eligible database check; otherwise it performs the full check. [#169649](https://github.com/openclaw/openclaw/pull/169649). Thanks [@steipete](https://github.com/steipete).
  - An update can prepare Gateway code before switching versions. If that preparation fails, the Gateway still starts normally without it. [#169656](https://github.com/openclaw/openclaw/pull/169656). Thanks [@steipete](https://github.com/steipete).
  - A slow service inspection no longer uses up the connection-check time allowed during Gateway startup. [#169787](https://github.com/openclaw/openclaw/pull/169787). Thanks [@steipete](https://github.com/steipete).
  - Saved pinned conversations no longer make startup preparation loop and block the conversation list. [#169821](https://github.com/openclaw/openclaw/pull/169821). Thanks [@steipete](https://github.com/steipete).
  - Conversation-saving failures show useful recovery guidance, including complete session-list summaries, in [#170048](https://github.com/openclaw/openclaw/pull/170048). Thanks [@steipete](https://github.com/steipete).
  - Usage totals update after conversation compaction; normal shutdown cancellation makes less log noise, and memory indexing does less shutdown work. [PR #170239](https://github.com/openclaw/openclaw/pull/170239). Thanks [@steipete](https://github.com/steipete).
  - Control UI session requests under a probe-prefixed custom base path wait for startup instead of receiving a premature 403. Root probes and authentication retain their usual behavior. [PR #170316](https://github.com/openclaw/openclaw/pull/170316). Thanks [@steipete](https://github.com/steipete).
  - Gateway startup no longer gets stuck when an agent database is still preparing as a worker recovers. [PR #170348](https://github.com/openclaw/openclaw/pull/170348). Thanks [@steipete](https://github.com/steipete).
  - Gateway startup prepares independent services together and loads its chat connection code before saying it is ready. [PR #170401](https://github.com/openclaw/openclaw/pull/170401). Thanks [@steipete](https://github.com/steipete).
  - Your first message can start a conversation even when its configured database has not yet been created. [#170464](https://github.com/openclaw/openclaw/pull/170464). Thanks to [steipete](https://github.com/steipete).
  - A first message in a new conversation is no longer refused because an old usage refresh finished. [#170572](https://github.com/openclaw/openclaw/pull/170572). Thanks to [steipete](https://github.com/steipete).
  - The default Gateway handshake deadline is 30 seconds, giving busy hosts more time to connect. Repeated connections can also avoid unnecessary owner-profile work. [#170621](https://github.com/openclaw/openclaw/pull/170621). Thanks to [steipete](https://github.com/steipete).
  - Agent turns and messages between conversations can use the updated runtime after overlapping startup refreshes ([#170877](https://github.com/openclaw/openclaw/pull/170877), [#170762](https://github.com/openclaw/openclaw/issues/170762)). Thanks [@steipete](https://github.com/steipete) and [@Oldrich333](https://github.com/Oldrich333).
  - Usage and placement checks continue, attachments remain available for conversations with oversized history, and externally managed installs are identified as such. Native updates still require adoption ([#170905](https://github.com/openclaw/openclaw/pull/170905)). Thanks [@steipete](https://github.com/steipete).
  - Installations with many agents can report startup readiness before the initial skills scan finishes; skills needed by a new turn are still prepared on demand. [#170933](https://github.com/openclaw/openclaw/pull/170933) by [@steipete](https://github.com/steipete).
  - Startup checks independent conversations together instead of waiting for each one. [#171006](https://github.com/openclaw/openclaw/pull/171006), related [#170849](https://github.com/openclaw/openclaw/pull/170849) and [#170933](https://github.com/openclaw/openclaw/pull/170933) by [@steipete](https://github.com/steipete).
  - Conversation views begin preparing while the Gateway connection starts, without skipping readiness checks. [#171028](https://github.com/openclaw/openclaw/pull/171028) by [@steipete](https://github.com/steipete).
  - Compatible builds can reuse a verified database check after a clean shutdown, once the updated check has run. [#171038](https://github.com/openclaw/openclaw/pull/171038) by [@steipete](https://github.com/steipete).
  - Startup does less recovery work for unrelated saved helper conversations and loads less task data at once. [#171046](https://github.com/openclaw/openclaw/pull/171046) by [@steipete](https://github.com/steipete).
  - Recover agent sessions when an overlapping config or secrets refresh replaces startup preparation. [#171054](https://github.com/openclaw/openclaw/pull/171054), [report #171018](https://github.com/openclaw/openclaw/issues/171018), related [#150755](https://github.com/openclaw/openclaw/pull/150755) and [#165107](https://github.com/openclaw/openclaw/pull/165107). Thanks to [@LiuwqGit](https://github.com/LiuwqGit), [@steipete](https://github.com/steipete), and [@homeworld520](https://github.com/homeworld520).
  - Return a readiness failure while a required agent database is still preparing, with a diagnostic for the affected agent. [#171063](https://github.com/openclaw/openclaw/pull/171063) by [@steipete](https://github.com/steipete).
  - Workers save compiled code while running instead of leaving that work until shutdown; on slow storage, early work may briefly wait for the save. [#171298](https://github.com/openclaw/openclaw/pull/171298), thanks to [steipete](https://github.com/steipete).
  - Starting the Gateway in a terminal no longer pauses the main process to flush its compiled-code cache. [#171358](https://github.com/openclaw/openclaw/pull/171358), thanks to [steipete](https://github.com/steipete).
  - Standalone agent turns using workspace skills prepare their runtime configuration before reading it. [#171209](https://github.com/openclaw/openclaw/pull/171209), thanks to [steipete](https://github.com/steipete).
  - Recover a Gateway startup that has not bound its listener for over five minutes with `openclaw gateway stop`, then retry startup. [#171678](https://github.com/openclaw/openclaw/pull/171678) by [steipete](https://github.com/steipete). Thanks to [TommyLei666](https://github.com/TommyLei666) for [reporting the issue](https://github.com/openclaw/openclaw/issues/171513).
  - Large fleets avoid repeated directory preparation and scheduling work. [#171805](https://github.com/openclaw/openclaw/pull/171805) addresses the [fleet report](https://github.com/openclaw/openclaw/issues/171700), incorporating work from [#171778](https://github.com/openclaw/openclaw/pull/171778). The separate [SQLite store-capacity issue](https://github.com/openclaw/openclaw/issues/162497) remains. Thanks to [Leon-SK668](https://github.com/Leon-SK668), [steipete](https://github.com/steipete), [chelsealong](https://github.com/chelsealong), and [609NFT](https://github.com/609NFT).
  - Bun Gateway startup handles SQLite admission timeouts without treating a worker's clock deadline as already expired. [#172756](https://github.com/openclaw/openclaw/pull/172756), thanks [@RomneyDa](https://github.com/RomneyDa).
  - A Docker health check can find the Gateway through `OPENCLAW_GATEWAY_PORT` if it cannot read settings or ask a running instance for its port. [#172765](https://github.com/openclaw/openclaw/pull/172765), thanks [@xialonglee](https://github.com/xialonglee) and [@obviyus](https://github.com/obviyus).
  - If a settings refresh replaces startup model preparation, the Gateway waits for the newer preparation instead of treating cancellation as a startup failure. A real failure still appears. [#173366](https://github.com/openclaw/openclaw/pull/173366), thanks [@steipete](https://github.com/steipete) and [@Jackten](https://github.com/Jackten) for the [related report](https://github.com/openclaw/openclaw/issues/173357).
  - Plugin loading does less file copying, which may shorten startup or the first response depending on the installation ([#180895](https://github.com/openclaw/openclaw/pull/180895)). Thanks [@Roddmason](https://github.com/Roddmason), [@steipete](https://github.com/steipete) and [@n572770](https://github.com/n572770).
  - Creating a first conversation can proceed even while a usage update waits for database access ([6d479f5c](https://github.com/openclaw/openclaw/commit/6d479f5c893a687e92683b7e896be26e4c8bedd3)).

  </details>

- Stock Bun now requires 1.4.4 or newer; the pinned OpenClaw Bun fork remains supported. Bun’s certificate fix is partial, so use [patched Node](/install/node-compatibility) when current rejection of compromised certificate keys is required. Read-only Kubernetes deployments also need the writable-cache setting with their image update to start successfully.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Include the missing workspace manifest in Docker production dependency builds ([a2d159ca](https://github.com/openclaw/openclaw/commit/a2d159cadcaf384fc6f7f4d84a7dc785e0fa401d)).
  - The documented Control UI baseline is Safari 26.2 or later, Chrome 147 or later, and Firefox 150 or later. The Node CLI and Gateway requirements are unchanged. [Platform requirements](https://github.com/openclaw/openclaw/pull/168595), [platform plan](https://github.com/openclaw/openclaw/issues/168114). Thanks [@steipete](https://github.com/steipete).
  - Package-only create, validate, build, dev and inspect commands remain available while the Gateway runs. Offline removal of adopted Claw ownership keeps the original agent and workspace. [Installed Claw state ownership](https://github.com/openclaw/openclaw/pull/168586). Thanks [@steipete](https://github.com/steipete).
  - Startup and package installation now require stock Bun 1.4.4 or newer. The [Bun compatibility guide](/install/bun-compatibility#requirements) explains the remaining saved-session and QUIC limitations. [#171627](https://github.com/openclaw/openclaw/pull/171627) and the updated requirement in [#184336](https://github.com/openclaw/openclaw/pull/184336). Thanks [@steipete](https://github.com/steipete) and [@joshavant](https://github.com/joshavant).
  - Existing Kubernetes deployments using the read-only-root recipe need the writable cache setting from the updated manifest with their image upgrade. Updating the image alone can leave the Gateway unable to start. [#172377](https://github.com/openclaw/openclaw/pull/172377), reported in [#172355](https://github.com/openclaw/openclaw/issues/172355). Thanks to [@saftall](https://github.com/saftall) and [@steipete](https://github.com/steipete).
  - Source builders can package a standalone Bun-based build. [#172384](https://github.com/openclaw/openclaw/pull/172384). Thanks to [@steipete](https://github.com/steipete).
  - Initial setup applies supported changes through the running Gateway and creates starter workspace files when the agent first runs. [#185109](https://github.com/openclaw/openclaw/pull/185109) Thanks [@RomneyDa](https://github.com/RomneyDa).

  </details>

- Logs now repeat fewer warnings for an already-known conversation problem, while keeping current failures visible. This does not restore turns that were previously blocked.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - This change does not bring back conversation turns already blocked by a previous context error. [Steered conversation context](https://github.com/openclaw/openclaw/pull/168394), [report](https://github.com/openclaw/openclaw/issues/168014). Thanks [@steipete](https://github.com/steipete) and [@robertoronderosjr](https://github.com/robertoronderosjr).
  - A previously recorded conversation-context problem now warns once rather than repeating on each later run; blocked turns remain blocked. [#167595](https://github.com/openclaw/openclaw/pull/167595), [related reports #163566](https://github.com/openclaw/openclaw/issues/163566) and [#135628](https://github.com/openclaw/openclaw/issues/135628). Thanks to [jalehman](https://github.com/jalehman), [Clode2026](https://github.com/Clode2026), and [steipete](https://github.com/steipete).
  - Old helper-permission warnings now appear once per run instead of repeating with every recovery check in [#170120](https://github.com/openclaw/openclaw/pull/170120). Thanks [@steipete](https://github.com/steipete).
  - Warn once per unchanged oversized bootstrap file, revision and limit while keeping truncation details available in `/context`. [#171074](https://github.com/openclaw/openclaw/pull/171074) by [@steipete](https://github.com/steipete).
  - Connection access logs now include the sign-in method as ordinary information rather than a warning; warning-only logs will not retain those entries. [#171144](https://github.com/openclaw/openclaw/pull/171144) by [@steipete](https://github.com/steipete).
  - Successful Gateway requests under one second no longer fill ordinary logs; failures and slower requests remain visible. [#171150](https://github.com/openclaw/openclaw/pull/171150) by [@steipete](https://github.com/steipete).

  </details>

- Updates and Doctor now get past more temporary maintenance failures and show a clearer reason when recovery stops. An unattended startup failure still needs an explicit repair request; it does not launch a repair agent automatically.

  <details class="release-source-toggle release-source-inline">
  <summary>More details</summary>

  - Skip a second npm install when the updated updater receives an unsafe-schema refusal, preserving the original recovery guidance. Older running updaters still need the [manual Windows recovery path](/platforms/windows#updating-from-2026-9-4) for the reported 2026.9.4 upgrade. [#171164](https://github.com/openclaw/openclaw/pull/171164), [report #171004](https://github.com/openclaw/openclaw/issues/171004). Thanks to [@steipete](https://github.com/steipete) and [@TommyLei666](https://github.com/TommyLei666).
  - Failed post-update verification records available child failure details, and repair and cleanup explain when the Gateway must be stopped first. Cleanup preview remains available while it is running. [#171252](https://github.com/openclaw/openclaw/pull/171252), thanks to [steipete](https://github.com/steipete) and [yoyo837](https://github.com/yoyo837) for [reporting](https://github.com/openclaw/openclaw/issues/171096).
  - Backups identify the database from their saved copy instead of probing the live database while work is being written. [#171295](https://github.com/openclaw/openclaw/pull/171295), thanks to [steipete](https://github.com/steipete).
  - Building the Control UI from different source folders no longer produces a false update-check rejection. [#171398](https://github.com/openclaw/openclaw/pull/171398), thanks to [fuller-stack-dev](https://github.com/fuller-stack-dev).
  - After an unattended update or foreground startup fails, repair now waits for an explicit request instead of starting on its own. [#171677](https://github.com/openclaw/openclaw/pull/171677) by [steipete](https://github.com/steipete). Thanks to [mwbroxson](https://github.com/mwbroxson) for [reporting the issue](https://github.com/openclaw/openclaw/issues/171191).
  - An update can resume its progress display after temporary Doctor maintenance. [#171454](https://github.com/openclaw/openclaw/pull/171454) by [RomneyDa](https://github.com/RomneyDa). Thanks to [DonnieFi](https://github.com/DonnieFi) for [reporting the issue](https://github.com/openclaw/openclaw/issues/171409).
  - Name a failed candidate snapshot check in the update headline and retry guidance. [#171457](https://github.com/openclaw/openclaw/pull/171457) by [RomneyDa](https://github.com/RomneyDa). Thanks to [DonnieFi](https://github.com/DonnieFi) for [reporting the issue](https://github.com/openclaw/openclaw/issues/171408).
  - Keep the `openclaw gateway restart` reminder when an update with `--no-restart` changes both core and plugins. [#171687](https://github.com/openclaw/openclaw/pull/171687) by [steipete](https://github.com/steipete).
  - Let managed updates wait through temporary database maintenance and retain recovery permission if that wait expires. Actual data-risk refusals still block recovery. [#171699](https://github.com/openclaw/openclaw/pull/171699) by [steipete](https://github.com/steipete). Thanks to [fdovarela](https://github.com/fdovarela) for [reporting the issue](https://github.com/openclaw/openclaw/issues/171376).
  - If a filesystem cannot support the requested SQLite no-copy-on-write repair, Doctor stops with an explanation and leaves the original database alone. The [reported host issue](https://github.com/openclaw/openclaw/issues/171933) is separate from the [Docker image prerequisites](https://github.com/openclaw/openclaw/issues/171930). [#171991](https://github.com/openclaw/openclaw/pull/171991) by [steipete](https://github.com/steipete), with thanks to reporter [kitiyeung](https://github.com/kitiyeung) and [skyzhao1223](https://github.com/skyzhao1223) for the preflight suggestion.
  - When a repair worker fails, update status now receives a reason instead of an unexplained stop. [#171781](https://github.com/openclaw/openclaw/pull/171781), addressing [#169999](https://github.com/openclaw/openclaw/issues/169999). Thanks to [SunnyShu0925](https://github.com/SunnyShu0925).
  - Doctor can finish checks and admitted repairs when a child process closes its input early. If Doctor's own output closes, it exits with status 141 after admitted repairs and Gateway restoration. [#171780](https://github.com/openclaw/openclaw/pull/171780) follows the narrower [Codex probe fix](https://github.com/openclaw/openclaw/pull/171248). Thanks to [steipete](https://github.com/steipete), [dtump](https://github.com/dtump) for the [original report](https://github.com/openclaw/openclaw/issues/171169), [joshpetras](https://github.com/joshpetras) for ARM64 corroboration, and [cbhawthorne84](https://github.com/cbhawthorne84) for the [earlier maintenance report](https://github.com/openclaw/openclaw/issues/156712).
  - Asking the setup assistant to diagnose a problem only inspects it. To make repairs, run `openclaw doctor --fix` on the Gateway computer. [#171960](https://github.com/openclaw/openclaw/pull/171960), with thanks to co-author [vincentkoc](https://github.com/vincentkoc).
  - A verified completed installation can settle its unfinished update record and allow the next update to proceed. Other unfinished states can still require `openclaw update repair`. [#171993](https://github.com/openclaw/openclaw/pull/171993), reported in [#171955](https://github.com/openclaw/openclaw/issues/171955). Thanks to [steipete](https://github.com/steipete) and [teetee2tone](https://github.com/teetee2tone).
  - A native update can continue after Doctor finishes quickly instead of treating its completed check as a failure. [#172132](https://github.com/openclaw/openclaw/pull/172132) by [steipete](https://github.com/steipete).

  - Automatic repair now checks whether the Gateway answers before reporting recovery. [#167080](https://github.com/openclaw/openclaw/pull/167080). Thanks to [RomneyDa](https://github.com/RomneyDa).

  - Doctor loads its settings before checking plugins, so a non-interactive run no longer reports a false Codex registration error. [#170445](https://github.com/openclaw/openclaw/pull/170445). Thanks to [obviyus](https://github.com/obviyus).

  </details>
