On this page

On this page

Release notes

v2026.10.10

v2026.10.10

AI agents and tools can read these release notes as plain Markdown.

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.

Chat Details Panel

The main chat view now gathers session information and task progress in 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.

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

Related Details fixes cover widget actions in narrow panes (#168328, thanks to @obviyus) and wrapping long project labels (#171995, thanks to @jacobtomlinson).

Advisor

Advisor 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.

Sources and details

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 Thanks @obviyus.

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

Split speech voice mode

There is now an additional voice option that uses the same AI model that answers your typed messages, while using separately configured services for transcription and speech generation.

Sources and details

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, #45508, #113049. Thanks @steipete, @mcfex for the self-hosted speech report and @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, #171310. Thanks @steipete for the fix and @jonathanlindsay for the report.
  • Authenticated Talk follows ordinary tool permissions and approvals instead of adding a second spoken confirmation for actions already permitted. #159697. Thanks @brokemac79.
  • Spoken Talk requests no longer stop immediately just because the voice connection finished setting up. #170083. Thanks @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, #171227. Thanks @LiuwqGit, @steipete and @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, #171505. Thanks @masatohoshino and @steipete.
  • Silence that produces an empty transcript no longer appears as a transcription-service error, and configured fallbacks can continue. #171514, #171512. Thanks @masatohoshino and @steipete.

Talk's conversation routing is also covered by #188772. Thanks @RomneyDa.

Bring your agent to your files

You can now work directly in a 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.

Sources and details
  • 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 · Thanks @obviyus.

Control from ChatGPT and Claude

The optional 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.

Sources and details

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.

  • 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, #170540. Thanks @steipete.

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

Event-triggered automations

An automation can now start when a connected MCP server reports a supported event, 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.

Sources and details

MCP Events setup 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, thanks to steipete.

Related support for completed event requests and failure reporting is in #172613, thanks to @steipete. Catalog and chat activity artwork is covered by #172716, thanks to @RomneyDa.

Quality-of-life improvements

Conversations and navigation

  • Conversation owners can now set separate send and receive choices 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.

    More details

    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.

    • 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. Thanks @steipete.
  • Worktrees tabs support keyboard navigation and keep the selected tab and keyboard focus visible in high-contrast mode.

    More details
    • Worktrees tabs support keyboard navigation and visible selection and focus in forced-colors mode. #170446 by @steipete.
  • Agents can now react to your WebChat messages.

    More details
    • Adds agent reactions on WebChat prompts and the optional speech-bubble layout. PR #168861. Thanks to @steipete.
  • Pin and reorder pages and conversations in your sidebar. After upgrading, add any old personal shortcuts again because they do not carry over.

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

    More details
    • Move a nested conversation on its own, or archive its whole tree and see which conversations could not be archived. #168076, with a contribution from @steipete. See sessions and sidebar.
  • Reuse a custom snooze time from another conversation's menu without entering it again.

    More details
    • Custom snooze times are remembered for the connected Gateway and account. #171255, co-authored by @jacobtomlinson.
  • Find Copy link near the top of a conversation's menu, and start a new conversation from any sidebar view, including on mobile.

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

    More details
    • Start automatic session naming earlier while preserving explicit names and manual renames. #170794 Thanks @steipete.
  • Open the command palette with Cmd+P on Mac or Ctrl+P on other keyboards, alongside the existing shortcut.

    More details
    • The command palette accepts platform-specific P and Shift+P shortcuts alongside the existing K shortcut. #169943, thanks @jacobtomlinson.
  • A conversation that does not fill the chat pane now loads older messages automatically. You can still load more history yourself.

    More details
    • Older messages load automatically when the conversation does not fill the visible chat pane. #171529 Thanks to @steipete.
    • Automatic loading stops after three older pages per opening; you can load more yourself. #171593 Thanks to @steipete.
    • Reduce history-read work on long, marker-heavy conversations. #172566. Thanks to @steipete.
  • Switch the Users sidebar between Online and All when you want to see more than the people currently connected.

    More details
    • Switch the Users sidebar between Online and All users. #172243, thanks to steipete.
  • Choose where a personal background appears and adjust how strongly it shows through. Hiding your image keeps it for later; Remove deletes it.

    More details
    • 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, closing #153797. Contributions from @vyctorbrzezowski and @steipete. See Appearance settings.
  • Choose Swedish for the Control UI, with English shown wherever a translation is not yet available.

    More details
    • 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, docs #270. Thanks @yeager and @vincentkoc.
  • 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.

    More details
    • 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. Thanks @steipete and @vyctorbrzezowski.
  • Publicly shared conversation pages now look more like a chat, with clearer previews when you share an eligible link.

    More details
    • Refresh the existing public conversation page with a chat-style layout, light and dark themes, and copy controls. #168156. Thanks @steipete.
    • Eligible public links show a session preview or recorded work receipt, with a generic fallback when the publication is unavailable. #169527, thanks @steipete.
  • Find document downloads in both chat and Files. File details you expanded stay open when you switch tabs.

    More details

Performance and diagnostics

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

    More details
    • Checking or waiting for a helper no longer scans unrelated saved runs. #170998. Thanks @steipete.
    • Restart recovery selects the relevant subagent children without repeatedly scanning the full registry. #171067, with related startup work in #171046. Thanks @steipete.
  • A helper can tell you it finished without waiting for its token count; the completion report marks missing usage as unknown.

    More details
    • 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, thanks to @steipete.
  • When enabled for a model, your active conversation and manual compaction get priority over background work.

    More details
    • Interactive turns and manual compaction receive higher priority than background work when the per-model option is enabled. PR #129434. Thanks to m888m and steipete.
  • Troubleshooting tools 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.

    More details
    • Add preparation-stage timings to slow chat-send diagnostics and skip redundant skill inventories for recently attested workspaces. #169307 Thanks @steipete.

    • Analyze saved CPU profiles from a source checkout, including the JavaScript callers of native work, in #170904. Thanks @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. PR #173000, issue #172969. Thanks steipete and reporter xtimor.

    • Shows labeled provider request time per credential in model connection checks and avoids creating an agent session for the check. #169554, issue #169066. Thanks @obviyus and @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 Thanks @steipete.

    • Give response callbacks the HTTP status and headers of rejected OpenAI and Azure SDK requests. PR #169688. Thanks to steipete.

    • Processing and estimated wait are available in model-call diagnostics and Gateway stability output when the provider supplies valid final statistics. #170369, thanks to @steipete and @Uraroga for the report.

    • OpenAI tier downgrade logs include response and account-route details that can be matched with cache-drop warnings. #170949. Thanks @steipete.

    • Distinguish steering and queued follow-up waits from startup in slow chat.send logs and Prometheus metrics. #169006, thanks @steipete.

    • Worktree preparation reports why template reuse falls back. The first template still needs to be built. #169239. Thanks @steipete.

    • Include a bounded, redacted error tail when spawn-broker shutdown fails (#170829). Thanks @steipete.

    • Slow pre-acknowledgement chat requests log admission and persistence subphase timings to help operators locate waits. #171250, thanks to 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, related request #144294. Thanks to ryan-dyer-sp.

    • Extend OpenTelemetry message-duration histogram buckets through one hour. #128785. Thanks to patrick-erichsen.

    • Identify a confirmed foreign process holding the Gateway port in status and channel diagnostics, with guidance for resolving the conflict. #161106, reported in #161024. Thanks to yashas-13, steipete, and altaywtf.

    • Routine successful Gateway activity moves to debug logs, and Prometheus gains egress and tool-catalog counters. #170509. Thanks to 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 by @steipete.

    • Add finer Prometheus histogram buckets for Gateway RPC latency estimates. The additional series increase scrape and render cost. #171062 by @steipete.

    • Expose SQLite writer request phases in Prometheus, including time spent transferring framed requests and results. #171082 by @vincentkoc.

    • Attribute more Git launches and count streaming workspace inventory launches in the child-process metric. #171465 by steipete.

    • Identify more child-process launch owners, including agent execution and helpers. #171582 by steipete.

    • Include collected objects in a Gateway heap profile with includeCollected. #171686 by 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 by steipete.

    • Include underlying causes and storage codes in post-ready Gateway maintenance warnings. #172138. Thanks to @steipete.

    • Include queue wait and available holder information in slow agent database reservation warnings. #172459. Thanks to @steipete.

    • Gateway and node service stop and uninstall errors include status and recovery hints in text and JSON output. #176335. Thanks @555aaditya and @obviyus.

    • Stale Gateway cleanup warnings include the reason cleanup failed. #174590. Thanks @shoaibulhaque and @altaywtf.

    • Provide a source-checkout report for slow session updates. #171148 by @steipete.

    • Show phase timings for slow cloud worker dispatch when diagnostics are enabled. #171749 by @steipete.

    • Expose worker message counts and known payload bytes by direction and kind in Prometheus. #171940 by @steipete.

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

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

    More details
    • Reduce repeated work in the New Session cloud environment picker. #170651 Thanks @steipete.
    • New Session typing avoids repeated work while editing a draft. #171511 Thanks to @steipete.
    • New Session typing avoids repeated model work after the catalog loads. #171530 Thanks to @obviyus.
    • Reduce typing lag in New Session when a large model catalog is loaded. #171769, thanks to vincentkoc.
  • Side chat and project choices can open while unrelated conversations are still being prepared.

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

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

    More details
    • Return a conflict instead of overwriting a session created by a competing request. #169625 by @steipete.

    • Let ordinary session and transcript reads proceed while an unrelated write is busy. #169838 by @steipete.

    • Project listings and the project picker no longer fail just because an unrelated session changes during discovery. #170824 by @steipete.

    • Managed-worktree branch suggestions can remain cached for up to 30 seconds. The chosen ref is validated when a worktree is created. #170626 by @steipete. The related #138555, reported by @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 by @steipete.

    • Managed repository maintenance can remove redundant Git packs, including duplicates previously skipped by consolidation limits. #170935 by @steipete.

    • Worktree creation errors include redacted timing details when preparation stalls. #170835 by @steipete.

    • Slow session update logs distinguish archive and other request phases. #170961 by @steipete.

    • Avoid redundant history downloads when preparing pinned commits in existing partial clones. #170970 by @steipete. Related pack consolidation work in #170935.

    • Reduce capacity admission waits for concurrent repository-backed worktree creation. #170983 by @steipete.

    • Share pending template preparation waits among concurrent creates in the same process. #171075 by @steipete.

    • Reuse unchanged branch inventories in repositories with large pack directories. #171604 by @steipete.

    • Limit repeated Git housekeeping during frequent worktree archives while cleanup continues. #171680 by @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 by @steipete.

    • Allow eligible partial-clone pack consolidation after a deferred snapshot without fetching promised objects. #171841 by @steipete.

    • Detect the Git object format directly during source-only worktree preparation, including repositories without a HEAD commit. #171856 by @steipete.

    • Let unrelated sessions write between commands in an append batch. #171225 by @steipete.

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

    More details
    • 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, thanks to steipete.

    • Avoid copying stored session metadata that is excluded from model context when preparing follow-up turns. #171574, thanks to joshavant.

    • Reduce memory used to prepare optional session forks for long conversations. If fork capture fails, the parent request can continue. #171683, thanks to steipete.

    • Keep lean local-model Tool Search directories compact while leaving full descriptions and schemas searchable. #171588, thanks to steipete and chitowntony.

    • Avoid loading unrelated memory and context plugins for simple completions, image descriptions and one-shot decisions. #171822, thanks to htuyer121 and steipete, gorkem2020 for tracing the affected paths, and Cyb3rb1ade for the related report.

    • Move full Linux Codex cleanup process scans off the Gateway thread. #171865, thanks to steipete.

    • Reduce agent roster and related chat-read work for large model and agent configurations (#169123). Thanks @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 Thanks @steipete.

    • Warm turns reuse a session settings snapshot and local computer discovery facts. #170185, thanks to @steipete.

    • Large agent fleets avoid repeated session-path and configuration work after Gateway readiness. #170612, thanks to @steipete and @609NFT.

    • Reuse validation results for unchanged plugin settings across configuration revisions. #171592 by steipete.

    • Code Mode uses less processing time and temporary memory to prepare its tools across repeated turns. #187161. Thanks @steipete.

    • Cached conversation lists no longer keep obsolete lists in memory after conversation details change. #187111. Thanks @steipete.

    • Model catalogs use less memory when many workspaces and provider models are configured. #187179. Thanks @vincentkoc.

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

    More details
    • Distinguish credentials, verification and workspace problems in Publish PR, #168223. Thanks to steipete.

Cloud workspaces

  • Cloud projects can use supported setup commands from a Dev Container file committed with the project. The worker also recognizes common JavaScript lockfiles when installing dependencies.

    More details

    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 · Environment file guide · Thanks @steipete.
  • A later empty-workspace cloud session can start on a prepared worker when a compatible one is ready. The first still needs a new machine, and keeping ready workers running incurs provider charges.

    More details

    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 · Related work #168371 · Thanks @steipete.
  • Linux cloud workers can install the Node version a project needs during setup. Package-manager preparation also handles more pinned projects.

    More details
    • 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 by @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 by @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 by @steipete.
    • Clarify cloud setup, repository preparation, snapshots and reuse in the documentation. #171767 by @steipete.
    • Correct the worker placement reference to explain that a concurrent placement change can reject a turn without an automatic retry. #171205 by @steipete.
  • Cloud setup can use operator-approved 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.

    More details
    • Approved cloud setup integrations can send credentials only to their bound destinations, including services that use HTTP Basic authentication. #170810 by @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 · Related work #170810 · Thanks @steipete.

Setup, updates and documentation

  • On a fresh supported desktop install, setup now guides you through running OpenClaw locally or connecting to a remote Gateway.

    More details
    • Fresh Linux and Windows desktop setup prepares a local Gateway and opens onboarding, with manual recovery choices when needed. #169512 by @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 by @steipete.
    • Fresh Mac setup shows progress and offers guided dashboard onboarding when the Gateway supports automatic setup, with a manual fallback. #169568 by @steipete.
    • Mac setup follows the dashboard through window changes and keeps the native setup page visible when an installation step is removed. #170613 by @steipete.
    • Mac setup and status messages gain translations across 21 locales. #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. Thanks steipete.
    • Fresh Macs can show AI setup choices sooner. #169472. Thanks steipete.
    • Standalone macOS Bun reports missing or incompatible SQLite libraries with setup guidance. #168564. Thanks steipete.
    • Fresh macOS profiles can start the Gateway and continue automatic setup through supervised retries. #173246 Thanks @steipete.
    • Fresh Windows setup no longer mistakes its own state initialization for another process performing offline maintenance. #176174, issue #176163 Thanks @steipete and @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 Thanks to @steipete.
    • Linux and Windows desktop apps reclaim unreferenced runtime files after a healthy activation while retaining current and previous selections and active references. #171489 Thanks to @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 Thanks to @steipete.
    • Windows desktop setup guides recommend Windows Hub and document Tauri as an alternative. #171114 Thanks to @steipete.
    • The Mac installation guide includes architecture-specific installer links pinned to version 2026.10.3 and the releases index for newer builds. #171560 Thanks to @brianmcguire and @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 by @steipete.
  • You can make supported settings and provider changes 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.

    More details
    • 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. Thanks to 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. Thanks to steipete.
    • Debug proxy captures follow the active Gateway or exclusive offline owner, #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.
    • 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. Thanks @RomneyDa.
    • Allow affected session.store configuration writes (commit).
    • Apply agent creation and updates while another agent is being deleted, without requiring another save or restart. #171459, thanks to 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. Thanks to steipete.
    • Reject malformed UTF-8 piped into model token and API-key commands before it can overwrite saved credentials. #167251. Thanks to Alix-007 and 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, #165019. Thanks to eleqtrizit.
    • Show or hide a secret without submitting the prompt, while keeping the typed value. #169925. Thanks @jacobtomlinson.
    • Config and root-level private writes preserve existing shared state-root permissions while keeping sensitive files and private child directories private. #171869, following the report in #169011. Thanks to steipete.
    • Config saves involving secret references can acknowledge a change already applied by the watcher instead of waiting for a timeout. #171922 by steipete, following work in #109792 and #169249.
    • Preserve provider setup results and activation guidance when temporary credential cleanup fails. #172379, reported in #172368. Thanks to @skyzhao1223, @steipete and @giannis88.
    • CLI configuration writes with reload off save without directly restarting an updated Gateway. Older Gateways may still restart. #184392 Thanks @romneyda.
    • CLI settings writes accepted for restart now report success and a restart message; the new setting is active only after that restart. #184532 Thanks @romneyda.
  • An update can bring the Gateway back up before optional Doctor checks finish; repairs needed for startup still happen first.

    More details
    • 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, thanks to 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, thanks to steipete.
    • Online schema checks avoid a full staging copy for eligible databases. Recovery and incomplete WAL cases can still need a snapshot. #171984 by vincentkoc.
  • Getting-started, installation, backup and troubleshooting guides now explain their steps and recovery choices more clearly, while keeping existing links working.

    More details

    These wording changes are by @RomneyDa.

    • Clarifies getting started, installation, provider, update, and security guides while preserving existing links. #168693

    • Makes CLI, recovery, backup, and troubleshooting guides easier to follow. #168694

    • Explains concepts and automation behavior more directly. #168695

    • Clarifies Gateway setup, operation, and recovery guides. #168696

    • Makes security and channel setup instructions easier to understand. #168697

    • Clarifies tool, node, and plugin setup and usage guides. #168699

    • Simplifies reference and CI guidance while keeping links to renamed headings. #168702

    • Clarifies macOS Gateway and managed Node messages and platform guides. #168704

    • Makes iOS guides and release diagnostics more direct. #168705

    • Clarifies Android and Wear guides and the screenshot lane description. #168706

    • Improves Linux setup guidance and the unrecognized managed-installation message. #168707

    • Makes agent and command execution messages clearer about safe retries and checking state. #168709

    • Clarifies Gateway setup and security diagnostics. #168710

    • Makes CLI, Doctor, and service help and repair messages easier to follow. #168711

    • Explains Codex and provider setup requirements and failures more directly. #168713

    • Clarifies messaging and calling help, warnings, and approval receipts. #168714

    • Makes workspace and memory plugin messages clearer about paths, paused recall, and safe retries. #168715

    • Clarifies browser, tool, plugin, and approval help and diagnostics. #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, #170921). Thanks @vincentkoc.

    • The environment reference documents the existing ClawHub install telemetry opt-out, CLAWHUB_DISABLE_TELEMETRY. #114376. Thanks @kobihikri and @vincentkoc.

    • The Neon guide covers existing custom-provider setup for its Chat Completions, Responses, and Anthropic Messages endpoints. PR #113734. Thanks to mezotv, vincentkoc, and clarkbw for review advice.

    • Doctor's guide clarifies that standalone checks can run after an update before starting the Gateway. #170550. Thanks to steipete.

    • Add a native Ollama configuration example for llmman that retains tool use with an explicitly configured model. #171444, thanks to ericcurtin.

Models, voice and media

  • On Linux x64 CPU systems, guided setup 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.

    More details
  • Choose Fish Audio’s Drama 3 preview for speech and Talk if you want to try it; the existing voice default does not change.

    More details
    • Fish Audio supports the opt-in Drama 3 preview for speech and Talk, with one voice per request. #170473. Thanks @steipete.
  • Choose 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.

    More details
    • Update the recommended-model list to include Gemini 4 Argon and revise the leading order. #171429, thanks to 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, thanks to steipete.
  • Shared models can use the Agents API; its hosted service handles conversation compaction itself.

    More details
    • Allow Agents API to be selected for shared models with OpenClaw compaction settings. The hosted runtime manages its own compaction. #171813, thanks to steipete.
  • Select Muse Wonder 1.0 Standard or choose maximum thinking for Wonder and Spark 1.3 Standard.

    More details
    • Muse Wonder 1.0 Standard selection and max thinking for Wonder and Spark 1.3 Standard (#170232). Thanks to RomneyDa.

Skills, plugins and automations

  • Different OpenClaw agents can now use separate Microsoft Teams bot identities from one Gateway, so each can appear under its own bot name instead of sharing one identity.

    More details

    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.

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

    More details
    • Open older linked runs directly and return to the normal history with Show all runs. #169023, thanks to steipete.
    • Run-history search includes delivery error text (#170958). Thanks @steipete.
  • Pause scheduled Team Reports without losing existing reports or the option to run one manually.

    More details
    • Team Reports can pause automatic scheduling without disabling manual reports or access to stored reports (#171840). Thanks @vincentkoc.
  • Undo a Skill Workshop review to restore the skills it edited and archive any new skills it created.

    More details
    • 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. Thanks @obviyus.
    • Background reviews wait for ten model iterations, so feedback can take longer to appear. A foreground skill change resets the count. #168679. Thanks @obviyus.
    • Change the default destination for background skill notices, with optional channel delivery and Undo. #170025 by obviyus.
    • Guide background reviews toward focused, reusable procedures. #170277 by obviyus.
  • Plugin authors can move affected storage, session and other SDK calls to asynchronous replacements. Migrate deprecated synchronous calls by December 31, 2026; some unsupported calls already reject synchronous use.

    More details
    • Async conversation route-owner preparation replaces deprecated synchronous hooks for plugin authors. #169593, thanks @steipete.

    • Legacy synchronous Mention Inbox recording queues work after commit, with recordCommittedInputAsync available when completion is needed. #169594, thanks @steipete.

    • Async alternatives cover session, approval routing, sandbox and harness reads while synchronous adapters remain deprecated. #169622, thanks @steipete.

    • Remove five never-stable synchronous SDK names and retain published compatibility APIs. The affected names are withOpenClawAgentDatabaseRuntime, loadMemorySessionMetadataBatch, createAccountScopedBindingAdapter, prepareConversationRouteOwners, and captureSessionEntryCurrentCheck. #170034 by steipete.

    • Update Plugin SDK and database worker migration guidance for awaited APIs. #169879 by 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 by RomneyDa.

    • Restore 29 private SDK exports used by existing community plugins while their authors migrate. #173777. Thanks @RomneyDa, and @FtlC-ian for the report.

    • The keyed-state V2 store supports awaited operations and conditional atomic updates. Existing stored data needs no migration. #168478. Thanks @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. Thanks @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. Thanks @steipete.

    • Native harness integrations gain V2 binding lifecycle and asynchronous ownership hooks, with synchronous compatibility retained. #168479. Thanks @steipete.

    • Approval publication can be awaited while the synchronous publisher remains available for migration. #168482. Thanks @steipete.

    • V2 conversation-binding services and adapters provide awaited binding operations. Bundled Discord, Feishu, iMessage, Slack and Telegram paths adopt them. #168483. Thanks @steipete.

    • Plugins can prepare message-action descriptions asynchronously, including discovery for Matrix accounts with saved credentials. #168484. Thanks @steipete.

    • Approval and placement operations have migration paths for legacy synchronous placement methods and opaque approval callbacks. #168855. Thanks @steipete and @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. Thanks @steipete.

    • Plugin authoring, manifest and SDK migration guides use clearer language for existing behavior. #168701, issue #168322. Thanks @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, thanks @steipete and @dwty11 for the report and clarification.

    • Malformed fallback overrides are treated as an empty list, preventing a malformed value from causing a crash or unintended fallback. #169702, thanks @Yigtwxx and @dwty11 for the report.

    • 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, thanks @steipete.

    • Replace retired synchronous GitHub publication coordinator calls with async or V2 methods. Personal OAuth compatibility methods have a separate contract. #169581, thanks @steipete.

    • Move synchronous placement readers to their async equivalents. These readers were deprecated, and the placement changes below describe their later compatibility limits. #169086, thanks @steipete.

    • Await skill-command discovery for channel menus. The synchronous SDK list methods remain available during their deprecation period. #169089, thanks @steipete.

    • Use async credential preparation and provider-selection APIs. Released synchronous methods retain their behavior through the next SDK major. #169111, thanks @steipete.

    • Await session metadata, conversation, model-menu and speech-preference preparation. Synchronous SDK calls remain available with warnings. #169122, thanks @steipete.

    • Use loadCombinedSessionStoreForGatewayAsync for cross-session visibility. The synchronous loader remains available through the next SDK major. #169523, thanks @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, thanks @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, thanks @steipete.

    • Session input completion avoids a false failure after an unrelated write. Plugin authors can migrate recorder callbacks to completeProcessingAsync. #169573, thanks @steipete.

    • Move Memory session metadata reads to loadMemorySessionMetadataAsync or loadMemorySessionMetadataBatchAsync. The synchronous forms are deprecated until the next SDK major. #169579, thanks @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, thanks @steipete.

    • Replace the synchronous session catalog title helper with readSessionTranscriptCatalogTitleAsync. #169620, thanks @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, thanks @steipete.

    • Retained synchronous storage adapters can now emit migration warnings while Board and plugin metadata reads use async APIs. #169631, thanks @steipete.

    • Await single or batched transcript statistics and use onPreparedAgentRunStart for prepared run-start callbacks. Applicable synchronous APIs remain during the current major. #169637, thanks @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, thanks @steipete.

    • Add forkSession for questions against prepared session context, subject to session access, supported providers, and retained context. #170146 by obviyus.

    • Allow authorized plugins to steer supported active runs with hidden, attributed guidance and an explicit next-turn fallback. #170152 by obviyus.

    • Deprecation notices name the replacement for a plugin API you use. #171752, thanks to @steipete.

    • Adds awaited helpers for historical transcript-key lookup and TTS prompt preparation, with prepared preferences available for supported synchronous TTS calls. #171443, thanks to @steipete.

    • Lets admitted agent hooks and Gateway services share plugin-owned data for the same run. #171307, thanks to @obviyus.

    • Lets plugin authors filter agent-event subscriptions by phase before unwanted events are copied. #171534, thanks to @obviyus.

    • Adds an opt-in metadata-only event payload for short top-level scalar values. Full payloads remain the default. #171610, thanks to @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, thanks to @steipete.

    • Registered plugin callbacks again receive resolvePath and inlineView, including when verifying ONNX models in an explicit directory. #184110, thanks to Leon-SK668.

    • Independently validate affected plugin settings when schema validation runs without acceleration. #182514, thanks to 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, thanks to RomneyDa.

    • Reduce allocation and CPU work for adjacent transforms on plugin-backed model streams. #185083, thanks to steipete.

    • Document five async plugin SDK replacements and their narrow import paths while retaining existing synchronous contracts. Commit 8fc31c9.

    • A direct commit improves conversation lookup, Gateway shutdown, plugin run context and skill discovery, alongside reusable custom snooze times.

    • Retired synchronous GitHub publication methods now name their awaited or V2 replacement before rejecting calls in #169750. Thanks @steipete.

    • Plugin authors have until December 31, 2026, to migrate deprecated synchronous SDK calls; this change does not remove those calls. #171775, thanks to @steipete.

    • Asynchronous execution-approval readers and synchronous API migration guidance for plugin developers in #169584. Thanks @steipete.

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

    More details
    • View pool headroom and model eligibility in the Control UI. The configured API key stays on the Gateway. #169514, thanks @steipete.
    • Use the model-request credential for the ClawRouter pool dashboard. #170041 by steipete.
  • Companion clients can find and preview official ClawHub packages, with verification of the exact package they receive.

    More details
    • Supplies official ClawHub catalog discovery, package previews and exact-artifact verification for companion Gateway clients. #171622, thanks to @Patrick-Erichsen.
  • Claw authors can add lowercase categories to a manifest without losing them when it is saved.

    More 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.

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

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

    More details
    • Match equivalent Unicode forms in the session catalog (#184847). Thanks @Leon-SK668.
    • Clear the Sessions search with its button or Escape without resetting other filters. #146954. Thanks @vincentkoc and @altaywtf.
    • Find matching conversations when search words are separated by standalone punctuation or non-indexed symbols. #168117. Thanks @yetval and @obviyus.
    • Give transcript searches enough time to use their worker budget and suggest narrower searches after a timeout (#171190). Thanks @steipete.
    • Match equivalent Unicode forms in session title search and command-palette ranking (#184374). Thanks @Leon-SK668 and @obviyus.
  • File searches tell you when nothing matches instead of leaving a blank panel.

    More details
    • Show an empty-search message in filtered Files views instead of a blank panel. #169114 Thanks @steipete.
  • Unsent drafts, 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.

    More details
    • 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, #160428. Thanks @hxy91819 and @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. Thanks @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, #167859. Thanks @masatohoshino and @steipete.
    • Keep files attached to /steer and /redirect messages, including for retry after a rejected submission. #165105, #165104. Thanks @ooiuuii and @obviyus.
    • Confirmed queued messages clear a false delivery warning while uncertain messages continue to warn. PR #168284. Thanks to @steipete.
    • Large WebChat images are staged so workspace file tools can open them, including in sandboxes. PR #168537, issue #103198. Thanks to @synthalorian, @obviyus and reporter @woohahahaaa.
    • Messages with surrounding whitespace use the same normalized text on first inference and later replay. PR #168725. Thanks to @steipete.
    • Chat preparation reuses fresh session facts to reduce repeated database and worker reads. PR #168316. Thanks to @steipete.
    • Avoid false media errors and duplicate file cards when a WebChat attachment was already committed. Previously cached duplicates are not rewritten. #169093 Thanks @steipete.
    • Prevent duplicate history entries for prompts with inline directives. Existing duplicate transcripts are not rewritten. The related issue #168843 covers a separate problem. #169434 Thanks @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 Thanks @steipete.
    • Show an error after repeated preference-save conflicts while retaining the edit for a later retry or reconnect. #169367 Thanks @steipete.
    • Keep dictated text and a chat being created with the draft you actually started, even while the browser connection opens. #169692, thanks @steipete.
    • An accepted message without a confirmation ID reports unknown on the first response and replay without sending again. #169650, thanks @steipete.
    • Offline queued messages retain individual reconnect badges without a duplicate count band (#170352). Thanks to @steipete.
    • Accepted chat input and its interaction time are saved together before acknowledgment (#170250). Thanks to @steipete.
    • Avoid making a ready conversation wait behind unrelated saved-chat work before accepting a message (#170342). Thanks to @steipete.
    • Confirm eligible messages sent to idle chats once the input is saved (#170376). Thanks to @steipete.
    • Keep an original request above a later steering message while a new conversation is being set up. #170723 Thanks @steipete.
    • Acknowledge chat sends sooner when unrelated database writes are in progress (#170816). Thanks @steipete.
    • Reject edited retries using the same request key for newly fingerprinted messages, including after in-memory state is lost (#171174, reported issue). 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 and @steipete.
    • Warm conversations reuse session information to reduce database work. #171337 Thanks to @steipete.
    • Show current queue labels after reconnecting while an earlier unconfirmed send remains paused for review. #171866, thanks to steipete.
    • Remove an empty second composer after an interrupted session start while keeping any actual follow-up draft. #172318, thanks to 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, thanks to 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, fixing #172658. Thanks to @shakkernerd for the report and fix.
    • Avoid false storage warnings, unwanted retries and restored drafts after a queued message has already been retired (#186171). Thanks @syxscott and @obviyus.
    • Close stale command and skill menus after a submitted draft clears, while keeping menus for retained or newer drafts (#184869). Thanks @shakkernerd.
    • Restored pasted-text chips, attachment previews and capability-menu interactions in the composer. Commit
    • Settled accepted terminal-state writes before releasing canceled turns. Commit
    • Loaded persisted transcript state when an append needs a retry and the session has no in-memory snapshot. Commit
    • Report slow chat sends while avoiding unnecessary work when no standing intent matches. Merge
    • Restore queued follow-ups after an eligible interruption (commit), thanks to @steipete and @RomneyDa.
  • Fixes affected chats showing the same reply twice, losing the end of a streamed answer or displaying messages in the wrong order after recovery.

    More details
    • Deliver eligible background completions to their original WebChat conversation without an external messaging target. #158067, #147387. Thanks @vincentkoc and reporter @oywino.
    • Avoid a false WebChat error when a Claude CLI turn has already delivered its final answer through the message tool. #167736, #167709; related separate report #169614. Thanks @Oldrich333 and @obviyus.
    • Hide recognized serialized tool-call markup from streamed and final replies while keeping surrounding text and literal code examples. #138204, #138198, #153594. Thanks @ericcaiwx-star, @ruiling-smartbear, and @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, #86592. Thanks @masatohoshino, @obviyus, and reporter @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, #160641. Thanks @xydigitLybnnnn, @obviyus, and reporter @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, #141556; related separate report #160750. Thanks @shannon0430, @obviyus, and @zabealbe.
    • Live replies and saved history stay in chronological order around worker updates. PR #168250. Thanks to @steipete.
    • A remaining chat observer continues receiving updates and narration after another observer unsubscribes. #169693, thanks @steipete.
    • Newly committed message previews appear promptly in resident session lists (#170105). Thanks to @steipete.
    • Keep conversation branches available when saved history is reconciled (#170079). Thanks to @steipete.
    • Restore eligible chats after restart even if another conversation had steered them (#170252). Thanks to @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 Thanks @steipete.
    • Load earlier messages when the recent history page contains only hidden activity. #170731 Thanks @steipete for reporting the issue.
    • Focus the folder path and keep the save action reachable on short screens in group defaults. #170566 Thanks @steipete.
    • Keep new and previously saved failure notices out of later model requests (#171327). Thanks @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). Thanks @steipete.
    • Show a saved completed reply when its message event was missed. #171766, thanks to vincentkoc for reporting and co-authoring the fix.
    • Keep images with their headings in live web chat and reloaded history. #172438. Thanks to @steipete for raising the problem.
    • Hide stray reply actions on pre-tool progress messages while retaining actions for eligible answers. #172620. Thanks to @Patrick-Erichsen.
    • Include confirmed delivered final replies when session history rebuilds a conversation, addressing one cause of repeated Telegram responses. #179399, related to #166482. Thanks to @sobolevbel, @gkoch02, and @steipete.
    • Keep side-question replies when different questions have the same answer and suppress a complete reply already sent by a messaging tool. #174869. Thanks to @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, report). Thanks @xiaopan-xydt, @goslingmanagment and @steipete.
    • Fix unbinding and activity updates for conversation IDs containing the binding separator without changing a separate prefix binding (#184317). Thanks @steipete.
    • Prevent a stray separator at the start of a reply after an empty native thinking-block segment (commit 9931e6e).
    • Preserved history paging, retry controls, parked content state and focus across chat updates. Commit
    • Prevented an empty linked-session preview from freezing navigation in web and native conversation views. Commit Thanks @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
    • Preserved provider-signed blank assistant items when replaying OpenAI Responses conversations. Commit Thanks @steipete.
    • Eligible built-in agent runs can continue unfinished tool work after an empty output-limit response. PR #153728, issue #144842. Thanks to zhangguiping-xydt and steipete.
    • Keep stable partial answers and recognize configured native API keys with the managed native CLI update. #181823. The release wording is clarified in #188157. Thanks @joshavant, @RomneyDa.
    • Recover a missing ending in a started Codex stream when the completed answer extends the text already received. #168400. Thanks to @RomneyDa.
    • Restore dispatch for bound ACP conversations and preserve accumulated Telegram preview text when a separate final status arrives (#168989). Thanks @steipete.
    • Preserve live answer text across tools and reasoning, including ACP streams, while keeping deliberately empty final replies empty (#169020). Thanks @steipete, @laulopezreal, and @Yigtwxx.
    • Prevent covered split tool-call markers from exposing raw call text in streamed replies (#169172). Thanks @JasonBuildAI and @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). Thanks @ruel225, @steipete, and @Oliver4Spot.
    • Complete Responses reasoning turns that use asynchronous tools instead of failing after the tool runs. #171431, thanks to hannesrudolph for the fix and obviyus for the merge. See the reported issue.
    • Keep Responses tool-call and result identifiers stable across later turns and transcript reloads. #171614, thanks to steipete.
    • Reduce repeated parsing delays in long streamed replies that quote tool-call XML in a code block. #171573, thanks to steipete and boeingchoco for reporting the issue.
    • Reduced unnecessary tool-call parsing for streamed Markdown links and code. #172398. Thanks @steipete.
    • Reduced repeated sanitization scans for bracket-led citation replies. #172470, addressing #172340 and related to #171416 and #119478. Thanks @JasonBuildAI and @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 Thanks to @RomneyDa and @Compassboot for the report.
    • Keep long Codex node exec-server exit diagnostics readable when truncation falls inside a UTF-8 character. #183932 Thanks @SunnyShu0925 and @obviyus.
    • Confirmed final messages and explicitly final reactions to the current conversation can complete the turn. #170653, thanks to @steipete and @sunlit-deng.
    • A final reply already delivered to the current conversation remains complete through provider retries. #170675, thanks to @obviyus for the report and @Kimiyu-186 and @steipete.
    • A saved final CLI reply stays successful when subsequent settlement fails. #170757, thanks to @steipete and @elikampf for the report.
    • Codex receives the current group-chat speaker's stable identity beside their request. #170709, thanks to @sunlit-deng, @steipete and @oEdyb for the report.
    • Stop can cancel the intended run while participant display information updates. #170652, thanks to @steipete.
    • Follow-up messages avoid being steered into a closed reply, and memory maintenance uses the active run's context budget. #170635, thanks to @RomneyDa.
  • 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.

    More details
    • 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, #128055. Thanks @steipete and @hannesrudolph.
    • Load native plugin assets together on authenticated reload and keep the app document available if the plugin catalog fails. #168059. Thanks @steipete.
    • Show cached conversations at the latest messages with saved timing and task progress while reconnecting. #168154. Thanks @steipete.
    • Previously visited chats restore saved sidebar rows and navigation while reconnecting. PR #168206. Thanks to @steipete.
    • Authorized conversation-link reloads can show the configured assistant identity before the connection completes. PR #168265. Thanks to @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. Thanks to @steipete.
    • Conversation drafts survive route changes and reconnects, and Back history is corrected after default-agent initialization. PR #168612. Thanks to @steipete.
    • Cached conversations no longer briefly show the empty-chat welcome during the first connection. PR #168185. Thanks to @steipete.
    • Refresh after a server update returns to the same chat and preserves its link. PR #168941. Thanks to @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. Thanks to @steipete.
    • Control UI startup defers optional automation and System busyness code until it is needed. PR #168506. Thanks to @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 Thanks @steipete.
    • Reveal an unvisited chat after its initial transcript position settles. #169334 Thanks @steipete.
    • Reopen the existing chat after automatic recovery reloads while preserving its draft and dashboard parameters. #169194 Thanks @steipete.
    • Cached transcripts and saved reading positions stay steadier while fresh history loads. #170052, thanks @steipete.
    • Load chat without waiting for unrelated workspace identity and Board code (#170345). Thanks to @steipete.
    • Avoid an unnecessary refresh prompt after reconnecting to a Gateway on another origin (#170090). Thanks to @steipete.
    • Show settled chat history sooner on reload while preserving the reading position. #170662 Thanks @steipete.
    • Keep session rows visible as the sidebar switches from cached to live data. #170708 Thanks @steipete.
    • Reduce repeated sidebar updates and load unopened menu items when first needed. #170625 Thanks @steipete.
    • Load closed Inbox and sidebar menu renderers on first use, reducing initial JavaScript downloads. First use can require a network connection. #170648 Thanks @steipete.
    • Apply saved appearance and sidebar preferences earlier on authenticated same-origin reloads. #170649 Thanks @steipete.
    • Load older chat history only when requested after a reload (#171009, related #170662, #170731, and #170789). Thanks @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). Thanks @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). Thanks @steipete.
    • Recover startup and view downloads after a temporary network failure, subject to reload safeguards. #171825, thanks to 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, related to #172507. Thanks to @steipete and reporter @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, #187594). Thanks @steipete and @romneyda.
    • Show a loading state for an uncached, disconnected chat deep link until its history or session identity is known (commit 2bf00b8).
    • Load the saved sidebar without making the initial page download as large. Commit
    • Reduced asset requests for chat and new-session startup. Commit
    • Refreshed profile appearance preferences after reconnecting with the same client. Commit
    • Reloaded logs from the start after a Gateway restart, retaining previous rows until the new read succeeds. Commit
    • Restored data connections needed by the board, dashboard and debug views. Commit
  • 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.

    More details
    • Keep the conversation view following the right turn while Stop moves between active runs (#170349). Thanks to @steipete.
    • Avoid a misleading Stop error when the requested turn finishes while cancellation is being prepared. #170542 Thanks @steipete.
    • Keep a slow sessions-tool Stop active and return settling while cancellation continues. The response does not mean cancellation has completed. #176603, addressing the report in #169077. Thanks to @steipete and reporter @hannnnn-l.
    • Continue a stopped conversation after terminal recovery records are cleared, keeping its history intact (#181866). Thanks @romneyda.
    • Continue a killed conversation in the same session when an abandoned recovery record blocked new messages (#181992, report). Thanks @steipete and @najef1979-code.
    • Stop selected native Codex descendants with their parent and preserve children that complete during Stop. PR #169700. Thanks to vincentkoc.
    • Release a Codex parent chat after Stop when its selected child was already interrupted. #171541, thanks to RomneyDa.
    • Keep a stopped Codex conversation ready for another message after reloading the web UI. #171656, thanks to 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 Thanks to @LLagoon3, @RomneyDa for validation, and @jalehman for the report.
    • Repeated cancellation callbacks preserve a confirmed subagent cancellation and its pending parent notice. #176206 Thanks @steipete.
    • Stop can interrupt the current run's owned Codex descendants after a parent thread is reused, without cancelling older or unrelated work. #181475 Thanks @RomneyDa.
    • Keep /stop bound to the work selected before authorization in f28e5ba.
    • Let Codex Stop settle during native client shutdown while replacement writers still wait for the old process to exit in 67a3798 and 1e1d5f1.
    • Fix Stop during queued turns, keep configured reasoning choices available and continue following the chat after a scroll that moved nowhere in fcb89a3.
    • Identify AI service connection failures and remind users to check completed work before retrying (#168247). Thanks @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 (#168282). Thanks @steipete and @Yigtwxx for the investigation.
    • Cancel active OpenAI-compatible HTTP runs through session-wide Stop and return the known run ID (#168080). Thanks @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). Thanks @steipete.
    • Keep unfinished reasoning out of Chat Completions replies when a tool call is followed by a token limit or content filter (#168294). Thanks @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). Thanks @steipete.
    • Remove the duplicate waiting line when individual subagent activity is already visible in Control UI (#168173). Thanks @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. Thanks to @steipete.
    • Keep Codex plugin discovery during onboarding within its intended timeout when the system clock changes. #168735. Thanks to @SunnyShu0925.
    • Session Stop covers authorized OpenAI-compatible HTTP runs admitted or queued before the runner starts. Early HTTP run cancellation. Thanks @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, prior investigation. Thanks @steipete and @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. Thanks @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, issue #169807. Thanks @huyengiang101086-spec, @steipete and reporter @Yolo521-bot.
    • Give controllers a shorter polling hint after a managed deployment begins draining, so they can notice completed work sooner. #169585. Thanks @steipete.
    • A late deletion confirmation no longer closes or switches away from a selected replacement session in #170056. Thanks @steipete.
    • Offline chats show guidance when a cloud session's initial message remains unresolved, while follow-up messages can still queue. #170515. Thanks to steipete.
    • Clarify that follow-ups can be queued while the first message is unresolved, but wait for it to be resolved before delivery (#170802). Thanks @steipete.
    • Valid request failures leave a healthy Gateway connection open. A successful hello is still needed for normal initialization. #171303, thanks to steipete.
    • Deliver the first sessions_send message to a newly created main session under the Always defaults (7b125134).
    • Accept valid follow-up input when the preceding terminal write finishes before writer admission (f8ea55fc).
    • Preserve aborted results and stop reasons during session deletion and Stop, and wait for the canceled owner to settle (6bb8525d).
  • 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.

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

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

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

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

    More details
    • 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. Thanks @vincentkoc.
    • Incognito guidance documents the Codex diagnostic-log limitation and the OpenClaw-runtime alternative. PR #168966. Thanks to @steipete.
    • Allow an administrator to reload an existing Incognito conversation during its Gateway session. #169025 Thanks @steipete.
    • Refresh the Public badge in an open chat when another window changes sharing. #169078 Thanks @steipete.
    • Disable Delete for adopted Claude and Codex sessions whose native transcripts cannot be removed through that action (#171031, reported issue, related Codex issue). Thanks @chelsealong, @bricelb for the report, and @obviyus for verification.
    • Stop session readers from repeatedly polling operator-only features and show clearer access guidance (#171223). Thanks @steipete.
    • Kept a retained incognito session findable by ID after the state directory changes while its in-memory owner remains active. Commit
    • Keep Incognito conversation content in process memory rather than an Incognito database. Plugin authors accessing Incognito sessions must await the updated SDK calls. #170712 Thanks @steipete.
    • Memory use during Incognito usage refresh, thanks to @HerbertHuerto and @RomneyDa.
  • 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.

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

    More details
    • Report the real update outcome after a chat-requested update instead of a false Doctor cleanup permission error. #170070, thanks @hannesrudolph, @steipete for the investigation, and @ezimerman, @yoyo837, @aia007731-lab and @justinforsound for reports.
    • 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. Thanks to @fuller-stack-dev.
    • Prevent an older background check from overwriting the first manual update status publication. #169913. Related tracing reports #112278 and #112486 are not resolved by this change. Thanks @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 and #169950. Thanks @amittell, @steipete and @wr-web.
    • Update confirmations and delayed native fallback stay with their original Gateway and profile in #170086. Thanks @steipete.
    • Update verification avoids a false failure when recorded migration has advanced the database schema, and improves saved status guidance. See #170130 and #169422. Thanks @steipete and @angeliti999.
    • Failed-update reports retain Doctor recovery instructions until process settlement is safely verified in #170207. Thanks @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, fixing #170333. Thanks @RomneyDa, @DonnieFi for the report, and @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. PR #170380, reported in #170332. Thanks @DonnieFi, @RomneyDa, and @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, with reports and discussion in #170031 and #169352. Thanks @steipete, @council10-kera, @dave160926-ops, and @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. Thanks to steipete.
    • The compact Inbox update action stays disabled and shows that it is checking until its target freshness check finishes. #170491. Thanks to steipete.
    • Successful update headlines include the number of warnings that need attention, while keeping the successful outcome. #170490. Thanks to RomneyDa.
  • 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.

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

    More details
    • Keep failed dashboard widget removal errors visible through an unchanged refresh. #169003 Thanks @steipete.
    • Use singular English wording for one session or person in Activity, including accessible descriptions. #169231 Thanks @steipete.
    • Inbox automation alerts stay available when switching agents within the same scope, while agent-specific authentication refreshes. #169677, thanks @steipete.
    • Dismissing an absent or already dismissed Inbox mention returns the current authorized Inbox instead of failing during unrelated session activity. #169836, thanks @steipete.
    • Hide suggested tasks during launch and restore failed or unconfirmed tasks for retry. #170752 Thanks @steipete.
    • Recover the mention Inbox after a session replacement, with bounded background retries (#170896). Thanks @steipete.
    • Clear a suggested task's old error after a successful retry without clearing newer or unrelated errors. #171640, thanks to steipete.
    • Avoid running an Activity recap again when an earlier request already completed it. #172334, thanks to steipete for the fix and Mike-MWT for reporting #172186.
    • Avoid unnecessary roster planning when delivering opt-in Control UI activity recaps (#182182). Thanks @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 Thanks @holgergruenhagen and @steipete. Thanks @pmochine for the report.
  • Plugin download counts now use the correct million or billion label.

    More 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.

    More details
    • 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. Thanks to @steipete.
    • Reuse sandbox URLs for unchanged HTML widget policies on repeated board reads (#171332). Thanks @steipete.
  • The community banner no longer shows Pinterest’s Save overlay when the integration respects its opt-out.

    More details
    • Prevent Pinterest integrations that honor image opt-outs from placing Save controls over the community banner. #171903, thanks to vincentkoc.
  • 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.

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

    More details

    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, thanks @steipete.
  • Long HTML conversation exports display their transcript and navigation again. Regenerate older exports to get the fix.

    More details
    • Restore the transcript and navigation in long HTML session exports. Previously generated exports need to be regenerated. #151029. Thanks @zhangguiping-xydt.
  • 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.

    More details
    • 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 Thanks @steipete.
  • 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.

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

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

    More details
    • Keep keyboard focus on the copy button when draft recovery shows its copied confirmation. #171591 by steipete.
    • Show login recovery and its copy control while the chat route is still loading (06afa0d9).
    • Simplify the failed-reply card and make retry and error copying easier to find. #172349. Thanks to @steipete.
  • Fixes missing Turkish navigation labels and refreshes translations in Workboard and Labs.

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

    More details
    • Show reasoning as it arrives when you have enabled that view, then replace its preview with saved history without repeating it. #117721, #88079, #163567. Thanks @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. Thanks to @steipete and @leapdragon.
    • Hide an unsupported context percentage when the selected model's capacity is unknown, while retaining available provider plan usage. #169341 Thanks @steipete.
    • Chat shows fallback and return dividers and hides recovered same-run diagnostic errors. A named fallback candidate may have been skipped. #169773, thanks @steipete and @jacobtomlinson.
    • Compact context ring beside the model picker, with its usage details retained (#170370). Thanks to @steipete.
    • Respect the configured reasoning policy when showing session thinking options for runtime-routed models. #170589, issue #170528. Thanks @obviyus for the fix and @EmeraldPi for the report.
    • Retain session thinking labels and options when a later catalog row omits the model. #170659 Thanks @steipete.
    • Keep the effort slider available during a model catalog retry when the retained selected model is enabled (commit 66c4b4a).
    • Show the applicable agent verbosity in Control UI and local TUI history, with session overrides taking precedence (#182059). Thanks @masatohoshino and @obviyus.

Agents, Goals and automations

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

    More details
    • Startup recovery preserves the scheduled retry time. #171775.
  • 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.

    More details

    #188029. Thanks to @joshavant. See 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.

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

    More details

    #188848, included through #188878. Thanks to @RomneyDa. Explicit manual request IDs remain unchanged, and imported older history can use its stored IDs.

  • Fixes a parent conversation being unable to answer while its helper is still working, recovering from an interruption or waiting to deliver a result.

    More details
    • Let an eligible parent chat continue after repeated restarts instead of waiting behind an interrupted helper result. #184100. Thanks @steipete.
    • Continue protected conversations and private completions while child work is active, with current tool permissions preserved. #174900 Thanks to @enki, @Ricardodpalmeida, @Stronggenetics, @RomneyDa, and @steipete.
    • A parent can resume after all native children finish while their results await delivery. #175246 Thanks @quqi1599, @steipete and @Stronggenetics.
    • After a restart interrupts a quiet subagent, affected parents can receive a turn to reconcile unfinished work. #175278 Thanks @RomneyDa.
    • Codex sessions can reply after recovering completed native children without conflicting with their own pending recovery writes. #177564 Thanks @jjjhenriksen.
    • Parents can resume after a native child's follow-up finishes while its result awaits acknowledgment. #177577, #172837 Thanks @linancn and @steipete.
    • An interrupted native child can remain resumable without blocking an idle parent from replying. #179099 Thanks @wtfichigo and @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 Thanks @steipete and @goslingmanagment.
    • Retain recovery notifications while a main session is awaiting preparation (commit).
  • 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.

    More details
  • Completed helper results and follow-ups 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.

    More details
    • Keep recorded helper results available when an authorized Claude CLI chat resumes. Account boundaries that cannot authorize replay receive metadata only. #164175, #171195, #159512, #154716. Thanks to etzelm, steipete, potterdigital, synapse-homeroot, cassthebandit, holgergruenhagen, oldrich333 and xdom-jr.
    • Prevent successful session completions from being rejected after their own writes and keep queued replies eligible for retry. PR #169646. Thanks to 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 Thanks @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 Thanks @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 Thanks @goslingmanagment, @dmsrg399 and @steipete.
    • Preserve ACP input and completion notifications during session and dispatch races in af03aa0. Thanks to steipete.
    • Preserve eligible nested Claude CLI background task answers across snapshot orderings (commit). Thanks to @RomneyDa.
    • Restart recovery leaves active subagent result delivery and cleanup to finish. #170486, thanks to @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. Thanks @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, thanks to steipete.
    • Return visible child completions and failures to a yielded guest session. #171796, thanks to shakkernerd for the fix and skyzhao1223 for investigating the reported handoff problem.
    • Avoid retrying a subagent result that was already delivered when receipt recording fails, and retain useful errors for failed handoffs. #171657, thanks to steipete.
    • Gave human browser-chat follow-ups in retained child sessions their own recovery record. #172017. Thanks @vincentkoc.
    • Kept stopped requester turns cancelled when a subagent-result settlement is retried. #172286. Thanks @fuller-stack-dev.
  • 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.

    More details
    • Wait for all tools in a group before an opted-in plugin reports a final answer, including failures. #165291, #164558. Thanks to steipete.
  • Fixes new Codex helpers starting successfully but failing when they try to ask their configured model for an answer.

    More details
    • Let visible subagents started during a parent turn reach their configured model and fallback sequence. PR #169984. Thanks to steipete.
    • Codex native children can make model requests after startup without inheriting an expired startup context. #176311, #162119, #165739 Thanks @enki.
  • 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.

    More details
    • 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 Thanks @steipete.
  • 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.

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

    More details
    • Contain quota suspension lookup and marker-write failures so later work can proceed (commit).
  • 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.

    More details

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

  • Stopping a native Codex helper 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.

    More details

    #187646, adapted for the release in #188974. Thanks to @shakkernerd and @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.

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

    More details
    • 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. Thanks to steipete.
    • Retry cleanup of completed Codex subagent subscriptions after a temporary failure while protecting active follow-ups. #173547 Thanks to @Kimiyu-186.
    • Finish cleanup when a native child ends while its parent is waiting for an inline reply, allowing descendant settlement to complete. #181933 Thanks @jalehman.
    • Reduce unnecessary idle maintenance work when completed subagent runs are retained. #181560 Thanks @steipete.
    • Completed subagent launches release retained authorization resources and parent context. #170855, thanks to @steipete.
    • Completed interrupted subagent cleanup is not repeated on restart. #171091. Thanks @steipete.
  • 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.

    More details
    • Report when two helper continuations conflict and surface cleanup failures in #185386. Thanks to steipete.
    • Startup combines legacy subagent authority warnings into a single summary with a count and sample IDs. #170506, thanks to @steipete.
    • Subagent failure logs retain useful errors, and progress-only output is no longer counted as a visible final reply. #170959. Thanks @steipete.
  • 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.

    More details
    • Keep discarded Claude helper records from consuming the parent's available reply space in #184352. Retained output and the existing line and frame limits still count. Thanks to obviyus and jaxonparrott.
    • Bounded large subagent completion batches and marked truncated findings. #172068. Thanks @steipete and @Oldrich333 for the report.
  • Fixes some replies and helper follow-ups failing to start when another agent launches them in a separate conversation.

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

    More details
    • Send a blocking agent question to the conversation that started the request, so the person can see and answer it. Credential questions retain their existing handling. PR #170039. Thanks to steipete.
  • 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.

    More details
    • Continue eligible interrupted chats once their session or workspace is ready. #168650 by @steipete.
    • Recovers eligible interrupted main chats when a shutdown marker was missed and reports archived recovery entries more clearly. #168651 by @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, thanks @steipete.
    • Preserve the sender label on replayed inter-session messages, including forwarded messages. #169130, thanks @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. Thanks @steipete.
    • Retain restart recovery for a canceled main-session run whose cleanup finishes before its recovery record is saved (#170699). Thanks @steipete.
    • Continue eligible main dashboard turns interrupted by a backend restart drain (#170858). Thanks @steipete.
    • Keep unread watcher context for an ordinary turn after restart without creating replay turns or outbound replies (#170781). Thanks @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, #170845). Thanks @steipete.
    • Recovered turns use a background lane so they do not fill the interactive lane. #171242, thanks to steipete.
    • Preserve partial output and continue eligible replies interrupted by a Gateway restart. #172234. Thanks to @steipete.
    • Record accepted unfinished replies for recovery before restart shutdown cancels them. #172412. Thanks to @steipete.
    • Recover eligible authenticated CLI and API tasks after steering and repeated restarts while rechecking current authority. #172356. Thanks to @steipete.
    • Keep the reason for permanent restart-event admission failures and stop retrying those failures indefinitely. #172322. Thanks to @steipete.
    • Return the established authority error when a recovery continuation is rejected after its authority closes. #172195, related to #172183. Thanks to @shakkernerd.
    • Reuse plugin-managed grant authority during recovered operator runs while continuing policy and revocation checks. #172482. Thanks to @steipete.
    • Delegated work remains eligible to resume when its completion check meets a Gateway shutdown window. #172852, thanks @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. Thanks @steipete, @enki, and @Oldrich333. @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). Thanks @steipete.
    • Restored child and descendant work waits until it is ready to continue instead of blocking later user messages. #184022 Thanks @steipete and @borclaw for the report.
    • Let later messages proceed after restart while a restored child remains paused (#185999). Thanks to @vacinc.
    • Preserve the restart cancellation reason when a reply finishes during a session restart (45e2bced).
  • New configurations for supported Codex models now use corrected capacity defaults; existing configurations are not changed by this fix.

    More details
    • Use corrected capacity defaults for new configurations of supported GPT-5, GPT-5.1, GPT-5.2 and GPT-5.3 Codex models. #114891. Thanks to @steipete and @snotty for related evidence.
  • Fixes an unfinished Goal 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.

    More details

    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.

    • 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, thanks to jacobtomlinson, RomneyDa.
  • 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.

    More details
    • Show that Goal Resume is still in progress on desktop and mobile, with a Retry resume control if confirmation does not arrive. #169789, thanks to vincentkoc.
    • Achieved goals can be explicitly resumed without recreating the goal or conversation (#171999). Thanks to vincentkoc for reporting the issue.
  • 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.

    More details
    • Let newly scheduled follow-ups in the same authenticated conversation retain permitted access and schedule another check on the existing one-time job (#176422). Thanks @steipete.
  • Scheduled 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.

    More details
    • Keep the selected model account on a new isolated job and report when its access is no longer valid (#172590). Thanks @fuller-stack-dev.
    • Scheduled CLI jobs can use their native login without silently adopting a stored OpenClaw profile (#172717). Thanks @steipete.
    • Scheduled Discord message reads and edits work with Claude CLI authentication without a conflicting host account binding (#172794). Thanks @patrick-erichsen.
    • Fix false authorization failures when concurrent scheduled runs use the same unchanged saved API-key or OAuth account. #179333, issue #179331. Thanks to brandon-julio-t and steipete.
    • Automation owners replacing allowed tools can capture fresh native app access, with guidance when capture is unavailable (#170498, reported in #170298). Thanks @steipete and to @fbuechler for the report.
    • Scheduled agents without an interactive sender can inspect or remove their own job within existing permissions (#170864). Thanks @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, thanks to obviyus.
    • Gateway-pinned commands reject conflicting host or node targets before execution (#176997, #169256). Thanks @steipete and to @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, thanks to obviyus, steipete, and Kimiyu-186.
    • Keep a repeated automation result in later model context. #169369, thanks to obviyus.
    • Allow confirmed automation announcements to be committed during an active conversation turn, also helping restart handoff proceed. #181506. Thanks to steipete.
    • Announce cron wakes retain the context of an existing CLI-backed chat across the next reply (#176218, #176208). Thanks @eliavb43 and @steipete.
    • Targeted system events from the selected conversation reach the isolated heartbeat prompt, including when the regular heartbeat schedule is disabled (#175642, #175599). Thanks @sunlit-deng, @steipete and to @seriouslysean for the report.
    • Repair eligible older dashboard chat roots with Doctor so linked automations regain the appropriate memory access. #182345. Thanks to jalehman.
    • Keep configured-key jobs usable alongside the account-selection rules. #188980. Thanks to @RomneyDa and @obviyus.
  • 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.

    More details
    • Make timed, manual and event runs share scheduling capacity, with supported waiting jobs eligible to resume after an interruption. #169364, thanks to steipete and jlapenna for the report.
    • 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, thanks to steipete and jlapenna for the report.
    • Keep eligible dashboard automation recovery available when restart draining interrupts a turn. #170162, thanks to 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). Thanks @steipete.
    • Recurring jobs advance past a cancelled stop-time slot without replaying it (#171988, #171896). Thanks @steipete and to @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). Thanks @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, issue #179927. Thanks to andrewbowlds and steipete.
    • Restore admission of eligible catch-up runs after a restart or forward clock jump. #187558. Thanks to romneyda, shakkernerd, and steipete.
    • Blocker explanations no longer turn completed runs into execution failures (#170267, related #161698 and #165811). Thanks @steipete.
    • Delegated scheduled work waits for a child's result after a heartbeat-only handoff and honors an intentionally silent child (#172407). Thanks @steipete.
    • Cancelled runs retain unfinished cleanup and delivery work while returning cancellation promptly (#170264). Thanks @steipete.
    • On-exit watches wait for command process cleanup before proceeding (#171832). Thanks @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. Thanks to 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, thanks to freeqaz-openai.
    • Optional late subagent and sessions_send results can settle silently while replies to actual requests remain required. #172509, thanks @steipete and @tre1d for the related report.
  • 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.

    More 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.

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

    More details
    • Keep the original request available when a built-in or authorized CLI turn resumes after interruption, #168279. Thanks to steipete.
    • Keep the agent focused on your current request unless you ask it to return to earlier work, #168906. Thanks to steipete and alter for related investigation.
    • /btw, /side, and /loop preserve multiline questions and recurring prompts, including indentation. #176293, issue #176250. Thanks @goutamadwant and @steipete, and @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, issue #175670. Thanks @steipete, and @jackylecalvez2 for reporting the issue.
    • Agent guidance omits reasoning and status command hints when the channel has no enabled command route. #181997, issue #181956. Thanks @LiuwqGit, @steipete, and @Card4Philippe.
    • Agent guidance no longer recommends disabled chat update and restart commands. #182001, related issue #181956. Thanks @MonkeyLeeT and @steipete, and @Card4Philippe for reporting the issue.
    • Retain delivered slash commands and replies in history with sensitive recorded values redacted in #169026. Thanks @obviyus.
    • Preserve the order of captions and images in OpenAI Responses tool results in #169119. Thanks @Shenrui-Ma and @obviyus.
    • Send deferred Tool Search results to the model without duplicating structured data in #169537, addressing #169492. Thanks @TUARAN, @obviyus and reporter @kseczhouyb.
    • Use dispatch_action consistently for generic Tool Search in #169552, related to #145137. Thanks @steipete and reporter @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. Thanks to @obviyus.
    • Supply earlier-message metadata and policy-permitted history lookup after an account switch, without automatically replaying the transcript or durable context (#168781). Thanks @obviyus.
  • 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.

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

    More details
    • Finish optional Ultrafast model discovery within its time limit even if the computer clock changes (#168144). Thanks @SunnyShu0925.
    • Keep the session fork metadata timeout stable across clock changes (#168298). Thanks @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). Thanks @RomneyDa.
    • Keep the native Codex inference connection timeout steady when the system clock changes after admission. #168731. Thanks to @SunnyShu0925 and @obviyus.
    • Keep Codex app-server process inspection within its intended time budget when the host clock changes. #168736. Thanks to @SunnyShu0925 and @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 Thanks @jjjhenriksen and @RomneyDa.
    • R2 downloads resume after transient interruptions during verification or restore. Starting a new command begins a new download. #171292, reported in #171165. Thanks @steipete and @davidcittadini.
    • Added a safe retry or explicit failure for detected text-only tool calls. #171898, with related reports #138245 and #168744. Thanks @steipete, @5jrfrbd6z9-spec and @chitowntony.
    • Allowed consented Muse chats with conversation tool restrictions while retaining the native permission boundary. #172361. Thanks @obviyus.
    • Preserved recovered final replies and required complete, identified delivery before recording success. #171929, related to #155119. Thanks @fuller-stack-dev.
    • When a tool times out before it finishes, report the interruption and keep completed output without automatically rerunning the turn. #172983 Thanks to @steipete and @budzation for the report.
    • Preserve blank lines when agents read files across pages, including reads that start on a blank line. #173835 Thanks to @steipete.
    • Keep recognized final exit, signal, timeout and launch-failure messages when long command output is shortened. #174030 Thanks to @vincentkoc.
    • Honor explicitly preserved login environment credentials in Claude CLI readiness checks so affected child-agent requests can proceed. #175114 Thanks to @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 Thanks @RomneyDa.
    • Native session read failures show their actual error, allowing eligible timeouts before execution to use the existing scheduled-job retry policy. #175654 Thanks @enki.
    • Keep internal Gateway and plugin response timeouts on their elapsed-time budget when the computer clock changes. #171094, related #108423 and #154321. Thanks to @SunnyShu0925 and @obviyus.
  • 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.

    More details
    • Finish shutting down retained worker connections even after their worker list has cleared. #168862 by @steipete, with thanks to @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. Thanks @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. Thanks @steipete.
    • Avoid retaining empty request activity records and length-specific cumulative tool metric series. Exact parameter lengths remain on tool spans. #169786. Thanks @steipete.
    • Let an admitted wake callback finish under its captured handler, and start listeners added during an event with the next event. #169648. Thanks @steipete.
    • Gateway shutdown and restart finish their lifecycle records before shared database workers close in #169983. Thanks @steipete.
    • Idle Gateways defer unobserved health, GitHub discovery, and upstream checks until needed. PR #170389. Thanks @steipete.
    • Gateway shutdown waits for accepted session updates to finish preparation before closing connected clients. Existing client delivery checks still apply. #170555. Thanks to steipete.
    • Completed and failed operations release owned resources more consistently, including the OpenRouter sign-in listener and Tlon HTTP resources. #170439. Thanks to steipete.
    • Doctor and startup inspections release temporary plugin captures, and rejected file-lock handoffs release the acquired lock. #170530. Thanks to 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. #170493. Thanks to steipete, Oldrich333 for the report, and 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, thanks to steipete.
    • After a validated external drain, supervised restarts skip repeated waits and settle queued work while preserving restart recovery and final transcript writes. #171399, thanks to 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, thanks to 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 by steipete.
    • Clean up streaming observation when a client disconnects while authorization is pending. #171713 by 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 by RomneyDa.
    • Busy shutdown cancels in-flight worker preparation while preserving recovery state. #171843 by 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, thanks @steipete.
    • Foreground transcript readers release database resources during cleanup, addressing a Windows cleanup hang. #172506, thanks @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, combining #174147, #174284, #175368, #176576 and #176612. Thanks @steipete.
    • Preserve file-backed standard input when a service-child supervision anchor retires. #187804. Thanks @RomneyDa.
    • Keep orphaned-process cleanup on elapsed time so clock changes do not shorten or extend its shutdown grace period (#181335). Thanks @SunnyShu0925.
    • Keep spawn-broker child cleanup and confirmation deadlines stable across system-clock changes (#181360). Thanks @SunnyShu0925 and @steipete.
    • Honor a stop signal during restart drain after the existing cleanup completes (#186055). Thanks to @freeqaz.
    • Deliver confirmed service-child cancellation exits to existing and late exit listeners (7fdc3dcd).
    • Avoid duplicate recurring maintenance runs under clock drift, including the exact half-period boundary. Scheduler fix and boundary follow-up, thanks to Patrick-Erichsen.
    • Avoid transient Skills worker filesystem watches that could delay shutdown, observed on macOS. Commit
    • Close retained agent directory watchers during shared-state shutdown. Commit
    • Close idle SQLite readers before broker shutdown to avoid an extra wait during Linux Gateway shutdown and restart. Commit
    • Reduce potential memory retention when a scheduler scope closes after its parent has stopped. Commit
    • End pending device scope-upgrade waits as interruptions when the Gateway scheduler shuts down. Commit
    • Preserve empty arguments and the positions of later arguments in generated systemd service commands. Commit, thanks to shakkernerd and gideonpraise.
    • Restore structured cleanup duration, escalation timing and signal failure fields for tools inspecting service-child cleanup errors. Commit, thanks to romneyda.
  • 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.

    More 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.

    More details
    • Allow authorized host commands to run together without a false denial caused by another command's usage record. PR #171143. Thanks 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, issue #172871. Thanks steipete and reporter Oldrich333.
    • Gateway-owned session ID lookup and creation for agent requests. PR #172110. Thanks steipete.
  • 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.

    More details
    • Keep existing agents available while you add or remove a different agent (#169249). Thanks @steipete.
    • Wait for the requested agent to finish starting without holding up ready agents (#168826). Thanks @steipete. Thanks @xiaozishan for the report.
    • Prevent a settled database write from leaving an agent stuck rejecting messages when a separate read remains open (#169064). Thanks @steipete.
    • Skip completed child-session reads during subagent restart recovery so an unreadable completed session does not block later active runs (#169034). Thanks @steipete.
    • Keep unconfirmed subagent completion announcements eligible for bounded recovery after transcript contention (#169015). Thanks @ruel225 and @steipete.
    • Keep accepted steering messages in order and their consumption status aligned with the saved conversation (#169061). Thanks @steipete.
    • Resume the waiting agent after you answer its question. #169306 Thanks @steipete.
    • On Linux, steering an active native Codex conversation no longer hangs and blocks later messages. #169343 Thanks @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 Thanks @jjjhenriksen and @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 Thanks @steipete.
    • Fixes a next message failing while saved conversation history is rebuilt after native compaction. #169583 Thanks @obviyus.
    • Keeps recent context consistent in long conversations when messages arrive during a read. #169619, related issue #127629. Thanks @steipete.
    • Workspace prompt prefixes remain steadier as capabilities change, and live and replayed failed-turn histories agree. #170516, thanks to @steipete.
    • An agent can continue once after malformed tool arguments follow consumed failures that were all proven not to have started. #170615, thanks to @steipete, @r3n3x for the report, @fransqaas for related work and @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, thanks to @steipete.
    • Deferred agents become available before background transcript repair completes. #170849, thanks to @steipete.
    • Delayed worker results remain valid when unchanged agent database schema facts are republished. #170194, thanks to @steipete.

Messaging, voice and media

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

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

    More details
  • Talk voice and transcription choices 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.

    More details
    • Talk choices remain available during provider refresh. #172556. Thanks @steipete.
    • Talk keeps a configured custom Azure Speech endpoint when only the voice is overridden. #151253. Thanks @Leon-SK668 and @obviyus.
    • Automatically discovered Python Whisper receives a configured or requested language hint. #164841, #164840. Thanks @ooiuuii and @obviyus.
    • GPT-Live subscription voice can use a valid pasted ChatGPT access token carrying an account ID for Voice Call, Discord and Talk. #166211. Thanks @VACInc.
    • Talk voice reads and selections clean up authorization resources after success or error. #170386. Thanks @steipete.
    • Talk provider choices retain the selected speech provider's configuration during readiness checks. #170412. Thanks @steipete.
    • Talk checks speech, transcription and realtime providers together when building the provider list. #170806. Thanks @steipete.
    • Talk provider choices no longer repeat the same realtime setup while loading. #171099. Thanks @steipete.
    • Talk shows the applied settings rather than an unapplied edit; pending or rejected changes can appear once a reload succeeds. #171607. Thanks @steipete.
    • Talk provider choices can load without checking the same transcription and audio models repeatedly. #172538. Thanks @steipete.
    • ElevenLabs batch transcription receives configured options, including explicit false values. #177975, fixing #168580. Thanks @HeZ2z, @obviyus and reporter @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. Thanks @shakkernerd and @gideonpraise.
    • DeepInfra and OpenRouter speech requests use a two-minute default timeout. Configured and per-call timeouts take precedence. #175614. Thanks @steipete.
  • 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.

    More details
  • Fixes a disconnected FaceTime call blocking the next authorized call until OpenClaw restarts.

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

    More details
  • Image generation and editing 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.

    More details
    • ComfyUI image, video and music workflow polling keeps the configured timeout across system clock changes. #162779. Thanks @SunnyShu0925.
    • Image generation and editing tell you when a resolution is unsupported before sending a request. Supported values are 1K, 2K and 4K. #170154. Thanks @ly85206559 and @obviyus.
    • OpenAI-compatible image generation and editing accept URL-backed results under the existing network and image-size policies. #170278, #162717. Thanks @steipete, reporter @lucthaobybgkw3232-eng and @acedatacloud-dev for the compatibility report.
    • Video generation reports ignored provider options in text and JSON results. #171172. Thanks @ly85206559.
    • Image generation and editing reject malformed shape settings before sending a request or creating a file. Positive numeric ratios remain supported. #172082. Thanks @KrasimirKralev and @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. Thanks @steipete.
  • 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.

    More details
    • Windows-1252 text and CSV attachments retain accents and symbols when their MIME type has no charset. #165771. Thanks @yetval.
    • Uploaded attachments remain available if the request cannot confirm it was accepted. You still see the error, and no agent run starts. #167369. Thanks @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, with the earlier proposal in #154064. Thanks @Patrick-Erichsen and @Leon-SK668.
    • Public image attachments use extensions matching their resolved formats, including queued deliveries. #182494. Thanks @steipete.
    • Background media handoff deadlines use elapsed time. #185704. Thanks @SunnyShu0925 and @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.
    • When a generated-media batch fails, cleanup starts in request order and preserves the original save error. Commit a316adf.
  • 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.

    More details
    • Playback conversion reports output-file close failures while preserving the conversion result. #174668. Thanks @steipete.
    • Playback cache cleanup reports errors and avoids an extra eviction when an entry has already disappeared. #175634. Thanks @steipete.
  • 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.

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

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

    More details
    • Matrix refuses overlapping encrypted-state writers and invalid saved snapshots before restoring them. Doctor can inspect that state and guide an explicit recovery. #160707. Thanks to @eleqtrizit and @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. Thanks @steipete.
    • Pace Matrix live-preview updates after slow sends and edits (#169975). Thanks to xili-ytl, obviyus, and aniruddhaadak80 for the related report.
    • Matrix tool and mention policies use room identity rather than an editable display name, while configured aliases remain supported. #171645. Thanks to @steipete and @yetval for the report.
    • Matrix replies to ordinary room messages now follow your silence and visibility settings; commands still receive their expected response. #179506. Thanks to xiaopan-xydt, obviyus, and doomy for the report.
    • Matrix streaming previews no longer repeatedly highlight incidental mentions; the final message still includes its mentions (#183372). Thanks to L4XB and steipete.
    • Restore Matrix execution approval requests to the originating room and approver DM when the native handler is async-only (commit 9356d64). Thanks to steipete.
  • Telegram 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.

    More details
    • Telegram polling starts in source-checkout and captured-plugin layouts, including packaged builds. #154286, #154180. Thanks to @xydt-juyaohui, @steipete and reporter @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, related cross-account report #146311. Thanks to @dankarization and @steipete.
    • Group voice mentions are recognized when a group-scoped rule allows audio transcription. Direct-only rules continue to exclude group audio. #163746. Thanks to @jewseppi and @obviyus.
    • Keep Telegram's temporary progress preamble visible during verbose tool runs while sending diagnostics separately. #168225. Thanks @obviyus.
    • Show authored preamble text without the internal heading in Telegram previews. #168281. Thanks @obviyus.
    • Preserve tables and their placement when optional Telegram rich replies include neighboring quotes or lists. #168383, issue, rich-message guide. Thanks @dhruv1220, @steipete and reporter @barry-ssb.
    • Count the full Telegram command progress row against the configured line limit. #168464, issue. Thanks @obviyus and reporter @ml12580.
    • Render Telegram progress notes as prose instead of monospace code. #168723. Thanks @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. Thanks @obviyus.
    • Avoid duplicate Telegram answers in chat history when another message queues during streaming. #169019. Thanks @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, related issue. Thanks @diregoblin, @obviyus, @Grynn, @travellingsoldier85, @PaGrom and @cablackmon for the reports and investigation.
    • Avoid a session-wide scan when mirroring Telegram deliveries in long histories (#169663). Thanks to 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, replay limits). Thanks to steipete and angeliti999 for the report.
    • Report fractional Telegram attachment limits accurately in warnings and model context (#170677). Thanks to obviyus.
    • Wait for pending Telegram photo albums before ordinary follow-up text (#170690). Thanks to obviyus.
    • Long streaming replies avoid repeated visibility-check work after a preview is visible. #171417, report. Thanks to @boeingchoco and @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. #171564. Thanks to @steipete and @Dat1GUI for the report.
    • A command sent to an archived Telegram direct-chat session now fails rather than retrying forever. Restore that session before starting new work. #171810. Thanks to @obviyus and @dankarization for the report.
    • 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. Thanks to @steipete.
    • Telegram polling on Bun can save its checkpoint and resume from it after a clean restart. #178909. Thanks to brianmcguire, obviyus, and 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. Thanks to sc-10749 and 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. Thanks to wr-web, Card4Philippe, and obviyus.
    • Preserve Telegram questions and buttons during concurrent progress-draft cleanup (#183028). Thanks to steipete and reporter sercada.
    • Resolve the implicit default Telegram bot's root secrets alongside named accounts (#183618). Thanks to 555aaditya, steipete, and rodricksz4h5.
    • Keep Telegram group membership audit deadlines stable across system-clock changes (#185290). Thanks to SunnyShu0925 and 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). Thanks to vincentkoc.
    • Avoid a false failed status for delivered Telegram replies in ordinary group reply chains (#185899). Thanks to moonbow0407, obviyus, and reporter alexph-dev.
    • Keep a blank line between a Telegram bullet list and a following parenthesized numbered section (commit bf381ef). Thanks to shakkernerd and gideonpraise.
  • Telegram final answers now keep their link to the original question after progress updates, while queued button clicks retain the time they were received.

    More 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.

    More details
    • Eligible human DM senders can show their Telegram portraits in Home and chat after a background lookup. The first uncached message uses initials. #166248. Thanks to @vincentkoc.

    • Voice captions preserve literal TTS directives inside code examples. #171178. Thanks to @obviyus.

    • Lists, checklists and quotes render readably in media captions while code examples stay literal. #171180. Thanks to @ruel225, @obviyus and @SanderHelgesen for the report.

    • Bare links in rich replies remain tappable when link previews are disabled. URLs containing & still need a labeled Markdown link. #171216. Thanks to @Irish-Joseph, @obviyus and @SanderHelgesen for the report.

    • Show readable post cards using available anonymous preview metadata. #168213, issue. Thanks @steipete.

    • Streaming and final replies can remove repeated CRLF-separated paragraphs while preserving the separators and fenced code. #183023. Thanks to gdpu11 and steipete.

    • Google Chat conversational replies render supported formatting, including during typing updates. #141752, #141625. Thanks to @ericcaiwx-star, coauthor and reporter @pbreault, and @obviyus.

    • WhatsApp Web and Desktop stickers can reach the agent as image attachments again. #164210, #163559. Thanks to @andrewwbuilds, @obviyus and reporter @abacha.

    • Use Mattermost's supported button format in agent guidance. #168368, issue. Thanks @ericcurtin, @obviyus and reporter @hannnnn-l.

    • Display Slack Markdown links beginning with @, # or ! as labels instead of generating mention or channel markup. #168438, issue. Thanks @KhanCold, @obviyus and @yetval.

    • Message command reports show channel-supplied text safely in a terminal, including send results, errors and reactions. JSON keeps the original data. #176266. Thanks to wangmiao0668000666 and obviyus.

    • Human-readable channel capability probes and diagnostics neutralize terminal controls while JSON retains the original values. #178234. Thanks to SunnyShu0925 and steipete.

    • Catalog-only channel labels in channels list --all neutralize terminal controls in human-readable output while JSON retains the original labels. #178238. Thanks to SunnyShu0925 and steipete.

    • Reply chunking no longer mistakes inline backticks for an unclosed code fence and formats the following prose normally. #180588. Thanks to AmelioMansour and steipete.

    • Slack pin tables show the message text, author and timestamp, and message tables render remote values safely for terminals. #171042, report. Thanks to @ooiuuii and @obviyus.

    • Incoming Feishu rich posts preserve nested backticks within one code block. #171222. Thanks to @rudycelekli and @obviyus.

    • Incoming Tlon messages preserve nested code fences for the assistant. #171584. Thanks to @ly85206559.

    • Slack messages and rich-text tables retain dates supplied without fallback text, using UTC for the timestamp. #172182. Thanks to @fhgffy for the fix and report, @skyzhao1223 and @steipete.

  • 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.

    More details
    • An unverified group-DM sender cannot use privileged actions or replay approvals; ordinary allowed messages can still receive replies. #165801. Thanks to @eleqtrizit.
    • Keep channel-specific setup options available after empty or flag-like shared option values. #167939. Thanks @LinzeShi.
    • Changes to send and receive permissions now apply to messages still waiting to start. #168548. Thanks @steipete.
    • Show agents message actions relevant to their current channel and bindings, while keeping configured-channel discovery for trusted scheduled runs. #168875, related issue. Thanks @steipete and @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, issue, migration guide. Thanks @steipete and @sirius1024.
    • Protected storage for supported channel credentials, and removal of the unnecessary key from fresh managed llama.cpp setup (#169732). Thanks to steipete and dh-js for the report.
    • Preserve the originating X post and restrict work-session reply targets (#169747). Thanks to steipete.
    • Keep channel capability checks within their per-account timeout when the system clock moves backward (#170500). Thanks to SunnyShu0925 and 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). Thanks to steipete.
    • Still-allowed X mentions can proceed after an unrelated authorization change instead of triggering model fallback or a generic error reply. #171384. Thanks to @obviyus.
    • ClickClack bound-message routing reuses published binding information while continuing to deny revoked or uncertain access. #171458. Thanks to @steipete.
    • Diagnostics for the affected channels no longer include the identified private message text or pairing codes. #171606. Thanks to @steipete.
    • Channel reloads skip unavailable credentials for disabled idle accounts. #171734. Thanks to @steipete and @davidcittadini for the report.
    • 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. Thanks to @steipete.
    • Discord channel rules no longer apply to an unrelated channel or thread just because it has the same name. #171829. Thanks to @steipete and @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. Thanks to @yetval and @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. Thanks to @yetval and @RomneyDa.
    • Channel status and Doctor clear an obsolete restart-loop warning after recovery, even when an account remains stopped and needs attention. #176182. Thanks to ericcurtin and 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. Thanks to 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. Thanks to YangManBOBO and obviyus.
    • Named Google Chat and X accounts no longer deactivate the implicit default account's SecretRef credentials. #180450. Thanks to 555aaditya.
    • Reject oversized bounded arrays and sets early in the embedded Discord Activities SDK parser (#187297). Thanks to RomneyDa.
    • Correct IMAP sender parsing for nested-comment spoofing in sender-bound token admission (#187301). Thanks to RomneyDa.
    • Keep prepared session-to-session sends working across metadata-only updates while respecting changed communication permissions (commit 4efde33). Thanks to steipete.
  • 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.

    More details
    • 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. Thanks to @steipete.
    • Final answers retain text after internal tool blocks containing quoted closing markers. #149775. Thanks to @bodapatisaikrishna and @steipete.
    • Replies that add a correction or other new text after a message-tool send are delivered, including their repeated opening. #151921. Thanks to @amittell and @obviyus.
    • Channel tools remain available to later messages after the agent or operator task that started the account ends. #159396, related #152965, #158070 and #161151. Thanks to @ceckert, @RomneyDa, @slinkoff and @fuller-stack-dev.
    • Queued follow-ups and collected inputs use the current provider after a plugin reload, allowing the affected replies to resume. #159715, #158375. Thanks to @mbelinky, @RomneyDa, and reporters @chenkai8654, @N4DH and @Oldrich333.
    • Eligible long replies using reply instructions avoid repeated parsing and can arrive faster. #166782, #166781. Thanks to @boeingchoco and @obviyus.
    • Preserve interrupted completion replies for recovery before later messages. #167814, issue, restart recovery guide. Thanks @goutamadwant, @steipete and reporter @marknilsn.
    • Keep non-steering messages queued behind subagent or command announcements until cleanup finishes. #168077, queue steering guide. Thanks @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, Reef guide. Thanks @steipete.
    • Keep recognized silent reasoning placeholders silent when their final token ends in punctuation. #168571, related reports and #138662. Thanks @liwenjie200543, @steipete, reporters @eonicman and @cipp-ashe, and @he-yufeng for the investigation.
    • Keep queue recovery from interrupting a message whose original sender is still active. #169010. Thanks @RomneyDa.
    • Let ordinary non-steering queued messages without a source identity proceed when unnecessary recovery information cannot be read. #169138. Thanks @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, voice output guidance). Thanks to steipete.
    • Include a redacted reply error in diagnostic events when diagnostics and debug or trace file logging are enabled (#169503). Debug logs can still contain private content. Thanks to VACInc and keshavbotagent.
    • Record intentionally filtered ClickClack scaffold-only messages as suppressed instead of uncertain delivery (#169509). Thanks to steipete.
    • Preserve a completed answer after one invalidated session read (#169987). Thanks to VACInc.
    • Suppress token-only uppercase fragments of the silent reply marker while preserving attachments and configured heartbeat acknowledgements (#170190). Thanks to maliv2, steipete, and rboy1 for the report.
    • Keep a successful channel send marked delivered if a later delivery observer fails (#170482). Thanks to steipete.
    • Keep routine channel bookkeeping from making old conversations appear newly active (#170743). Thanks to steipete.
    • Wait for a pending current reply before sending replacement answers, media, or failure messages (#170937). Thanks to steipete.
    • Deliver a failure notice for eligible requester continuations refused at initial plugin-runtime admission during reload (#171021). Thanks to johan-eilertsen and steipete.
    • Reply preparation no longer waits for unrelated session retention cleanup. #171136. Thanks to @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. Thanks to @steipete.
    • Canceling an input during preparation preserves later queued work. #171718. Thanks to @steipete.
    • Queued inbound messages can retry when preparation fails before durable acceptance, with later preparation failures handled without replay. #172080, report. Thanks to @steipete, @bitfroest and @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. Thanks to @steipete and @desksk for the report.
    • Streaming ordinary technical prose that mentions tools or functions avoids repeated full-reply trace-filter scans. #172631. Thanks to JasonBuildAI and steipete.
    • An answer already delivered or awaiting delivery recovery no longer triggers a false missing-answer notice. #173798. Thanks to 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. Thanks to RomneyDa.
    • A rejected background typing callback is reported without stopping later keepalive ticks or causing an unhandled rejection. #175381. Thanks to musatoktas, Yolo521-bot for the report, and 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. Thanks to wr-web and Yolo521-bot for the report.
    • The optional extendable reply wait keeps its intended time budget when the system clock changes. #182057. Thanks to SunnyShu0925 and steipete.
    • Let an admitted reply settle before a queued command takes over, preserving reply accounting and command order (commit 3678292).
    • Keep streamed completion separate from pending source delivery so final replies and attachments are handled correctly, including during timeout recovery (commit b52afef).
    • WhatsApp retries reuse the same message ID for an uncertain send, reducing the chance of duplicate replies. #142434, #142398, related acknowledgement issue #122758. Thanks to @ashawwal, @obviyus and @he-yufeng.
    • Synology Chat paces each webhook independently while preserving order and spacing for messages to the same webhook. #144991, #127491. Thanks to @Abhishek-B-R and reporter @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, #139443. Thanks to @kqtxmaster-boop, @obviyus, @ArthurNie, @Simon2256928 and @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, #161829. Thanks to @stanleys12, @obviyus, reporter @hundredhandsio, @jmejia-appropia and @gabrielrojasc.
    • Keep Google Chat's missing-typing-message fallback working when a 404 response's error body cannot be read. #168107. Thanks @ly85206559 and reporter @steipete.
    • Ignore IRC CTCP queries before pairing or agent dispatch, while allowing normal messages and actions through. #168113. Thanks @yetval and @obviyus for landing the fix.
    • Reef state operations run off the Gateway thread with less repeated database work. #168340. Thanks @steipete.
    • Accepted channel-bound ACP turns can deliver replies after five minutes without replaying their input. #170880, reported in #170827. Thanks @steipete and @fanmeng-felix.
    • Long channel /compact commands can finish within their configured timeout without being replayed by the ingress watchdog. #171011, reported in #170982, with a related proposal in #171027. Thanks @steipete, @bluet, and @PratikRai0101.
    • Stopping an ACP turn no longer suppresses a separate queued follow-up. Cancelling the follow-up itself still stops its output. #170883, related to #170833. Thanks @steipete and @fanmeng-felix.
    • A steered follow-up keeps its own failure reply and attachments after an earlier message-tool reply. #170916. Thanks @steipete.
  • Tool progress now finishes its update before the answer starts streaming, keeping long step titles readable within the configured display limit.

    More details
    • Fit long tool titles within the configured progress line limit while retaining useful path endings and status. #168312. Thanks @obviyus.
    • Send verbose progress once and settle it before streaming answer previews. #168345. Thanks @obviyus.
  • 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.

    More details
    • Discord normalizes plugin command names and skips names over 32 characters with guidance for a shorter alias. Slack spelling is preserved. #126643, #126633. Thanks to @steipete.

    • WhatsApp login validates its start and wait actions before invoking either operation. #158719. Thanks to @Alix-007 and @mcaxtr.

    • A2A push configuration requests return the protocol's push-not-supported error. #167594, #167591. Thanks to @clawSean and @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, issue. Thanks @clawSean and @obviyus.

    • Keep mention-like text literal in Slack compact progress posts and edits (#169760). Thanks to KhanCold.

    • Retry Discord message edits, deletes, pins, and unpins after transient failures, including reconciliation of an ambiguous delete (#169806). Thanks to ericcurtin, and to steipete for confirming the merge.

    • Deliver Tlon events using CRLF or CR line endings or multiple data lines (#170125). Thanks to ly85206559.

    • Keep A2A retries with a retained message ID on their original task and match replies to the tasks that started them (#170469). Thanks to steipete and rh7 for the report.

    • Keep the Gateway running when a Buzz relay disconnects during authentication (#170591). Thanks to masatohoshino, obviyus, and jarvis-modern-mail for the report and investigation.

    • A2A filters host notices from peer replies and reports failed runs on their originating tasks. #172064. Thanks to @steipete and @Oldrich333 for the report.

  • 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.

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

    More details
    • IRC status shows disconnection and reconnect errors during recovery, then clears the error after reconnection. #171053, report. Thanks to @ooiuuii and @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. Thanks to rodricksz4h5 and steipete.
  • Discord voice consultations 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.

    More 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.

    More details
    • 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. Thanks to pgondhi987.
    • Slack relay recovery waits for received-event writes to finish after a socket error. #173407. Thanks to 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. Thanks to HeZ2z, steipete, and 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. Thanks to 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. Thanks to mushuiyu886 and 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. Thanks to potoior and exGeni.
    • SMS rejects unsupported prototype-named MMS content types before sending them to Twilio. Already-staged media with those types returns HTTP 415. #181773. Thanks to Jimmy-xuzimo, steipete, and masatohoshino for the report.
    • Feishu and Lark QR registration keeps its intended polling window when the system clock changes during setup. #182180. Thanks to mikasa0818 and steipete.
    • Overlapping WhatsApp plugin instances keep separate quoted-message caches, so a replacement cannot read or clear the retiring instance's quotes. #182550. Thanks to vincentkoc.
  • 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.

    More details
    • Signal reports an unexpected event-stream closure as the reason for recovery, helping operators check the daemon or proxy. #182746. Thanks to wr-web, steipete, and 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). Thanks to sukhdeepjohar, steipete, and reporter kunalchaudhary82.
    • Keep WhatsApp QR login waits stable across system-clock changes (#183394). Thanks to SunnyShu0925 and steipete.
    • Attempt to close the Discord connection when startup fails after an overlapping restart (#184033). Thanks to MarMarLabs and steipete.
    • Fix CRLF boundaries in long Discord replies while preserving line endings when inline code crosses a boundary (#184435). Thanks to xialonglee and obviyus.
    • Follow reply policy and typing settings for LINE direct-chat loading animations (#185306). Thanks to masatohoshino and obviyus.
    • Send a fresh Mattermost final post when newer relevant activity has overtaken its preview (#185422). Thanks to hannnnn-l and obviyus.
    • Avoid bursts of Mattermost preview edits after a slow send (#185483). Thanks to masatohoshino and obviyus.
    • Settle cancellation cleanly when an X account stops or reloads during subscription setup (#186226). Thanks to steipete.
    • The merge includes Discord message-action retries and model status identifying the credential source selected for the current route (commit 8548651).
    • The merge includes the fix that stops pending Tlon reconnect work from reopening streams after shutdown (commit 9a41e1b).
  • 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.

    More details
    • 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. Thanks @steipete.
    • Teams and Zoom meeting commands validate explicitly empty --mode and --transport values before connecting. #167871. Thanks @ly85206559 and @obviyus.
    • Restore every transcript page after an authorized retry from Summary or Transcript. #169000, thanks @steipete.
    • Return to the selected meeting and library filters after opening capture settings. #169279, thanks @steipete.
    • Keep periodic meeting captions running after the joining CLI disconnects. #178415. Thanks @sukhdeepjohar and @steipete, and @sercada for the related report.
  • 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.

    More details
    • Restores on-demand memory-index startup. #174718.
  • Memory search 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.

    More details
  • Memory search now explains more embedding-provider failures and keeps a previously usable index available when rebuilding fails. After a database worker stops, a later request can reopen the existing index, although searches during recovery can still fail.

    More details
    • Software vector scoring can use less CPU and temporary memory on large indexes when sqlite-vec acceleration is unavailable. #164773, with thanks to etzelm and steipete. See #114913 and #128140.
    • Memory status and Doctor explain when a requested sessions source is excluded because transcript indexing is not enabled. #160320, with thanks to Olli0103, steipete and benjaml4. See #159872.
    • When an index records vector dimensions, mismatched query embeddings produce an error with an agent-specific force-rebuild command. #168465, with thanks to steipete.
    • Enabled loop detection recognizes repeated memory searches with unchanged ordered hits. #169088, thanks to ericcaiwx-star, steipete and PatrickTrent.
    • Reduced unnecessary session metadata reads during memory-search visibility checks (#181247, issue #181092). Thanks @steipete and reporter @davidcittadini.
    • Kept Active Memory timeout streaks through cooldown expiry so another timeout renews the pause (#181297, related issue #180978). Thanks @steipete and @nikolay-bratanov.
    • Applied the existing LanceDB recall deadline across cold provider initialization, embedding, and search for provider adapters (#182340). Thanks @steipete.
    • Kept LanceDB recall deadlines stable when the system clock changes (#184711). Thanks @SunnyShu0925 and @obviyus.
    • Applied the same elapsed-time protection to cold-start embedding deadlines (#186037). Thanks @SunnyShu0925 and @obviyus.
    • Added a Gateway warning when an all-zero query embedding skips vector recall, with guidance to check the embedding service and retry (#183475, related issue #183425). Thanks @lonexreb, @steipete, and reporter @feiniaoivp.
    • Embedding deadlines use elapsed time, preventing system clock changes from causing unnecessary retries or accepting late results. #169360, thanks to Bartok9 and obviyus.
    • OpenAI OAuth embeddings pick up renewed credentials for direct and batch requests. An eligible same-origin expired-token response gets one retry. #172237, thanks to steipete and digitalfrost84.
    • Failed full reindexes retry with bounded backoff while a valid published index remains available for searches. #138786, with thanks to grynn and steipete. See #138775.
    • Embedding requests split at declared provider input limits before sending. Custom compatible providers must declare their limit to use this path. #141686, with thanks to vildevev and steipete. See #139040.
    • After a recognized limit rejection, embedding retries use a valid reported item limit to avoid unnecessary rejected batches. #140508, with thanks to saladinyao-cyber and 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, with thanks to ysumatta and 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, with thanks to 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, thanks to 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, thanks to steipete and 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, thanks to serg0x and steipete.
  • 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.

    More details
    • 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, thanks to VACInc.
    • Sessions opened at an explicit memory path can append and reopen messages with an ordinary canonical session key. #171284, thanks to steipete.
    • Restored memory authority for eligible owner sessions and cross-agent subagents, and enforced role and admin checks on private memory reads (#181359). Thanks @jalehman.
    • LanceDB resolves its default store from the active state directory, and Doctor checks that store for its legacy-memory migration. #168944, with thanks to 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, with thanks to 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, with thanks to steipete.
    • Refused a deleted or replaced source database before disclosing or writing backfilled memories (commit 3d9595f).
  • During memory setup, you can optionally test an embedding provider and model before saving them. Skipping or failing the check leaves existing settings intact, and interrupted import setup can return to its result and Continue action.

    More details
    • 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, with thanks to PollyBot13, steipete and actwebmaster. See #16670.
    • A completed memory import can show its result and Continue action after the onboarding view is reactivated. #168791, with thanks to steipete.
    • Selected Memory Core refreshes its cached managers after provider settings change, so corrected embedding settings can take effect without restarting the Gateway. #151263, with thanks to ruel225, steipete and Mirksen. See #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, thanks to steipete and dh-js for the report.
    • Provider-reported prompt and total token counts reach /v1/embeddings responses. Unavailable, invalid or incomplete usage returns zero rather than an estimate. #154721, with thanks to xialonglee and steipete.
    • Configured model IDs and authorized overrides can contain slashes when the prefix is not a registered provider. #161170, with thanks to xialonglee and steipete.
  • 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.

    More details
    • Provider private-network denial now applies to memory embeddings, including remote overrides, and redirects to another private origin require permission. #169847, thanks to steipete, dmorn for the report, and mushuiyu886 for earlier policy work.
    • 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, thanks to steipete and Yigtwxx.
    • Invalid or unresolved Google and LM Studio embedding headers fail with the affected setting identified. #169361, thanks to steipete and aniruddhaadak80 for the report.
  • Memory Wiki 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.

    More details
    • Compile and lint avoid a second vault compile after changes, and compile returns the actual updated-index count. #169028, thanks to ericcurtin and etzelm.
    • Large vault status counts avoid the reported timeout. #170553, thanks to obviyus and migelizaga-rgb for the report.
    • Identity validation uses less temporary memory for vaults with long compile histories. #171845, thanks to vincentkoc.
    • Filename and extensionless-path lookups read matching candidates instead of every page. Page ID lookups and misses still scan the vault. #171961, thanks to vincentkoc and etzelm.
    • Fixed wiki lint and backlinks for inline Markdown links with titles, parentheses, or angle-bracket destinations (#181380, issue #181379). Thanks @loading2332.
    • Resolved percent-encoded local Markdown paths for lint and backlinks (#181794). Thanks @L4XB and @obviyus.
    • Matched equivalent composed and decomposed Unicode text in local Wiki search (#184353). Thanks @Leon-SK668 and @obviyus.
  • Memory Wiki keeps Notes inside its marked human section when regenerating concept pages, and memory maintenance leaves unreadable source files and 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.

    More details
    • Handwritten Notes inside the marked section now survive regeneration of Memory Wiki concept pages (#175707, issue #175700). Thanks @YangManBOBO, @RomneyDa, and @steipete.
    • Kept stale OKF concept pages containing handwritten Notes when a concept is removed from the bundle (#179657). Thanks @steipete.
    • Retained malformed source pages and their synchronization state during bridge and unsafe-local pruning (#174573). Thanks @steipete.
    • Preserved existing OKF concepts with unreadable source text and stopped imports with an unreadable root index before concept writes (#176009). Thanks @Alix-007.
    • Stopped memory maintenance from rewriting files with malformed UTF-8 (#179016). Thanks @SunnyShu0925 and @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, thanks to steipete and co-author wangmiao0668000666, who reported #168567.
    • Doctor preserves local or custom Ollama embedding routes when migrating hosted Ollama chat settings. #169661, thanks to obviyus.
  • 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.

    More details
    • 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). Thanks @Leon-SK668 and @steipete.
    • Preserved prose, pasted JSON, and embedded quotes in newly imported active-branch ChatGPT transcripts. Explicitly typed image parts remain omitted (#182049). Thanks @L4XB and @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, thanks to Leon-SK668 and obviyus.
    • Reported directory inspection and skill listing errors during preview. Resolve the access or storage problem and rerun preview before applying (#175452). Thanks @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). Thanks @Leon-SK668 and @steipete.
  • 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.

    More details
    • 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, with thanks to njuboy11 and steipete. See #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, with thanks to steipete, bit-777 and touraround. See #164650.
  • Paused or failure-disabled Dreaming jobs 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>.

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

Workspaces and paired computers

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

    More details
    • 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 by @steipete.
  • A conversation on a paired computer 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.

    More details
    • 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 by @steipete.
    • Explain a paired-computer disconnect and remind you to check whether an interrupted command had an effect before retrying. #171695 by @steipete.
    • Keep attempts to reconnect a paired workspace from waiting longer after the system clock changes (#171977). Thanks @SunnyShu0925 and @obviyus.
    • Keep remote workspace operations from timing out too early or waiting too long when the system clock changes (#172256). Thanks @SunnyShu0925.
    • Keep remote attachment transfers from waiting longer after the system clock moves backward (#173142). Thanks @SunnyShu0925 and @obviyus.
    • Keep remote command progress updates on schedule if the computer's clock changes (#182481). Thanks @SunnyShu0925.
    • Keep a worker waiting for a free slot from waiting beyond its normal limit after clock changes (#184042). Thanks @steipete and @SunnyShu0925.
    • Wait until a native worker is attached before starting the first conversation turn (#177184). Thanks @steipete.
    • Run remote commands under the right service identity instead of a misleading inherited one (#173304, #171542). Thanks @steipete, @Leon-SK668 and @davidcittadini.
    • Show the cause of a paired-computer worker failure in local warnings without exposing secrets (#174750, #173351). Thanks @steipete, @unknown7751 and @Yolo521-bot.
  • 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.

    More details
    • Report a computer's current pairing or connection failure when a session cannot start there, instead of a misleading capacity error (#168531). Thanks to steipete.
    • Free a paired computer's worker slot after a forced stop by clearing processes that belong to the stopped worker (#168746, report #160643). Thanks to steipete, reporter aniruddhaadak80, and linhongyu510 for the cleanup investigation.
    • Let paired-computer workspace maintenance finish even when its preparation outlasts the scheduler's initial wait (#168780). Thanks to steipete.
    • Keep an already approved remote command attached to the right approval, with device policy checks intact (#148612). Thanks to beenhero and steipete.
    • Warn when a remote node background or yield request runs synchronously (#156553, report #156524). Thanks to NianJiuZst, obviyus, and reporter service-cyber.
    • Run a remote command after its valid approval instead of rejecting it because an internal plan reference was lost (#161980, report #151622, related issue #142492). Thanks to Program-123, steipete, reporters gaojian125 and enderwillsaveyou, and rozenpl and daddydubzzz for reproductions.
    • Avoid announcing a remote command as finished twice after its result has already appeared (#164511, related issue #154474). Thanks to holgergruenhagen, obviyus, and reporter xiazixin.
    • Run authorized POSIX paired-node commands that end in whitespace (#168120). Thanks to yetval.
    • Keep commands and events working for a paired computer when another device's pairing information changes. #169486 by @steipete. Related to #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 by @steipete, with thanks to @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, addressing #159801, by @steipete.
    • Tell agents that paired-node directory browsing lists folders only, and suggest a file listing through node-host execution when permitted. #169224 by @PratikRai0101, with thanks to @keiseisales for the report.
    • Let a cancelled remote command settle even when its progress acknowledgment is late, so the computer can update once idle. #169273 by @zhangguiping-xydt.
    • Restart or stop the Gateway despite a disconnected cloud worker, with a warning that its remote machine still needs cleanup later. #168907 by @steipete.
    • Refresh the paired-computer list with less work when many devices are connected. #171876 by @steipete.
    • Apply approved pairing-permission changes to the connected computer they belong to. Commit
  • You can move an eligible conversation 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.

    More details
    • 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 · Session lifecycle · Contribution from @steipete.
    • Missing required worker profiles and recoverable drafts (#158903). Thanks to RomneyDa, sallyom, and steipete.
    • Keep chosen cloud profiles selected and use smaller, comparable defaults when no machine size is configured (#156786). Thanks to vincentkoc.
    • Keep the current turn running while another worker starts independently (#155464, report #155333). Thanks to bulingbuling688, steipete, and reporter rvelasquez.
    • Clarify worker idle retention, optional worker-local inference, placement, and recovery guidance (#168260, issue #168255). Thanks to RomneyDa.
    • Find repository environment settings and actions together, with shared controls under Advanced. #170892 by @steipete.
    • See whether a cloud computer is loading an image or preparing its environment, and why it needed a cold start. #170895 by @steipete.
  • Cloud conversations can reuse compatible prepared environments 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.

    More details
    • Crabbox 0.73.0 minimum and managed acquisition (#168188). Thanks to steipete.

    • Reuse prepared images for eligible empty cloud workspaces, and wait until the next refresh before retrying a capture the provider cannot support (#168371). Thanks to steipete.

    • Share overlapping cloud machine and operating-system metadata requests while allowing later refreshes (#156605). Thanks to vincentkoc.

    • Optionally save a reusable image while reclaiming a cloud session (#168454). Thanks to steipete.

    • Keep Crabbox command retry and cleanup time budgets consistent when the system clock changes (#165889). Thanks to SunnyShu0925 and fuller-stack-dev.

    • A compatible prepared image skips repeated profile setup (#168892). Thanks to steipete.

    • Start from a prepared image without reinstalling the runtime already stored in it. #168974 by @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 by @steipete.

    • Keep warm-image cleanup within its elapsed-time budget across system clock changes. Timed-out deletions remain tracked for retry. #169908 by @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 by @steipete.

    • Refresh Cloud inventory after plugin activation and use canonical repository labels for worktree snapshots. Existing labels update on their next metadata write. #171176 by @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 by @steipete.

    • Show one useful warning rather than repeated capture failures when a Crabbox image save is already paused. #171059 by @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). Thanks @steipete.

  • 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.

    More details
    • Tell you when a saved cloud profile is not active in the running Gateway yet, with guidance to restart and try again. #171025 by @steipete.
    • Wait for a provider's quota to reset before retrying a cloud worker that received a rate-limit response. #171823, related to #171760, by @vincentkoc, with @Kimiyu-186 and @steipete.
  • 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.

    More details
    • Deliver the worker's finished reply before file synchronization completes; follow-up work still waits for synchronization, and a later conflict appears separately (#169484). Thanks to steipete.
    • Start replying sooner in measured warm paired-computer turns by avoiding repeated destination checks. #168799 by @steipete.
    • Finish a remote turn with less file-sync work when neither workspace changed. #168933 by @steipete.
    • Reuse approved model and credential preparation across provider requests within a Gateway-proxied node turn. #169294 by @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 by @steipete.
    • Avoid full retention cleanup on capacity-only node updates. Inventory-only cleanup waits for a successful periodic reconciliation. #169371 by @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 by @steipete.
    • Retry starting a session once if another worker's change interrupted its start. #170085 by @steipete.
    • Use an explicitly selected OpenClaw runtime and model on a required worker even when the Gateway has no provider credentials. #170132 by @steipete.
    • Check interrupted worker work after a Gateway restart before starting the next turn. #170161 by @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 by @steipete.
    • Tell you when a paired computer needs model or credential setup instead of pointing to an unrelated update or sign-in problem. #170257 by @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 by @steipete.
    • Cloud worker turns accept longer provider response IDs when both the Gateway and worker use the updated validator. #170461 by @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 by @steipete.
  • Supported worker slots can be used again after a confirmed computer restart, without waiting for the old worker to reappear.

    More details
    • 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 by @steipete.
  • Worker setup refuses project-cache folders that are known to lead through a symlink.

    More details
    • Rejected known symlinked project-cache parents before worker toolchain setup (#172079). Thanks @vincentkoc.
  • Some new project conversations can begin replying while their checkout finishes, with file-dependent tools waiting until the project folder is ready. Resetting an existing conversation can keep its project folder and working directory; choosing New Chat still leaves the previous worktree.

    More details
    • Include more default guidance for agents in new workspaces with small setup budgets. Existing workspace files are left alone (#89894, report #75187). Thanks to dwc1997, steipete, and camerono.
    • Let the opt-in continuation-skip mode stop repeating workspace instructions after successful delivery in an already onboarded workspace (#154923, report #149867, workspace configuration). Thanks to sxh313, steipete, and reporter playhard94.
    • Preserve native managed worktrees, projects, and working directories through conversation resets. Control UI New Chat still leaves the previous worktree (#160549, earlier rollover work #159506 by chelsealong). Thanks to vincentkoc.
    • Let a project checkout proceed after a brief delay instead of reporting a false allocation failure (#168214). Thanks to RomneyDa.
    • Preserve partial-clone filters and reuse clean worktree snapshot trees, leaving the checkout in place if required objects are missing (#168682). Thanks to steipete.
    • Restore accepted local file edits to their committed values after a worker reply is lost (#168094). Thanks to steipete.
    • Show files, not folders, in session activity meant to list files (#167732, related issue #96660). Thanks to goldarowana, obviyus, and reporter 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, related report #114895). Thanks to wangmiao0668000666 and reporter 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 by @steipete.
    • Prepare a project's default branch once for concurrent conversations without disturbing the checkout already in use. #169070 by @steipete.
    • Open an already prepared project folder without waiting for other conversations' folders to finish allocating. #169178 by @steipete.
    • Reuse a successful default-base preparation for up to 30 seconds and allow an explicit ref to select an update immediately. #169590 by @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 by @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 by @steipete.
    • Reduce resource use during bursts of worktree-backed session creation. #168807 by @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 by @steipete.
    • Recover available missing partial-clone objects during an explicit deferred cleanup retry. Recovery is bounded and can continue on another retry. #168864 by @steipete.
    • Keep the first message and start its turn even when several project conversations are created at once. #169107 by @steipete.
  • 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.

    More 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.

    More details
    • 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 by @steipete.
    • Recovery retains the accepted workspace baseline so later worker deletions of synchronized files apply correctly. #170213 by @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 by @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 by @steipete.
    • Workspace reconciliation can continue after the reply writer closes. #170556 by @steipete.
    • Session views can leave the reconciling state when workspace settlement finishes. #170575 by @steipete.
    • Workspace tools remain usable after a session resumes from a child result or another internal continuation. #170791 by @steipete.
    • Worker recovery can find a placement added during an overlapping read on its next sweep. Commit
    • Initial worker session creation keeps its placement stable while the first turn is claimed. Commit
    • Required-worker chats stay on the worker admission path across policy reloads. Commit
    • Valid required-worker turns can complete and publish workspace results. Commit
    • Node worker downloads reuse validated content for repeated files within one transfer, while keeping the resulting files independent. Commit
    • Portable worker archives support database admission after relocation. Commit
    • 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
    • Eligible agent sessions with matching agents, directories and equivalent runtime configurations can reuse the prepared workspace while keeping their requested execution directory. Commit. Thanks @jalehman and @romneyda.
  • Sandboxed agents 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.

    More details
    • Restore SSH sandbox reply attachments, including the WebChat failure reported in #171043. #171079 by @steipete, thanks to @valkyriweb for the report. Related attachment work in #131616 and #152633.
    • Reject oversized local workspace document saves before replacing the previous file. The separate identity and avatar issue remains open in #127507. #171938 by @steipete.
    • Let eligible sandboxed conversations create draft pull requests again under their existing publishing policy. #171803 by @shakkernerd.
    • Blocked host CLI execution for sandboxed spawned agents (#178742). Thanks @eleqtrizit.
    • Made saved web fetch output readable in local sandboxes, with an inline fallback when staging is unavailable (#172499, #172430). Thanks @shakkernerd.
    • Kept generated sandbox skills out of untracked Git changes (#173560, #173546). Thanks @shakkernerd.
    • Restored Code Mode skill search and reads on cloud workers (#182503). Thanks @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 · Sandbox workspace access · Thanks @steipete, and @adembektas for the report and detached-completion investigation. The issue also references #75683.
    • Fixes the unavailable SDK import used by OpenShell workspace and filesystem checks. Commit
    • Rejected non-decimal timeout input before execution (#179000, #178997). Thanks @tuaran and @obviyus.
    • Reported portal access problems to the requesting browser and preserved open app state (#172366). Thanks @steipete.
    • Corrected source lines for openclaw path resolve and openclaw path find after standalone carriage returns (#184866). Thanks @LinzeShi and @obviyus.
    • Reduced retained memory for prepared session forks with Unicode-heavy requests (#172032). Thanks @steipete.
  • Paired-computer setup keeps your selected profile and approved device when you retry, and reconnecting preserves the device's credentials.

    More details
    • Preserve the selected profile or container in QR setup's device-list and approval commands. #178878. Thanks to @ly85206559 and @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). Thanks to obviyus.
    • Preserve paired-device credentials on reconnect and support explicit environment authentication (#168653). Thanks to obviyus.
    • Accept copied node pairing request IDs with surrounding whitespace for approval or rejection (#141286). Thanks to hugenshen.
    • Reuse an approved pairing during node-only and cloud-worker bootstrap retries. #168795 by @steipete.
    • Align device setup controls with the administrator requirement and retain eligible pairing approvals. #170988 by @steipete.
  • 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.

    More details
    • Keep npx-installed node services outside npm's disposable cache and allow same-profile reinstall to repair or update them (#168644). Thanks to obviyus.
    • Keep Linux node service PATH entries available after login-shell startup, ahead of profile entries (#136677, report #134354). Thanks to harjothkhara, steipete, and reporter abacha.
    • Node service lifecycle commands work with custom state directories without a mistaken Gateway identity refusal. #170403 by @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 by @vincentkoc.
  • A valid Incognito computer selection no longer fails just because cleanup of an unrelated database lookup failed.

    More details
    • Preserve a valid incognito placement result when database reader cleanup encounters an unreadable discovery candidate (83579fdb).
  • 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.

    More 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.

    More details
    • Skill dependencies that explicitly request extraction can use a supported archive filename supplied by a generic download endpoint. #141312. Thanks @hugenshen and @obviyus.
  • Fixes outdated Skill Workshop change and Undo notices appearing after the conversation is reset, replaced or deleted.

    More details
    • Suppress outdated change and Undo notices when the reviewed session has been reset, replaced, or deleted. #170035 by steipete.
  • 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.

    More details
    • Pick up edits made to skill files outside OpenClaw on the next scheduled refresh, or scan immediately when you request it. #170341 by steipete.
    • Save settings or create an agent without waiting for an unrelated skill scan to finish. #171157 by steipete.
    • Show the skill's location and computer-specific guidance when you read it by exact name. #170965 by vincentkoc.
    • Retry safe Skill discovery and reads after a temporary paired-node transition. #171208 by steipete.
    • Check installer readiness only for selected skill dependencies. #170967 by steipete.
    • Keep skill icons and homepage links visible even when a metadata line ends with a comment. #171224 by 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, thanks to @steipete.
    • Reuses shared skill-root reads within a multi-workspace scan. #171871, thanks to @steipete and @SBC2016 for the related Windows startup report.
    • Reduces memory used for skill discovery in a measured workload. #171285, thanks to @steipete.
    • Keep background Skill Workshop reviews from triggering reply hooks meant only for user messages. #171651, thanks to @obviyus.
    • Rejects local skill installs whose required description contains only a YAML comment. #171812, thanks to @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. Thanks @steipete.
    • Sanitize skills library metadata in human-readable terminal output. JSON and requested file contents remain verbatim and may contain terminal controls. #178313. Thanks @SunnyShu0925 and @steipete.
    • Show no bundled skills in status and model prompts when you explicitly allow none. #182731, thanks to SC-10749 and steipete, and to Card4Philippe for the report.
    • Preserve the completed-turn anchors needed for Workshop learning when an identical prompt snapshot is recorded during a later turn. Commit 5a1cd1a.
    • Keep a background Workshop self-learning review running through later conversation turns. A session reset or permission change still cancels it. Commit 3dc2d7a.
  • MCP tools 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.

    More details
    • 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, issue #167371. Thanks @LiuwqGit, @abacha, and @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, thanks @steipete.
    • Show one MCP structured result when the same JSON appears twice with different formatting, while keeping distinct text and recovery guidance. #169180, thanks @xilopaint for the fix and report, and @jipeng6036-del for the implementation.
  • A connected MCP App 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.

    More details
    • 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, thanks @obviyus.
    • Complete MCP sign-in when its registered local callback address omits a port and otherwise matches. #170876 by steipete, with thanks to 9fw2pq8sgb-art for the report. See the MCP transport guidance.
    • Keep the elapsed-time budget for pending MCP tool cleanup during clock changes. #170495 by SunnyShu0925, with test contributions from obviyus.
    • Let affected POSIX conversations recover after an unavailable local MCP server is removed. #171397, thanks to @joelagnel. The related Windows issue has other unresolved symptoms.
    • Preserves intentional leading and trailing whitespace in mcp add executable and working-directory paths. #171620, thanks to @Alix-007 and @steipete.
    • Warn about literal secrets in MCP settings and included files without treating a populated environment reference as a literal secret. #171737, thanks to @steipete and @davidcittadini. See the reported warning.
    • Expands MCP Relay guidance for Codex, multiple Gateways and Team access, and corrects the embedded Control UI credential guidance. #171575, thanks to @steipete.
  • 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.

    More details
    • Accept mixed-case JSON content types from authenticated local MCP clients. #172290. Thanks @wangmiao0668000666 and @obviyus.
    • Reject external-link requests from retired or unfocused embedded MCP frames. #172312. Thanks @steipete.
    • Name the MCP server when its sign-in fails, with guidance to check credentials or sign in again. #172331. Thanks @steipete, and @rclarke0 for the report.
    • Let an HTTP MCP call with no intermediate output use the full request timeout you configured. #172510. Thanks @steipete, and @xilopaint for the report.
    • Release callbacks after MCP Events requests complete and retain a redacted cause when a transport fails. #172613. Thanks @steipete.
    • Include the server name in accessible names for MCP sign-in and enable or disable actions. #178162. Thanks @etzelm and @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. Thanks @xiaopan-xydt and @steipete, and @YangManBOBO for the partial-write reproduction.
    • Mask recognized credentials in MCP CLI list and show output while preserving saved credentials. #180321. Thanks @brandon-julio-t, and @wr-web for regression coverage.
    • Keep long MCP event descriptions from splitting an emoji or other supplementary character at the existing length limit. #181741. Thanks @wangmiao0668000666 and @obviyus.
    • Let an already accepted MCP relay run continue past the deadline for submitting new requests. #181863. Thanks @crwohlfeil and @obviyus.
    • Restore MCP App initialization in affected Safari and macOS WebKit setups. #182485, thanks to anmol0b and steipete, and to technicalpickles for the report.
    • Keep the MCP App raw-details menu usable across transcript refreshes. Commit fcfcc06.
    • Reopen an unexpectedly closed local MCP listener on the next CLI-backed run; a call that already failed is not retried automatically. #183352, thanks to SC-10749 and steipete, and to eli-pavlov for the report.
    • 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, thanks to aniketkrs and steipete, and to goslingmanagment for the report.
    • Keep MCP request deadlines and human-input allowances stable across system clock changes. #184056, thanks to steipete and SunnyShu0925.
    • Preserve meaningful whitespace in MCP TLS client certificate and key paths. Previously saved paths that were already trimmed cannot be reconstructed automatically. #181883, thanks to wangmiao0668000666 and steipete.
    • Return the standard structured JSON failure for MCP relay commands. #183361, thanks to Leon-SK668 and steipete.
    • Preserve complete Unicode characters in the retained tail of a long MCP proxy error. #183942, thanks to SunnyShu0925 and steipete.
    • Reject malformed MCP schema identifiers while keeping valid relative references. A schema accepted before this change may now need fixing. #187285, thanks to RomneyDa.
  • Plugin installation and inspection 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.

    More details
    • Show a useful reason when a plugin command fails, while keeping JSON and debug output available. #168850. Thanks @steipete.
    • QA Lab lets accepted suites finish during shutdown, while interrupted plugin CLI changes stop retrying without replaying an uncertain accepted operation. #158087. Thanks @vincentkoc and @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. Thanks @steipete.
    • Repeated plugin enable or disable requests leave the config file unchanged when the requested state is already applied. #168633. Thanks @steipete.
    • Updates avoid repeatedly adding a redundant bundled plugin load path that Doctor removes. #168226. Thanks @obviyus.
    • Registry inspection clears a stale warning for a removed plugin load path. Use openclaw plugins registry --refresh to update the persisted ledger. #168167, issue #167847. Thanks @RomneyDa and @giodl73-repo.
    • Standalone plugin setting maps show their Custom entries heading again, including in filtered results. #157903. Thanks @Patrick-Erichsen and @altaywtf.
    • External TypeScript plugins using NodeNext-style relative imports can start faster, with gains depending on the plugin graph. #168391, issue #168130. Thanks @steipete and @jakeaadams for the report.
    • Apply configured plugin tool guards to standalone openclaw agent exec commands before they run. #159333, issue #158824. Thanks @joseairosa for the report and @obviyus.
    • Summaries and new model completions from retained plugins can continue after an unrelated plugin reload. #168916, thanks @jalehman for the fix and report.
    • Inspect an incompatible plugin and its repair guidance without losing access to healthy plugin details. The incompatible plugin remains unable to run. #168977, thanks @steipete.
  • 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.

    More details
    • 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, thanks @steipete and @Dhotei for the report.
    • Show unexpected hook-pack inspection errors when a plugin installation is rejected. #169370, thanks @wr-web.
    • Deliver queued next-turn plugin context to Codex, ACPX, Agents API and Copilot, including on a retry within the same run. #169558, thanks @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, thanks @steipete.
    • Apply the subagent concurrency cap to plugin background completions. #170273 by steipete, with thanks to rogerallen1 for the report.
    • See which plugin migrations still need repair and which updates were skipped. #170392 by steipete, with thanks to DonnieFi for the report.
    • Remove confirmed completed migration warnings from update results and history while retaining warnings for pending work. #170413 by RomneyDa, with thanks to DonnieFi for the report and follow-up. See update status and history.
    • Show state-maintenance and ownership recovery reasons in ordinary plugin command output. #169907 by ericcaiwx-star, with thanks to steipete and to jamiezigelbaum for the report.
    • Keep plugin state reads current for Unicode key aliases after writes and deletions. #170208 by steipete.
    • Open Control UI panels again for affected trusted bundled and Nix-store plugins. #170646 by licheer-zte, with thanks to steipete and paulcam206. See the report.
    • Report failed LanceDB provider cleanup, which may require a Gateway restart. Stop the OpenTelemetry service before replacing its globals. #170800 by steipete.
  • Building bundled plugin browser views no longer rewrites tracked source manifests.

    More details
    • Keeps bundled plugin browser builds from rewriting tracked source manifests while using freshly built browser metadata. #172037, thanks to @steipete.
  • 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.

    More details
    • 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, thanks to @jacobtomlinson as co-author and for the report, and @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. #171330, thanks to @holgergruenhagen and @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, thanks to @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, thanks to @steipete.
    • Keeps plugin installation progress usable across hover and pinning, and returns focus to the install button when Escape closes it. #171346, thanks to @steipete.
    • Reuses preparation for plugin inventories and stops reporting missing dependencies for providers disabled by discovery policy. #171356, thanks to @steipete.
    • Defers llama.cpp execution modules until first use and reuses checked plugin paths during POSIX validation. #171319, thanks to @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. Thanks @ExoHumann, and @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. Thanks @anmol0b, and @yetval for the report and earlier fix.
    • Keep invalid numeric plugin settings on the same setup question so they can be corrected. #176787. Thanks @steipete.
    • Clean up eligible retired plugin files periodically while the Gateway is running. Protected and mapped files remain in place. #176851. Thanks @harjothkhara and @steipete, and @PaulD-LeWagon and @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. Thanks @steipete.
    • Preserve system events that plugins select for deferred delivery. #181138. Thanks @steipete.
  • 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.

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

    More 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.

    More details
    • Local Workboard commands make changes visible to the running Gateway. Offline dispatch does not start workers. #168457. Thanks @steipete.
    • Board widget HTML over the existing 10 MiB limit stops loading with a clear error. #167260. Thanks @hugenshen and @obviyus.
    • The Workboard guide explains the existing agent tool grants and the tools automatically granted to card workers. #168222. Thanks @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, issue #167574. Thanks @obviyus, @skyzhao1223, @asikorskiy for the report, and @ericcurtin for the related proposal.
    • Leave unchanged widgets untouched during Board layout edits. #168999, thanks @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 by steipete, with thanks to Jeehut. See the report.
    • Load board summaries and session-linked cards in desktop chat instead of full card history. #171135 by steipete, with thanks to Oldrich333 for the report.
    • Prevent normal or forced promotion from reopening completed cards. #171080 by sunlit-deng, with thanks to SabaTech-dev. See the report.
    • Reveal overflow-selected board tabs on narrow screens and support keyboard access to long widget menus. #170767 by steipete.
    • Anchor Workboard details menus to their controls. #170511 by steipete.
    • Avoid unnecessary database initialization for initial Board snapshot and widget reads. #171245 by steipete.
  • 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.

    More details
    • Restores review handoffs after dependencies finish. #171414, thanks to @ericcurtin, @asikorskiy for the report, and @obviyus for verification.
    • Prevents promotion of cards outside todo, including when force is used. #171743, thanks to @steipete and @SabaTech-dev. See also the promotion report.
    • Preserves full run IDs and completion notifications, with a 512-character limit for new IDs. #172235, thanks to @steipete and @gregbond for the report.
    • 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. Thanks @vincentkoc.
    • Show agents why a card claim was refused, including when a blocked card needs to be unblocked. #172504. Thanks @steipete.
    • Reconcile cards linked to archived sessions, including multiple cards sharing a session or run. #172505. Thanks @steipete.
    • Preserve completed cards and links after a later step in a multi-card operation fails. #172615. Thanks @steipete.
    • Release claims and settle active records on manual done or blocked moves. #184241, thanks to jondihaynes and obviyus.
    • Keep Workboard automation nudges on their intended cooldown through system clock changes. #183356, thanks to SunnyShu0925 and steipete.
    • Include session changes from nested operations in Boards transaction receipts. Commit bfea15e.
  • 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.

    More details

    Workboard lifecycle fixes. Thanks to @RomneyDa.

  • Existing Workboard data can move between SQLite and experimental PostgreSQL storage with an offline, recoverable database port. Stop the Gateway and embedded agents first, and back up both sides. Shared state and agent databases remain on SQLite.

    More details
    • Refuse selecting experimental PostgreSQL for an existing populated SQLite Workboard without the supported port. #170266 by steipete.
    • Port existing Workboard stores, including disabled ones, with a dry run and resume or rollback after an interrupted operation. #171368, thanks to @steipete.
    • Offer experimental PostgreSQL-backed Workboard storage as an opt-in choice, without replacing shared state or agent databases. #169214, storage design. Thanks @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, portability design #169254. Thanks @steipete.
    • Experimental PostgreSQL Workboard writes avoid a duplicate admission request, and PostgreSQL connection secrets must use an environment, file or exec reference in #170037. Thanks @steipete.
    • PostgreSQL backup, restore, and update protection, including a refusal from backup sqlite that directs PostgreSQL users to backup create (#170828). Thanks @steipete.
  • 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.

    More details
    • Cached previews, repository search and account options return stale results while refreshing in #169143. Thanks @steipete.
    • Unchanged issue and pull-request hover previews reuse their response when refreshed in #170508. Thanks @steipete.
    • Actions widgets and project searches share compatible GitHub reads in #170825. Thanks @steipete.
    • Cached shared-account publication options remain available and marked stale during native authentication refresh in #170963. Thanks @steipete.
    • Cached hover previews avoid a redundant credential read while retaining the check before delivery. PR #171603. Thanks steipete.
    • Concurrent GitHub publication options requests share discovery for a worktree. PR #171325. Thanks steipete.
  • 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.

    More details
    • Own-session PR publishing after a delayed verified profile attachment in #169400, addressing #169377. Thanks @Gigaxel and @steipete.
    • New managed children retain permitted GitHub publication for eligible worktrees, subject to inherited restrictions and Gateway checks. #171842, addressing #171782. Thanks to shakkernerd.
    • Avoid unnecessary publication refusals during overlapping requests. #172351. Thanks to @steipete.
    • Watched session PR refreshes and GitHub publication avoid redundant Git calls. #172498, thanks @steipete.
    • ClickClack discussion lookup and shared GitHub publication receipt discovery avoid duplicate local reads. #172537, thanks @steipete.
  • 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.

    More details
    • Keep accepted publication requests pending during temporary session authority outages (commit). Thanks @joshavant.

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.

    More 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.

    More details

    #172287 and #174540. Thanks to @zhuyankarl, @steipete and @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.

  • Binding a conversation to Codex 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.

    More details

    Commit aad30d2, carrying the binding repair from #189077. Thanks to @libaojiang and @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.

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

    More details
    • Starts a fresh catalog read after a change. #174812.
  • 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.

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

    More details

    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.

  • 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.

    More 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.

    More details
  • Switching away from Claude CLI and back no longer repeats the same question.

    More details
    • Avoid a duplicate question when switching away from Claude CLI and back (#168965). Thanks @obviyus.
  • Plugin turns and side questions now start with the on-request approval settings you selected instead of losing them.

    More details
    • Preserve managed on-request approval settings for plugin turns and side questions so those requests can start under the configured policy. #172639 Thanks to @stevenlee-oai.
  • A compatible Codex context refresh can continue the conversation without stopping its running preview or background command.

    More details
    • A compatible Codex context refresh can continue a conversation without stopping a running preview or background command. #177716 Thanks @jjjhenriksen.
  • Fixes Codex refusing a correction while it saves conversation history.

    More details
    • Accept Codex corrections while the conversation history is being saved in ca3798a.
  • 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.

    More details

    Isolated one-shot cleanup, clean-shutdown grace and longer final grace. Thanks to @RomneyDa.

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

    More details

    Native shell setting fix. Thanks to @RomneyDa.

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

    More details
  • ACP replies in WebChat now appear while the agent is working when live delivery is enabled, instead of waiting until the turn ends.

    More details

    #182717, included through #188730. Thanks to @rjdotdev, @steipete and @RomneyDa, and to @Honghe for the report.

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

  • 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.

    More details
    • 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, closing #185127). Thanks @fuller-stack-dev.
    • After you manually compact Claude CLI history, the next turn continues with that shortened history in a fresh process. PR #157766, issue #157483. Thanks to deepujain and obviyus, with the report from von8794 and related evidence from goslingmanagment.
    • Fixes duplicate messages in Claude CLI history when a forwarded message matches the owner's message, without losing who sent it. #163521. Thanks to rogeriochaves, llmsommelier and 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, #165041. Thanks to Marvinthebored, Peetiegonzalez, RomneyDa, IndySweeney, agierror and 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, #124852. Thanks to alkor2000, obviyus and reporter jhgaylor.
    • A fork from the last completed turn no longer brings back conversation context you cleared with a newer reset. #166660. Thanks to Shenrui-Ma and 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, #168015. Thanks to ruel225, xydigitLybnnnn, steipete and robertoronderosjr.
    • Hide recognized old requester instructions and duplicate imported turns from displayed chat history (#168943). Thanks @RomneyDa.
    • Clarify display-only history cleanup and preserved transcripts in the Claude CLI guide (#168851). Thanks @RomneyDa.
    • Keep local Claude CLI conversations' session-specific facts available without rewriting the shared instructions on every turn (#168928). Thanks @alkor2000, @obviyus, and @Yigtwxx. Thanks @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, adapting #187776. Thanks @jjjhenriksen, @obviyus and @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, #176659 Thanks @sunlit-deng, @steipete and @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, #181254 Thanks @mushuiyu886 and @Marvinthebored.
    • Keep earlier conversation history available for recall and memory indexing after an automatic idle or daily reset. #184157 Thanks @steipete and @namest504.
    • Preserve the request prefix across thinking-level changes in supported native Codex sessions. #182397 Thanks @vincentkoc.
    • Refuse to reuse saved context if the current message was removed or rewritten in 777e85c.
    • Resume an interrupted turn from saved input after its worker is lost (commit).
    • Avoid repeating the same continuation instruction when compaction is retried (commit).
    • Keep protected Codex follow-ups tied to a live context relay (commit). Thanks to @RomneyDa.
  • Codex 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.

    More details
    • Show how to enable Codex when a paired device lacks it, or choose a model served through the OpenClaw harness (#168641). Thanks to obviyus.
    • Make a CLI-backed subagent's requested light-context start omit workspace bootstrap files in #169848, addressing #169704. Thanks @xydigitLybnnnn, @obviyus and reporter @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, related issue #99191. Thanks to 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, related issues #157321, #139599, and #147006. Thanks to kiranvk-2011 and RomneyDa, with related evidence from lakemike and reports from philknows, destinedenergy, and wbumgardner-max.
    • Find a qualifying installed Codex when starting a managed turn or showing its models (#168228). Thanks @obviyus.
    • Discover native models on demand and retire unowned clients after 30 idle seconds, while keeping clients with active or retained work. #168387. Thanks to @steipete.
    • Retire unused Codex processes after model discovery times out while allowing active work to finish. Future requests get a replacement client. #168365, issue #168159, recovery guide. Thanks to @steipete and @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. Thanks to @obviyus.
    • Use the account's native Claude Code model menu and effort levels for CLI selections, while retaining existing configured choices. #168728. Thanks to @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. Thanks to @obviyus.
    • Check native session forks against their selected runtime's capacity, using 100,000 tokens when capacity is unknown. PR #169792. Thanks to steipete and RomneyDa.
    • Preserve literal underscores in imported agent names and avatar paths. #171581, thanks to zhangguiping-xydt for the fix and 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, thanks to ericcaiwx-star, steipete and potterdigital. See the reported issue.
    • Let signed-in Claude CLI agents start again when an inconclusive account check had been mistaken for a logout. #172471. Thanks @obviyus.
    • Avoided a false cleanup failure after Claude CLI stdin has already closed. #171969. Thanks @RomneyDa.
    • Prevented late Codex desktop watcher notifications from scheduling a restart during shutdown. #172049. Thanks @steipete.
    • Keep native session access waits within their intended elapsed-time budget when the system clock changes. #172780 Thanks to @SunnyShu0925.
    • Codex Computer Use marketplace discovery keeps its elapsed-time allowance when the system clock changes during installation. #178986 Thanks @SunnyShu0925 and @steipete.
    • When you explicitly enable ACP, keep its bundled acpx backend available at startup under your plugin policy. #176876, #102205, #102221 Thanks @steipete and @ZOOWH.
    • ACP agents with their own workspaces no longer fail readiness because an unused default workspace is absent. #176879 Thanks @steipete.
    • If Claude CLI skills plugin preparation fails, cleanup attempts to remove temporary files while showing the original failure. #179611, #179557 Thanks @xiaopan-xydt and @steipete.
    • Preserve the remaining attempt budget when a core upgrade retains an older Codex runtime plugin. #182995 Thanks @RomneyDa, @kip-claw, @cjn119-ui, @fray-ai and @sukhdeepjohar.
    • Allow ChatGPT subscription relay preparation to use the managed gateway-only proxy's default loopback settings. #183232 Thanks @steipete, @indra622 and @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 Thanks @steipete, @Marvinthebored and @RomneyDa.
  • 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 by default; that compaction call can cost more than a local summary. You can turn it off in the model configuration.

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

    More details
    • Prevent duplicated opening text in affected OpenAI Responses and managed Completions streams. #172653 Thanks to @Richard355168 for the fix and report, @steipete for investigation and verification, and @Gavin-ifjc and @Lamer217 for related reports.
    • Allow bounded recovery from the recognized malformed OpenAI stream event using recorded tool results instead of repeating completed actions. #173404 Thanks to @steipete.
    • Preserve valid multiline Google Interactions stream events and report malformed event JSON instead of silently dropping content. #173612 Thanks to @steipete.
    • Enabled live previews receive answer text after reasoning from OpenAI-compatible Chat Completions streams. PR #150685, issue #132615. Thanks to leapdragon and 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, issue #159665. Thanks to steipete and TOMUIV.
    • Keep reasoning separate from answers for affected manually configured native Ollama models. PR #169851, issue #134662. Thanks to steipete, papakpmartin and 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, issue #153391. Thanks to jacobtomlinson and dwalthour.
  • If you have fallback models configured, 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.

    More details
    • 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, issue #141838, related issue #103697. Thanks to von8794, alkor2000, and 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. Thanks to clement-paradex and steipete.

    • Repeated unchanged usage counters no longer keep a stalled Chat Completions request alive, while advancing token counts still indicate progress. PR #145850, related issue #145203. Thanks to RileyJJY and steipete, with investigation by anyech and the report from 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, #166497, #165556, #145203, #133330. Thanks to anyech, steipete, vinsew, belbix, tre1d and aleps001.

    • An unfinished ChatGPT Responses turn can recover from a normal connection close using the existing bounded recovery policy. #167512, #167345. Thanks to ericcurtin, obviyus, reporter mightyx and aleps001.

    • Continue an eligible model retry when an optional retry-status callback fails (#169141). Thanks @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, issue #9986. Thanks to steipete, amirarenco-create, KarimVKarmali, engagepy and zhupeng0o0.

    • Configured fallback can handle provider-wrapped transient errors such as 503 or 429 in text-only responses. #170527, thanks to @TUARAN, @steipete and @diegoln for the report.

    • An unclassified empty normal completion no longer consumes the model fallback chain after same-model recovery. #171199. Thanks @steipete.

    • Reset the rate-limit retry budget after a completed model response, and explain when automatic retries are exhausted. #171760, thanks to steipete.

    • Recognized SiliconFlow prompt-limit errors enter the existing compaction and retry path. #181519, #181518 Thanks @xpeng5278-web and @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, #181520 Thanks @xpeng5278-web.

    • Apply Ollama web search's configured result count and per-attempt timeout. An explicit search count takes precedence. #182052 Thanks @masatohoshino.

    • Align tool-call and result names when replaying provider-prefixed transcript entries to native Ollama. #181549 Thanks @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 Thanks @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 Thanks @masatohoshino and @steipete.

    • Shorten oversized Claude CLI option descriptions instead of rejecting the entire question set. Oversized question text and labels still fail. #182938 Thanks @ericcurtin and @steipete.

    • A temporary agent run no longer removes the default local llama.cpp model needed by a later memory search. #182781 Thanks @rjdotdev, @steipete and @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 Thanks @lonexreb and @drewjocham.

    • Leave fully redacted HTTP 400 and 422 provider errors unclassified instead of incorrectly labeling them as request-format errors. #183006 Thanks @amittell, @obviyus and @steipete.

    • Prevent part of a MiniMax tool argument from appearing in the visible reply when it contains a closing tag. #183413 Thanks @gdpu11 and @steipete.

    • Avoid Gateway stalls when assistant text resembles an incomplete or malformed tool call. #183252 Thanks @LeizhenZhang and @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, thanks to steipete.

  • 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.

    More details
    • Self-hosted Kimi K3 thinking selections reach the supported reasoning effort while retaining the existing Off default. PR #139980, unrelated issue reference #139040. Thanks to jsf9789 and steipete.
    • Selected Qwen chat-template reasoning levels reach backends that declare supported efforts, while unselected turns keep the server default. PR #148397. Thanks to areslp, hippoley, and steipete.
    • Configured top_p sampling values reach supported providers, including zero. When both spellings remain, topP takes precedence. PR #148538, issue #127561. Thanks to Raymondriter and reporter 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, related issue #156635. Thanks to saju01 and RomneyDa, with design advice from snotty, related reproduction from vinaycodeaxe, and prior groundwork by zhangguiping-xydt and 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, issues #160037 and #160491. Thanks to NianJiuZst, steipete, Takhoffman, and RomneyDa, with provider evidence from php737 and reports and investigation from ns-spec, Hansen1018, and olveww-dot.
    • Select openai/gpt-6-luna for typed evaluations. ChatGPT and Codex subscription sign-in do not authorize this Platform API route. #166320. Thanks to jjjhenriksen, obviyus, Kimiyu-186 and 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, #160389. Thanks to harshitgavita-07, davidgrinc and 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, #164328. Thanks to Ayushdevo, steipete and nina-grech.
    • Map native Ollama thinking controls to each model's advertised values, including XHigh when supported (#168166, #157762). Thanks @steipete.
    • Agent commands, replies and scheduled runs now offer the thinking levels supported by their selected provider while respecting your explicit choice. #168566. Thanks to @obviyus.
    • Pass configured context caps to Codex catalog-model threads on start and resume (#168986). Thanks @steipete.
    • Keep the thinking level you requested across model switches and show when the current model uses a lower supported level. #169435, issue #87925. Thanks @steipete, @hoobnn and @amittell.
    • Keeps a selected Codex Ultrafast tier across resumed and follow-up ChatGPT-authenticated turns when the account's model catalog supports it. #169265, issue #169264. Thanks @SanderHelgesen.
    • Preserves prior thinking-effort changes when OpenAI Responses streaming requests overlap in a conversation. #169322 Thanks @steipete.
    • Retains native Ollama reasoning across tool continuations and reopened sessions. Retained reasoning uses context and remains subject to compaction. #169312, related issue #147171. Thanks @steipete and @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, issue #170008. Thanks to xyrolle and steipete.
    • Avoid false model-route change notices for equivalent or dated OpenAI response IDs. PR #169977, issue #169976. Thanks to xyrolle, Yigtwxx and 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. Thanks to 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, issue #169641. Thanks to obviyus.
    • Show the explicit Claude Code model name in the picker when the default alias resolves to that model. PR #169670. Thanks to obviyus.
    • Update MiMo and Mistral recommendation order and include Muse Wonder in recommendations when a provider serves it. PR #170106. Thanks to obviyus.
    • OpenClaw uses a 260,000-token context cap for Ultrafast client and server compaction paths, respecting smaller configured limits. #170844, thanks to @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, thanks to fuller-stack-dev.
    • Allowed automatic child-session model selections are kept when stale routing is repaired. #183728 Thanks @LiuwqGit and @steipete. Thanks @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, reported in #121597. Thanks to krell11 and steipete.
    • Typed level directives recognize existing digit and underscore aliases, including /verbose 1 and /think extra_high. Typed level aliases, report. Thanks @DonnieFi, @yetval and @obviyus.
    • Deprecated-model errors use configured fallback or guide you to choose another model instead of suggesting a retry. Deprecated model guidance. Thanks @obviyus.
    • Fixes a personal-account reply stopping during quota or credential refresh because an optional saved field was represented differently. See #170065 and #169850. Thanks @steipete, @modlethub and @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. Thanks @steipete.
    • Preserve the selected Codex account configuration for online status --usage --json, avoiding a misleading generic expiration result (#170692). Thanks @steipete.
    • Stop retrying a request that has been withdrawn or permanently rejected, while keeping recovery for temporary errors and recoverable context limits (#170925). Thanks @steipete.
    • Recognize the provider's input-length error as a context overflow. #171712 by ruel225. Thanks to xpeng5278-web. See #171673.
    • Async tool calls preserve reasoning replay context for later OpenAI Responses requests. #171763 follows #171431. Thanks to 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 by steipete. The separate input-length report from xpeng5278-web is addressed by #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. Thanks @hootrock, @obviyus and @hussont.
    • Preserve person-linked model account selections across session resets and rollovers (#179433, #179432). Thanks @masatohoshino.
    • An isolated task can still choose from the models discovered for its agent. #182952 Thanks @steipete.
    • Settle fallback notices against the model admitted for the session after a successful reply. Commit, thanks to joshavant.
  • 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.

    More details
    • Startup cleanup logs and skips an unreadable managed GitHub profile directory while continuing to clean up other eligible retired profiles. PR #171226, issue #171035. Thanks fhgffy and steipete.

    • Resolve identity before the first self-profile read (commit).

    • MiniMax Portal OAuth renews access tokens through their issuing region. PR #160459, issue #77467. Thanks to masatohoshino and RomneyDa, with reports from rongtianhua and mychataa.

    • ChatGPT device-code sign-in keeps its polling timeout through system clock changes. #162828. Thanks to SunnyShu0925 and fuller-stack-dev.

    • OAuth refresh waits retain their timeout budget when the system clock changes. #167619. Thanks to sunnyshu0925 and 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. Thanks to @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. Thanks to @obviyus.

    • Resolve saved API keys correctly during provider model discovery so model lists can populate after sign-in. #168617. Thanks to @obviyus.

    • Use the configured managed proxy for a standalone openclaw models list --refresh. #168554. Thanks to @obviyus.

    • Make models found by an offline refresh available to a separate local agent turn while their provider credentials remain valid. #168618. Thanks to @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. Thanks to @obviyus.

    • Allow shared OAuth credentials to refresh during model discovery when historical or empty agent databases exist (#168957). Thanks @obviyus.

    • Lets a newly saved API key be tried on the next request after the old key hit a rate limit. #169528, issue #151354. Thanks @obviyus, @masatohoshino and @blance2599.

    • Fixes local Codex model discovery with an environment OpenAI API key in an isolated agent home without a selected profile. #169350 Thanks @steipete.

    • An explicit model authentication refresh reflects removed saved credentials. #170201, thanks to @steipete.

    • Claude CLI authentication checks allow up to ten seconds and distinguish a timeout from a confirmed logout. #170604, thanks to @steipete and @veritasaiflows-cell.

    • Eligible account-only Codex models retain their subscription-backed route and OAuth profile during native model selection. #170639, thanks to @steipete.

    • Model Setup guides device sign-in and configures the selected agent for Muse Code. #171526, thanks to obviyus.

    • Provider Access offers the same sign-in while leaving the active model in place, so you can choose a Muse model separately. #171790, thanks to obviyus.

    • Keep recommendations for currently served models visible after upgrades, even when older catalog rows and prices cannot be used. #172622 Thanks to @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 Thanks to @steipete.

    • If Sign in with ChatGPT expires, renew the credential and try your selected model once more before switching to a fallback. #172593 Thanks to @steipete and @vinsew for the expiry and recovery reports.

    • Reuse provider ownership lookups within each model registry. #172481 Thanks to @steipete.

    • Restore automatic conversation titles for custom Zhipu and Z.AI GLM endpoints, with a clearer warning when a title cannot be generated. #172580 Thanks to @steipete and @TommyLei666 for the report.

    • Preserve valid __proto__ keys in cloned Mistral tool schemas. #172587 Thanks to @steipete.

    • Fix OpenRouter setup incorrectly rejecting valid keys or saved models because of a model identity mismatch. #173292 Thanks to @chandraveshchaudhari and @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 Thanks to @Linux2010, @steipete, and @ZhimingQ for the report.

    • 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 Thanks @steipete.

    • If you pinned an agent to a usable account, the model list no longer reports that account as missing. #178522, #178502, #178549 Thanks @ericcaiwx-star and @steipete.

    • Admitted embedded and CLI agent turns retain their prepared model alias guidance during a configuration refresh. #179192 Thanks @ensignwesley and @steipete.

    • OpenAI-compatible model retrieval accepts existing agent aliases and returns the canonical model object. #180057 Thanks @yetval.

    • A billing failure now points you to account credit and usage limits instead of telling you to wait out a rate limit. #180867, #180856 Thanks @eliavb43.

    • Known OpenAI models without an explicitly configured custom route can use their official routes when stale catalog metadata would otherwise block credentials. #181356, #181353 Thanks @sasan1200.

    • Keep provider sign-in status visible while settings change, then refresh it when new account information arrives. #171579, thanks to steipete.

  • Model pickers 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.

    More details
    • 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, issue #133065. Thanks to Leon-SK668 and vincentkoc.
    • Expanding a model catalog to additional providers can reuse unchanged plugin registrations and avoid repeated preparation work. PR #162226, issues #161379 and #162230. Thanks to netcrazed and RomneyDa, with verification by 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, #163406. Thanks to lifuyue, RomneyDa and reporter 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. Thanks to Sedrak-Hovhannisyan and steipete.
    • Preparing model lists for large configured provider catalogs avoids repeated reference parsing. #166223. Thanks to fede-kamel and 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. Thanks to usimic and 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. Thanks to ly85206559 and 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. Thanks to 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, #150262. Thanks to steipete and reporter 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. #168044, #141357. Thanks to 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). Thanks @steipete.
    • Honor selected llama.cpp model aliases and profile-qualified references, and report credential-save failures during existing-server setup (#168232). Thanks @steipete.
    • Refresh loaded llama.cpp router models with verified context limits and tool support while preserving explicit pins (#168309, #139802). Thanks @steipete and reporter @guarismo.
    • Show a healthy managed llama.cpp embedding server as ready even when its optional metrics endpoint is unavailable (#168204). Thanks @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. Thanks to @obviyus.
    • Reduce synchronous work in personal model lists after a model configuration reload. #168733. Thanks to @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. Thanks to @obviyus.
    • Choose an advertised GitHub Copilot model API when endpoint paths have a version prefix or trailing slash. #168672. Thanks to @RomneyDa.
    • Scheduled and chat turns no longer fail just because their model list updated during startup. #168410. Thanks to @RomneyDa.
    • Repair configurations using the https://ollama.com origin with openclaw doctor --fix or update repair, including saved session and scheduled-job routes (#168782). Thanks @obviyus.
    • Preserve fallback eligibility and later default changes when selecting the agent's effective default model (#169030). Thanks @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). Thanks @steipete. Thanks @ezimerman and @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). Thanks @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 Thanks @steipete.
    • AI choices can appear sooner during macOS, Control UI and CLI setup. #169562 Thanks @steipete.
    • If model discovery fails, the picker now shows the reported error beside Retry and keeps your saved choices available. #169316 Thanks @steipete.
    • Keep model browsing available while a refreshed catalog replaces the old one, without a brief picker failure. #169478 Thanks @obviyus.
    • Show more of your configured fallback models and tell you how many will be removed before clearing the chain. #169511 Thanks @obviyus.
    • Fixes a model supplied by an installed plugin failing when you open its session outside that agent's workspace. #169539, issue #169205. Thanks @ericcaiwx-star, @steipete and @AVCarp.
    • Restores the requested configuration for installed native ESM provider plugins after a failed catalog refresh. #169321, related #169272. Thanks @RomneyDa.
    • If a model-list change refuses a request before the turn starts, tell the client that it is safe to retry. #169623 Thanks @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 Thanks @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, issue #39811. Thanks to steipete, LindalyX-Lee, dsantoreis and exisz.
    • A healthy agent keeps its commands and model choices during a reload even if another agent's model provider is unavailable. #170805, thanks to @steipete.
    • Models with invalid pricing are skipped with a warning while valid siblings remain available. #170882, related to #170458. Thanks @steipete.
    • Managed Codex version checks avoid a pipe race that could leave Doctor without JSON output. #171248, reported in #171169. Thanks @steipete, @dtump, and @joshpetras.
    • The NVIDIA guide shows how to pair a text-only Nemotron primary model with a separate Super VL image-understanding model. #171072. Thanks @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, with related hosted catalog work and Doctor model-choice discussion. Thanks @steipete.
    • Updated Google setup, Gemini aliases and model selection, including core Gemini 4 shorthand normalization. #172339, following Gemini 4 Argon support. Thanks @steipete.
    • Set the default endpoint for key-only Qwen Coding Plan requests. #172447. Thanks @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. Thanks @nv-kasikritc and @jacobtomlinson.
    • Moved Kimi K3 immediately after GPT-6 Luna in the recommended-model list. #172461. Thanks @obviyus.
    • Reduced repeated readiness work when listing large native model catalogs. #172311. Thanks @steipete.
    • Model choices for other agents stay visible in the Control UI when one agent's catalog changes. #172418. Thanks @steipete.
    • Added explicit Imagine Image 2.0 selection and errors for unknown bare image-model overrides. #172445. Thanks @steipete and @JFLeonM for the report.
  • Fixes supported provider routes rejecting otherwise valid tool history, settings or follow-up turns. The affected routes keep their own model and account limits.

    More details
    • OpenAI and Azure Responses output requests respect declared model limits. PR #128282, issue #127560. Thanks to parker-fawcett and obviyus, with the report from 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. Thanks to jimmy00415 and steipete.
    • Keep provider-specific request settings when a plugin hook replaces the outgoing request, whether the hook finishes immediately or later. PR #160567. Thanks to YangManBOBO and obviyus.
    • Send runtime context to compatible Responses servers using a user-role message they can accept. #168546, issue #164791, provider roles guide. Thanks to @steipete and @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). Thanks @steipete, @an2in, @georgenaz, @motookoyama, and @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, issue #169133. Thanks @RomneyDa and @gregb100.
    • Responses tool continuations and transcript reloads avoid spurious assistant-history mismatch warnings. #170901. Thanks @steipete.
    • Corrected Groq Qwen thinking and reasoning output, and marked the Groq and Cohere models as text-only. #171914. Thanks @steipete.
    • Fixes Ollama requests failing when OpenClaw runs as an in-process Gateway from source. #172013. Thanks @steipete.
    • Reduced repeated Ultrafast rejections within a run while retaining the saved preference. #172315, following tier selection work. Thanks @steipete.
    • Fixed thinking-off requests for Baseten DeepSeek V4 Pro 0813. #172330. Thanks @steipete.
    • Preserved OpenAI Responses reasoning prefixes across session reopen and completed async calls across interrupted streams. #172455. Thanks @steipete.
    • Fixes Moonshot and Kimi rejecting some MCP tool definitions that omit a supported type in a choice of input shapes. #172478. Thanks @steipete and @rmoskal for the report.
  • Claude ACP sessions now use an updated Claude Code binary that adds a remediation for the brotli decoder vulnerability.

    More details
    • The Claude ACP adapter is updated to 0.95.0, with Claude Agent SDK 0.3.309 and the corrected decoder. #182664. Thanks @VACInc.
  • Adding a working model provider 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.

    More details

    #188541. Thanks @obviyus.

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

    More details

    #175656, adapted for the release in #188842. Thanks @steipete for the original repair and @RomneyDa for the adaptation.

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

    More details
    • ONNX verification rejects pipe-backed manifests and model artifacts without hanging. Regular files and links to them remain supported. #183621 Thanks @Leon-SK668 and @obviyus.
  • Fixes a pinned Codex conversation failing before its next turn starts.

    More details
    • Restore turn preparation for pinned native Codex sessions after their writer is claimed (#169101). Thanks @RomneyDa.
  • Fixes reasoning-capable utility models returning no visible title, observer digest or recap when their output budget was too small.

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

    More details
    • History-free runs stop at an output limit without replaying their request, and model-call logs carry correlated timing and completion information. #170981, following #161082. Thanks @steipete.
  • Shortening a conversation now keeps each tool result paired with the call that produced it.

    More details
    • Preparation diagnostics distinguish request encoding without exposing prompt content, and context-engine input and output keep tool calls paired within the history limit. #170830, thanks to @steipete.

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.

    More details
    • Check current membership before a pending tool executes. #170539 Thanks @steipete.
    • Save dashboards backed by another database without blocking the Gateway during the write, after checking access to the source session. #170541 Thanks @steipete.
  • 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.

    More details
    • 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 and reported issue. Thanks to giodl73-repo and giodl73.
    • Bounded thinking allowance for exec approval reviewers, #150200. Thanks to leapdragon and steipete.
    • Preserve valid union values during argument repair, #158974. Thanks to Shenrui-Ma and steipete.
    • Keep tools available when literal schema examples or defaults contain dynamic-reference keys, #160542. Thanks to Shenrui-Ma.
    • Keep deeply nested tool schemas callable with a 128-level validation boundary, #164836, with reports #141306, #153700, #153701, #153713 and #153743. Thanks to RXQ6, qxr666-sga and steipete.
    • Reject overlapping agent edit and Skill Workshop patch matches, #168125. Thanks to yetval.
    • Generic agent node invocations cannot bypass a denied browser tool through browser proxy commands. #179880. Thanks @eleqtrizit.
    • Unsafe test and [ predicates no longer pass automatically as safe builtins in POSIX exec allowlist mode. #180880. Thanks @eleqtrizit.
    • Reject malformed UTF-8 secrets plans before applying them, #167379. Thanks to Alix-007 and steipete.
    • Prevent redundant preparation of existing stores from revoking an active tool caller's authority in #170658. Thanks @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. Thanks Alix-007 and 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. Thanks @Leon-SK668 and @steipete.
    • Completion installation and profile inspection reject pipes and other special-file profiles instead of hanging. #181763. Thanks @Leon-SK668 and @steipete.
    • Keep the transcript-reading tool available on turns without a caller, while still checking who may use it (commit).
    • A multi-file apply_patch now catches predictable patch mismatches before writing to any of its files. PR #160409, issues #117742 and #127496. Thanks to masatohoshino and obviyus, with reports from yetval and steipete.
    • Denied filesystem glob checks in the experimental opt-in Codex sandbox avoid stalling the Gateway on crafted patterns. #167296, #166684. Thanks to xialonglee and 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 Thanks @RomneyDa.
    • Recheck a plain host assertion before embedded prompt submission when the host may have become inactive in 1fe1e63.
    • The runtime runs on the Gateway host and refuses policies it cannot enforce. #170487, thanks to @obviyus.
    • Set plugins.entries.agentsapi.config.forwarding.gatewayTools or forwarding.mcpServers to false to disable the corresponding forwarding path. #170728, thanks to @steipete.
  • Code Mode 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.

    More details
    • Wrapped Browser observations and snapshot references in Code Mode, #164833 and #164641. Thanks to alkor2000 and reporter potterdigital.
    • Recovery guidance for invalid Code Mode waits, #128886, #128859 and #167610. Thanks to sashankh, steipete, VACInc, shad0wca7, potterdigital and benprotzekmuntoni.
    • Enabled-tool guidance when Code Mode rejects module access, #158716 and #158675. Thanks to sxh313, pennymolt and VACInc.
    • Reuse prepared catalog data across repeated Node Code Mode calls in #169045. Thanks @steipete.
    • Release closed-database metadata that could exhaust Code Mode worker memory in #169956. Thanks @steipete.
    • Keep control tool declarations stable across catalog changes in #170282, addressing #170233. Thanks @steipete and reporter @imadal1n.
    • Give invalid shell commands and Node worker memory exhaustion more useful errors in #170947. Thanks @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. Thanks steipete.
    • Retirement of workers making frequent major collections near their heap limit, including when individual collections are cheap. PR #172552. Thanks steipete.
    • Per-worker GC and heap metrics use up to 64 reusable worker slots, with script-level attribution for overflow. PR #172486. Thanks steipete.
    • Node Code Mode leaves collection timing to V8 instead of forcing idle inspector collections between or during cells. PR #172284. Thanks steipete.
    • Healthy Node workers can be reused after settled validation, guest, and bridge failures without retaining failed-cell globals. PR #172305. Thanks 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, issue #171366. Thanks steipete and reporter 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. Thanks vincentkoc.
    • Truncated syntax feedback preserves Unicode characters at the clipping boundary. PR #176230. Thanks hugenshen and obviyus.
    • Suspended Code Mode runs expire according to elapsed time even when the system clock changes. #180599. Thanks @SunnyShu0925 and @steipete.
    • Concurrent large shell analyses release parser memory sooner. #183312. Thanks @steipete.
    • Missing-subcommand JSON errors (#184128). Thanks @Leon-SK668.
    • Preserve cleanup uncertainty in buffered command results (#187271, backport of #184270, addressing #184237). Thanks @RomneyDa and @shakkernerd.
  • 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.

    More details
  • The 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.

    More details
  • 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.

    More details
  • Web search now honors more of your chosen provider settings, result counts and timeouts, and gives clearer errors when a search fails.

    More 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.

    More details
    • Complete quoted PowerShell option choices, #167421. Thanks to LinzeShi.
    • Reset the log cursor when the selected file path changes, #150791 and #150843. Thanks to zhangguiping-xydt and obviyus.
    • Preserve Unicode joiners in exec and background process output, #160403. Thanks to Shenrui-Ma.
    • Avoid cold compile-cache writes delaying the exit of one-shot CLI commands in #170684. Thanks @steipete.
    • Fresh validated shell snapshots can be reused without another validation shell, and process diagnostics identify more helper launches. PR #172310. Thanks 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. Thanks zhangguiping-xydt and obviyus.
    • Trajectory exports accept safe directory names beginning with two dots, such as ..diagnostics. PR #171609. Thanks zhangguiping-xydt and altaywtf.
    • Gateway SSH probes honor an explicitly specified port 22 even when the SSH alias specifies another port. PR #171092, related issue #127456. Thanks zhangguiping-xydt and obviyus.
    • Bash completion keeps suggestions within the option value being entered. #183778. Thanks @LinzeShi.
    • Preserve writer identity through CLI reply completion (commit).
    • Separately installed ACPX can find the host bridges for enabled plugin and OpenClaw tools. The bridges remain opt-in. #164272, #164211. Thanks to jayzhou2309, obviyus and reporter ajmtrz.
  • 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.

    More details
    • Managed-worktree reports safely display control-bearing paths and names. #181582. Thanks @Alix-007 and @steipete.

    • Model auth profile listings sanitize terminal controls in human-readable output. #181584. Thanks @Alix-007 and @steipete.

    • DNS setup previews safely display control-bearing paths. #181585. Thanks @Alix-007 and @steipete.

    • MCP registry reports and errors sanitize terminal controls in human-readable output. #181587. Thanks @Alix-007 and @steipete.

    • Safe terminal rendering for readable environment values (#184141). Thanks @Alix-007.

    • Gateway discovery reports escape control characters and line breaks from discovered beacons. #183355 Thanks @Alix-007 and @steipete.

    • Storage list and initialization messages sanitize displayed locations. #183359 Thanks @Alix-007 and @steipete.

    • Shell completion installation messages sanitize profile paths and suggest restarting the shell when a reload command would contain terminal controls. #184120 Thanks @alix-007.

    • Session-list headers sanitize displayed store paths. #184139 Thanks @Alix-007.

    • Backup scheduling and record messages sanitize displayed paths and labels. #184153 Thanks @steipete and @Alix-007.

    • Sanitized paired-node camera metadata in the human-readable camera list. JSON retains the original values (#175624). Thanks @SunnyShu0925 and @obviyus.

  • 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.

    More details
    • 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).
    • Keep Codex and Agents API execution budgets steady when the system clock changes, #155801. Thanks to sunnyshu0925 and obviyus.
    • Cancel a waiting CLI-backed turn without interrupting the active turn in #169502. Thanks @steipete.
    • Retry eligible queued background completions after a configuration change with current policy applied in #169529, addressing #169054. Thanks @wangmiao0668000666, @RomneyDa and reporter @Oldrich333.
    • If a background command cannot send a completion notification, tell the agent to poll its original session for the result in #169645. Thanks @steipete.
    • After cancelling a command, you can still retrieve a cleanup error once the run has settled. PR #171708. Thanks steipete.
    • Background process polling keeps its intended timeout when the system clock changes. PR #173241. Thanks wangmiao0668000666 and obviyus.
    • Delivered-turn settlement and history-confirmed Escape recovery in the TUI. PR #171014, issue #170974. Thanks steipete and reporter KenYounge.
    • Interrupted CLI commands remove their plugin capture directories when signal cleanup completes. PR #171162, issue #170773. Thanks steipete and rozenpl.
    • Fixes an immediate follow-up message being mistaken for a retry after you press Stop. #172421. Thanks @steipete.
    • Allowed a local follow-up while a stopped turn finishes cleanup when the destination remains unchanged. #172458. Thanks @shakkernerd.
  • 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 can still contain credentials and need careful access.

    More details
    • Protect the active environment variable used by a whole-reference hook token from Gateway-hosted exec children, including across hook reloads (#179199). Thanks @VACInc. The broader credential-inheritance report came from @nierob-cmd (#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 Thanks @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 Thanks @eleqtrizit.
    • Security audit follows linked workspace skills roots when checking for nested symlink escapes. #182384 Thanks @steipete and @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 Thanks @leizhenzhang and @steipete. Thanks @osher86 for the report.
    • Preserve workspace policy for Gateway-created delegate and media tools (#187307). Thanks to @RomneyDa and @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. Thanks @steipete.
  • 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.

    More details
    • Clarify expired and cancelled approvals and unconfirmed application of an approved setup change. #172270. Thanks to @steipete.
    • The Approvals page loads standing grants independently of approval history, so authorized operators can still see and revoke them. #183769 Thanks @AmelioMansour and @steipete.
  • Diagnostics exports now keep the destination you entered, including meaningful spaces, and patch views retain trailing whitespace and the final newline.

    More 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.

    More details
    • Bun workspace helpers can run inline code without a false path-length error, while other workspace paths remain checked. #171970 by steipete.
    • OC Path can now edit YAML entries keyed by a number, boolean or null without changing adjacent entries. #171957 by steipete.
    • Update filesystem handling for affected Windows 9p mounts and Android/Termux temporary workspaces. #172306, related to #145589 and #171406. Thanks to @steipete, @Hawk5150, @iiAnthony, @jaisummagithub and @kukirin-ui.
    • Agents can apply very large file patch hunks without hitting the JavaScript argument-limit crash. #174477. Thanks @steipete.
  • Scripts using experimental claws remove --json now receive a JSON error for two invalid cleanup-option combinations instead of only a plain-text error.

    More details
    • Returns a parseable JSON failure for two invalid cleanup option combinations in the experimental claws remove --json command. #172281, thanks to @Leon-SK668.
  • 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.

    More details
    • 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, issue #169332. Thanks @RomneyDa and @farisoftfry.

Diagnostics and service maintenance

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

    More details
    • Finishes closing affected shared database workers without reporting the refused opening again as a second cleanup failure. #173813.
  • A refused database opening no longer unnecessarily interrupts other readers, and affected operations can retry.

    More details
    • Preserves shared readers and settles refused openings in the release branch. #175987, #163258 and #179320, included in the combined backup and platform backport.
  • 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.

    More details
    • Status, context and session reports use the selected model and runtime capacity instead of a stale or guessed limit. #165991. Thanks to snotty and steipete.
    • Startup warnings point to the work actually taking time, and channel start messages say why an account is starting. #169221. Thanks @steipete.
    • A local worker timeout is reported as a local timeout, not as a provider HTTP 408; configured fallback remains available. #156650, reported in #155627. Thanks to YangManBOBO, EndeavorPioneer, and altaywtf.
    • Logs now identify session-list requests from the sidebar correctly. #170512. Thanks to steipete.
    • The startup banner shows the effective thinking setting when it is off, rather than implying another setting is active. #170627. Thanks to obviyus for the fix and chughtapan for the report.
    • Logbook warns about a missing vision model only when image analysis is actually waiting. #170608. Thanks to duyufansh2008.
  • Diagnostics keep useful failure details when a service cannot shut down cleanly, while optional logging failures no longer stop an agent's work.

    More details
    • Long-lived chats no longer keep growing their send-timing diagnostics without bound (#171146). Thanks @steipete.

    • Recorded Codex and plugin activity can finish saving when the service closes or restarts. #171293, reported in #171197. Thanks @steipete and @arquiteto-raiz.

    • Stall reports still identify the responsible script when its name contains quotes or escapes, without exposing unredacted details. #170505. Thanks to steipete.

    • If optional cache or Anthropic diagnostic files cannot be saved, OpenClaw warns once and keeps the agent running. #174622. Thanks @steipete, @jamie8johnson and @aniruddhaadak80.

    • A shutdown timeout now records which child process remained and whether the stop signal failed. #175625. Thanks @vincentkoc.

    • Linux service inspection reports when it cannot confirm that its systemd check has stopped. #175689. Thanks @steipete, and @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. Thanks @steipete.

    • Startup recovery reports cleanup or ownership errors directly instead of incorrectly saying the service is missing. #175726. Thanks @steipete.

    • Channel logs identify the event and underlying error when refreshing a message claim encounters a storage failure. #171365. Thanks to @ynaamane, @obviyus and @yolo521-bot for the report.

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

    More details
    • 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, thanks to steipete.
  • Gateway readiness checks now wait for the final startup work to finish instead of reporting ready while it is still running.

    More details

    #188873, its release adaptation #188898, and the readiness check follow-up. Thanks @RomneyDa.

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.

  • 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.

    More details
    • Keeps private persistent storage for each saved Gateway. #158908.
  • 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.

    More details
    • Uses the installed or connected local Gateway status instead of assuming the bundled version is running. #181389.
  • Mac permission prompts now show which computer needs access and where to grant it. Complete the permission step on that Mac, then confirm a retry in chat.

    More details
    • 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 by @steipete.
    • Chat permission cards offer the next step for the current macOS and OpenClaw access state, including requests handled in stages. #171115 Thanks to @steipete.
    • After a Screen Recording request, the card offers System Settings if access was denied. #171175 Thanks to @steipete.
    • Location cards direct you to System Settings after access is denied or unavailable, before offering to enable Location mode. #171859 Thanks to @steipete.
    • Mac setup does not inspect protected Chrome data until you explicitly ask to use the browser. #171177 Thanks to @steipete.
    • Quick Chat no longer crashes while setting up permissions. Quick Chat permission setup crash fix.
    • When Host Desktop is disabled, chat offers setup guidance and lets an authorized connection enable it when the desktop server is ready. #177888, issue #174368 Thanks @etzelm and @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 Thanks @obviyus.
  • Mac app navigation and panel controls no longer crowd or cover the native window buttons.

    More details
    • Desktop panel headers and navigation controls share the titlebar while leaving room for native window buttons. #171131 Thanks to @steipete.
    • The rail divider and collapsed sidebar background stay below macOS window controls. #172451 Thanks to @steipete.
  • Downloading a conversation or dashboard file in the Mac app opens the system Save dialog instead of replacing the page with raw file data.

    More details
    • Dashboard and conversation downloads in the Mac app use the system Save dialog instead of replacing the page with archive data. #173654 Thanks @Patrick-Erichsen and @RomneyDa.
  • 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.

    More details
    • iPad pairing and Gateway onboarding messages have translations in more languages. #185480
    • Apple chat now says when a reply is preparing, waiting or retrying, including labels available to screen readers. #166356, related #139926. Thanks Marvinthebored, Solvely-Colin and noelillinger.
    • Apple chat shows when a helper is still working and provides a way to open that helper's conversation. #166322, related #52960. Thanks Marvinthebored and Solvely-Colin.
    • On iPhone or iPad, arrow-key history no longer disrupts selected text or text still being composed with an input method. #143056. Thanks 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. Thanks Rocuts, jalehman and 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 by @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, reported in #144678. Thanks to @masatohoshino and @bjesuiter.
    • iOS chat follows its message connection for online status, and dismissed warnings stay hidden through identical repeated failures. #169912, reported in #169911, by @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 by @steipete.
    • Mac Dashboard reload and Gateway error messages gain translations in 21 non-English locales. #170475.
    • The existing subagent wait label gains translations in the iOS and macOS catalogs. #170172.
    • Native chat startup and retry messages gain translated catalog entries for supported locales. #171084.
    • Apple chat can send again when its connection returns and resumes the same conversation. #171528 Thanks to @jjjhenriksen and to @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 Thanks to @Patrick-Erichsen.
    • Mac Companion setup can finish AI verification with a saved sign-in after a wizard progress reply. #171667 Thanks to @steipete and to @enter501 for the report.
    • The Mac Codex catalog remains available when the valid nativeHookRelay plugin option is configured. #172592 Thanks to @steipete.
    • Mac CLI startup diagnostics print literally when the app cannot resolve the local CLI. #171802 Thanks to @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. Thanks steipete.
  • Android now shows Gateway names with non-English characters intact and renders inline code correctly even after an unmatched backtick.

    More details
    • Android chat displays inline code correctly even if an earlier backtick was left unmatched. #170478, with a follow-up from @vincentkoc.
    • Android shows Gateway names containing non-English characters correctly, and a fallback Google video result identifies the operation that returned it. #171920 Thanks to @steipete.
  • On Wear OS, Retry stays reachable on round screens and larger text remains scrollable; replies, speech and navigation also recover from more interrupted states.

    More details
    • 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 by @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 Thanks to @joshavant.
    • When Pulse is unavailable, a Wear OS watch returns to Chat, including after restoring a saved session. #172136 Contribution from @IWhatsskill.
    • Wear OS reply speech and Stop remain responsive if the speech engine stalls. #172147 Contribution from @IWhatsskill.
  • 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.

    More details
    • 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 Thanks @eleqtrizit.
  • 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.

    More details
    • Native updates reduce stopped database backup and optional Doctor work while keeping recovery backups and required repairs. #170087 by @steipete.
    • Mac updates avoid waiting on their own lock when equivalent temporary-directory paths are used. #169860 by @steipete.
    • Mac update and recovery checks recognize valid app-managed Bun services, addressing a recovery screen that could remain despite a healthy Gateway. #170006, with the report and investigation in #169662. Thanks to @steipete, @jokerman1302-eng, @davidmackrory-byte and @josephsilvagnoli.
    • Mac updates report why a LaunchAgent inspection failed and suggest a deep Gateway status check. #170429, reported in #169995. Thanks to @steipete and @Yolo521-bot.
    • Mac service repair handles overlapping service loading after confirming the service is loaded, without interrupting a running Gateway. #170740 by @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 by @RomneyDa.
    • A verified external Mac terminal can restart the Gateway when an ancestor process cannot be inspected. #170354 by @RomneyDa.
    • The Mac app includes updated Peekaboo and process-handling dependencies. #170713 by @steipete.
    • Gateway startup in the Mac app can reach readiness sooner when using bundled Bun. #169543 by @steipete.
    • Mac app Retry can repair plugin links and clear an incomplete-update warning after the Gateway passes its required checks. #171508 Thanks to @RomneyDa and to @shanselman for the report and investigation.
    • Updates under the macOS Gateway service prepare the selected pnpm installation's environment. #171936 Thanks to @steipete, @AntaresGG for the report, and @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 Thanks to @steipete and to @giulianoaccorsi for the report and diagnosis.
    • macOS service inspection and restart preserve multiline environment values and their whitespace. #171740 Thanks to @steipete and to @yetval for the report.
    • Two Mac Gateway recovery messages are translated in 21 non-English locales. #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, issue #174120 Thanks @steipete and @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. Thanks obviyus.
    • A macOS LaunchAgent restart reports an error when its restart helper cannot start, instead of claiming that the restart was scheduled. #175229 Thanks @steipete.
    • Updated Mac apps can use compatible saved device credentials for remote Gateway connections after unrelated local database upgrades. #166993. Thanks 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. Thanks steipete and fuller-stack-dev for the earlier renewal work.
    • The Mac status menu explains when an incompatible bundled worker needs an app update and offers an update action when available. #157948, related #157444. Thanks PollyBot13.
  • 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.

    More details
    • 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. Thanks steipete.
    • New Peekaboo skill dependency installs use the maintained OpenClaw Homebrew tap. Existing installations are not migrated automatically. #166245, related #166244. Thanks holgergruenhagen.
    • Mac node commands find preferred tool folders across Finder, Dock, and login launches. #171460 Thanks to @brianmcguire, @steipete, and to @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 Thanks to @holgergruenhagen, @ylcn91, @steipete, and to @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 Thanks to @fhgffy, @steipete, and to @jessecq1995 for the related report.
    • Apple app builds find a supported Node executable when a version-manager shim leads PATH. #168139. Thanks steipete.
    • Mac developer guidance covers signing and packaging a local build to replace a release installation. #168527. Thanks steipete.
  • The Mac memory readout now counts memory the system can reclaim, so available memory is no longer understated.

    More 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.

    More details
    • Windows update recovery accepts short-name or case-variant paths to the same verified backup, avoiding a false rollback. #168968. Thanks RomneyDa.
    • The final plugin check for Windows updates from OpenClaw 2026.10.1 can use the pending-migration request expected by that updater. #169031. Thanks 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. Thanks steipete.
    • Update service refresh recognizes equivalent Windows account names while protecting different or unresolved accounts. #169481 by @steipete.
    • Doctor preserves internal dependency junctions when copying plugin captures between phases. #169672, related to #169586, by @n572770.
    • Windows Git-source updates avoid recursive directory copies and can recover the verified previous build after a qualifying staging failure. #170940, reported in #170700. Thanks to @steipete and @stop-time.
    • Windows updates now explain what to do when Task Scheduler denies access with an English error or 0x80070005. #171109 Thanks to @steipete and to @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, issue #183088 Thanks @steipete, @LiuwqGit and @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, issue #127411 Thanks @steipete.
    • Windows updates and plugin loading handle deep paths and 8.3 short-name state paths that could block candidate migration checks. #172769 Thanks @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, issue #181577 Thanks @steipete and @SMF12138.
    • Windows update checks no longer flash a console window for SQLite inspection. #174969, issue #174906 Thanks @steipete and @throwingbones.
    • Windows update recovery retains the security helper it needs after replacing the original installation. #187470 Thanks @RomneyDa.
    • Windows runtime recovery and Bun-hosted Node discovery recognize quoted absolute PATH entries. #181678 Thanks @steipete and @Links2008.
    • Forced Windows Gateway reinstall tolerates normal launcher timestamp settlement and can restore the previous task if activation fails. #176945, issue #176872 Thanks @steipete and @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, issue #174563 Thanks @steipete, @sunlit-deng and @prizmizm.
    • Windows backup and Doctor cleanup can remove unused temporary backups without the recurring directory error. #176836, issue #176743 Thanks @xutongxue233, @steipete and @wg-mojo.
    • Windows service changes and Mac Gateway stops no longer time out early or wait too long after a system clock change. #182859, #183033 Thanks @mikasa0818, @SunnyShu0925 and @steipete.
  • 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.

    More details
    • Windows node commands preserve prompts, links and file paths with quotes or spaces when started through cmd.exe. #158160, reports #142847 and #158129. Thanks Dimitri-lcht, igs-rogenlo, steipete and 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. Thanks steipete.
    • Installing the Windows Bun service no longer fails after a successful runtime check just because temporary-file cleanup must wait. #169286. Thanks steipete.
    • A Windows Bun Gateway can continue loading its settings when a temporary copy remains busy after a successful read. #169337. Thanks steipete.
    • Windows Gateways with installed plugins can use the small-file copy path during startup. #168313. Thanks RomneyDa.
    • Windows file checks keep distinguishing the intended file when path aliases or filesystem behavior could confuse them. #169469. Thanks steipete.
    • Windows Bun plugins now use the same Gateway SDK state as the Gateway, avoiding a separate copy during loading. #169482 by @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, reported in #137416. Thanks to @steipete, @pkinjo, @xupeijian and @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 by @steipete.
    • Skill preparation avoids repeated environment reads when required binaries are missing, reducing work on long Windows search paths. #171066, reported in #171040. Thanks to @LiuwqGit, @steipete and @funnysubaru.
    • Windows reports incompatible AppContainer child-pipe operations and native helpers, and improves access to private paths. #171728 Thanks to @steipete, @jonathanlindsay, and @chelsealong.
    • Windows startup spends less time reopening plugin files while checking the installed plugins. #172333 Thanks to @steipete and to @SBC2016 for the report.
    • Windows Gateway startup no longer fails its database checks when the environment cannot be sent to the inspection process. #176194, issue #176111 Thanks @skyzhao1223, @steipete and @easyteacher.
    • Windows onboarding, Gateway and CLI processes no longer crash when the state folder is reached through a short Windows path. #172768 Thanks @RomneyDa.
    • Windows can reopen small private database files and create them in long paths that previously failed. Commit 47c7064
    • Native plugins can load on affected Windows computers when security software changes only file metadata and the plugin's contents still verify. #179949, issue #179923 Thanks @coaiMax and @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, issue #182652 Thanks @RomneyDa and @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, issue #174204, account selection issue #163332 Thanks @RomneyDa, @scalesmart, @layne-11 and @pandysp.
    • Windows port commands now explain that the operation is unsupported and suggest alternatives without changing the existing data or selected engine. #183512 Thanks @steipete.
    • Android and Termux accept the same state database after ordinary SQLite writes while retaining replacement-file checks. #167719, report #167623 and related #167791. Thanks yxshee, steipete and reporter 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, related #167663. Thanks steipete.
    • Windows source checkouts entered through short paths can prepare plugin SDK declarations. #169427. Thanks steipete.
  • 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.

    More details
    • A Linux desktop can choose another display when a hidden socket already occupies the expected one. #169392, report #169391. Thanks holgergruenhagen and 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, issue #183656 Thanks @demos-ra and @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 Thanks @steipete.
  • Windows no longer reports a failed local-model shutdown when the service has stopped and only its termination helper is still finishing.

    More details
    • Windows now reports the local model as stopped when its service has exited, even if a helper is still finishing. #171587, thanks to steipete and to RomneyDa for the original repair and report.

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.

    More details
    • Gateway startup and Doctor can retry a normal copy when ZFS refuses a fast reflink copy. #170812 by @steipete, with thanks to @Glukmann for reporting #169071.
    • Credentials in host process cleanup errors are masked before they reach retained results or notifications. #170941 by @steipete, following #169063.
    • A failed local check no longer discards an existing OpenShell copy or hides the remote skills view (#176458). Thanks @steipete.
    • Supported Node versions are accepted again, with warnings for versions missing required security patches (#186589). Thanks @steipete.
    • Install and update paths receive the same Node compatibility and security advisory corrections (#187626). Thanks @romneyda and @steipete.
  • Doctor 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.

    More details
    • Deleting one agent no longer falsely blocks registration for another with independent identity and database paths. #170309, thanks to @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, thanks to @iamonlv426 and @steipete.

    • Managed updates use private per-user temporary storage and can recover eligible old receipts when another user owns their former directory. #170174, thanks to @steipete and @holgergruenhagen for the report.

    • Updates and Doctor can retain SQLite recovery backups in deeply nested paths that previously ran out of temporary path space. #170867, thanks to @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, reported in #170869. Thanks @steipete and @eliavb43.

    • On Linux and Mac, Claude CLI processes no longer remain running after their Gateway disappears in the covered cases. #171016, reported in #170868. Thanks @steipete and @eliavb43.

    • Installations with many agents spend less time repeating checks when listing or starting them. #171371, reported in #171351. Thanks @steipete and @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, related to #171348. Thanks @steipete and @LifeViwer.

    • Credential file updates reuse Gateway readers and reconnect retained observers after a restart. #171246. Thanks @steipete.

    • Long streamed replies use less Gateway CPU while preserving text corrections and Unicode boundaries. #171361, reported in #171360. Thanks @boeingchoco and @steipete.

    • If you delete an agent that is still working, the wait ends with the conversation you need to let finish before retrying. #172511, issue #172416. Thanks to @steipete.

    • Starting a helper does less repeated work on installations with many saved runs. #172480 Thanks to @steipete.

    • Installations with many conversations spend less time dispatching database work. #172532 Thanks to @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 Thanks to @Leon-SK668 and @obviyus.

    • Starting two agents at once no longer lets the later initialization displace the first agent's database. #174251 Thanks to @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 Thanks to @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. #175007 Thanks to @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, reported in #169390. Thanks @steipete, @xiajiahang, @nkeil, and @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, fixing #168959. Thanks @steipete, @nosmile99, and @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. The separate working-directory issue #134612 was reported by @phuc-nt. Thanks @eleqtrizit.

    • The first database open can wait briefly when another operation is temporarily changing its structure. PR #170300. Thanks @steipete.

    • A first conversation can be saved while usage information refreshes, even if its database has not yet been created. PR #170308. Thanks @steipete.

    • Saving a conversation no longer rolls back when its database connection changes at the same moment. PR #170423. Thanks @steipete.

    • Recovery leaves your configuration alone and warns you if it cannot save the original before replacing it. #171217, thanks to steipete and Yolo521-bot for reporting.

    • Doctor and legacy SDK data selection respect the active profile and its state directory. #171439, thanks to 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, reported in #172109. Thanks to steipete and wangxiajun68.

    • Migration leaves an older notes file untouched if it contains invalid text encoding, rather than changing its contents. #172293. Thanks to @wangmiao0668000666 and @obviyus.

    • Repair leaves retired agents' saved data untouched and points to their locations while fixing active conversations. #172295, related to #172259. Thanks to @steipete and @hannesrudolph.

    • Doctor can finish pending repairs on the same version without pulling unrelated old repair work into a newer upgrade. #172390. Thanks to @steipete.

    • Bun installations no longer interrupt some Doctor and update maintenance work when passing database tasks to a worker. #172175. Thanks to @steipete.

    • Startup now stops with an incompatibility error rather than opening a database whose version or structure it cannot safely use. #172265. Thanks to @steipete.

    • Doctor avoids repeatedly scanning migration history when stale session import records point to archived transcripts. #172890, thanks @steipete, @DongwonGim for the report, and @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 · #176234. Thanks @steipete and @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. Thanks @steipete and @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. Thanks @steipete and @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. Thanks @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). Thanks @steipete and @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). Thanks @Leon-SK668 and @steipete.

    • Doctor can finish repairing plugins after importing verified conversations even when an older archive is missing, while still warning about that gap (#178779, #167385). Thanks @steipete, @jayzhou2309, @lostsock1 and @IliyaNexus.

    • Doctor no longer repeats old migration checks and notices on unchanged data during the same repair (#180576). Thanks @steipete and @MertBasar0.

    • Existing agent database reads can continue after a compatible structure refresh without reopening unnecessarily. Commit

    • 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

    • 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, report #170693. Thanks to @steipete and @NOVA-Openclaw.

    • After storage recovers, closing the database can clear a lock left by completed work so later protected operations can proceed. #173225, thanks @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, issue #169254. Thanks @steipete.

  • 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.

    More details
    • 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, #137264, #173412 Thanks @steipete, @enki, @r3n3x and @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, #179992 Thanks @RomneyDa and @joshavant.
    • Partial HTML-like tags in streamed replies avoid unnecessary full parsing where their meaning is clear. #180765, #180720 Thanks @JasonBuildAI and @steipete.
    • Long streams containing tool-call XML avoid repeated parsing of settled text. #181397, #175156 Thanks @steipete and @JasonBuildAI.
    • When a turn inherits sign-in access, it now uses the configured credential owner rather than another profile. #181812 Thanks @steipete.
    • If your role grants access to no agents, the agent list returns promptly instead of waiting for model information. #182159 Thanks @vincentkoc.
    • Reject explicitly blank --identity-file and --workspace values in openclaw agents set-identity. Omit a flag to use its normal default. #182622 Thanks @wangmiao0668000666, @steipete and @obviyus.
    • Agent and team creation messages no longer display unsafe formatting from names; stored names and JSON results remain unchanged. #183360 Thanks @Alix-007 and @steipete.
    • When conversation compaction fails, JSON callers receive a usable error tied to the conversation they requested. #184131 Thanks @Leon-SK668 and @obviyus.
    • Browsing OpenCode conversations no longer times out early or waits too long after a system clock change. #182295 Thanks @SunnyShu0925 and @steipete.
    • Mac conversation navigation keeps its intended wait time even if the system clock changes. #182627 Thanks @SunnyShu0925 and @steipete.
    • Starting or stopping a managed local model no longer waits the wrong length of time after a clock change. #182778 Thanks @mikasa0818 and @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. Thanks to RomneyDa.
    • A configuration change now retries preparation if newer settings supersede it, and a plugin reload waits for active work to finish in #185573. A saved configuration can remain pending if that work never settles. Thanks to steipete.
    • Changing only whether sign-in is available no longer unnecessarily rebuilds an agent's prepared runtime in #185250. Thanks to steipete, and to DonnieFi for reporting #161468.
    • A helper turn waits for its owner's newly published sign-in settings before it starts in 8501893.
    • A later model or credential change no longer causes an unnecessary restart from an older reload in b285a4e.
    • Replacing or disabling the Muse plugin now releases its open native sessions in #184941. Thanks to steipete and pstarkgit.
    • Binding or unbinding an agent by channel name now recognizes that channel consistently in #184717, addressing #184636. Thanks to a-raphie, obviyus, and yetval.
    • A false conversation conflict no longer blocks recording native token usage in #184427. Thanks to steipete.
    • Cleanup no longer repeatedly waits on an outdated native binding view, including when request tracing is active, in 7cc1ca6.
    • Deleting an agent waits for its usage cleanup, and failed usage refresh cleanup can retry in 5ac29c6 and 6a3b706. Thanks to steipete.
    • A heartbeat check blocked by an agent being deleted can resume without restarting the Gateway in 8484ee5.
    • Retrying a hook no longer spends as long waiting to check whether its agent is being deleted in 20d12e8. Thanks to VACInc.
    • Node 26 worker processes no longer abort when their input comes from a file or is ignored in #187516 and its backport #187553. Thanks to RomneyDa.
    • The upgrade adds indexes used by conversation lookups and delivery cleanup, and scans existing records as it applies them. #169414. Thanks @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. Thanks @steipete.
    • Preserve unrelated credential updates when Model Setup activation fails, and provide async replacements for deprecated synchronous OAuth SDK methods. #169633. Thanks @steipete.
    • /status and session_status show which sign-in profile or safe credential source the session is using, without displaying the secret. #169721, issue #82020 and earlier investigation #90689. Thanks @steipete, @ly85206559 and reporter @davidjoshua7692-code.
    • Gateway access checks now respect a profile role downgrade or deletion instead of retaining its old access. #169799. Thanks @steipete.
    • A Claw MCP setup retry that succeeds no longer returns an old failure message. #169756. Thanks @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. Thanks @steipete.
    • The database upgrade retains ACP resume information and saved update progress. It does not make PostgreSQL a supported runtime database. PR #170280, with the storage design in #169254. Thanks @steipete.
  • Update preparation refreshes the selected target before you confirm, and supported package and Bun installs handle more interrupted or unusual first-upgrade paths.

    More details
    • 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. Thanks to vincentkoc, steipete, and 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. Thanks to dankarization and 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, reported in #167441. Thanks to 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 by @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 by @steipete.
    • The first upgrade from stable 2026.10.1 retains the files needed to finish its cleanup after package replacement. #168740 and #168849 by @RomneyDa, with thanks to @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 by @steipete.
    • Update subprocesses retain your configured Gateway memory limits and any explicit override. #168889, thanks @steipete and issue reporter @bluet.
    • If an update fails after migrating data, its error points to repair for the affected profile and explains why maintenance stopped. #168905, thanks @steipete and @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, thanks @steipete.
    • Package updates spend less time checking the same unchanged runtime files repeatedly. #168958, thanks @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, thanks @steipete and issue reporter @sayitfast.
    • An installation managed by pacman now tells you to update through your system package manager rather than trying to replace itself. #169055, thanks @steipete, @sahilsatralkar, and issue reporter @Pegorim.
    • Uninterrupted npm updates on Unix-like systems avoid repeat checks of a newly prepared package; recovery still verifies its contents. #169075, thanks @steipete.
    • Recovery from an interrupted update no longer waits the wrong length of time after a clock change. #169168, thanks @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, #168901, thanks @steipete.
    • Installation now checks a custom Bun path before changing anything and explains that the executable must be named bun or bun.exe. #168982, thanks @steipete.
    • Opt-in Bun installations receive the updated build's memory-limit and worker-lifecycle fixes. #169009, thanks @steipete.
    • Source builders can make a runtime-only build, also used by Team server deployments. #169039, thanks @steipete.
  • Updates and rollback now leave more unrelated settings and checkout edits alone when a later step fails.

    More details
    • A suspiciously shortened configuration file no longer replaces the healthy recovery copy that Doctor can use to restore your settings. #152565, reported in #152509. Thanks to LiuwqGit, RomneyDa, and 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, reported in #168066. Thanks to 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, related report #130807. Thanks to masatohoshino, WadeOwenWatts, Patrick-Erichsen, and obviyus.
    • A Tailscale outage during startup no longer leaves channels suppressed after the connection returns. Restore Tailscale and restart the Gateway to recover. #162266, related report #144845. Thanks to RomneyDa and 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, reports #157575 and #157630. Thanks to valkyriweb, xydigitLybnnnn, goslingmanagment, and waynegault.
    • Checking a remote Gateway restart no longer waits the wrong length of time after a clock change. #168087. Thanks to SunnyShu0925.
    • Cleanup keeps the latest recovery copy and other copies still needed to investigate an uncertain update. Update capture cleanup. Thanks @obviyus.
    • Updates without a restart and older installed updaters continue running Doctor checks in their supported order. Doctor inspection timing. Thanks @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. Thanks @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. Thanks @obviyus.
    • Repair can recognize an update still legitimately running instead of taking over its files. Concurrent update repair, related report. Thanks @steipete and @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, contention report. Thanks @steipete and @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, report. Thanks @DonnieFi.
    • New pre-migration recovery copies now include older Canvas and Memory files. Existing backups do not gain files they already missed. #169436. Thanks @RomneyDa.
    • Backup SQLite discovery uses the current runtime, so affected Bun installations do not need a separate Node executable for this step. #183476 Thanks @steipete.
    • If you cancel workspace preparation and Git cleanup is uncertain, OpenClaw reports that uncertainty and keeps temporary recovery copies. #184226 Thanks @shakkernerd.
    • Retry temporary Windows package rollback failures and report retained recovery paths when the installed package root is missing (#185160, #187274). Thanks to @liuwqgit, @RomneyDa, and reporter @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). Thanks to @wr-web and reporter @syxscott.
    • Completed supervised updates now appear in update history, allowing eligible earlier migration backups to be cleaned up explicitly while offline (#185392). Thanks to @steipete.
    • Update verification now stops repeating a confirmed access refusal and can check local Gateway readiness when its other safeguards allow it (#185995). Thanks to @Yun-0000 and reporter @lakemike.
    • Retain the selected installed Node runtime and service authority through eligible managed package updates (#187108). Thanks to @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). Thanks to @RomneyDa, @steipete, and @patrick-erichsen.
    • Verified package updates can clean up migration copies that are no longer needed, including copies associated with a recorded restore refusal (#187581). Thanks to @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
    • Recovery checks that a migration backup is still the same file before using it. Commit
    • Offline Doctor and update maintenance can finish cleanup even if an older maintenance policy was retired. Commit
    • 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, thanks to RomneyDa.
    • After repairing the Gateway service, OpenClaw checks the current app autostart setting again. Commit, thanks to 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, thanks to RomneyDa.
  • 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.

    More details
    • 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. Thanks @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. Thanks @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. Thanks @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. Thanks @obviyus.
    • A recovery helper can clear a completed update record blocking an older updater while keeping the record for inspection. Completed receipt recovery, reported macOS blocker, related Linux report. Thanks @steipete, @k94118, @kimjinsuhh, @GoldenrodScript and @neilofneils404.
    • Remove obsolete warnings for completed plugin migrations and keep package-verification time limits steady when the system clock changes. #169004, thanks @steipete, @adenzhou1350, and issue reporter @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, thanks @steipete and @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, thanks @steipete, @kvnloo, and @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, thanks @steipete, @mkdelta221, @waynegault, @clawdgawd, @yoyo837, @lishewen, @nukk-pain, @jullianatolentino, @joshpetras, and @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. #169280. Thanks @RomneyDa.
    • If an update cannot read an optional setting, its warning now says why and leaves the current service unchanged. #169284, report. Thanks @DonnieFi and @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. #169295. Thanks @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, reported in #172391. Thanks to @steipete and @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, thanks @steipete.
    • Doctor no longer drops older channel settings that still await migration while saving unrelated update repairs. #172791, thanks @RomneyDa.
    • An upgrade can replace eligible old Linux Gateway service files with private permissions; a separate Doctor repair still needs your approval. #172790, thanks @obviyus and @wei887-os for the report.
    • Update warnings identify a missing pacman or FreeBSD pkg executable instead of suggesting a database repair for a package manager that is unavailable. #173293, thanks @steipete, @wangmiao0668000666, @sunlit-deng, and @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, thanks @steipete and @yoyo837 for the report.
    • 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, thanks @steipete.
    • A successful update report clears plugin warnings that have been resolved and points to Doctor when more work remains. #173395, thanks @steipete, @DonnieFi, and @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, thanks @steipete and @mwbroxson for the report.
  • Supported update 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.

    More details
    • 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, report. Thanks @obviyus and @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, related report. Thanks @vincentkoc and @creanet-64.
    • The restart check for an update now uses its intended time limit. Update readiness deadline. Thanks @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. Thanks @steipete.
    • Team-managed updates can finish migration verification after Doctor removes an obsolete optional Workshop table. Managed update verification. Thanks @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, report. Thanks @DonnieFi.
    • Windows updates entered through short or differently cased paths keep the files their running updater needs and can clean up abandoned copies. #169292. Thanks @RomneyDa.
    • Windows database-recovery helpers now pass their temporary-folder checks; this does not make every update command available on Windows. #169397. Thanks @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 before using it. #169410, report. Thanks @patrickschiller and @RomneyDa.
    • Git updates clean up their temporary worktree when progress reporting fails and retain the original update error alongside cleanup diagnostics. #169454, report. Thanks @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. Thanks @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, report, related investigation. Thanks @RomneyDa, @holgergruenhagen and @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. Thanks @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. Thanks @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. Thanks @steipete.
    • Managed Team upgrades use the candidate version's Doctor migration when supported; unknown future database versions and downgrades remain blocked. #169752. Thanks @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. Thanks @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. Thanks @romneyda.
    • Update recovery no longer rolls back a verified healthy Gateway after migration and discards its newer saved work. #169841. Thanks @steipete.
    • Supported older Node updaters no longer mistake a clock transition for lost ownership and undo an already activated update. #169915. Thanks @vincentkoc.
    • A Doctor command that never started no longer leaves a false running-process record that blocks another recovery attempt. #169936. Thanks @steipete.
    • Doctor checks deferred until after restart now run against the updated Gateway and report any work they could not finish. #169940, building on #168350. Thanks @steipete and @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 and the report. Thanks @steipete, @xilopaint and @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. Thanks @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, #169050 and #169352. Thanks @steipete, @patrickschiller and @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 and #169918. Thanks @steipete and @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 and #169244. Thanks @steipete, @goutamadwant and @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 and #169462. Thanks @steipete and @jjgao.
    • Doctor can find abandoned updater files that were blocking later npm updates. See #170170 and #169463. Thanks @steipete, @sunnyshu0925 and @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 by RomneyDa. Thanks to DonnieFi for reporting the issue.
    • 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 by RomneyDa. Thanks to DonnieFi for the reports and investigation in #169260 and #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. Thanks to @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. Thanks to @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, reported in #172213. Thanks to @steipete and @homeworld520.
    • Agent data can migrate correctly when updating from 2026.10.5 beta.2 or beta.3 to a main-based build. #172249. Thanks to @RomneyDa.
    • A dev-channel Git update fetches the selected upstream and stops with an explanation if that remote is invalid or excluded. #172199. Thanks to @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, related to #172104. Thanks to @steipete and @warezio.
  • Doctor and common configuration commands do less repeated scanning, and warnings better distinguish a real repair problem from an unchanged or already-settled one.

    More details
    • Read-only Doctor checks no longer repeatedly scan the entire database when no writer is cached. #169745. Thanks @steipete.
    • Doctor repair spends less time rescanning unchanged state while it continues. #169905. Thanks @steipete.
    • Routine configuration reads no longer check the deferred plugin migration ledger. Doctor and managed updates retain pending repair information. PR #170230. Thanks @steipete.
    • Doctor and conversation reads no longer load model-provider connections just to clean up saved transcript checkpoints. #170585. Thanks to steipete.
    • Common openclaw config get, set and validate commands no longer wait for plugin database checks they do not need. #170685. Thanks to steipete.
    • Doctor reuses a valid database check while backing up plugins instead of making you wait for the same scan repeatedly. #170934, report #170773, related #169745. Thanks to @steipete, @rozenpl, and @jb510.
    • Database workers can reuse a valid check when they reopen the same file instead of rescanning it. #167739. Thanks to steipete.
    • Chat turns spend less time on repeated database checks and bookkeeping. #167965. Thanks to steipete.
    • Chat turns and idle pairing checks do less database work; an external supervisor must hold the installation offline before claiming it. #168002. Thanks to 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, related crash report. Thanks @steipete and @3n8.
    • Gateway startup and later worker opens avoid repeated full database scans after index repair. Database checks after index repair, related startup investigation. Thanks @steipete and @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. Thanks @steipete.
    • Node uses its normal compiler settings again; some Mac watcher and certificate-related stalls are still unresolved. Process shutdown. Thanks @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. Thanks @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, related report. Thanks @steipete and @absol89.
    • Vault setup gives the specific correction for invalid secret IDs, including the required path and field format. Vault setup errors. Thanks @nocodet888-arch and @obviyus.
    • Termux can save a database snapshot when the usual filesystem copy path is unavailable. #168629 by @steipete, with thanks to @yxshee for reporting the issue.
    • Doctor can check Telegram and WhatsApp settings without starting their full channel runtimes, reducing unnecessary waiting. #168869 by @steipete.
    • Rechecking an unchanged one-time schedule no longer creates an extra Doctor recovery copy. Actual repairs still keep backups. #168938, thanks @harshitgupta31415 and issue reporter @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, thanks @steipete, @Yun-0000, and issue reporter @amueller80.
    • Doctor cleans up its private plugin inspection copies after checking them (01ead786).
    • Doctor keeps plugin repair and diagnostic steps available until its remaining checks finish (310bce6a).
  • 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.

    More details
    • Older updaters can validate a candidate without rejecting it solely for Doctor bookkeeping changes in #170195. The separate startup hang in #169953 remains unresolved. Thanks @steipete, @maestrokling and @frxiaobei.
    • An update or Doctor repair can retry if another database writer finishes just as it checks for access in #170196. Thanks @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. Thanks @steipete.
    • Managed updates record a refusal and restore the Gateway when a requester's access is revoked while its channel is disabled. PR #170365. Thanks @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, fixing #170331. Thanks @RomneyDa, @DonnieFi for reporting and investigation, and @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. Thanks @steipete, @RomneyDa and reporter @masterdevill.
    • Bun updates no longer carry an already-finished database-copy lock into the next update step. #170519. Thanks to 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. Thanks to steipete for the fix and git-larry-roots for the report.
    • 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. Thanks to 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). Thanks @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, thanks @ericcurtin and @steipete for the report.
    • Prepared source updaters retain database backup helpers before replacing the runtime, avoiding a missing-module failure when creating rollback snapshots. #173587, thanks @vishnusenthil-16 and @hannesrudolph for the report.
    • Update restart preparation waits for a verified new Gateway to publish ownership before treating its startup as a failure. #173588, thanks @obviyus.
    • Gateway and node service changes can check their selected runtime without copying the entire database again. #172500, thanks @vincentkoc.
    • Source updates retain the running updater's modules after activation, avoiding missing-module errors during later update steps. #174867. Thanks @steipete and @vishnusenthil-16.
    • After an authentication rejection, update verification can use local readiness and runtime identity checks and record a warning. #175735. Thanks @steipete and @sesgoe.
    • Update repair reports available Gateway ownership details and the stalled inspection phase when a service check times out. #177560. Thanks @steipete and @sdamian.
    • Doctor started by an update now uses the update's time limit when none is specified separately. #173862. Thanks @steipete and @jsf9789.
    • With --no-restart, an update checks the running build as well as its version before reporting verification. #174649. Thanks @RomneyDa.
    • Setup reports a failed installed Gateway restart and shows recovery commands instead of reporting success. #174767. Thanks @steipete and @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. Thanks @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. Thanks @matthematics1137, @obviyus and @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 · #177059. Thanks @steipete and @BodegaClaw.
  • Restoring a supported older backup keeps its command-approval allowlist instead of turning it into a deny-all policy.

    More details
  • Supported backups and rollback can restore more verified older archives and keep recovery copies when an update cannot safely undo database changes.

    More details
    • 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. PR #170351, reported in #170335. Thanks @DonnieFi and @RomneyDa.
    • Supported older global and agent snapshots can be verified and restored. Newer, inconsistent or wrong-owner snapshots remain refused. #170492. Thanks to steipete for the fix and davidcittadini for the report.
    • Package updates retain unsealed database snapshots for manual recovery after successful activation. The updater performing the update must contain this fix. #170523. Thanks to steipete for the fix and DonnieFi for the report.
    • Updated installers report unsafe recovery-file permissions or a changed update owner before attempting recovery (#170787, #170076). Thanks @steipete, @zrzavywa, and @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, #169829, #170525, #170597). Thanks @steipete, @jjjhenriksen, @AnvinaLI, @sgh6688, @waynegault, @andersgreg, and @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, report #170939, related #153657, #158414 and #168340. Thanks to @steipete and @bamorem.
    • Update status checks current files and session history before showing old migration warnings, so resolved findings can disappear while uncertain ones remain. #177096. Thanks @steipete, @ScientificProgrammer, @jj5638521 and @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. Thanks @RomneyDa and @DonnieFi.
    • Update rehearsal omits the false loopback-only onboarding warning caused by its temporary configuration, while keeping genuine Doctor warnings. #178155. Thanks @steipete and @DonnieFi.
    • Before downloading an incompatible package, an update checks the Gateway's Node version and explains how to change a pinned service runtime (#180769). Thanks @steipete, @sglion777, @Almost-Certified-ops, @billpang1-sketch, @rayluo88 and @jcheng510.
    • Managed source installation repair can handle changed files without turning app autostart back on after you disabled it (#180356). Thanks @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, #170335, #170523). Thanks @RomneyDa and @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). Thanks @steipete and @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). Thanks @steipete and @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). Thanks @steipete and @PonySlayer28.
    • Doctor limits media-repair scans and undoes an in-progress rewrite if it loses maintenance access. #171655 by steipete.
    • Cancelling a Doctor migration can now interrupt its pre-migration backup rather than leaving the backup running unnoticed. #171947 by 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, thanks @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, thanks @zhangguiping-xydt, @steipete, and @mgonto for the related report.
    • SQLite backup listing recognizes Git worktrees and points operators to Git backup history. #176656. Thanks @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. Thanks @RomneyDa and @8bitsforge.
    • Backup imports now reject an invalid file-size count instead of interpreting it as a different size (#178585, #178491). Thanks @YangManBOBO and @obviyus.
  • 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.

    More details
    • A source build no longer fails because a runtime check starts before Control UI files finish publishing. #170455. Thanks to steipete.
    • Repeated starts from a source checkout can reuse compiled modules rather than compiling them again. #170514. Thanks to steipete for the fix and LouisGameDev for the earlier report.
    • 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, #147956). Thanks @RomneyDa, @aniruddhaadak80, and @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, #170724). Thanks @RomneyDa and @shanselman.
    • Update repair and Doctor now wait longer for a force-stopped helper to exit before declaring cleanup uncertain (#170779). Thanks @steipete.
    • Doctor no longer reports a false database-checkpoint failure while another authorized offline maintenance task owns the state (#170783). Thanks @steipete.
    • Explain recovery after a failed Gateway restart preparation or failed embeddings cleanup. The related reports provide context for the broader cleanup (#170826, #40226, #58789, #82712, #103736, #112336, #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.
    • An update can keep checking its state even if it cannot show one temporary progress message; that message may be missing. #170955, related #168493 and #170978 by @steipete.
    • Update processes can exit after finishing instead of remaining open because of migrated work. #170978 by @steipete.
    • Doctor loads valid settings before checking context-engine plugins, avoiding a plugin check based on incomplete configuration. #170984, report #170715 and #170689. Thanks to @steipete and @sasan1200.
    • An explicit openclaw update --timeout now covers both the update and its recovery. Recovery may still be pending while database writes finish. #171077, report #170666. Thanks to @steipete and @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, reports #170774 and #171036. Thanks to @steipete, reporter @homeworld520 and source-audit reporter @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, report #171022. Thanks to @steipete and @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. Thanks to vincentkoc.
  • 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.

    More details
    • 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, #170956). Thanks @RomneyDa, @Rene-F and @steipete.
    • Return a structured JSON error for an invalid update repair channel without changing the configured channel (#180822). Thanks @steipete and @leon-sk668.
    • Escape invalid update-channel values in human and JSON diagnostics so control characters cannot create misleading terminal lines (#181298). Thanks @steipete and @TUARAN.
    • Service inspection now preserves empty command arguments, so Windows tasks and Linux services are checked as they were configured (#181213). Thanks @steipete, @notlakshitha and @aniruddhaadak80.
    • Blocked update messages distinguish retained installation custody from an updater that is still running and suggest status and repair commands. #182774 Thanks @fuller-stack-dev.
    • Source updates on Node or the pinned Bun runtime retain the files they still need while replacing the installation. #183429 Thanks @steipete.
    • Queued service maintenance commands keep their elapsed-time budgets when the system clock changes. #183104 Thanks @SunnyShu0925 and @steipete.
    • Debug logging no longer corrupts JSON results from update checks and Doctor recovery. Checking a candidate still requires a compatible updater. #182850 Thanks @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, thanks to steipete and davidcittadini for reporting.
    • 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 by 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. Thanks @steipete and @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. Thanks @steipete and @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). Thanks @steipete, @kenrohde and @kqtxmaster-boop.
    • Provider registration keeps a default OAuth profile repair when explicit repairs are also declared. #183183 Thanks @steipete.
    • If a terminal hangup interrupts a repair, Doctor attempts to restore the managed Gateway it stopped. #182901 Thanks @steipete and @Null-Bug-Null for the related report.
    • Doctor can bring older conversation text into its current format after reopening the database in #170126. Thanks @steipete.
  • Doctor no longer blocks recovery cleanup with a false warning that the database changed during its inspection.

    More details

    The sidecar-check repair from #186411, adapted for Doctor in #188854. Thanks to @steipete and @kaguranananana for the original work, and @RomneyDa for the adaptation.

  • Fixes supported Bun-only installs leaving the openclaw command unavailable, including when a broken Node command is found first.

    More details
    • 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, missing launcher and Node fallback. Thanks @RomneyDa.
  • Doctor's btrfs repair no longer leaves verified migration backups permanently ineligible for normal cleanup.

    More details
    • 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 by @xydigitLybnnnn and @steipete, with thanks to @farisoftfry for the report.
  • Git backup 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.

    More details
    • Apply --exclude-secrets to PostgreSQL Git exports while retaining the schema needed for restore. #174698. Thanks @steipete and @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. Thanks @art22s, @RomneyDa and @jlapenna.
    • Recognize SQLite databases by header for managed snapshots and unmanaged-copy warnings. #148857, reported in #148796. Thanks to LiuwqGit, steipete, and 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. Thanks to oshaughnessy-junior, RomneyDa, and obviyus.
    • When SQLite backup listing is pointed at a Git backup repository, explain the mismatch and suggest the Git history command. #167935, reported in #167934. Thanks to PollyBot13 and obviyus.
  • 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.

    More details
    • After repairing a conversation, its participant list updates immediately instead of showing old membership. #171481 by steipete.
    • Opening a conversation with pending approvals no longer waits on unrelated database writes before showing them. #171605 by 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 by RomneyDa. Thanks to residentb2b for the report and diagnosis, homeworld520 for the detailed reproduction, and 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, reported in #172000. Thanks to steipete and jeanmonet.
    • An older finished database read no longer interferes with a newer read using the same query (697e5bc1).
    • Creating the first state database can wait briefly when another operation temporarily holds its structure (fa23864b). Thanks to @steipete.
    • Reading conversation details no longer races a simultaneous save of its transcript. Merge commit
    • Accept session context through an alias of the same physical database while continuing to reject a different copied store. Commit, thanks to steipete.
    • A first conversation turn now loads its settings before deciding where to save the transcript. Commit
    • Initializing an unrelated database feature no longer changes who can access a profile. Commit, thanks to joshavant.
    • A completed conversation deletion stays completed after its database worker exits normally. Commit
    • A repaired conversation view now shows the participant information copied during repair. Commit
    • If creating an outdated database is refused, another agent's healthy conversation reads continue. #169895. Thanks @steipete.
    • Queued database work can wait briefly for a temporary structure change without running out of order in #170135. Thanks @steipete.
    • Health checks can connect while conversations load in #170151. Readiness continues to wait for initialization. Thanks @steipete.
    • Reject first-send session creation if the prepared session database was replaced before confirmation (#170716). Thanks @steipete.
    • An existing session-store handle stays with its admitted database if an alias changes, while a fresh lookup resolves the new target. #171375, thanks to 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, thanks to steipete.
    • Agent setup now refuses an old conversation ownership view if the conversation changed while setup ran (e338bef1).
    • A conversation read no longer falsely reports that its data changed when tracking starts mid-read (3a9aef66).
    • The owner of a shared conversation can continue sending turns, and pending-input failures remain visible (f1fbf170).
    • Saving state gets one retry if a handoff removes its lock folder at the same moment (5f925029).
  • 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.

    More details
    • Limits startup read bursts and retries temporary capacity rejections so healthy agents are less likely to remain degraded after a fleet starts. #168638 by @ruel225 and @steipete, with thanks to @609NFT, @wr-web, and @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, thanks @steipete.
    • Restore unmanaged in-process restarts after configuration reload recovery and show the cause of lock reacquisition failures. #169167, thanks @steipete.
    • Session catalog loading can finish when a Unix login shell ignores termination during executable-path discovery. #169507. Thanks @zhangguiping-xydt and @obviyus.
    • Catalog refreshes reuse unchanged installed native ESM plugin modules, avoiding repeated retained copies. Replacing installed source requires a worker restart. #169272, earlier work, related report. Thanks @obviyus, @mcooks-cmd, @svdinu-jpg and @eduherranz.
    • Gateway startup can prepare independent services at the same time instead of waiting for each in sequence. #169328. Thanks @steipete.
    • Starting a built Gateway can reuse compiled modules for that build. #169365. Thanks @steipete.
    • Queued requests can run between plugins loading at startup or reload. One plugin that blocks while loading can still delay them. #169519. Thanks @steipete.
    • A first message can prepare its model while OpenClaw records the workspace starting state. #169592. Thanks @steipete.
    • A restart can reuse verified plugin migration information instead of checking it all again. #169613. Thanks @steipete.
    • After a clean shutdown, startup can reuse an eligible database check; otherwise it performs the full check. #169649. Thanks @steipete.
    • An update can prepare Gateway code before switching versions. If that preparation fails, the Gateway still starts normally without it. #169656. Thanks @steipete.
    • A slow service inspection no longer uses up the connection-check time allowed during Gateway startup. #169787. Thanks @steipete.
    • Saved pinned conversations no longer make startup preparation loop and block the conversation list. #169821. Thanks @steipete.
    • Conversation-saving failures show useful recovery guidance, including complete session-list summaries, in #170048. Thanks @steipete.
    • Usage totals update after conversation compaction; normal shutdown cancellation makes less log noise, and memory indexing does less shutdown work. PR #170239. Thanks @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. Thanks @steipete.
    • Gateway startup no longer gets stuck when an agent database is still preparing as a worker recovers. PR #170348. Thanks @steipete.
    • Gateway startup prepares independent services together and loads its chat connection code before saying it is ready. PR #170401. Thanks @steipete.
    • Your first message can start a conversation even when its configured database has not yet been created. #170464. Thanks to steipete.
    • A first message in a new conversation is no longer refused because an old usage refresh finished. #170572. Thanks to 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. Thanks to steipete.
    • Agent turns and messages between conversations can use the updated runtime after overlapping startup refreshes (#170877, #170762). Thanks @steipete and @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). Thanks @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 by @steipete.
    • Startup checks independent conversations together instead of waiting for each one. #171006, related #170849 and #170933 by @steipete.
    • Conversation views begin preparing while the Gateway connection starts, without skipping readiness checks. #171028 by @steipete.
    • Compatible builds can reuse a verified database check after a clean shutdown, once the updated check has run. #171038 by @steipete.
    • Startup does less recovery work for unrelated saved helper conversations and loads less task data at once. #171046 by @steipete.
    • Recover agent sessions when an overlapping config or secrets refresh replaces startup preparation. #171054, report #171018, related #150755 and #165107. Thanks to @LiuwqGit, @steipete, and @homeworld520.
    • Return a readiness failure while a required agent database is still preparing, with a diagnostic for the affected agent. #171063 by @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, thanks to steipete.
    • Starting the Gateway in a terminal no longer pauses the main process to flush its compiled-code cache. #171358, thanks to steipete.
    • Standalone agent turns using workspace skills prepare their runtime configuration before reading it. #171209, thanks to steipete.
    • Recover a Gateway startup that has not bound its listener for over five minutes with openclaw gateway stop, then retry startup. #171678 by steipete. Thanks to TommyLei666 for reporting the issue.
    • Large fleets avoid repeated directory preparation and scheduling work. #171805 addresses the fleet report, incorporating work from #171778. The separate SQLite store-capacity issue remains. Thanks to Leon-SK668, steipete, chelsealong, and 609NFT.
    • Bun Gateway startup handles SQLite admission timeouts without treating a worker's clock deadline as already expired. #172756, thanks @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, thanks @xialonglee and @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, thanks @steipete and @Jackten for the related report.
    • Plugin loading does less file copying, which may shorten startup or the first response depending on the installation (#180895). Thanks @Roddmason, @steipete and @n572770.
    • Creating a first conversation can proceed even while a usage update waits for database access (6d479f5c).
  • 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 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.

    More details
    • Include the missing workspace manifest in Docker production dependency builds (a2d159ca).
    • 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, platform plan. Thanks @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. Thanks @steipete.
    • Startup and package installation now require stock Bun 1.4.4 or newer. The Bun compatibility guide explains the remaining saved-session and QUIC limitations. #171627 and the updated requirement in #184336. Thanks @steipete and @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, reported in #172355. Thanks to @saftall and @steipete.
    • Source builders can package a standalone Bun-based build. #172384. Thanks to @steipete.
    • Initial setup applies supported changes through the running Gateway and creates starter workspace files when the agent first runs. #185109 Thanks @RomneyDa.
  • 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.

    More details
    • This change does not bring back conversation turns already blocked by a previous context error. Steered conversation context, report. Thanks @steipete and @robertoronderosjr.
    • A previously recorded conversation-context problem now warns once rather than repeating on each later run; blocked turns remain blocked. #167595, related reports #163566 and #135628. Thanks to jalehman, Clode2026, and steipete.
    • Old helper-permission warnings now appear once per run instead of repeating with every recovery check in #170120. Thanks @steipete.
    • Warn once per unchanged oversized bootstrap file, revision and limit while keeping truncation details available in /context. #171074 by @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 by @steipete.
    • Successful Gateway requests under one second no longer fill ordinary logs; failures and slower requests remain visible. #171150 by @steipete.
  • 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.

    More details
    • 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 for the reported 2026.9.4 upgrade. #171164, report #171004. Thanks to @steipete and @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, thanks to steipete and yoyo837 for reporting.

    • Backups identify the database from their saved copy instead of probing the live database while work is being written. #171295, thanks to steipete.

    • Building the Control UI from different source folders no longer produces a false update-check rejection. #171398, thanks to 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 by steipete. Thanks to mwbroxson for reporting the issue.

    • An update can resume its progress display after temporary Doctor maintenance. #171454 by RomneyDa. Thanks to DonnieFi for reporting the issue.

    • Name a failed candidate snapshot check in the update headline and retry guidance. #171457 by RomneyDa. Thanks to DonnieFi for reporting the issue.

    • Keep the openclaw gateway restart reminder when an update with --no-restart changes both core and plugins. #171687 by 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 by steipete. Thanks to fdovarela for reporting the issue.

    • 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 is separate from the Docker image prerequisites. #171991 by steipete, with thanks to reporter kitiyeung and skyzhao1223 for the preflight suggestion.

    • When a repair worker fails, update status now receives a reason instead of an unexplained stop. #171781, addressing #169999. Thanks to 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 follows the narrower Codex probe fix. Thanks to steipete, dtump for the original report, joshpetras for ARM64 corroboration, and cbhawthorne84 for the earlier maintenance report.

    • Asking the setup assistant to diagnose a problem only inspects it. To make repairs, run openclaw doctor --fix on the Gateway computer. #171960, with thanks to co-author 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, reported in #171955. Thanks to steipete and teetee2tone.

    • A native update can continue after Doctor finishes quickly instead of treating its completed check as a failure. #172132 by steipete.

    • Automatic repair now checks whether the Gateway answers before reporting recovery. #167080. Thanks to RomneyDa.

    • Doctor loads its settings before checking plugins, so a non-interactive run no longer reports a false Codex registration error. #170445. Thanks to obviyus.

Was this useful?