On this page

On this page

Release notes

v2026.9.7

v2026.9.7

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

OpenClaw 2026.9.7 is snappier under load and smoother in long conversations, with better update backups and rollback protection, plus fixes for upgrading from 2026.9.5. It also adds OpenAI’s Agents API and Sign in with ChatGPT (Beta), alongside better chat on Mac, iPhone and iPad, and help picking up work after a restart.

Release scale: 2,818 pull requests, 518 direct commits, and 344 contributors.

Installation and Onboarding

Setup reaches the first question sooner and gives clearer guidance when sign-in, pairing, or installation needs attention.

First-run setup

Onboarding starts sooner and explains invalid options and workspace paths more clearly. If you want a workspace without generated starter files, openclaw setup --baseline --skip-bootstrap now remembers that choice and preserves existing files.

If a shared configuration file sets the opposite choice, edit that file directly. For remote setup, omit an unused --workspace path if it is invalid on the computer running setup.

In browser setup, arriving suggestions no longer interrupt your typing. Reloading first-run Model Setup returns to its pending question while the same Gateway stays running, but unsubmitted answers are lost. Cancelling the attempt frees the provider choices once cancellation is confirmed.

Sources and complete change list

Improvements

  • Load only the selected guided, classic, or unattended setup flow #160169.
  • Shorten the animated banner before the first setup prompt #160250.
  • Use one authenticated reachability check when unattended setup explicitly skips daemon installation, retaining health checks for a running Gateway #160168.

Bug fixes

  • Honor and remember baseline skip-bootstrap choices while preserving existing files and shared configuration includes 275d0d4. Thanks @vincentkoc.
  • Preserve numbers, booleans, objects, and null in plugin setup choices without losing neighboring numeric-keyed settings c762b23. Thanks @moerai.
  • Keep temporary model-verification runs out of ordinary chat and session events #155777. Thanks @mertbasar0, @obviyus, and @axiom-ncis.
  • Open and focus the destination chat after an Ask OpenClaw handoff, without transferring the conversation or starting work #155907. Thanks @romneyda.
  • Report unknown or incomplete root options instead of opening setup or terminal chat #159213.
  • Skip startup polling when interactive service installation is declined and no temporary Gateway exists; managed starts and explicit Gateway reuse retain their waits #160307.
  • Reject unusable workspace paths before reset or setup, and identify workspace or Gateway failures without blaming successful AI access #160373.
  • Keep focus on the composer or another active control when onboarding suggestions arrive #160677.
  • Label skipped AI setup as Local setup, reserving Inference ready for a verified model connection #160713.
  • Restore the pending first-run model question after a browser reload on the same running Gateway and release provider choices after confirmed cancellation; unsubmitted answers are not saved, and Gateway restarts retain guarded recovery #160774.

Documentation

  • Clarify setup prerequisites, caller-supplied example inputs, and links to pairing, memory-provider, and recovery instructions 4c9869c. Thanks @vincentkoc.
  • Show setup --baseline in the CLI help example for unattended baseline setup #159214.
Model account sign-in

First-run setup shows detected API keys and tokens again, with clearer sign-in choices. Connect & verify checks your credentials and can select the agent's model. Device-code sign-in no longer ends early because of OpenClaw's shorter timer, though the provider's code can still expire. Custom model addresses must use HTTP or HTTPS, and automated LM Studio setup now explains connection and model-check failures.

You can restart your abandoned sign-in for the same provider and setup target using the same sign-in method. Use the newest sign-in link. Model verification also stops on connection failures without the repeated retries used in ordinary chat, so retry setup yourself after a temporary outage clears.

Sources and complete change list

Bug fixes

  • Keep setup activation alive through the provider's device-code sign-in window #156440.
  • Restore first-run provider cards, detected manual credentials, and distinct login choices #159412. Thanks @stevenlee-oai.
  • Return structured LM Studio setup failures with recovery guidance, a nonzero exit status, and no application of the proposed provider settings #160196.
  • Reject malformed or non-HTTP(S) custom model addresses before interactive credential selection and verification #160301.
  • Replace an abandoned matching provider sign-in for the same owner and setup target, accepting only the latest retry and rejecting old callbacks; protected preparation and credential-saving work remain busy #160574. Thanks @stevenlee-oai.
  • Stop setup verification on refused connections or unreachable names and networks, with recovery guidance for configured provider URLs; routes without an explicit provider base URL may still report a timeout #160813.
Device pairing and permissions

OpenClaw can use your configured public HTTPS address for device join links and QR setup. Used or expired dashboard links now explain how to get a fresh one with openclaw dashboard on the computer running OpenClaw. Links remain single-use and expire after ten minutes. When a browser requests admin access, its Inbox now shows the exact approval command to run on the computer hosting OpenClaw.

Browser access also uses that public address when no allowed-address list is set, including in existing setups. Existing lists still take precedence. Before removing a list, check any other browser addresses you need. If you run OpenClaw in a container, check that its localhost dashboard still opens.

On Android, Request all lets you review optional permissions together and finish setup even if you deny SMS access. Camera and location still have separate on/off switches, and notification-listener access needs a separate Settings step. SMS requires a supported third-party build, a phone-capable device, and Gateway approval. Google Play builds do not support SMS.

Shared networks have more room for simultaneous connection attempts, with the default allowance rising from 32 to 128 pending, unauthenticated connections per IP. That permits more sockets to consume server resources; administrators can lower the allowance. A retry countdown shows when the browser will try again after OpenClaw answers an HTTP check. The busy message does not diagnose the failed connection, so persistent problems still need connection troubleshooting.

Sources and complete change list

Improvements

  • Inherit gateway.publicOrigin for browser access only when allowedOrigins is omitted; explicit lists, including an empty list, override inheritance without disabling other local-origin exceptions, and public-origin changes revoke browser connections no longer allowed #157170.
  • Request eligible Android permissions together without automatically enabling camera or location, and allow setup to finish after SMS denial #159727. Thanks @iwhatsskill.
  • Show commands to reconnect a previously paired node when openclaw connect has no target; the user still runs the commands, and stale pairing needs fresh enrollment #159810.

Bug fixes

  • Use the configured public address as the loopback pairing fallback while preserving explicit, remote, Tailscale, and LAN routes; remote QR setup retains its separate prerequisites #159465.
  • Describe rejected Android and Apple setup codes as no longer valid, with fresh-code guidance instead of assuming expiration #159745. Thanks @iwhatsskill.
  • Distinguish partial SMS read/send access and explain when Android restrictions may prevent granting the missing permission #159747. Thanks @iwhatsskill.
  • Preserve pending node pairing requests when unchanged permission keys arrive in a different order #159759.
  • Show denied users administrator role guidance instead of describing a reachable Gateway as unavailable #159948.
  • Clear rejected dashboard pairing tokens before manual-credential retries and explain fresh-link recovery, including openclaw dashboard --json when browser or clipboard access is unavailable #160684.
  • Show openclaw devices approve <requestId> for a pending browser admin-access request, retaining existing approval rules #160685.
  • Raise the default pending unauthenticated connection allowance per resolved IP from 32 to 128 and show existing retry timing after a verified same-origin HTTP liveness check; restore the old allowance with OPENCLAW_MAX_PREAUTH_CONNECTIONS_PER_IP=32 and restart the Gateway #160814.
Channel setup and settings

You can ask setup chat to remove a setting override and return to the inherited default without changing neighboring settings. Existing approvals still apply. Remote rescue messages cannot make this change, so use your regular agent or the local CLI. Automated channel setup also points to options your selected channel supports when something goes wrong.

After dismissing a completed channel setup, you can start the next without the previous dialog leaving setup occupied. Channel cards refresh automatically once settings are applied, so you do not need to refresh the page to see the updated status.

Sources and complete change list

Bug fixes

  • Give channel-specific help when noninteractive setup cannot use --use-env, while keeping guided setup's interactive-terminal requirement #157551. Thanks @sxh313 and @obviyus.
  • Let the Gateway handle other work while channel setup checks policy after selecting an agent, with configuration ownership rechecked before proceeding #158783.
  • Remove approved configuration overrides through setup or delegated chat, preserve sibling settings, and refuse remote rescue deletion #158873. Thanks @vacinc.
  • Close the completed channel wizard before starting another and wait for pending cancellation without aborting committed setup work #160705.
  • Refresh channel cards after configuration is accepted and prevent slow probes from replacing newer status #160853.
Installation and platform support

Fresh npm installs include a missing dependency that could prevent OpenClaw from starting. Existing services using a supported Bun version keep it during reinstalls and updates unless you have explicitly selected another runtime. The Bun compatibility guide also covers installation on Bun-only machines. Node remains the default for fresh installs when available.

On Windows, the installer reports failure if the terminal still cannot find OpenClaw. Open a new terminal and run openclaw doctor as advised. For Windows source checkouts running under Bun, a startup fix lets OpenClaw open its databases and save device tokens. The FreeBSD installation guide explains the missing native Codex binary and the OpenAI API alternative, which requires an API key and explicit OpenClaw runtime selection. API usage is billed separately from a ChatGPT or Codex subscription. Administrators can also follow a new team server deployment guide.

Sources and complete change list

Bug fixes

  • Report an unusable Windows PATH as an installation failure, preserving catchable PowerShell scriptblock errors and recovery guidance #134406. Thanks @ly85206559 and @fuller-stack-dev.
  • Select source-worker loaders from the running runtime's identity when reusing a renamed Bun or Node executable #158521.
  • Bundle the required Undici dependency alongside patched Proxyline so fresh npm installs and staged update candidates can start #160015.
  • Retain supported recorded Bun service runtimes during reinstalls and update refreshes, with an automatic Bun-only first-install fallback #160189.
  • Open SQLite stores and save device tokens when running TypeScript source under Bun on Windows, without adding Node’s unnecessary loader; built installations were unaffected #160310.

Documentation

  • Explain FreeBSD's native Codex limitation, explicit API runtime selection, and separate API billing #155980. Thanks @vincentkoc and @lucarinaorg.
  • Add a Linux team-server walkthrough covering Cloudflare sign-in, identities, roles, public session links, backups, and verification #157085.
Building from source

You can build and lint an OpenClaw checkout inside another Node.js project using its own dependencies. Failed builds can be retried without manually removing stale locks, and cancelling pnpm openclaw during a rebuild no longer launches the CLI afterward.

The prerelease compiler now supports build hosts on macOS arm64/x64, Linux arm/arm64/x64, and Windows arm64/x64. BSD, AIX, SunOS, and other Linux architectures no longer have compiler packages, so check your build host before upgrading. This restriction concerns building OpenClaw, not running an installed copy.

Local macOS packaging restores the committed Swift dependency versions before preparing each build, avoiding dependency drift when reusing a build cache. If a later step changes a dependency, the error names the changed version.

Sources and complete change list

Bug fixes

  • Finish Linux help generation when owned descendants have exited but await reaping, while still refusing live or unobservable work #158448. Thanks @vincentkoc.
  • Explain uncomparable installer versions before replacement and reject linked plugin-build output paths that could redirect writes or cleanup outside dist #159199.
  • Release source-build ownership after completed failures and reject invalid build arguments without starting work #160059.
  • Honor cancellation during source rebuilds and lock waits, without launching the CLI or recording cancelled preparation as complete #160172. Thanks @romneyda, @vyctorbrzezowski, and @jalehman.
  • Restore committed Swift dependency pins before creating the local macOS package snapshot and identify later pin changes in errors #160809.

Limits and compatibility

  • Support nested source builds with checkout-owned declaration inputs, using TypeScript 7.1.0-dev.20260917.1 and its narrower native build-host coverage #158674.

Web UI

Long conversations in the Control UI scroll more smoothly and load older messages with fewer pauses, alongside improvements to writing and navigating between chats.

Conversation sidebar

The sidebar’s Filter & sort panel brings filtering and display choices together. Pinned chats stay in Pages across agents, and saved forks stay beneath their parent conversation after a restart. Unnamed heartbeat chats are hidden unless you choose Show system sessions.

Sources and complete change list

Improvements

  • Organize sidebar filters and display settings together #150605. Thanks @vyctorbrzezowski.
  • Keep chat search compact and centered #155963. Thanks @vyctorbrzezowski.
  • Avoid blocking disk reads during agent-list refreshes #158404.
  • Show agent identity in dashboard conversation tabs #158547. Thanks @vyctorbrzezowski.
  • Refresh conversation branches without rescanning ordinary appends #159309.
  • Bound waits for slow session-catalog providers #159457. Thanks @giangthb.

Bug fixes

  • Keep renamed conversations visible after confirmation, even when an older refresh arrives #160579.
  • Correct unusual-name fallbacks and clear removed-IP location details 4f62a433.
  • Clarify sidebar loading and empty personal filters #146968. Thanks @vincentkoc.
  • Keep deleted session groups from reappearing #155288. Thanks @vyctorbrzezowski, @fuller-stack-dev, @vincentkoc, @shakkernerd.
  • Center workspace preview icons and the now-retired Task Stop control #155857. Thanks @hxy91819.
  • Show live activity for directly loaded sessions #156462. Thanks @vincentkoc.
  • Allow selecting groups named __new-group__ #156822. Thanks @vyctorbrzezowski, @fuller-stack-dev, @vincentkoc, @shakkernerd.
  • Keep queued messages and live activity in conversation order #156843.
  • Show full failures in compact session hover cards #156918. Thanks @patrick-erichsen.
  • Keep bulk deletion tied to selected conversations across refreshes #157035.
  • Preserve agent pins when another tab resizes the sidebar #157049.
  • Remove stale child counts after archiving conversations #157068.
  • Discard stale session previews after metadata changes #157122. Thanks @vincentkoc.
  • Preserve split-pane titles across agent switches #157482.
  • Align sidebar counts and preserve label space #157890. Thanks @vincentkoc.
  • Suppress stale outbox errors and handle unusual device capabilities #158683.
  • Keep saved forks beneath their parent conversation #158835.
  • Prevent duplicate explicit session labels and rejected-fork history #158839.
  • Keep sidebar menus closed when returning from Settings #158870.
  • Keep parent conversation links in Incognito forks #158927.
  • Refresh open session hovercards when displayed details change #159557.
  • Keep pinned sessions in Pages when showing all agents #160225. Thanks @vyctorbrzezowski.
  • Hide unnamed heartbeat sessions from conversation lists #160367. Thanks @liuwqgit, @obviyus, @wanweiinmod.
New chat settings

New chats can start with the selected agent’s configured model and reasoning defaults, while still letting you choose different settings for a draft. This is optional; remembering your last choice remains the default. Update the Gateway and UI together, then refresh or reconnect before enabling it.

Guests with session-write access can create and control their own chats. Full permission mode, sandbox changes, and changes to an existing chat’s context window still require an administrator.

Sources and complete change list

Improvements

  • Start fresh sessions from configured agent defaults #156866. Thanks @vincentkoc.
  • Avoid repeated history rendering during session startup #159562.

Bug fixes

  • Preserve the chosen runtime in Auto and new-worktree sessions, and distinguish retained drafts from already-created sessions in recovery errors #160547. Thanks @vincentkoc.
  • Preserve chat settings during session creation #154807.
  • Enable permitted Guest session creation, settings and Stop controls #155565. Thanks @shakkernerd.
  • Wait for current agent defaults before starting sessions #156281. Thanks @vincentkoc.
  • Save Current checkout defaults before the first Git commit; managed Worktrees still require one #156516.
  • Keep named worktrees visible after closing the picker #157570. Thanks @romneyda.
  • Accept simultaneous first messages in shared conversations #159371. Thanks @chopin-op60, @obviyus, @vyctorbrzezowski.
Long conversations and tables

Long conversations have fewer pauses when you type, scroll, or load older messages, and preserve your reading position as content arrives. Chat tables wrap more clearly, with Copy and Expand below the content. Resumed work keeps consecutive tool activity in one expandable log.

Block-streamed replies keep table headers and rows together when the table fits the configured streaming size limit. Larger tables can still split, and individual channels retain their own message limits.

Sources and complete change list

Improvements

  • Reduce browser styling work as replies stream, without changing the interface appearance #160833.
  • Reuse unchanged conversation structure while long replies stream #160837.
  • Reduce extra rendering while typing and streaming #156355.
  • Make chat tables easier to read #156750.
  • Remove redundant completed-compaction subtitles #157169.
  • Skip unnecessary history scans for voice-caption reconciliation #157179. Thanks @vincentkoc.
  • Reuse completed Markdown blocks in long streamed replies #158439.
  • Reduce repeated display processing of long streamed replies #158489.
  • Reduce pauses when switching table-heavy chats #158930.
  • Cache completed lists while long replies stream #158943.
  • Reduce browser restyling during chat updates and switches #159293.
  • Reduce scrolling stalls in long conversations #159400.
  • Reduce browser work while chat replies stream #159806.
  • Reduce position-rail restyling during chat updates #159910.
  • Move table controls below content and retain latest-reply visibility #159924. Thanks @vyctorbrzezowski.
  • Reduce stalls when loading older tool-heavy chat history #160030.
  • Reduce repeated link-preview work in long chats #160050.
  • Reduce repeated preparation when loading older chat history #160215.
  • Reduce Control UI styling work during chat and navigation #160241.
  • Reduce repeated work when rendering chat Markdown #160294.
  • Reduce initial conversation rendering work #160298.

Bug fixes

  • Keep fitting tables together during block streaming; oversized tables can still have headerless continuations #160701. Thanks @obviyus, @giodl73-repo.
  • Keep long-chat typing responsive and preserve reading position d51f3607. Thanks @marvinthebored, @jalehman, @peetiegonzalez, Peter Steinberger.
  • Align chat spacing and mobile message footers #151453. Thanks @vyctorbrzezowski, @iwhatsskill.
  • Keep reading position while older activity loads #151736. Thanks @vyctorbrzezowski, @romneyda.
  • Preserve reading positions across retained conversations #154554. Thanks @vincentkoc.
  • Size desktop chat tables to their content #156874. Thanks @vyctorbrzezowski.
  • Remove blank gaps in nested tool activity #156921. Thanks @vyctorbrzezowski, @iwhatsskill.
  • Preserve column order in expanded chat tables #156947.
  • Prevent chat freezes from unfinished reply markers #158337. Thanks @fuller-stack-dev.
  • Preserve input-method Escape while tooltips are open #159171.
  • Keep short values readable in narrow chat tables #159283.
  • Restore smooth scrolling in long conversations #159294.
  • Keep transcript end-follow state current while scrolling #159469.
  • Keep completed answer timestamps stable after reload #159581.
  • Keep late-growing replies above the composer dock #159955.
  • Keep resumed task activity in one expandable work log #159997.
  • Prevent chat jumps and prompt flicker when sending #160109. Thanks @vyctorbrzezowski.
  • Fix rapid clicks on chat expand controls #160249. Thanks @vyctorbrzezowski.
  • Keep chat navigation markers visible in right-to-left interfaces #160681.
  • Keep the history rail highlighted over its preview #160722. Thanks @vyctorbrzezowski.
Live reply streaming

Live replies use less network traffic by sending new text instead of repeatedly sending the whole answer. Updated bundled clients assemble the reply as it arrives.

Third-party raw clients must adopt the updated streaming contract, even though the protocol still reports version 4. Custom SDK transports also need the documented event-ordering changes. Older clients can lose reply text, and reconnect recovery cannot always restore a complete answer.

Sources and complete change list

Limits and compatibility

  • Send incremental live text and require raw-client reconstruction and reconnect migration #158587.
Conversation recovery

Split panes restore their own conversations after reload, and chats follow history changes made in another tab while keeping unsent drafts. Quoted reply drafts also retain their selected quote. Removed queued messages stay hidden after reconnect, though their stored content is not erased.

If OpenClaw warns that a stopped reply could not be saved, copy its visible text before leaving.

Sources and complete change list

Improvements

  • Move archived-history preparation off the Gateway thread d0d95b6b.
  • Reduce work in archived conversation searches #156665.
  • Hide the empty outbox notice while drafting offline #156914. Thanks @patrick-erichsen.
  • Avoid sorting stalls for large pending chat inputs #158449.
  • Move artifact and durable transcript reads off the Gateway thread #158450.
  • Reduce repeated byte-counting during chat-history catch-up #158469.
  • Stagger automatic Gateway reconnection attempts #158536.
  • Keep session lists responsive during large history reads #159328.
  • Load saved conversations earlier on reload #159408.
  • Reduce large-history allocation, with slower completion in the measured workload #159585.
  • Prepare history workers for first reads; an in-flight warmup can delay shutdown #159818.
  • Request fresh chat history sooner on reload #159877.

Bug fixes

  • Avoid duplicate chat lookups during connection da1cb32b. Thanks Peter Steinberger.
  • Warn when a stopped reply cannot be saved #133194. Thanks @zengwen-dt, @shakkernerd, @ruel225, @marvinthebored.
  • Show restart recovery as a system notice while resuming #155269. Thanks @jalehman, @vyctorbrzezowski, @vincentkoc.
  • Keep context-usage popups visible beyond narrow chat panes #155616.
  • Recover brief session contention and explain chat busy states #156067. Thanks @jalehman.
  • Keep completed answers visible above collapsed work #156474.
  • Prevent duplicate replies after Stop #156623.
  • Preserve steering after reconnect and expose queued follow-ups #157135.
  • Show one clear outcome after interrupted restart recovery #157210.
  • Place the working indicator below a restored first message #157708. Thanks @fuller-stack-dev.
  • Label saved interrupted replies; an earlier completed reply in the same run can still be mislabeled #158206.
  • Restore quoted replies with WebChat drafts #158335.
  • Ask before binding ambiguous restored split-pane conversations #158639.
  • Ignore unrelated pending-request data during paired reconnects #158665.
  • Wait for Gateway resume before retrying identity reads #158779.
  • Preserve composing drafts when browser tabs become hidden #158801.
  • Keep verified interface assets and unchanged session baselines #158825.
  • Restore conversation history in every split pane after reload #158953.
  • Recover chat history after resets and rebuilds #159163.
  • Keep transcript reads available during agent-registry refreshes #159208.
  • Keep history reads valid when agent databases reopen #159248.
  • Keep open chats synchronized after another tab changes history #159318.
  • Keep deleted-session cleanup on its Gateway; switches or timeouts leave drafts, and an initially unknown identity retains a reconnect limitation #159341.
  • Hide confirmed removed queue items after reconnect while retaining stored cancellation records #159503.
  • Release closed chat panes and refresh once on reconnect #160079.

Documentation

  • Translate restart-recovery outcome notices #157244.
Background chat previews

Sidebar previews send fewer updates while your open chat keeps its full live reply stream. Hidden browser tabs also stop receiving sidebar-only activity. If you use a custom SDK client, update the Gateway alongside the SDK to keep live subscriptions working.

Sources and complete change list

Improvements

  • Keep cached session lists when adding, changing, or removing the Talk realtime model #159545.
  • Reuse pending sidebar preview timers without delaying the latest text #160769.
  • Reuse automation reads and CPU identity; CPU topology changes require a restart #155686. Thanks @vincentkoc.
  • Reduce Control UI work during session updates and streaming #156196.
  • Share ten-second status polls; disk samples can be thirty seconds old after refresh #156335.
  • Avoid redundant session-list requests for placement updates #157562.
  • Reduce Git subprocesses during session PR polling #158065.
  • Reduce repeated session-update work across concurrent viewers #158408.
  • Reduce paired-device database work during reconnect #158425.
  • Spread automatic session-list refreshes across browsers #158589.
  • Pause sidebar activity streams in hidden browser tabs #158751.
  • Reuse unchanged session metadata across active views #158756.
  • Keep sidebar live subscriptions stable as recency changes #158985.
  • Avoid repeated comparisons of unchanged session rows #159069.
  • Reduce repeated parent-session data in live updates #159152.
  • Reduce session-list polling work during streamed replies #159153.
  • Avoid rebuilding session lists after unrelated configuration changes #159155.
  • Reuse identical authorized session updates across recipients #159456.
  • Skip unchanged model observations in session-list updates #159460.
  • Avoid blocking the Gateway during successful cold PATH discovery #159472.
  • Reuse ancestor preparation across Control UI viewers #159475.
  • Reduce repeated session lookups across connected clients #159595.
  • Keep member lists independent of large history reads and repair the subsequently retired Task publication path #159710.
  • Prioritize hovered-session prefetch; canceled hover can still accelerate unrelated warming #159878.
  • Reuse session catalog planning across unchanged polls #159900.
  • Reduce chat-rendering work with large session lists #160045.
  • Reduce duplicate session-detail requests during chat navigation #160148.
  • Reduce redundant Control UI reply streaming #160186.
  • Use confirmed read receipts without roster reloads, with remaining ordering risk if a change event is lost #160328.

Bug fixes

  • Stop status timers when sidebars are removed d73dab32.
  • Avoid redundant sidebar refreshes after rapid updates f00add28. Thanks Peter Steinberger.
  • Retry failed sidebar subscription cleanup without losing ownership #158794.
  • Keep chat metadata available through ordinary session updates #158979.
  • Reserve request capacity for message-subscription bursts #159467.
  • Pace sidebar narration retries after temporary failures #159495.
  • Pace failed sidebar cleanup and renew returning subscriptions #159564.
  • Reduce repeated session-list refreshes and restore parent context #159647.
  • Preserve the newest session sidebar on warm reload #159880.
  • Avoid repeated session-list reloads after recap updates #159994.

Limits and compatibility

  • Prepare initial session rows before readiness; later row-read failures can prevent startup #159286.
  • Stop idle sidebar Git polling; unopened sessions can lack PR badges until viewed #159390.
  • Pace background previews while preserving full foreground streams; update the Gateway alongside newer SDK clients #160002. Thanks @iwhatsskill.
Steering and Stop controls

You can steer active work even when an older message is waiting as a follow-up. People with the same permissions can also steer shared turns, including across devices using the same shared Owner token. Steering does not interrupt running tools and remains unavailable for Incognito and cloud-worker turns. A ready follow-up replaces Stop with Send, Queue, or Steer; clear the draft to bring Stop back. Stop remains available for drafts that cannot send, except during active dictation.

In shared turns, specify whose screen or theme should change. Other personal settings need a new personal turn. The original owner’s permissions, approvals, and provider account still apply.

Sources and complete change list

Improvements

  • Let equal-permission participants steer shared turns #159850.

Bug fixes

  • Restore shared-token Owner steering across devices and progress refresh into the active parent turn #160830.
  • Keep pending inputs below saved conversation history #155897.
  • Restore contrast for mobile composer action icons #155951. Thanks @vyctorbrzezowski.
  • Keep preparing Home attachments across page and dock switches #157013.
  • Recover chat drafts from stalled attachments #157019. Thanks @masterswords1, @brucemccurdy, @obviyus.
  • Keep Stop available while attachments or drafts cannot send #157703. Thanks @vincentkoc.
  • Preserve live output while clearing abandoned chat state #158434.
  • Restore eligible active-turn steering and clear consumed queued messages #158699. Thanks @nianjiuzst, @sxh313, @anyech, @aatreya, @geokec.
  • Preserve consecutive pending chat message order #160240. Thanks @vyctorbrzezowski.
  • Recover Stop targeting when chat retains an inactive run #160596. Thanks @vyctorbrzezowski.
Work summaries and progress cards

Agent commentary stays beside its tool activity, and work summaries distinguish skipped tools from failures or approval requests. During a run, the activity row keeps a readable tool purpose visible between calls, normally giving you three seconds to read it. Failures, blocks, and completion appear immediately.

Progress cards remember whether you left them open during the current visit. With write access, you can dismiss any card, including unfinished or note-only progress, without stopping the agent; later progress may create another one.

Sources and complete change list

Improvements

  • Keep tool purposes readable between calls, with immediate failure and completion feedback #160881.
  • Coalesce progress refreshes and preserve dismissal ordering #153213. Thanks @jjjhenriksen, @patrick-erichsen, @noelillinger.
  • Keep agent narration inline and avatars top-aligned #156926. Thanks @vyctorbrzezowski, @vincentkoc.
  • Show filesystem paths in tool details and diagnostics while retaining credential masking #157059.
  • Show total tool calls alongside failures #157904. Thanks @romneyda.
  • Align chat composer status bar heights #160016.

Bug fixes

  • Remove unfinished and note-only progress cards when dismissed, preserving newer agent updates #160867. Thanks @laurencebrown.
  • Preserve progress around questions and avoid false drafts from read-only file searches #152665. Thanks @vyctorbrzezowski, @vincentkoc.
  • Keep progress cards as the reader left them #155326. Thanks @vyctorbrzezowski.
  • Clarify tool preview availability and loading states #156887.
  • Count nested tool operations once in activity summaries #157438.
  • Collapse progress cards after delayed scroll observations #158153.
  • Distinguish skipped tools from blocked or failed activity #159502.
  • Avoid redundant comment-pin layout and show disabled state #159559.
  • Dismiss saved progress in every card state #160126.

Limits and compatibility

  • Historical queued-subagent status updates in the subsequently retired Tasks interface #156681. Thanks @vincentkoc.
Goal controls

Goal controls stay with the right conversation while it opens and explain rejected changes or failed outcome checks. Starting a new Goal also keeps older failed messages separate, with their own Retry action.

Sources and complete change list

Bug fixes

  • Keep mobile goal controls above expanded objectives #155789. Thanks @vyctorbrzezowski.
  • Display rejected goal-action errors and refresh dependencies #156363.
  • Show errors when checking unconfirmed goal changes #158021. Thanks @olli0103, @matuno, @obviyus.
  • Keep older failed messages out of new Goal drafts #158382.
  • Reduce session-list allocations and preserve Goal recovery during startup #160198.
Personal instructions

On shared Gateways with at least two individual profiles, you can edit your personal instructions in Profile or through authenticated chat. Individual sign-in is required for separate personal files; a shared Owner login edits the shared profile. This works in local agent workspaces, with a 4,000-character limit and existing prompt limits. Single-user setups still use the main USER.md file. Save before closing the browser, and avoid editing the same file elsewhere at the same time.

Sources and complete change list

Improvements

  • Edit personal instructions in Profile settings or chat #155256. Thanks @vacinc.
Settings errors and drafts

When Settings rejects a change, it explains why and keeps your edits available to correct or retry. Discard draft and reload restores saved settings and removes all unsaved configuration edits. If a save’s result is uncertain, return to the original Gateway to retry or discard it. Follow any Apply or restart instructions before expecting a saved change to take effect.

Sources and complete change list

Improvements

  • Discard rejected Settings drafts from the notice #157742.

Bug fixes

  • Show inherited automation and plugin defaults correctly #141548. Thanks @nkeil, @obviyus, @johnfink8.
  • Return to the previous workspace when leaving Settings #156204.
  • Preserve forbidden fields in composed configuration schemas #156436.
  • Preserve uncertain Settings writes and bind retries to their Gateway #157053.
  • Retry saved Settings changes without stale revision conflicts #157065.
  • Explain rejected Settings changes without losing drafts #157549. Thanks @shakkernerd, @donniefi.
  • Keep rejected settings explanations when opening saved configuration #157731. Thanks @shakkernerd.
  • Remove duplicate headings from named plugin maps; standalone root maps can still lose their heading #157732. Thanks @patrick-erichsen.
  • Keep settings editable and focused after saves #157737. Thanks @patrick-erichsen.
  • Correct proposal date groups and tool-access displays #158846.
File drafts and previews

If an update blocks the editor, Review file drafts lets you copy or download unsaved work. Keep anything you need before explicitly discarding drafts and refreshing. Copying alone does not unlock refresh, and a manual browser reload or tab closure still loses these drafts. Incognito drafts have the same memory-only limit.

File editing also preserves multiline paste and updates Review after saving. Remote workspace files can be previewed, but those previews are read-only.

Sources and complete change list

Improvements

  • Speed up agent-file editing with Preview closed #159902. Thanks @vyctorbrzezowski.

Bug fixes

  • Block application-controlled reloads while file edits remain unsaved #156208.
  • Reduce chat layout work and false unsaved-file drafts #156210. Thanks @vincentkoc.
  • Refresh file details and Review diffs after saving workspace edits #156327.
  • Clear hidden drafts after read-only file reloads #156340. Thanks @vincentkoc.
  • Protect drafts during competing file creation; unsupported remote providers require an update or host-side creation #157020.
  • Preserve file line endings when pasting multiline text #157998.
  • Preserve unsent Incognito drafts during automatic updates #158213.
  • Recover unsaved file drafts before refreshing after an update #159414.
  • Avoid no-changes claims for incomplete Review results #159529.
  • Preview remote files read-only; later directory pages may outlive revoked access and older nodes can require extra listing work #159895. Thanks @kimiyu-186.

Documentation

  • Correct Files panel navigation guidance #130596.

Limits and compatibility

  • Move file-edit planning to workers; unavailable planning fails before writes and active rename scans may delay quota detection #158443.
PDFs and image attachments

PDF attachments hosted by your OpenClaw instance can open beside chat, keeping your page and zoom when their link renews. Preview supports files up to 16 MiB; external PDFs, Office files, and unavailable previews use downloads. Oversized static PNGs up to 25 megapixels can be resized locally for upload while keeping transparency. Oversized animated PNGs are rejected rather than converted to a still image.

Ordinary chat and new-chat submissions now check the combined attachment size before sending and keep your draft if it is too large. PNGs being resized can reserve more space than they eventually need, so try a smaller batch if they are rejected. Large pasted-text cards also have a visible X to remove an accidental paste without disturbing the rest of your draft.

Sources and complete change list

Improvements

  • Remove pasted-text attachments directly from their composer cards #160834. Thanks @patrick-erichsen.
  • Read PDF attachments beside your conversation #148399. Thanks @jjjhenriksen, @vyctorbrzezowski.
  • Move between expanded videos in one chat turn #154051. Thanks @vyctorbrzezowski.
  • Defer offscreen chat image requests #155370. Thanks @vincentkoc.
  • Load offscreen file-card details on demand without losing keyboard focus #155623. Thanks @vincentkoc.
  • Avoid unnecessary parsing when listing conversation images #158371.
  • Move large-upload preparation to workers and honor cancellation; automatic overload retry remains unsupported #158420.
  • Share audio/video inspections and preserve outgoing attachments under load #158548.
  • Prepare large artifact downloads outside the Gateway thread #158583.
  • Speed up repeated artifact lists for unchanged sessions #159537.
  • Resize oversized static PNG attachments in chat #159960. Thanks @vyctorbrzezowski.

Bug fixes

  • Check combined attachment sizes and preserve ordinary drafts; recovered startup and pending-placement New Session submissions remain excluded #160071.
  • Preserve protected egress for attachments with international filenames #156166. Thanks @siri1410, @obviyus, @lisheguo.
  • Preserve original attachment download names #156588.
  • Restore pasted-text previews before sending #157390.
  • Keep startup file cards separate from the text bubble #158700. Thanks @vyctorbrzezowski.
  • Restore reply previews for media-only assistant messages #158701. Thanks @vyctorbrzezowski.
  • Preserve uploaded image filenames in chat history #159216.
  • Reuse loaded chat images when scrolling back #159486. Thanks @vyctorbrzezowski.
Camera preview

Take photo opens a local camera preview so you can capture, retake, and confirm a photo before attaching it. Confirmation adds it to your draft without sending it. Live preview needs HTTPS or localhost and camera permission; if permission is denied, choose Retry or Upload photo.

Sources and complete change list

Improvements

  • Preview, capture and confirm camera photos; permission denial offers retry or upload rather than native capture #160253.
Side chat selections and images

Select a passage and choose Ask in side chat to add an optional, editable comment without replacing your existing draft. The passage and comment share a 16,000-character limit and accompany only the current question, so select the passage again for a later question.

You can drop or paste images into Side chat for the current question. Choose an image-capable utility model, then use Retry if the previous model could not read the image. Images are not saved in restored history, so reattach them for later questions. Compatible CLI setups without direct provider credentials also gain a text-only fallback, without tools or images.

Sources and complete change list

Improvements

  • Add editable comments to selected passages for the current Side chat question #160747. Thanks @patrick-erichsen.
  • Ask Side chat about dropped or pasted images #156840. Thanks @patrick-erichsen.
  • Remove automatic summaries from Side chat #156892. Thanks @patrick-erichsen.

Bug fixes

  • Explain unsupported Side chat images and preserve Retry #156900. Thanks @patrick-erichsen.
  • Preserve Side chat input during delayed updates #156990.
  • Offer Side chat fallback without direct API credentials #157474. Thanks @rogeriochaves, @obviyus, @sidboswell.
Model picker and usage

Large model lists are more responsive to search, and the picker opens to the selected model’s provider. Usage keeps previous totals visible while refreshing and lets you retry failures. Doctor reports incomplete totals; request usage again to retry. If Cmd+K returns no models, check model settings for provider-refresh problems.

Sources and complete change list

Improvements

  • Group Decision model choices by provider #155301. Thanks @jalehman.
  • Keep model caches across unrelated metadata updates #157254.
  • Remove routine model-picker hover tooltips #158697. Thanks @vyctorbrzezowski.
  • Reduce pauses when searching large model lists #159905. Thanks @vyctorbrzezowski.

Bug fixes

  • Show model search results while other categories load #151022. Thanks @obviyus.
  • Bound memory use when refreshing large-session usage totals #156937. Thanks @conan-scott.
  • Keep usage totals visible through background refresh #157270. Thanks @vincentkoc.
  • Keep metadata and model lists available during unrelated session changes #158576.
  • Align model-picker search text with reading direction #159937. Thanks @vyctorbrzezowski.
  • Show the selected model when opening the chat model picker #160132.

Limits and compatibility

  • Remove catalog-refresh warnings from Cmd+K, including empty results; diagnostics remain on model pages #160221. Thanks @vyctorbrzezowski.
Online people and running chats

The Online sidebar distinguishes recent interaction from simply being connected and now includes your own account. Compact rows show each person’s accessible open and running conversations. The expanded list orders Active, Idle, then unknown activity, with people running work first and names alphabetical within each group. Count sorting, the running-only filter, and aggregate totals have been removed. Quiet reading can show as Idle, and Running excludes queued work and work running only in child conversations.

Sources and complete change list

Improvements

  • Show compact Online rows with fixed presence and running-work ordering #160140. Thanks @vyctorbrzezowski, @vacinc.
  • Reduce database work for human-mention suggestions #158481.
  • Reduce repeated presence work for concurrent viewers #158497.
  • Reuse prepared assistant identities and prevent stale avatar cache replacement #158597.
  • Reduce unrelated typing-state scans and expire idle groups #158649.
  • Reduce presence traffic when many tabs connect #158942.
  • Distinguish online connectivity from recent person activity #159493.
  • Show open and running conversations beside online people #160022.
  • Reduce presence traffic during browser join bursts #160150.

Bug fixes

  • Keep idle dots amber in Online, session groups, Activity, and person cards across light and dark themes #160759. Thanks @vyctorbrzezowski, @obviyus.
  • Align chat mention avatars with names #155969. Thanks @vyctorbrzezowski.
  • Recover chat viewer presence after a lost acknowledgement #156255. Thanks @vincentkoc.
  • Publish client presence after the handshake succeeds #159554.
  • Include your own account in the Online sidebar #160618. Thanks @vacinc.
Shared draft previews

Shared chats show two full draft previews and summarize additional people typing in a compact row. Paused previews fade away, and resumed typing keeps its place. These are temporary previews of unsent text, not saved messages.

Sources and complete change list

Improvements

  • Pace collaborator previews and discard obsolete queued drafts #158552.
  • Simplify collaborator draft labels and idle expiry #159235. Thanks @vyctorbrzezowski.
  • Keep collaborator typing previews compact in busy chats #159263. Thanks @vyctorbrzezowski, @shakkernerd.

Bug fixes

  • Keep collaborator drafts visible during typing pauses #157100. Thanks @patrick-erichsen.
Profile access

Profile explains your current access and offers Reconnect after an administrator changes it. Guests can view and refresh their own profile without gaining editing rights or access to the People roster. Some guests still see initials because profile photos have separate permissions.

Sources and complete change list

Improvements

  • Explain current connection access in Profile #156304. Thanks @vincentkoc.
  • Improve sign-in pages, disabled-button styling, Mac reconnect and voice controls, and Approvals layout #157251.
  • Load saved avatars through workers, retaining the distinct-profile overload limit #158445.

Bug fixes

  • Reuse saved avatars and return retryable overload responses; automatic browser retry is not added #158676.
  • Keep long hostnames inside the sign-in card #159899. Thanks @iwhatsskill.
  • Show guests their own Control UI profile #160503. Thanks @shakkernerd.
Unread chats and notifications

A conversation can gain an unread marker when work finishes after your last read. Inbox mentions and update cards have consistent expand and dismiss controls, and browser notification settings avoid a background-loading delay that could leave them waiting.

Reviewing a failed-delivery alert clears its Inbox entry and badge while keeping the draft for an explicit retry or discard. Check the draft after retrying, since a later failure may not produce a fresh alert; a dismissed alert can also return after a full reload.

Sources and complete change list

Improvements

  • Align Inbox notification ages and controls #156560. Thanks @vincentkoc.
  • Batch Web Push recipient preparation #158595.

Bug fixes

  • Correct heading size and spacing in empty Inbox tabs #160724. Thanks @vyctorbrzezowski.
  • Clear reviewed delivery alerts without resending or deleting drafts; reload and failed-retry alert handling retain known limitations #160822. Thanks @stevenlee-oai.
  • Mark newly completed visible sessions unread #155690. Thanks @hxy91819.
  • Keep approval state scoped to the current Gateway and omit undiscovered model setup options #158032.
  • Reschedule mention expiry after clock rollback #158614.
  • Keep chat subscriptions stable during unrelated approval activity #158633.
  • Keep notification settings responsive during background preparation #159709.
Today overview and Live Activity

Activity’s Today overview follows your filters and counts matching sessions beyond the first page, placing each at its latest activity hour.

Live Activity now records only while its view and browser tab are visible, for up to 100 accessible active sessions. It misses activity while you are elsewhere and starts empty after you leave the page and return. Raw Debug history likewise starts when diagnostics open and disappears when the last diagnostic view closes.

Sources and complete change list

Improvements

  • Avoid unnecessary Activity rendering outside Live #156206.
  • Reduce Live Activity rendering overhead #157952.
  • Reuse resident recap facts; matching keys in multiple stores can still select the wrong store #158803.
  • Add a Today overview to Activity sessions #159611.

Bug fixes

  • Preserve Activity recaps across session-list refreshes 8cea9e99. Thanks Peter Steinberger.
  • Publish ready Activity recaps during unrelated refreshes #154907.
  • Generate Activity recaps for visible agent-created chats #159458.

Limits and compatibility

  • Capture raw Debug events only while diagnostics are open, with no earlier-event lookback #158533.
  • Capture Live Activity only while visible, without off-page backfill or retention across page visits #158574.
Working branch and pull request

PR previews follow the chat’s working branch, so an incidental PR link no longer creates a banner. Branch and CI previews disappear on detached or default-branch checkouts. Sidebar badges may not appear until you open a chat, and mobile chat now shows the working branch before a PR exists.

Sources and complete change list

Improvements

  • Reduce repeated work in pull-request updates #158302.
  • Reuse unchanged worktree branch suggestions #158399.
  • Skip redundant Git ancestry checks for matching branch tips #159301.

Bug fixes

  • Recover stalled pull-request status subscriptions #156310. Thanks @vincentkoc.
  • Release PR-panel caches when preparing viewers leave #157776.
  • Show the working branch in mobile chat #160597. Thanks @vyctorbrzezowski.

Limits and compatibility

  • Show branch-owned PR banners only; detached and default checkouts no longer retain them #158578. Thanks @vyctorbrzezowski.
Worker failure recovery

After a worker fails, you can continue the same conversation by sending another message once cleanup and workspace recovery finish. The replacement uses the original device or cloud profile and keeps the history and last saved workspace. The interrupted turn is not replayed, and unsynced files may be lost. Setup failures or unavailable destinations still need the displayed recovery steps; use Restart session to choose another destination.

Sources and complete change list

Bug fixes

  • Continue conversations after recoverable worker failures a7ded174.
Cloud worker pool

Administrators can open Cloud workers → Pool in Settings → Connections to see which workers are ready, preparing, or need attention, and how much reserve capacity is occupied. Cleanup can keep a slot occupied after use. Change limits in Profiles.

Sources and complete change list

Improvements

  • Show cloud worker readiness and occupied capacity in Settings #157200.
Dashboards, desktops, and widgets

Returning to a chat can reopen its existing desktop or live browser tab. Dashboard gallery navigation also keeps widget interactions when you return, though a browser reload still clears unsaved state. Self-contained HTML and SVG widgets can now use up to 10 MiB including their wrapper; registered-source widgets and Discord keep their smaller limits.

Sources and complete change list

Improvements

  • Reveal existing desktops and browsers when returning to chat b8929c45. Thanks @vincentkoc, Peter Steinberger.
  • Allow wrapped HTML and SVG widgets up to 10 MiB while retaining smaller registered-source and Discord limits #159970.

Bug fixes

  • Stop repeated canvas refresh requests when permission is denied, while retaining retries for temporary failures #160808.
  • Reduce Workboard stalls when loading or refreshing labeled cards #156150. Thanks @sunlit-deng, @obviyus, @sonofakel.
  • Preserve dashboard widget state when returning through the gallery #156288.
  • Align desktop headers with sidebar controls #156432. Thanks @vincentkoc.
  • Keep HTML widget padding when maximized #157203.
  • Keep session previews available during unchanged metadata updates #157943.
  • Correct Desktop panel fullscreen ownership #160277.
Browser Talk

Browser Talk can continue through brief connection stalls and asks you to repeat speech if audio was dropped. The in-call voice dropdown has been removed. Set future-call defaults in Settings → Talk, or ask the assistant to change the current call’s voice. Native iOS and Android voice controls are unchanged.

Sources and complete change list

Bug fixes

  • Open microphone setup while chat history loads; starting Talk still waits for history #160686.
  • Keep Talk calls running through brief stalls and explain dropped speech #155839. Thanks @marvinthebored, @peetiegonzalez, @obviyus.

Limits and compatibility

  • Remove the browser in-call voice dropdown; Settings chooses future defaults and the assistant can change an active call #159441.
Plugin pages and settings

Installed plugins open directly from command-palette results, and installation status stays visible during catalog refreshes. If Plugins Advanced settings fail to load after connecting, Reload can try again. Opening a disabled plugin’s page does not enable it.

Installed plugin pages now show account and credential setup, with Connect, Configure, and Edit actions for supported shared MCP sign-ins and web-search or web-fetch credentials. Sign-in requires administrator access, and Connect is disabled when browser sign-in is unavailable. Connected and Configured describe saved setup, not a live service or working-key check.

Sources and complete change list

Improvements

  • Show supported account sign-ins and declared web-search or web-fetch credentials on installed plugin pages #160092. Thanks @patrick-erichsen.
  • Give official plugin logos consistent white tiles #158745. Thanks @patrick-erichsen.

Bug fixes

  • Disable plugin Connect when the Gateway cannot start browser sign-in #160761. Thanks @patrick-erichsen.
  • Keep plugin installation status open during catalog refresh 14a1f931. Thanks @joshavant.
  • Place plugin hub titles above navigation tabs #155192. Thanks @patrick-erichsen.
  • Open installed plugin overviews from command palette results #157405.
  • Keep plugin sidebar selection aligned with navigation #157717. Thanks @patrick-erichsen, @jalehman.
  • Recover Plugins Advanced settings after connection or schema failures #158734. Thanks @nianjiuzst, @obviyus, @nz365guy.
  • Use the OpenAI company icon for Agents API #158744. Thanks @patrick-erichsen.
Themes and keyboard controls

More menus, panels, and embedded apps follow your selected colors. Keyboard users get clearer focus and shortcut hints, with improved access to sidebar, file, and media controls. High-contrast indicators also improve in the affected controls; imported palettes still use their supplied colors.

Sources and complete change list

Improvements

  • Improve keyboard access, screen-reader feedback and contrast across the Control UI #156050.
  • Align close and dismiss icons across web interfaces #159914. Thanks @vyctorbrzezowski.
  • Soften sidebar, queued-message and conversation edges #159915. Thanks @vyctorbrzezowski.
  • Align and clarify keyboard shortcut hints #159925. Thanks @vyctorbrzezowski.
  • Soften artwork behind chat side-panel cards #160234. Thanks @vyctorbrzezowski.

Bug fixes

  • Release popup listeners after removal #156725.
  • Remove a tooltip exception retention path #157226. Thanks @vincentkoc.
  • Keep chat progress-card focus corners visible #157829. Thanks @romneyda.
  • Match inactive switches to the theme and center their thumbs #159868. Thanks @vyctorbrzezowski.
  • Make menu and control details follow the selected theme #160555. Thanks @vyctorbrzezowski.
  • Make Desktop viewer margins follow theme changes #160557. Thanks @vyctorbrzezowski.
  • Keep chat context warnings in sync with theme colors #160564. Thanks @vyctorbrzezowski.
  • Refresh embedded app colors after theme loading #160565. Thanks @vyctorbrzezowski.
  • Keep action colors and indicators readable across themes #160568. Thanks @vyctorbrzezowski.
  • Keep panels and content on the selected palette #160569. Thanks @vyctorbrzezowski.
Mobile chat layout

Phone layouts give conversation titles more room and keep the New Session message box within reach. Menus and composers adapt to the space your browser reports around the keyboard, as explained in the mobile layout guidance. Filter sheets also stay open when you tap their headings or padding.

Sources and complete change list

Bug fixes

  • Give mobile sidebar session titles more room #160366. Thanks @vyctorbrzezowski.
  • Align mobile margins and keyboard-aware safe areas #160388. Thanks @hxy91819.
  • Keep mobile filters open and preserve command suggestions #160600. Thanks @vyctorbrzezowski.
  • Keep the New Session message box reachable on phones #160603. Thanks @vyctorbrzezowski.
Page loading and diagrams

The interface downloads less page-specific content at startup, and automatic chat titles wait until the first reply is underway. Diagrams return to Mermaid 11.17.2, so Mermaid 12-only diagram types and built-in ELK layout are unavailable, and some connectors may look different.

Sources and complete change list

Improvements

  • Load file-detail text with file previews 1c9ffa53. Thanks Peter Steinberger.
  • Prepare common Control UI requests during idle time 430ea3c6.
  • Defer Profile editor text until its page loads 46b698a6. Thanks Peter Steinberger.
  • Load focused browser views on demand ec00e584. Thanks Peter Steinberger.
  • Load Labs descriptions only when needed #157297.
  • Defer MCP text from initial Control UI loading #157942.
  • Defer full command-palette styles until opening #157973.
  • Share bundled UI assets and move cold reads to workers #158464.
  • Load automation starter text when needed #158482. Thanks @romneyda.
  • Avoid duplicate reads while preparing automatic session titles #158648.
  • Avoid redundant theme updates when switching chats #159269.
  • Defer automatic chat titles until reply progress #160251.

Bug fixes

  • Make dashboard loading feedback visible across themes #158096. Thanks @vincentkoc.

Limits and compatibility

  • Defer Settings labels and restore Mermaid 11.17.2, removing Mermaid 12-only diagrams and built-in ELK layout #157161. Thanks @vincentkoc.
Updated translations

Translation records for 20 existing languages include current settings, camera, and chat guidance, including messages for recovering unsaved drafts. No new languages are added.

Sources and complete change list

Documentation

  • Refresh localized inbound-message batching help 5807e3bb. Thanks Peter Steinberger.
  • Refresh localized update-reporting instructions #155912.
  • Translate current UI help and controls in 20 existing languages #156005.
  • Clarify localized webhook URL error guidance #156159.
  • Translate the unsaved-file reload warning #156260.
  • Refresh Control UI translations in 20 languages #156404.
  • Refresh session-access translations #156559.
  • Refresh access and browser-help translations; the Simplified Chinese Profile details label still contains an internal identifier #156596.
  • Refresh tool-preview and Side chat translations #156960.
  • Refresh Control UI translations in existing languages #157573.
  • Translate Settings rejection feedback into 20 languages #157710.
  • Translate file-draft recovery and pane-position messages #159461.
  • Refresh translations for online and recent activity #159519.
  • Refresh translated upload controls and chat preferences #160031.
  • Translate Gateway access-denial guidance in 20 locales #160104.
  • Refresh Control UI camera translation records #160357.
  • Translate the browser card's Open in OpenClaw label #160578.
  • Refresh translations for pairing recovery and chat labels #160726.
Log filtering

Filtering large diagnostic logs takes less browser work, helping the Logs view stay responsive while you search. Downloads and automatic following keep their existing behavior.

Sources and complete change list

Bug fixes

  • Keep Logs filtering responsive with many entries #151822. Thanks @vyctorbrzezowski.

Updates and Maintenance

Verified backups cover more agent databases, and automatic database rollback is available for eligible updates that fail before the new version is allowed to start. Check the migration notes below if you use an older installation or a retired feature.

Backups and rollback

New verified backups check that every database recorded during capture is present, including discovered custom and moved agent databases. Older archives may have unknown completeness. Make and verify a full backup before updating; a config-only export is not a recovery backup. Automatic rollback has limits. Database restoration requires a capture made while OpenClaw was stopped, with the new version never started and no unaccounted later writes. Changed or incompletely captured configuration files may also need manual recovery.

The new updater removes its database snapshots after a verified successful update. Failed or unverified updates retain them and may leave OpenClaw stopped. Check the update reports before manually deleting older snapshots; Doctor only reports them. Snapshot capture needs substantial free disk space and can block an otherwise compatible update. These protections cannot add missing backups to an update already run by an older updater.

Sources and complete change list

Improvements

  • Verify that new backups contain every database recorded at capture #156211 — Thanks @fuller-stack-dev.
  • Reduce redundant backup database-discovery work while preserving worktree files #156465 — Thanks @patrick-erichsen.
  • Avoid per-file durability work for disposable plugin rehearsal copies #156793
  • Retain verified database snapshots for eligible pre-start package rollback and expand agent-backup coverage #158163 — Thanks @blyszcz, @mmartoccia, @joshbunker.
  • Clone disposable plugin snapshots where supported while retaining copy fallback #159427
  • Remove current-update database snapshots only after verified successful activation and report older copies #160348

Bug fixes

  • Rehearse legacy execution approvals before activation when the installed updater supports it #153406 — Thanks @romneyda.
  • Keep new POSIX package-to-Git builds on destination storage #155689 — Thanks @vincentkoc.
  • Retry backup scratch allocation after concurrent temporary-directory cleanup #155947
  • Preserve private recovery receipts across update progress writes without exposing them in public reports #156298 — Thanks @fuller-stack-dev.
  • Create and verify Windows backups with equivalent database path aliases #157301 — Thanks @ericcaiwx-star, @takhoffman, @tsw-uop.
  • Take consistent update snapshots while WAL-mode databases receive writes and expose copy progress #158317 — Thanks @nickfost.
  • Find older pnpm updater copies and managed-service temporary directories for Doctor review #160164 — Thanks @vincentkoc.
  • Restore eligible Doctor-edited config includes after package-update failure #160443 — Thanks @fuller-stack-dev.

Documentation

  • Clarify config-only exports and their exclusions when active configuration is malformed #159259
Tasks and TaskFlow removal

Tasks and TaskFlow panels, commands, and APIs are removed. Use subagent controls, ACP sessions, background processes, Cron history, or Lobster pipelines for their respective work. Conversation transcripts, Workboard, and generated-media completion remain available. Plugin authors must migrate from the removed Task interfaces; subagent wait and cancel calls now use runId and runIds. TaskFlow Webhooks have no equivalent HTTP replacement.

After replacing OpenClaw manually, run openclaw doctor --fix before starting it. Existing Task and Flow records are preserved, but some Codex assignments need manual migration. Review plugin permissions after Webhooks repair. If repair disables plugins or reports conflicting IDs, choose the allowed plugins before re-enabling them.

Sources and complete change list

Earlier Tasks-specific changes below describe work superseded by the final retirement. Their source records remain included for the complete change list.

Limits and compatibility

  • Historical Tasks notification fix for concurrent updates, superseded by Tasks retirement ce1ab3d624f4 — Thanks Peter Steinberger.
  • Historical Tasks list concurrency repair, superseded by Tasks retirement #156030
  • Historical completed-Task listener cleanup, superseded by Tasks retirement #156111
  • Historical reduction of unrelated Tasks-history reads, superseded by Tasks retirement #156183
  • Historical reduction of repeated Tasks maintenance checks, superseded by Tasks retirement #156321
  • Historical Task transcript source-attribution repair, superseded by Tasks-panel retirement #156487
  • Historical Tasks pagination reason codes, superseded by Tasks API retirement #156631
  • Historical compact Task-detail Back button, superseded by Tasks-panel retirement #156927 — Thanks @patrick-erichsen.
  • Bound historical Task-completion navigation to its original Gateway and account #157103
  • Historical retained Task-transcript previews after child cleanup, superseded by Tasks retirement #157247
  • Historical Codex background-command Tasks integration and Stop controls, superseded by Tasks retirement #158038
  • Retire global Tasks navigation; preserve prompt handoff, navigation-retry attachments, and modified-arrow editing fixes #158217
  • Remove TaskFlow Webhooks endpoints and repair stale settings while retaining explicit plugin grants for review #158225
  • Historical asynchronous harness Task-completion repair, superseded by Tasks runtime retirement #158520 — Thanks @vincentkoc.
  • Remove Tasks and TaskFlow commands, APIs, SDK surfaces, and panels; migrate native subagents to run selectors #159179
  • Historical active-only running-Task preview, superseded by Tasks-panel retirement #159388
Tool Search migration

Tool Search now uses separate search, description, and call tools. Its older JavaScript tool, tool_search_code, is removed; use Code Mode for JavaScript orchestration. Normal updates migrate the retired settings. After a manual upgrade or deferred repair, run openclaw doctor --fix before restarting, or the old settings will prevent startup. Disabled Tool Search stays disabled.

Sources and complete change list

Documentation

  • Clarify deferred Tool Search repair and use current nested-call names #159962

Limits and compatibility

  • Retire Tool Search code mode and migrate its settings to structured controls #159398
Upgrading pre-June installations

Installations older than June 2026 must upgrade through 2026.9.5 before installing the latest version. Make and verify a backup, stop OpenClaw, and follow that guide using the same account, profile, and installation paths. Run openclaw doctor --fix in 2026.9.5 and resolve import problems before continuing. Required plugins and channels must be enabled for their imports. If a newer version has already changed your databases, follow the compatible-backup recovery steps before downgrading.

Manual upgrades and custom container entrypoints need a Doctor repair step before startup; official container entrypoints handle it automatically. If repair is deferred, resolve the reported problem and rerun openclaw update repair.

Sources and complete change list

Bug fixes

  • Report safe pre-write repair deferrals and stop repeating completed migration warnings; historical Tasks event ordering is superseded by retirement #155389 — Thanks @johnnyjrizzo, @mattash.
  • Preserve and flush legacy workspace setup archives correctly on Windows #156704

Limits and compatibility

  • Move legacy repair to Doctor, with automatic activation in official containers 2a1402cd3e39
  • Require the 2026.9.5 bridge for pre-June installations; remove MCP attachments_fetch limit and its history fallback #156285
  • Migrate retired heartbeat, llm, embeddedPi, embeddedHarness, and sandbox.perSession settings through 2026.9.5 #156859
  • Retire pre-June channel-state and shared credentials/oauth.json imports with the 2026.9.5 bridge; retain supported auth JSON imports #157165
Interrupted package updates

Supported POSIX npm updates print a recovery command before replacing OpenClaw. If the updater disappears, that command can repair the package and launcher. Stop other package managers first, then start OpenClaw and check it after recovery. The helper does not restore your data or plugins and does not support Windows, pnpm, or Bun update paths.

Updates now keep a successfully verified installation if only the final report fails. Update work also has no default time limit when --timeout is omitted, so stalled work may need cancellation. These changes apply when the new updater is running.

Sources and complete change list

Improvements

  • Let supported staged packages assess update compatibility, with an installed-check override #155632
  • Provide external recovery for supported POSIX npm package publication and recognize bunfig.toml global roots #158491 — Thanks @fuller-stack-dev, @cjn119-ui.

Bug fixes

  • Load update-recovery service code only when needed 5de949fc4620 — Thanks Peter Steinberger.
  • Preserve remaining update recovery files after filesystem ownership refusal #148890 — Thanks @vincentkoc.
  • Preserve a confirmed predecessor Gateway exit during update handoff #156056
  • Retain updater files on suitable source storage, handle mixed links and copies, and clarify step progress #156227 — Thanks @vincentkoc.
  • Skip unnecessary startup polling when an update fails before activation #156523 — Thanks @vincentkoc.
  • Preserve original CLI errors after installation replacement, including cleanup failures #156646
  • Release automatic repair-agent resources before requested maintenance #157733 — Thanks @fuller-stack-dev, @donniefi.
  • Clean recognized retained updater runtimes and avoid hardlinking plugin safety files #157752 — Thanks @donniefi.
  • Prevent false process-cleanup failures and reconcile saved update reports #157970 — Thanks @fuller-stack-dev.
  • Clear applying status when its exact update run finishes #158006 — Thanks @vincentkoc.
  • Keep verified installations in place when final reporting fails #159072
  • Finish already-current updates with explicit deferred-maintenance warnings and retain cleanup leftovers #159193 — Thanks @sarahliyanage, @xiaozishan, @dragomirdimitrov-mmrndm, @journey417, @h94916, @fulgerulnegru.
  • Keep automatic-update campaigns with their originating Gateway lifecycle #159306
  • Refuse stale update-lock release without disturbing the replacement record #160288

Limits and compatibility

  • Make update work deadlines opt-in while retaining bounded safety checks #153236 — Thanks @fuller-stack-dev.
  • Stop update schema checks when their owned inspection snapshot cannot be cleaned up #156265 — Thanks @fuller-stack-dev.
  • Expose previous-Gateway verification and cleanup waits with their timeout and rollback limits #157329 — Thanks @wg-mojo, @romneyda.
  • Extend progressing candidate startup within a finite ceiling and retain stricter readiness refusals #159504 — Thanks @securecloudprojo, @jefrh1.
Source installation updates

Source updates now rebuild missing or stale program files even when the source is already current. They also check for build locks and conflicting worktrees before stopping OpenClaw. If an older updater gets stuck, use the manual source-update procedure from an external terminal. Confirm all associated compiler processes have stopped before releasing a build lock. Rollback may leave OpenClaw stopped when local changes prevent restoring the previous source.

When the installed updater includes this fix, an eligible failed Git update can restore the previous version even without usable branch history. It leaves the checkout detached at the previous commit and the branch at the failed candidate. Follow the branch repair instructions in the rollback report before continuing work on that branch.

Sources and complete change list

Improvements

  • Reduce allocation work in native build artifact validation #156219 — Thanks @jalehman.
  • Reduce source-loading work during legacy channel ownership repair #156238
  • Reduce name-lookup work in Git source-build artifact checks #157480
  • Reduce reference-staging work during Git update inspection #157567
  • Generate parent node-command help from available metadata during source builds #157586
  • Reuse shared JavaScript import scans during candidate-build validation #158296

Bug fixes

  • Run fresh verification after same-commit Git rebuilds 3813c048eb7b — Thanks @mikywang.
  • Protect discovered live Gateways during source rebuilds and re-enable verified Windows tasks on explicit start d09ffd222826 — Thanks @donniefi.
  • Reject changed configuration before unnecessary Git candidate checks #155656 — Thanks @vincentkoc.
  • Rebuild stale Git runtimes even when the source revision is already current #156996 — Thanks @donniefi.
  • Limit Git update checks to the intended upstream and preserve truthful comparison results #157432
  • Check npm update ownership at the resolved installation rather than an unrelated shell prefix #158285 — Thanks @nomisfi.
  • Exclude incidental abandoned runtime staging from Git dependency scans while preserving its files #158338 — Thanks @jalehman.
  • Check relevant Git worktree branch reservations before candidate preparation and shutdown #158446 — Thanks @patrick-erichsen.
  • Check retained source-build locks before stopping the Gateway #158849 — Thanks @hannesrudolph.
  • Rebuild incomplete current-source runtimes and expose local artifact readiness #158931 — Thanks @shakkernerd.
  • Retain source updater dependencies across eligible retired workspace links #159035 — Thanks @shakkernerd.
  • Preserve local work and worktree-held branches during retained Git rollback #160170
  • Retain build ownership when recording uncertain compiler cleanup fails #160176 — Thanks @vincentkoc.
  • Restore eligible Git updates on a detached checkout when branch history is unavailable, with guarded branch repair guidance #160828

Documentation

  • Tell source-rebuild callers to retry their original command #160206

Limits and compatibility

  • Refuse the macOS live-updater helper on other platforms before changing Git 34757eb29845 — Thanks @donniefi.
Bun and Node updates

Bun installations running the new updater can update, repair, and run Doctor without adding Node, while keeping an explicitly selected Bun runtime. Follow the Bun setup guide for a first installation. Updaters through 2026.9.6 still need the documented workaround for their first Bun-only upgrade. Run Doctor and repair from the installation used by your Gateway.

On macOS and Linux, Bun headless nodes running the fixed updater can prepare later automatic updates without Node or npm. Windows still requires npm. Bun release discovery and OpenClaw package downloads use public npm even when npm is configured with a private mirror. If your installation requires that mirror, disable nodeHost.autoUpdate.enabled and use your normal update process. Node-based services can also recover from a missing Node executable by selecting a supported replacement; custom wrappers need their own repair.

Headless nodes using the default plugins can now activate a prepared update when idle. Nodes running published 2026.9.6 need one manual openclaw update followed by openclaw node restart to receive this repair. For foreground nodes, stop and restart openclaw node run instead. Follow the node update recovery guidance; running work, plugins that cannot report whether they are idle, and database compatibility checks can still defer automatic activation.

Sources and complete change list

The npm requirement in the earlier Bun discovery change below is superseded on macOS and Linux by the later preparation fix.

Improvements

  • Refresh dependencies, preserve plugin and Teams compatibility, and update rootless Node provisioning #157238

Bug fixes

  • Select a supported replacement for a missing direct-Node update runtime #158016 — Thanks @olli0103, @obviyus, @coygeek.
  • Keep Bun-invoked repair maintenance on the invoking Bun executable #158195
  • Prevent recursive Bun config-reader children and preserve synchronous read results #158451 — Thanks @hannesrudolph.
  • Support fixed Bun-only maintenance and correct Bun/pnpm candidate staging #159431
  • Preserve a managed Bun Gateway’s installation and runtime pin across supported updates #160495
  • Prepare subsequent Bun headless-node updates without npm on macOS and Linux; Windows retains the npm requirement #160575
  • Let idle headless nodes with default plugins activate prepared updates after the one-time manual update and restart from 2026.9.6 #160790

Limits and compatibility

  • Discover Bun headless-node releases through the public registry while installation still requires npm #160154
Plugin installation repair

Doctor keeps existing plugin files until their replacements are recorded and can finish deferred migrations after installing missing plugins. It can also repair archive-installed plugin links without the original archive. If an older updater hits the affected import.meta error, follow the disable, update, and re-enable steps. After an update, run openclaw completion --write-state if you want plugin commands included in shell completion.

After a completed plugin migration, openclaw doctor --fix can clear repeated warnings about retained source files by archiving leftover history pointers. The imported conversations stay in place, and the archived files remain recoverable.

Sources and complete change list

Improvements

  • Identify differing session metadata fields during retained-source recovery #156162 — Thanks @redxzeta, @zhiyuan82-tech, @liuxb553-panda, @alexanderfyuan-design.
  • Inspect declared plugin migration data before legacy update rehearsals #156326 — Thanks @fuller-stack-dev.
  • Prepare plugin-snapshot parent directories once before copying #158562 — Thanks @vincentkoc.
  • Avoid repeated directory work in portable plugin snapshot copying #159245

Bug fixes

  • Complete workspace migration after repairing legacy plugin installation records d069a6cfd884 — Thanks @fuller-stack-dev.
  • Keep read-only Doctor inspections from leaving later native plugin loads dependent on deleted diagnostic files 25df9ed0f581
  • Repair missing runtime plugins using release policy and reject mismatched npm packages #119857 — Thanks @vincentkoc, @mrclawfield, @thoth-ctl, @brokemac79, @romneyda, @haldana88, @agentsolomon, @jumpunder, @reyesadrian.
  • Preserve existing plugin files until replacement records commit #147827 — Thanks @vincentkoc, @fuller-stack-dev.
  • Refresh deferred session-migration plans after installing missing plugins #155827 — Thanks @vincentkoc.
  • Keep completed core session imports available while preserving conflicting plugin sources #156052 — Thanks @liuxb553-panda, @zhiyuan82-tech, @ozp, @redxzeta, @funklawfirm-dotcom.
  • Distinguish verified unrelated Node services during eligible plugin-capture cleanup #157102 — Thanks @xilopaint.
  • Retain the selected plugin inventory through startup session repair #157479 — Thanks @jscd98, @torsie.
  • Inspect valid import.meta assignments in plugin dependencies and name remaining parse failures #157862 — Thanks @obviyus.
  • Repair registered archive-plugin host links without the original archive #158002
  • Restore configured model limits without a discovery deadlock after failed plugin publication #158194
  • Defer external Reef migration data during rehearsal and preserve malformed Workboard attachment records #158847
  • Permit eligible macOS capture cleanup beside unreadable foreign-account processes #159370 — Thanks @bdjben.
  • Avoid false WhatsApp source-change refusals from capture-owned hardlinks #159650
  • Prefer explicitly bundled matching plugins over eligible stale managed npm copies #160099
  • Archive leftover history pointers after successful plugin migration so retained-source warnings clear #160755 — Thanks @obviyus, @spikewillcocks.

Limits and compatibility

  • Avoid duplicate completion plugin loading; automatic update refresh remains core-only #160546
Conversation history recovery

Doctor can recover more saved conversation history, including verified transcripts whose old index is missing. Reimporting a restored index preserves newer conversation names, pins, and history. Stop OpenClaw and make a verified backup before repairing history. Keep recovery manifests with the original files and follow Doctor's instructions when it reports conflicts or unknown deletion history; damaged or missing history is not always recoverable.

Sources and complete change list

Improvements

  • Repair eligible database index damage explicitly with Doctor edf43e816304 — Thanks @martinxomag.
  • Avoid repeated Doctor media-repair detection and aggregate scans #156299

Bug fixes

  • Preserve held databases when deletion history is missing c6b21f6f086a — Thanks @joshpetras.
  • Preserve legacy ACP session ownership and refuse conflicting imports #155791 — Thanks @vincentkoc.
  • Keep unreadable legacy session history in place for explicit repair #156105 — Thanks @joshavant.
  • Summarize repeated historical archive warnings while retaining complete JSON findings #156551 — Thanks @nianjiuzst, @aalmann.
  • Require valid ownership configuration before rebuilding missing deletion history #157037 — Thanks @joshpetras.
  • Resume history-budget cleanup after temporary database contention #157064
  • Retry brief database maintenance contention and expose observed Linux holder details #157121
  • Preserve current session metadata during recorded restored-index reimport #157615 — Thanks @vincentkoc.
  • Import eligible legacy device identities without native filesystem moves #157690 — Thanks @masterswords1, @iwhatsskill, @bappamp4.
  • Deduplicate session actions, skip malformed legacy media rows, and verify the selected plugin runtime artifact #158487
  • Discover configured historical agent stores before Doctor migration and refuse unverified deletion history #158584 — Thanks @609nft.
  • Keep unchanged retained session archives usable after volume remounts #158842 — Thanks @leon-sk668, @auriga-agents.
  • Settle legacy transcripts already contained in SQLite and import only safe missing suffixes #158857 — Thanks @timothyfs.
  • Restore unchanged retained archives after device-number changes #159176
  • Reclaim provably dead process-bound migration leases when Doctor repair resumes #159345 — Thanks @desksk, @noblevision, @islandpreneur007.
  • Recover verified indexless history and preserve imported originals #159561 — Thanks @pmika, @caseyjustus, @as76, @609nft, @wzkagms.
  • Refuse retired database paths instead of recreating old files #159834
  • Retire stale database workers before replacement work without replaying writes #159944 — Thanks @vincentkoc.
  • Retain Doctor ownership while relocating a legacy state directory #159965

Limits and compatibility

  • Hold legacy session imports into existing databases when deletion history is unknown #160129
Gateway service recovery

Service checks distinguish a slow start from a stopped or unverified Gateway, and Linux systemd recovery handles more services left offline after updates. Recheck deep status when startup is still pending. System-wide Linux package updates still require you to restart the service yourself. Standalone doctor --fix may now start a service for the current installation even if you deliberately stopped it before repair.

On macOS, updates can refresh a recognized old service PATH. This may remove ~/bin, ~/.nix-profile/bin, ~/.volta/bin, ~/.asdf/shims, and fnm alias directories unless they contain the active runtime. If a CLI tool, MCP server, or skill stops finding a command, give it the command's absolute path. Custom PATH settings remain protected.

Sources and complete change list

Improvements

  • Separate routine selection notices from warnings, group paused Crabbox captures, and identify failed Team Reports sources #157075
  • Report observed slow Gateway startup as still-starting with exit code 2 #157596 — Thanks @obviyus, @pollybot13.
  • Reduce repeated macOS process-launch work during updater retention #157954 — Thanks @fuller-stack-dev.

Bug fixes

  • Inspect registered Gateway services and report incomplete discovery 244d44197232
  • Share service-inspection deadlines and distinguish unknown from stopped 47a9e77007f7 — Thanks @vincentkoc, @jalehman, @romneyda.
  • Respect external Gateway ownership in Doctor health checks 8e2b3edec608 — Thanks Peter Steinberger.
  • Avoid repeated unchanged-database copies during Gateway restoration 942a27def95d — Thanks @fuller-stack-dev, Peter Steinberger.
  • Keep Linux service actions and duplicate cleanup on the selected installation #119674 — Thanks @sebtardif, @fuller-stack-dev, @jordannewell.
  • Handle protected macOS service definitions during supported activation checks #149307 — Thanks @pollybot13, @patrick-erichsen, @bitkylin, @texasaggie1.
  • Report verified local Gateway absence without spending the startup wait #154637
  • Verify attempted update restarts and preserve Linux service PATH order #155355
  • Preserve restart intent when the updated macOS controller stops the Gateway #155433 — Thanks @fuller-stack-dev.
  • Stop supported predecessor Gateways for candidate Doctor and restore the matching service, including with no-restart #156138
  • Wait for admitted Doctor work and service restoration after handled interruptions #156854 — Thanks @cbhawthorne84.
  • Carry verified updater authority into macOS service activation #156972 — Thanks @hannesrudolph.
  • Explain when update repair leaves an already-stopped Gateway offline #157134 — Thanks @romneyda.
  • Prevent installation-watcher restarts from competing with suspended host updates #157213 — Thanks @jalehman, @vincentkoc, @romneyda.
  • Preserve authenticated suspension-progress polling during supported restart phases #157258
  • Retain safe Windows Task Scheduler failure details in update reports #157719
  • Recover managed updates from specifically verified stale June Gateways #157756
  • Report known causes of managed Gateway restart-health failures #157892 — Thanks @vincentkoc.
  • Report remaining matching Linux user services after confirmed duplicate cleanup #158034
  • Continue Gateway status probing when native service files are unreadable #158218
  • Preserve authorized managed-helper run identity during candidate inspection #159010 — Thanks @obviyus.
  • Allow delayed heartbeat workers up to 60 seconds to initialize within valid lease limits #159405
  • Keep unavailable startup reads eligible for supervisor retry without treating them as empty configuration #159598
  • Require explicit updater-cleanup confirmation before system-service replacement #160135 — Thanks @fuller-stack-dev.
  • Preserve network health-check time after slow update-recovery inspection #160393
  • Restore Gateway startup with --force on Linux hosts whose IPv6 loopback is disabled, while retaining checks for actual listeners #160802 — Thanks @obviyus, @aicyberg.

Limits and compatibility

  • Permit writable Linux system-service package updates with an operator-managed restart #156584 — Thanks @ion-developing.
  • Recover eligible managed services and start an already-stopped current-installation Gateway after standalone Doctor repair #159577 — Thanks @matuno, @donniefi, @navras98, @dmwtech.
  • Refresh exactly recognized historical macOS service PATH values with tool-path migration guidance #160424 — Thanks @ayushdevo, @obviyus, @lukewd.
Windows service updates

Windows updates and Doctor handle Scheduled Tasks more consistently, including graceful restart and recovery from temporary database sharing errors. If a restart result says it is unverified, check the Gateway before assuming it is online. An update stranded by an older updater may still need openclaw update repair from the installed version.

Sources and complete change list

Bug fixes

  • Find Windows Startup-folder Gateways by their exact launchers 733ceac1a7ea — Thanks @donniefi.
  • Avoid old-runtime state reads during Windows update finalizer handoff #157262 — Thanks @joshbunker.
  • Recognize omitted Windows Scheduled Task defaults during Doctor and refresh checks #158422
  • Attempt graceful Windows restart and retry recognized SQLite sharing errors, reporting unverified activation #159347 — Thanks @eddiekk.
  • Retain Windows Doctor maintenance context through Scheduled Task restoration #160457
Container and OCM updates

Replacement containers can wait for a previous startup to finish instead of repeatedly failing, though the wait can last up to five minutes. The default container-worker image is now node:24.21.0-slim. Offline nodes must preload it or select a cached supported image, such as node:24.19.0-slim. A missing image prevents the worker from starting.

Docker installations using OverlayFS do less preparation and cleanup work on updates run by the fixed updater. This reduces waiting around the update, with no demonstrated reduction in Gateway downtime.

With a compatible job-capable OCM manager, you can request an update from the Control UI or internal /update and follow its progress through a reconnect. OCM handles verification and recovery. Explicit Git targets and unsupported package dev-channel requests are refused.

Sources and complete change list

Improvements

  • Request and follow compatible OCM-owned update jobs through the Gateway #158932 — Thanks @shakkernerd.

Bug fixes

  • Preserve worker environments during no-op Doctor checks and settle reconciliation errors #156160
  • Preserve verified already-current outcomes and use checked copies on OverlayFS #157770 — Thanks @romneyda.
  • Wait for a prior container’s startup lease to release or expire #160266 — Thanks @kimiyu-186.
  • Reduce redundant checks and disposable-file syncing during OverlayFS update preparation and cleanup; broader update delays remain under investigation #160845

Limits and compatibility

  • Change the default container-worker image to Node 24.21.0-slim with offline preparation guidance #159401
Settings reloads

Saved settings apply without waiting for a file-change notification, and temporary database contention no longer leaves supported changes waiting for another edit. Changing channel connection settings also preserves unaffected conversation lists and model choices. Configuration errors now explain whether a file could not be read, a setting is invalid, or a rejected edit saved nothing.

Sources and complete change list

Improvements

  • Explain definite pre-write configuration refusals and how to retry #157548 — Thanks @shakkernerd, @donniefi.

Bug fixes

  • Preserve unrelated environment changes when configuration validation fails 30c911eb33f9 — Thanks @vincentkoc.
  • Retry stale secret reloads after a clean plugin rollback 71cc18ae186d — Thanks @joshavant.
  • Avoid include-resolver stack overflow for deeply nested values while keeping the ten-file include-chain limit #152889 — Thanks @ruel225, @altaywtf, @hpyhandsome.
  • Prevent deep include-detection stack overflows without changing other configuration depth limits #153711 — Thanks @ruel225, @altaywtf.
  • Avoid false Doctor secret warnings for known local-provider markers #156216 — Thanks @iwhatsskill.
  • Apply committed Gateway settings without waiting for file events and preserve pending restarts #157372
  • Preserve literal configuration keys in unmatched patch-path errors #157384 — Thanks @sxh313, @obviyus.
  • Apply settings despite delayed duplicate file notifications #157906
  • Preserve actionable configuration-field and loading-failure details in update reports #158455 — Thanks @mohit, @liunan12345678-spec, @blyszcz.
  • Distinguish unreadable configuration from invalid settings in CLI guidance #158671 — Thanks @fuller-stack-dev.
  • Retry saved hot-reloadable settings after typed pre-entry state-store contention #159700
  • Return JSON failures for config patch/unset --json, including refusal without --dry-run; preserve config set parsing semantics #159760
  • Retain unaffected session lists and model catalogs during channel transport reloads #160274
  • Admit fully Doctor-repairable legacy plugin settings with unchanged preflight bytes #160304
  • Preserve agent purpose and agent-specific model targets through rescue confirmation #160454
Shutdown and restart

Restarts handle active settings changes and plugin reloads more carefully, fixing several shutdown stalls. Clients waiting for results or approvals can disconnect and reconnect without cancelling the underlying work. These fixes take effect once the new Gateway is running; they cannot change a shutdown already handled by an older version.

Sources and complete change list

Bug fixes

  • Reuse existing paired local credentials for update drain #156147
  • Fit macOS shutdown work to the loaded launchd deadline; short custom deadlines leave less cleanup time, and edited service files must be reloaded to take effect #157007 — Thanks @etzelm, @patrick-erichsen.
  • Avoid shutdown wait cycles during plugin reload #157979
  • Cancel cooperative model acquisition before final Gateway shutdown waits #158047
  • Skip bundle preparation for nodes without bundle-retention support #158490
  • Stop optional prewarm admission when the Gateway scheduler closes #158666 — Thanks @fuller-stack-dev.
  • Reset host-wake sampling baselines after recovery completes #159111
  • Release passive result and decision waits during disconnect or committed shutdown #159699
  • Prevent canceled cloud-worker turns from starting tunnels and observe late failures #160062
  • Join active restart-recovery retries and cancel pending retries on shutdown #160335
  • Join admitted Activity recap work and continuations during shutdown #160340
  • Join configuration recovery and prevent closed owners emitting stale restart retries #160375
Workspace cleanup and recovery

Automatic worktree cleanup starts one hour after OpenClaw starts. Frequent restarts can delay it, so use openclaw worktrees gc when you need immediate cleanup. Moved or unreadable worktrees are kept for inspection, and session-cleanup dry runs avoid changing records.

For an interrupted clean removal, openclaw worktrees recover-removal can recover from the original snapshot. Stop other programs writing to that worktree first and leave space to rebuild missing files. Use retire-snapshot only when you no longer need that snapshot's managed restore option; retirement permanently removes it. Orphans without a snapshot require manual recovery in a separate checkout.

Sources and complete change list

Improvements

  • Recover interrupted ordinary clean worktree removals from their original snapshot #156529 — Thanks @fuller-stack-dev.
  • Reduce shared-state write contention during managed-worktree cleanup #156821
  • Skip removed-worktree history during cleanup limit checks #159004

Bug fixes

  • Preserve moved worktrees and report all retained orphan-recovery paths #157112
  • Use a fixed operational reserve plus estimated writes for managed worktrees #157356 — Thanks @vincentkoc.
  • Retain permission-denied managed worktrees for later cleanup #157566
  • Select exact session/agent sandboxes before probing backends; --force still skips confirmation only #157808 — Thanks @vincentkoc.
  • Keep session-cleanup dry runs free of registry and integrity-receipt writes #159316 — Thanks @desksk.

Limits and compatibility

  • Allow explicit early retirement of an eligible removed-worktree snapshot, permanently forfeiting managed restore #156464 — Thanks @fuller-stack-dev.
  • Delay automatic worktree cleanup until one hour after startup while preserving manual cleanup #158989
Database and history cleanup

Background cleanup can continue while you use other conversations, and older conversations can open between cleanup steps. Opening large databases already in the current format also does less repeated checking. Those startup checks are narrower and can miss some corruption; Doctor, daily verification, migrations, and repairs still run full checks.

Sources and complete change list

Improvements

  • Move session-maintenance planning and archive metadata queries into workers #155988
  • Reduce session-cleanup reference work on the Gateway thread #156830
  • Remove repeated foreground reference scans during history cleanup #157572
  • Avoid duplicate healthy-database integrity scans during Doctor media migration #158366
  • Reuse transaction-local schema inspection during managed-node database admission #158385
  • Run periodic database checkpoints and bounded reclamation in existing writer workers #158570
  • Reuse eligible idle Node readers after exact session-database cleanup #158763
  • Reuse verification after clean same-version managed restarts and report incomplete cleanup #159753

Bug fixes

  • Allow session writes between archive cleanup units while preserving recovery copies #156014
  • Read SQLite schema checks from a consistent snapshot and release failed inspection cursors #156108 — Thanks @galiniliev.
  • Allow archived conversations to load between unrelated cleanup units #156338
  • Wait for quiet writes and bound automatic session-cleanup retries #156583 — Thanks @abuegab1-spec.
  • Yield Gateway events while periodic database maintenance waits for coordination #157484
  • Retain maintenance ownership through valid slow heartbeat renewal #157696 — Thanks @fuller-stack-dev, @ludwigtheo0815, @laurentschwartz.
  • Allow bounded cleanup after complete checkpoints even when WAL truncation stays blocked #158773
  • Allow session cleanup during unrelated writes while rechecking selected history #159083
  • Keep eligible session-cleanup plans through unrelated activity while rechecking active and protected history #160815

Limits and compatibility

  • Shorten current-schema agent admission using narrower checks while retaining full verification paths #159445
Gateway diagnostics

Diagnostics show more detail about worker memory use and failed operations. Deep status and Doctor warn when the running Gateway has lost its Node executable and needs a restart. For monitoring, use /readyz to detect recorded terminal database failures; /healthz only shows that the process is alive.

Administrators can opt into heap snapshots to investigate memory growth. A snapshot pauses the Gateway, cannot be cancelled once capture starts, and may need roughly twice its heap memory plus disk space. It covers the main Node process, not workers. Capture during a quiet period without other profilers running. Files and comparison results may contain credentials or messages, so keep them private and delete them manually.

Sources and complete change list

Improvements

  • Expose session-catalog stage timing through enabled diagnostics #155786 — Thanks @grynn.
  • Attribute message and execution traces to the known agent #156018 — Thanks @patrick-erichsen, @ryan-dyer-sp.
  • Add completed agent commentary to supported diagnostic traces with content capture opt-in #156343 — Thanks @vincentkoc.
  • Show plugin-state failure causes and the originating runtime identity #157004 — Thanks @fuma2013.
  • Warn when the running Gateway retains a removed Node executable #157190 — Thanks @olli0103, @obviyus, @jihoon-ernesto.
  • Explain state-database contention without sending users to the same blocked Doctor path #157588
  • Summarize expected retained-subagent recovery notices at startup #157594
  • Expose CPU-profiler startup blocking time as a separate diagnostic #158361
  • Identify supplied run, session, and requester identity in queue wait and failure logs #158549
  • Show live tracked JavaScript Worker counts by pool #158561
  • Move diagnostic-capture storage to workers and drain admitted captures on orderly exit #158848
  • Expose the next scheduled wake in coordinated diagnostic sampling #159389
  • Add opt-in collected-object heap samples, with additional profiler memory use #159892
  • Capture administrator-only Node main-isolate heap snapshots and compare same-process retained objects offline #160040

Bug fixes

  • Release Doctor inspection handles, preserve completed findings, and detect replaced macOS skill folders f53cce01b45a — Thanks @giodl73-repo, @fuller-stack-dev, Peter Steinberger.
  • Retain Mac Node-worker dependencies during Bun-driven packaging and expose nested diagnostic errors #155292
  • Release waiting SQLite lease snapshots and identify slow-operation context #156390
  • Report terminal shared-state database failures through Gateway readiness #156700 — Thanks @martinxomag, @liemnhoang.
  • Keep unrelated Gateway requests moving during System-agent Doctor checks #157228 — Thanks @todddickerson.
  • Preserve state-migration maintenance error classification across workers #157458
  • Report superseded maintenance as expected retries rather than Worker failures #157834 — Thanks @obviyus.
  • Distinguish SQLite worker launch and permission errors from capacity failures #157841 — Thanks @vincentkoc.
  • Report leftover paths and reasons after offline agent Trash failures #158052 — Thanks @sebtardif.
  • Keep absent state uncreated during failed-channel-event health checks #158288
  • Reuse unchanged catalog workspace contexts and report direct-worker memory coverage #158323 — Thanks @highfly-hi, @zl0nline, @oleagui, @goslingmanagment.
  • Move ingress-pressure health queries to a read worker without creating absent state #158412
  • Move optional diagnostic transcript enrichment off the Gateway thread and skip disabled log levels #158530
  • Retain underlying Doctor state-lock failure causes #158993 — Thanks @kirylh.
  • Restore authentication-expiry alerts, including the final usable hour; stop Podman setup and launch before saving a token or starting a container if its random source fails #160798
  • Report the unreadable configuration path and read error in health commands, including JSON output #160885

Documentation

  • Distinguish slow successful SQLite steps from actual lock errors #155607
  • Add native startup diagnostics and manual Linux core-capture guidance for sensitive crash files #157055

Limits and compatibility

  • Return failure for blank or missing explicitly requested session-tail keys #159704
Update progress and reports

Update progress and history show more of the steps that ran and what failed. Choose Settings → Updates → Diagnose update when you want help; opening the dashboard no longer starts diagnosis automatically. Named administrators can review a sanitized failure report and open a GitHub issue draft to submit with their own account. Failed uploads keep the report for retry, while uncertain submissions offer a status check to avoid duplicates.

Sources and complete change list

Improvements

  • Show elapsed update waits and date saved update outcomes 417bc5ba7c1d — Thanks @romneyda.
  • Show Git runtime-staging progress, duration, and failures #155671 — Thanks @vincentkoc, @romneyda.
  • Let named administrators review failed-update reports and open a browser issue draft #155932 — Thanks @hannesrudolph.
  • List retained recovery sets and their recorded status in update status #156366 — Thanks @fuller-stack-dev.
  • Start failed-update diagnosis only when the operator requests it #157359 — Thanks @fuller-stack-dev.
  • Record runtime-retention stage durations and file counts in update history #157386 — Thanks @vincentkoc.
  • Expose preferred stable or beta Git release targets in eligible JSON status #158926 — Thanks @shakkernerd.

Bug fixes

  • Explain Doctor refusals in failed update reports 0a6f1fa28b73 — Thanks @vincentkoc.
  • Move update-history reads into database workers and refuse lightweight repair success when new maintenance requirements appear 5ff5fb278348
  • Preserve original update failure causes and mark truncated npm excerpts #156189 — Thanks @shadesurgeon, @potterdigital.
  • Keep Git update counts, links, and confirmation details on the same comparison #156410
  • Preserve original migration failures and timestamps in SQLite recovery reports #156431 — Thanks @s93101179, @vishubh043-dev.
  • Explain stale local Git tracking information during dry-run previews #156447 — Thanks @patrick-erichsen.
  • Distinguish unresolved recorded update ownership from a resumed updater #156472 — Thanks @patrick-erichsen.
  • Preserve prepared failed-update reports for explicit retry or status-only reconciliation #156633 — Thanks @eleqtrizit, @iwhatsskill, @obviyus, @stevenlee-oai, @galiniliev.
  • Prevent recursive Doctor authority checks during chat-triggered updates #157273 — Thanks @yoyo837, @gr33n93, @hensarj, @gisk0, @dasx.
  • Report known automatic-update policy before installation discovery completes #158301
  • Distinguish verified external update callers and retain specific service-refusal reasons #158314 — Thanks @romneyda, @sarahliyanage, @xiaozishan, @dragomirdimitrov-mmrndm.
  • Record reached phases and causes for unexpected update failures before report handoff #158354 — Thanks @cp7553479.
  • Retain failed npm attempts and sanitize Git checkout error references #158877 — Thanks @iwhatsskill.
  • Retain recognized missing GLIBC versions in sanitized update reports #159310 — Thanks @pennyvibe.
  • Keep generic worker diagnostics on stderr so Doctor JSON remains parseable #159351
  • Report validation-created source edits as a failed candidate clean check #159397
  • Skip misleading shutdown advice when optional CLI capture cleanup meets expected ownership contention #159717
  • Show Unknown for missing Git installation dates without promising a future timestamp #159907 — Thanks @shakkernerd.
  • Log Dashboard update failures with recognized safe reasons #160091 — Thanks @chopin-op60, @obviyus, @boatangle.
  • Keep nonfatal Doctor warnings visible on stderr without corrupting JSON reports or falsely blocking updates #160184
  • Retain named warning and failure identities in compacted update history #160430
  • Identify database, approval, or plugin phases in snapshot failures #160436

Documentation

  • Clarify release channels, validation, and independent native-app availability 348bd81b553b — Thanks @romneyda.
Update preparation

Update preparation avoids repeated file copying and checks, reducing work before installation. Most of these savings begin with later updates run by the new updater. The time saved depends on your installation, and required repairs and final checks still run.

Candidate compatibility checks also preserve the original profile and agent database files, including when an incompatible update is refused.

Sources and complete change list

Improvements

  • Reduce copying while retaining the running updater #155977
  • Reduce repeated path lookups in update preparation and preserve directory self-links #156748 — Thanks @fuller-stack-dev.
  • Reuse updater ownership readers while checking current authority on each observation #156757 — Thanks @fuller-stack-dev.
  • Reuse private database snapshots during update preparation #157115
  • Copy independent plugin-preparation files concurrently and settle started copies before cleanup #157199
  • Reuse packaged CLI compile caches with seven-day age and 512 MiB best-effort cleanup targets #157528 — Thanks @wlassalle724, @freshxiaoyao.
  • Avoid repeated directory preparation during retained-runtime materialization #158340
  • Skip metadata probes already known absent during update inventory #158522
  • Overlap independent retained-runtime file work while joining started writes before failure cleanup #158766
  • Reduce copied-state Doctor startup work and verify captured compiler input bytes #159044
  • Reuse selected npm registry metadata during update preparation #159392
  • Defer duplicated advisory Doctor inspections during recognized private rehearsals #159443
  • Reduce the state-reader bundle by keeping unrelated update-writing and Gateway setup code out of it #160975

Bug fixes

  • Reduce repeated directory preparation while retaining update files aadc8ba7d782 — Thanks Peter Steinberger.
  • Preserve profile database and SQLite sidecar files during read-only candidate admission #161117
  • Preserve default, configured, and registered agent database files during compatibility checks, including newer-schema refusal #161203
FreeBSD maintenance

FreeBSD update errors identify the failed package check more clearly. When Doctor cannot determine service status, it points to FreeBSD's package-service or foreground instructions instead of suggesting unavailable OpenClaw service commands.

Sources and complete change list

Bug fixes

  • Identify the failing FreeBSD package-inspection operation #157147 — Thanks @vincentkoc, @lucarinaorg.

Documentation

  • Show FreeBSD package-service or foreground recovery guidance in Doctor #157154 — Thanks @vincentkoc, @lucarinaorg.
Work after a restart

Restart recovery shows interrupted child runs separately from failures and helps the parent agent find unfinished work. Children are not automatically relaunched. Before repeating an action, the parent must check that the earlier run stopped and whether it already changed anything outside OpenClaw.

Graceful restarts also preserve completed workspace edits and the same machine for node-backed cloud and paired-device sessions. Interrupted tool calls are not replayed. This does not recover edits already lost in an older version or provide the same protection after abrupt machine loss or for SSH-backed sessions.

Sources and complete change list

Improvements

  • Show Interrupted status and give resumed parents up to 32 current unfinished children plus guidance to inspect the remainder #159492

Bug fixes

  • Retain node-backed machines and completed workspace edits across graceful Gateway restarts #159565
  • Settle pending subagent completions against their original owner before cleanup #159943

Messaging

Messaging fixes cover replies, attachments, and conversations that continue after an interruption. Some channel settings change on upgrade, with the required steps explained below.

Telegram formatting

Telegram rich replies keep tables aligned and display code blocks without stray formatting tags. Scheduled posts also get formatting guidance for the account sending them.

Sources and complete change list

Bug fixes

  • Keep quoted streamed replies in place when implicit reply threading is off #155040. Thanks @obviyus.
  • Preserve rich /status tables and show unsupported control labels once during partial-stream finalization #155088. Thanks @pollybot13, @obviyus, @alekstodo, and @ruel225.
  • Render standard preformatted HTML as code blocks in rich replies, retaining authored spacing #157858. Thanks @obviyus.
  • Apply the delivering account's rich or plain formatting guidance to replies and announcements #158028. Thanks @obviyus.
  • Give eligible scheduled posts account-specific formatting guidance and preserve table spacing around removed reply or audio directives #159442. Thanks @obviyus.

Security and trust

  • Display labels for complete unsupported Markdown links without exposing their file destinations; bare paths and literal code remain outside this filtering #137810. Thanks @chelsealong, @novaunboundai, @gaoanze888, and @xxg0dlessxx.
Telegram delivery and retries

Telegram keeps progress visible or shows a warning when a final answer fails to arrive. If delivery is uncertain, check OpenClaw chat history before retrying, since the answer may already have reached the chat. OpenClaw does not automatically resend uncertain answers, to avoid duplicates.

Sources and complete change list

Improvements

  • Move topic-binding storage off the message-handling thread while retaining ordered startup and shutdown #156688.

Bug fixes

  • Retain progress or a delivery warning after a failed final answer, without replaying accepted text or completed tools; unavailable edits can leave old progress visible #155906. Thanks @obviyus.
  • Coordinate bot-wide rate-limit waits and give final sends a bounded accumulated wait budget while previews yield #157349. Thanks @obviyus.
  • Recognize confirmed replies to the current forum topic, avoiding an extra final reply and missing transcript entry #158054. Thanks @sanjays2402, @obviyus, and @yangmanbobo.
  • Keep conflicting updates ordered after a preceding handler fails while independent topics continue #158573.
  • Close transport resources after failed webhook setup and retry polling errors with an HTTP 502 JSON-null response #159258.
  • Hand completed final replies to the current Telegram runtime after unrelated plugin reloads, provided the original sender and channel remain valid #160009. Thanks @vacinc and @obviyus.

Security and trust

  • Close membership-audit connections and refuse Mini App sign-in handoffs when owner access or bot configuration changes during the request #160032.

Limits and compatibility

  • Use fresh connections for new text sends and withhold retries after ambiguous delivery failures, adding a connection handshake and leaving some uncertain sends undelivered #156842. See the retry behavior.
Webhook setup on the Gateway port

Telegram, Feishu, Teams, and Nextcloud Talk can receive webhooks on the Gateway's HTTP port. Follow Doctor's migration guidance, update your external callback or proxy, and verify incoming messages before setting legacyWebhook to false. Keep that setting to leave the old port closed. Telegram polling and Feishu WebSocket connections are unchanged.

The setup guides for Telegram, Feishu, Teams, and Nextcloud Talk cover each channel's requirements. Avoid conflicting callback paths and use distinct secrets for accounts sharing a route. A Teams path conflict can stop its old listener too. On 2026.9.6, separately installed Telegram and Feishu plugins need distinct endpoints per account. If Feishu uses old host/port settings, update core before explicitly updating a pinned Feishu plugin; updating core keeps the pin.

Sources and complete change list

Improvements

  • Receive Telegram callbacks on the Gateway port while retaining the default 127.0.0.1:8787 listener until explicit cutover #158732.
  • Receive Feishu callbacks on Gateway routes while retaining existing endpoints, including the default 127.0.0.1:3000 listener #158861.
  • Receive Teams callbacks on Gateway routes with existing JWT authentication and port 3978 forwarding; migrate webhook.port with Doctor and resolve route collisions before cutover #158939.
  • Receive Nextcloud Talk callbacks on Gateway routes, retaining 0.0.0.0:8788 until disabled; use distinct account secrets to avoid ambiguous routing during account shutdown #159067.

Limits and compatibility

  • Restore separately installed Telegram plugin delivery and per-account legacy listeners on supported 2026.9.6 hosts #159844.
  • Bind Feishu legacy endpoints before reporting ready on supported 2026.9.6 hosts, with core-first migration guidance for old listener keys #160455.
Replacing a Telegram bot

A replacement Telegram bot can receive new messages without the old bot's message history blocking them. Replacing a bot permanently deletes its old queued messages, even if the new bot fails to start; restoring the old token will not bring those messages back. Rotating a token for the same bot keeps its queue. See Telegram transport guidance.

Sources and complete change list

Limits and compatibility

  • Clear old-account queue records on a confirmed bot replacement so overlapping update IDs can be accepted; same-bot rotations and unknown legacy identities retain their records #158612. Thanks @obviyus, @yangmanbobo, and @dankarization.
  • Prepare bot identity before webhook delivery while retaining the permanent old-queue deletion and failed-startup recovery limitation #159219.
Slack replies and progress

Top-level Slack chats in progress mode now show a temporary reaction followed by one final answer. You can keep progress previews through Slack messaging settings. Finished cards show that work is complete and link directly to visible sessions created for the work, with separate links when there are several.

Slack proxy connections work again on Node; the separate Bun limitation remains. Slack users linked to administrator profiles can also ask the agent to assign visible sessions to themselves.

Sources and complete change list

Bug fixes

  • Restore Slack Socket Mode event reception through configured HTTP and HTTPS proxies on Node #155841. Thanks @bill-starfoundry.
  • Give ordinary Slack replies correct Markdown instructions for bold text and links while retaining native formatting for raw Block Kit fields #155938. Thanks @pash-openai and @drtony1.
  • Keep repeated cleanup of an old webhook registration from removing its replacement #158085.
  • Quiet top-level progress by default, retain explicit preview choices, and correct finished-card labels, accessible fallback text, and session links #159657.
  • Carry verified linked administrator authority through session self-assignment from native Slack messages and app mentions, with visibility and revocation checks retained #159694.
  • Link finished native and Block Kit progress cards to up to five visible work sessions in acceptance order, retaining the conversation link when no usable work-session link exists; hidden subagents do not replace it #160088.
Discord threads and bot messages

Discord replies retain the messages you quoted, including when several incoming messages are combined into one turn. You can also opt in to follow-ups without mentions in threads the bot starts, while keeping mentions required elsewhere. This needs the channel permissions described in the guide.

Discord and Slack now accept messages from other bots when allowBots is omitted, including after an upgrade. Set allowBots to false to keep the previous behavior. Existing access and mention rules still apply, but bot conversations can still loop.

Sources and complete change list

Improvements

  • Move Discord conversation-binding storage off the Gateway thread while preserving account ordering and accepted shutdown work #156627.
  • Add requireMentionInBotThreads on supported channels so bot-created threads can use a separate mention rule #157713. Thanks @seaurching.

Bug fixes

  • Accept emoji-containing Discord Activity titles within the existing 80-code-point limit #156096. Thanks @superdiaodiao and @obviyus.
  • Remove late-created progress drafts when queued follow-ups settle; settlement alone does not confirm final delivery #156186. Thanks @siri1410, @obviyus, and @revision-co-ltd.
  • Restore direct Discord REST lookups under Bun without changing proxy selection #156965. Thanks @vincentkoc.
  • Restore native reply references for grouped incoming messages in batched reply mode #158886.
  • Learn the Discord Activity application ID supplied at startup before checking availability #159842.

Limits and compatibility

  • Preserve Discord parent-message context and change omitted Discord/Slack allowBots settings to enabled, with explicit opt-out retained #157091.
  • Restore Discord plugin loading and direct API compatibility with supported OpenClaw 2026.9.6 hosts #159773.
  • Restore Discord voice loading on 2026.9.6 hosts, retaining profile-only context there rather than the newer multi-session instructions #159831.
Matrix login and approvals

Matrix login and logout fixes prevent account changes from incorrectly marking a restarted account as stopped. Authorized reviewers can also use reactions on Matrix approval prompts, including prompts restored after a restart.

Sources and complete change list

Bug fixes

  • Move operational Matrix credential reads to workers and preserve completed logout results without stopping successor accounts #156267.
  • Accept system-agent approval reactions and restored targets under the existing approver rules #158164.
Feishu documents and duplicate posts

Feishu reports successful cleanup accurately and lets the agent continue editing a newly created document table. Reconnecting also stops matching rich-text posts without attachments from starting duplicate replies.

Sources and complete change list

Bug fixes

  • Suppress matching attachment-free rich-text redeliveries after reconnect while preserving distinct posts and topics #152679. Thanks @leilei3167, @obviyus, and @yetval.
  • Correct Feishu cleanup counts and ordered table cell IDs; make failed Matrix snapshot restores settle and close storage, and pass resolved configuration to Matrix profile and verification operations #158923.
WhatsApp login and media uploads

WhatsApp starts a fresh login attempt instead of returning a QR code from one that already ended. Media uploads through HTTP and HTTPS proxies work again, honoring your proxy exceptions. An invalid proxy setting stops the upload instead of bypassing it.

Sources and complete change list

Bug fixes

  • Retain verified WhatsApp participant identity in new opt-in execution audit records without backfilling historical unknowns #156730. Thanks @joshavant.
  • Release QR-login deadline timers when login completes or the QR code refreshes #158272.
  • Restore media uploads through HTTP/HTTPS proxies with per-destination bypass and certificate handling #159851. Thanks @joshavant, @choury, and @yangmanbobo.
  • Start fresh login attempts after settlement and preserve recorded connection warnings without alarming untouched first-time setups #67820. Thanks @mcaxtr.
iMessage conversation routing

iMessage sends conversations to their assigned agent even when other routing settings conflict. If OpenClaw cannot check that assignment, it stops routing instead of choosing another agent. A known harmless Contacts message also stops appearing as an error.

Sources and complete change list

Bug fixes

  • Honor existing iMessage conversation assignments before ambiguous or conflicting ordinary routes #123159. Thanks @vincentkoc.
  • Move uncached reply and action reference checks to the Messages database worker while retaining conversation checks #155981. Thanks @summitoperations26.
  • Keep the known harmless Contacts reconciliation message in verbose logs while preserving surrounding or unrelated errors #156334. Thanks @olli0103, @altaywtf, @prashantkamani, and @omarshahine.
Mattermost commands and reactions

Mattermost can replace an outdated slash command even when the deletion response is interrupted. Reactions also reach the reacted-to message's thread when it can be found, falling back to the parent conversation if it cannot.

Sources and complete change list

Bug fixes

  • Continue slash-command recreation after a successful deletion loses its unused response body #149458. Thanks @masatohoshino and @altaywtf.
  • Route reactions using the resolved message's thread rather than always using the parent conversation #155812. Thanks @wangmiao0668000666 and @obviyus.
  • Avoid first-send stalls caused by loading Mattermost incoming-message monitoring while preparing an outgoing message b88e53d. Thanks @romneyda and @vincentkoc.
Channel setup and access

Channels now need explicit configuration to connect. If yours previously worked from an environment bot token alone, add its channel configuration; it can still use that token. A foreground Gateway can use --ambient-channels instead, but managed services need the configuration.

Choosing Disabled in Twitch setup now blocks chat. If an older setup was meant to deny access, reselect Disabled or set allowFrom to []. Open and Disabled erase the saved allowlist, so switching back requires entering those user IDs again.

Sources and complete change list

Bug fixes

  • Make the official AgentMail ClawHub channel discoverable and allow correctly recorded installations to load its required storage and incoming-message APIs. Legacy recovery needs a recorded digest matching the catalog pin; a package specification alone remains untrusted, and matching metadata does not verify installed bytes #155097. Thanks @patrick-erichsen, @kai0126-claw, and @eduherranz. See the AgentMail setup guide.
  • Move Zalo Personal credential operations off the Gateway thread, reject stale QR setup writes, and wait for saved logout before replacement login #156003.
  • Accept correctly bracketed Tlon IPv6 origins and remove downloaded MMS files when access is revoked before dispatch; private IPv6 still requires its existing opt-in #157825.
  • Make Twitch Disabled setup deny chat using the existing empty allowlist rule, preserving mention requirements and explicit legacy repair #157881. Thanks @vincentkoc.
  • Route bound LINE direct and group conversations to their selected agent without requiring a channel-wide default #159116. Thanks @sunlit-deng, @obviyus, and @superdiaodiao.
  • Resolve Discord and Slack bindings before ambiguous agent selection and retain the bound agent's main-session identity; retained Slack bindings can still select an agent removed from the roster #159533.

Limits and compatibility

  • Require authored channel configuration or process-level ambient-channel opt-in rather than treating inherited bot tokens as consent #157387.
Typing and progress updates

Supported channels show typing again when the main assistant resumes work after a subagent finishes. Waiting no longer produces a false failure message. With tool progress enabled, you can still follow recent work and plans after a tool fails.

Sources and complete change list

Bug fixes

  • Preserve commentary and avoid false abort errors after a successful wait for a child agent #154881. Thanks @romneyda.
  • Let old named-tool failures roll out of Telegram and Slack progress while retaining plans, recent activity, and priority approval/error states #156649. Thanks @obviyus.
  • Restore Discord typing for resumed parent work through its guarded typing adapter #157271. Thanks @obviyus and reporter Fabio Ponta.
  • Retain completed native Claude CLI Bash command details in Telegram's existing opt-in progress display while hiding unconfirmed MCP commands #158636. Thanks @obviyus.
  • Avoid overlapping provider typing requests when a keepalive restarts before its earlier request finishes #158830.
  • Flush visible failed-tool status before final-reply cleanup without changing quiet mode or rolling retention #158970.
  • Start typing when a public top-level parent actually resumes execution, using its configured cadence and stopping on completion, cancellation, or lost authority #160039. Thanks @vacinc.
Attachments in replies

The agent can resend available attachments from chat history with their captions and reply targets. Telegram also stops rejecting reply attachments at an accidental 5 MiB cutoff, using its existing 100 MiB default unless you set a smaller limit. Telegram's own upload limits still apply.

Image, video, and music requests can run in the background again in chats that share the agent's main conversation history. Each chat keeps its own media tasks and status, and results return to the person who asked.

Sources and complete change list

Bug fixes

  • Preserve recognizable comparison prose in affected plain-text replies without removing text between comparison operators #152671. Thanks @leilei3167, @obviyus, and @yetval.
  • Count successful final uploads, attachments, and effect sends as replies only when their destination evidence matches the requesting chat #156807. Thanks @joshavant.
  • Keep later attachments from inheriting the first file's legacy URL; already-canonical saved metadata is unchanged #157822. Thanks @yangmanbobo and @obviyus.
  • Resolve stored inbound attachment references for resending, retaining existing file-read and sandbox restrictions #158720. Thanks @vyctorbrzezowski and @obviyus.
  • Apply Telegram's existing default media limit during reply staging while honoring smaller configured limits #159491. Thanks @sunlit-deng, @obviyus, and @kassol.
  • Prevent the identified database-lock failure when staging local attachments while background work writes shared state #160783.
  • Restore background image, video, and music generation for channel chats sharing the main conversation history #160998.
  • Keep those chats' media tasks, duplicate detection, and status separate while delivering results to the requester; detailed lifecycle coverage is image-specific, with video and music using the shared implementation #161034.

Improvements

  • Move managed-image writes and cleanup off the Gateway thread and wait for accepted attachment metadata before publishing affected messages #159348.

Documentation

  • Explain the host-side ffmpeg requirement for voice-note conversion, Feishu's attachment fallback, and WhatsApp's failed-send behavior 4383e8f. Thanks @vincentkoc. See voice output requirements.
Delegated work and side questions

Native Codex can answer side questions in Discord and Slack while continuing the original task. Native child agents can also return follow-up answers after waiting for delegated work, within the same running OpenClaw process. See session messaging.

Persistent workers created by an agent now need a separate thread, as supported by Discord and Matrix. On Telegram and other affected channels, use one-shot mode="run" instead. Telegram rejects thread=true and ignores defaultSpawnContext for these spawns. Deliberate ACP binding commands remain available; see thread-bound sessions.

Sources and complete change list

Bug fixes

  • Keep quoted and forwarded context attached to each reply that steers an active embedded response #145338. Thanks @fransqaas.
  • Finish an explicitly requested, successfully delivered reaction-only answer to the current message without extra fallback text #156790. Thanks @joshavant.
  • Preserve a native child follow-up's final result across accepted yielded continuations; the historical Task-receipt implementation is superseded by native execution ownership #156919. Thanks @jalehman.
  • Keep delayed self-replies in their original conversation and retain completed queued results across in-place restart; unfinished runs are excluded and backup restoration omits pending delivery records #156984. Thanks @joshavant and @vincentkoc.
  • Mark later rejected or aborted subagent-result chunks as incomplete and stop whole-result retries that would duplicate sent parts; silent non-send outcomes are not comprehensively detected #159185.
  • Deliver independent native Codex side answers without suppressing the original task's later final reply in Discord and Slack #159416.

Limits and compatibility

  • Restrict agent-created persistent bindings to child threads and ignore legacy system bindings on current-chat placements while preserving their records and history; later adapter-placement changes remain a routing limitation #158992. Thanks @obviyus and @joshavant.
Approvals in chat

Authorized users can approve or deny OpenClaw changes in the chat where they requested them, using supported buttons or /approve. Existing approver rules still apply, and typing “yes” does not approve a change. Reaction approvals also work on iMessage, Signal, and WhatsApp prompts; forwarded Signal reactions remain opt-in.

Administrators can choose Slack reviewers for individual plugins and tools. Update the Gateway before adding these settings. Scoped requests go through native Slack DMs, so reconnect the bot if that route is unavailable. Choosing reviewers does not make a tool ask for approval.

Removing a reviewer stops their approval decisions, but request details on already queued cards can still reach them, including after a restart.

Sources and complete change list

Bug fixes

  • Deliver delegated change approvals and their recorded outcomes to the requesting chat, with Allow once and Deny choices and current-authority checks #157947. Thanks @obviyus.
  • Restore system-agent approval reactions on iMessage, Signal, and WhatsApp, including persisted iMessage targets; Signal forwarding reactions remain opt-in #159132.
  • Stop admitting new distinct Tlon approval requests when 100 or more are pending, preserving existing requests and attempting an owner notice; resolve pending decisions before rejected requesters retry #160679. Thanks @eleqtrizit.

Improvements

  • Coordinate native approval-handler startup retries with Gateway wake-up and shutdown while retaining the existing retry delay and approval policy #160315.
  • Select Slack approval reviewers by exact tool, then native plugin, then default, with an explicit empty list denying Slack decisions for that scope. Native reviewer DMs cannot fall back to generic forwarding; buttons can work without ordinary bot DM access, while typed /approve still requires it #159525. Thanks @stevenlee-oai.
Incoming message queues

Incoming messages keep their order when processing resumes after a failure. OpenClaw reports uncertain saves instead of treating them as successful or automatically repeating them. Shutdown may wait if message storage does not finish.

Sources and complete change list

Improvements

  • Reduce database queries and temporary allocations when pruning large channel backlogs without changing retention rules #159050.
  • Move operational incoming-message queue reads and writes to workers and prevent a released lane head from being overtaken #159073.

Bug fixes

  • Keep message claims owned through pending completion, retry, and failure writes during shutdown #158637.
  • Stop expired channel repairs before commit and surface uncertain writes without automatic replay or false durable acknowledgment #159161.
  • Recheck current conversation-lane eligibility before a queued claim commits, leaving newly blocked messages pending #159197.
Queued replies after restart

Completed replies saved for delivery can survive a restart if sending has not begun and the original permissions still apply. Delayed replies also keep their original chat and thread. Answers that were not saved, were partly sent, or have uncertain delivery cannot be automatically recovered this way.

Check the storage and backup limits before downgrading. Older versions may leave replies pending, and restoring a backup does not restore pending deliveries.

Sources and complete change list

Bug fixes

  • Recover eligible queued replies after recognized restarts while rechecking original-owner authority; removed grants do not revive old queued authority when restored 39183ae. Thanks @joshavant.
  • Preserve captured, wholly unsent final replies interrupted by update restart before dispatch #156102. Thanks @fuller-stack-dev.
  • Keep delayed cross-session continuation destinations and reject results for reset or replaced requester conversations #156802. Thanks @joshavant.
  • Preserve earlier delivery-retry wakes across clock rollback or stale reads while rechecking current queue eligibility #159275.
Channel status and errors

Channel diagnostics show whether a plugin is installed but disabled, and expose errors that were missing from channel logs. Rejected status requests now report failure to scripts. Chat errors also distinguish recognized local timeouts from model-provider failures.

Sources and complete change list

Bug fixes

  • Identify local worker timeouts in channel warnings without changing genuine provider HTTP errors or retry policy #155675. Thanks @gokay-ai, @obviyus, and @endeavorpioneer.
  • Report installed disabled channel plugins as installed without activating or reinstalling them #159242.
  • Preserve Gateway rejection errors and return failure instead of a successful config-only status fallback #159243.
  • Include canonical channel runtime namespaces and descendants in filtered text and JSON logs #159244.

Improvements

  • Skip unnecessary local migration preparation for explicit-channel message commands handled by a reachable Gateway #157448. Thanks @wlassalle724.
Voice questions about other work

Talk, Discord, FaceTime, and Voice Call now guide the voice model to consult your agent about its other work when that option is available. This does not give the voice model direct access to other conversations. Talk also removes redundant confirmations for read-only Code Mode lookups, while keeping approvals for changes.

Voice Call's maxChars setting now limits profile files only, so total voice context can be longer.

Sources and complete change list

Bug fixes

  • Avoid redundant outer voice confirmations for read-only Code Mode lookups while preserving confirmation for shell commands and mutating nested actions #159474.
  • Share agent-context instructions across realtime voice, retaining the paragraph when optional profile context is disabled; toolPolicy set to none still prevents consultation despite that guidance #159548.
Channel settings during a conversation

Changing channel settings during a chat no longer causes the reported Matrix disconnect after a reload. Google Chat applies reply-visibility changes to the next message without restarting. Credentials, callback routes, and other settings that require a restart still need one.

Sources and complete change list

Bug fixes

  • Keep replacement channels independent of completed configuration-writing requests and preserve the current Gateway's owner across in-process restart 055db0c. Thanks @ycmjason and @vincentkoc.
  • Read current Google Chat reply-visibility settings for the next runtime-owned incoming turn without replacing explicitly scoped monitor configuration #160323. Thanks @rileyjjy, @obviyus, and @scientificprogrammer.
Messages with buttons

OpenClaw avoids preparing the same buttons twice when they fit a channel's limits. The buttons and fallback text stay the same.

Sources and complete change list

Improvements

  • Skip duplicate global button preparation when the authored controls fit within channel capacity #157050. Thanks @vincentkoc.

Memory

OpenClaw fixes missed memory updates and search failures, with repairs for older Dreaming schedules and protection for standalone QMD files.

Memory indexing

With memory watching enabled, notes edited during an update are picked up in a follow-up pass. Large folders configured as extra memory paths also avoid unnecessary rescans when unrelated files change.

Sources and complete change list

Improvements

  • Release references to completed indexing vectors while later files are still being written, preserving shared cached vectors #156173 — @vincentkoc
  • Select transcripts for multi-session updates in one pass while preserving target order and filters #158364
  • Limit built-in SQLite provenance and Dreaming reads to the selected workspace, so malformed records elsewhere do not block healthy data #159190

Bug fixes

  • Index edits received during an active pass and let folder scans yield to other work #157163 — @vincentkoc
  • Retain only needed event data during long-session indexing and check recall reset boundaries without loading message bodies #157278 — @sahilsatralkar, @jalehman, @conan-scott
  • Filter unrelated extra-path deletes and renames, scan shared roots once, and skip directories proven irrelevant to configured patterns #158998 — @nianjiuzst, @obviyus, @s1gv4rd
Dreaming notes and schedules

Dreaming stops adding its own nested reflections to new memories from daily notes. Newly saved snippets also favor complete words and mark shortened text with an ellipsis. Existing entries remain unchanged.

If prompted, run openclaw doctor --fix to repair older Dreaming schedules before creating or updating them. The repair makes a backup and preserves custom jobs and the surviving schedule’s history. Entries it cannot safely repair remain with warnings.

Sources and complete change list

Bug fixes

  • Use the configured memory owner for Dream Diary reads and maintenance writes when older clients omit an agent, while retaining explicit selection and ambiguity errors #156437 — @orionation, @sundaydriver, @cyb3rb1ade
  • Prefer nearby sentence or word boundaries and mark shortened deep-consolidation snippets without rewriting existing entries #157322 — @yun-0000, @ada-kvr, @obviyus, @holny
  • Preserve historical Dreaming jobs for explicit Doctor repair and remove recognized duplicates only where a valid survivor exists #157616
  • Exclude nested inline Dreaming reflections from new daily recall while preserving surrounding user notes #157879 — @obviyus, @mariorivas1, @eric-basketbot
Memory Wiki searches and imports

Memory Wiki avoids unnecessary work when searching or opening pages with many links. Open Knowledge Format imports also preserve links inside code examples instead of rewriting them.

Sources and complete change list

Improvements

  • Skip unused Markdown link extraction during Wiki queries while retaining link graphs for compilation and lint #152487 — @kchuang1015, @context-down, @etzelm

Bug fixes

  • Preserve literal links inside fenced, indented, and inline code during OKF imports #159262
Long conversations and Codex memory

Conversation compaction keeps already-summarized messages out of affected later summaries and loads saved history in the background so other work can continue. Messages arriving as a summary finishes use the updated conversation, and recovery stops when the run times out. If a model exhausts its output budget without producing a summary, OpenClaw stops repeating the same request and suggests lowering thinking or increasing maxTokens before retrying. Saved history remains intact.

Context-engine plugins that store completed turns now give the current conversation priority over retries from other sessions, preventing stale work elsewhere from holding up new context.

Desktop Codex Computer Use sessions launched and connected directly by OpenClaw now keep their configured persona and memory-plugin guidance. Restart the Gateway to load the fix. Native child agents do not automatically inherit this guidance.

Sources and complete change list

Improvements

  • Load saved history for compaction in the background so other Gateway work can continue #160314

Bug fixes

  • Preserve selected memory-plugin and persona guidance in managed Desktop Codex Computer Use turns, including deferred recall tools 873dbf9 — @jalehman
  • Refuse steering when compaction state cannot be read, queue chat follow-ups, and continue cancellation checks for other eligible runs #154868 — @sxh313, @obviyus, @yunligou711-commits
  • Let completed embedded-harness turns reach durable context engines through cache-TTL bookkeeping markers, without changing the separate pending-commit drain behavior #156611 — @holny, @obviyus, @kaspnov, @superandylin
  • Refresh incoming chat identity and metadata when compaction finishes during reply admission #156858
  • Cancel automatic overflow and timeout compaction recovery when the admitted run times out #159105
  • Preserve reset and compaction boundaries in the tool-only safeguard fallback, keeping already-compacted messages out of later summaries #160211 — @obviyus, @neyudo
  • Prioritize saving the newly completed context-engine turn before retrying other sessions, without repairing older abandoned work #160153 — @ericcaiwx-star, @obviyus, @kaspnov, @abacha, @flakedict, @superandylin
  • Stop identical summary retries after an empty response exhausts the output budget, with guidance to adjust thinking or maxTokens; separate oversized-message fallback remains available and settings do not change automatically #160650 — @olli0103, @jackten, @obviyus
QMD files and archived answers

Doctor now preserves standalone QMD settings and indexes, removing only empty QMD folders. This does not restore previously deleted data or bring back OpenClaw’s retired QMD backend. Before deleting retained files yourself, back them up and check that standalone QMD no longer uses them.

Recovery of archived child-agent answers now runs its initial database checks in the background.

Sources and complete change list

Bug fixes

  • Preserve standalone QMD configuration, indexes, and mixed directory contents during update and Doctor cleanup #158569 — @obviyus, @billverhelle
  • Move durable child-answer archive discovery and registration checks to the history worker, retaining empty-store and Incognito behavior #160238

Skills

This release fixes how agents pick up edited skills and how you browse and revisit skill suggestions.

Skill loading and updates

Agents pick up edited skills more consistently after folders are replaced or file watching fails. Keep skill watching enabled to use the fallback refresh. Sessions in managed worktrees also use the intended skills from your configured workspace and project.

Self-hosted Agents API sessions can use skills installed on the executor. Install the skills and their dependencies there, then choose their folders in settings. All skills in those folders become available for discovery, without per-agent filtering. This is opt-in, excludes hosted sessions, and requires a session reset when you change a nonempty folder list.

Sources and complete change list

Improvements

  • Reuse an agent's discovered skills across execution workspaces while preserving precedence and refresh behavior. Initial discovery remains synchronous. #158609
  • Group skill-collision logs by source directory, with counts and example names. Some collisions now log at info level, and separate worktrees can report separately. #158092
  • Reuse parsed YAML within freeform skill and hook metadata recovery, without changing the accepted syntax. #158374
  • Add optional self-hosted Agents API discovery from up to 32 unique absolute executor paths, retaining Gateway function policies. #159363 Thanks @sjf-oa and @sjf.

Bug fixes

  • Restore eligible skill catalogs on Codex fallback connections and refresh edited or removed skills in ongoing conversations. Managed relay delivery stays parent-only; after incognito compaction, the current catalog is restored for the following request. b875c537 Thanks @Colton-Harris, @jalehman, and @serialx.
  • Skip binary checks for excluded skills. The same change adds private, owner-authorized repair turns with bounded execution, without enabling the deferred whole-loop update-repair route. df15ee3a Thanks @RomneyDa and coauthor Peter Steinberger.
  • Prepare pinned Library skills through background database reads while retaining selected revisions and rejecting late results for retired callers. #148822
  • Refresh affected skill sources during preparation after watching loses coverage, while retaining healthy caches. #155901 Thanks @vincentkoc.
  • Avoid unnecessary skill refreshes from unrelated same-name child folders on affected Linux layouts. #156201 Thanks @vincentkoc.
  • Keep observing later skill edits after folder replacement on non-polling Node Linux and Windows. macOS, Bun, and polling retain their existing transport. #156324 Thanks @vincentkoc.
  • Keep preparation-time refresh active until watcher coverage is verified, and wait for retired watcher work during shutdown. Failed retirement remains unavailable, and skills.load.watch=false disables both watching and this fallback. #157591 Thanks @vincentkoc.
  • Close idle remote Skills subscriptions when Gateway shutdown begins. The fix applies once the updated Gateway is running; supervisors still need the normal shutdown allowance. #157592 Thanks @Kimiyu-186.
  • Preserve configured workspace precedence in managed worktree sessions, including normal precedence for a worktree deliberately configured as the agent workspace. #158110
  • Preserve prompt-cache identity and stable references to unchanged delivered skills across paired-node and cloud-worker turns. Changed content gets new paths, and old randomized transcript paths are not migrated. #160179
Skill Workshop suggestions

Skill Workshop refreshes suggestions when you return and removes Apply buttons from outdated proposals. If a revision request fails, your saved instructions return to the editor so you can try again. Comparison labels now make clear which saved version you are viewing changes against.

Sources and complete change list

Improvements

  • Move Workshop storage operations off the caller thread while preserving proposal approval and recovery. Update rehearsal cleanup retains its copy if closing the copied database fails. #156110
  • Inspect completed proposals without taking target write leases, while retaining ownership and fresh file-integrity checks. #157563
  • Reduce repeated decoding of completed proposal history while retaining pending recovery and the final complete listing. #158757

Bug fixes

  • Preserve the original reason for a failed background review in operator logs while keeping revoked work stopped. #157069 Thanks @obviyus and @Conan-Scott.
  • Correct the earlier English elapsed-time badge wording, subsequently refined to identify the saved comparison baseline. #157536 Thanks @RomneyDa.
  • Read saved review outcomes from the selected state database instead of the default store. #157774 Thanks @RomneyDa.
  • Restore the Skills settings heading and group Search, Workshop, Create, and Import actions in a toolbar that wraps on narrow screens. #157931 Thanks @Patrick-Erichsen.
  • Refresh suggestions on first return and restore saved revision instructions after failure. Failed list requests are not automatically retried. #158208
  • Label English comparison badges “Changes since” to describe the saved baseline, without changing timestamps or comparisons. #158250
  • Clarify tool arguments for personal skills and workspace proposals, and explain rejected fields without echoing their supplied values. Existing list and search limits remain unchanged. #158255
Skills menus and Code Mode

Large Skills menus open with less delay, and choosing an action no longer unexpectedly moves focus to the message box. Agents using Code Mode can find and read personal skills again, with the same access permissions and content limits.

Sources and complete change list

Improvements

  • Reduce layout work when opening large Skills menus and preserve menu-click focus behavior. The complete list is still constructed. #159917 Thanks @vyctorbrzezowski.

Bug fixes

  • Restore authorized personal-skill list and read results for Code Mode, retaining the 20-entry list, 32-file support manifest, and 16,000-character whole-text inclusion limits. Also remove a disposal callback that kept replacement plugin registries alive through an old registry. #160213 Thanks @VACInc.
Skill scan reports

Skill security scans now correctly count matches left out of a long report, fixing inflated totals when detection rules overlap. The checks themselves are unchanged.

Sources and complete change list

Security and trust

  • Correct omitted dangerous-command match counts when literal and imported-alias detections overlap beyond the reporting limit. #158906
tmux session details

The tmux skill now lists session names and creation times correctly, including names containing a pipe character. It also correctly shows sessions with one attached client as attached. Sessions with multiple attached clients can still show the wrong status.

Sources and complete change list

Bug fixes

  • Fix tmux session-name separators and creation-time formatting, restoring the demonstrated single-client attachment state while keeping existing socket options. #145928 Thanks @RileyJJY, @obviyus, and @mrzeepek.

Native Apps

The Mac app brings the web conversation into its native window, while Apple chat adds document and audio attachments.

The Android APK was skipped for this release, and official verification lists app version 2026.8.2. The Android items below describe changes in the tagged source.

Web chat in the Mac app

Full Mac chat windows now use the web chat interface by default on compatible Gateways, including for existing Native users. Rich replies and conversation controls sit alongside the Mac sidebar, menus and Cmd-K search. Quick Chat and iOS keep their native interface. The Mac window also keeps it while native drafts or queued messages need attention, or if web chat cannot load.

The sidebar now shows newest-created threads first and hides message previews, automation chats and system chats. Use View options beside Threads to bring them back or sort by recent activity.

Sources and complete change list

Improvements

  • Find agents, active threads and common actions with the native Cmd-K palette #159350
  • Supply the embeddable web conversation and its native-host coordination #159739
  • Share one titlebar row between the Mac window and conversation header #159932
  • Save Mac sidebar sorting, preview and background-conversation choices #160141

Bug fixes

  • Include declared plugin dependency assets in Mac app packages using shared dependency layouts #156188

Limits and compatibility

  • Make the web conversation the full Mac window's default with native-work and loading fallbacks. A web-originated navigation race involving pending native outbox work remains #159946
Embedded dashboard approval

Dashboards opened inside the Android or Mac app can use the app's existing device approval, avoiding a second approval prompt. The Linux/Tauri companion supports this for its remote Primary Gateway dashboard. Update both the app and the Gateway-hosted Control UI to use it. On Mac, the Primary dashboard also keeps that approval through refreshes and reconnects.

This reuses the app's existing permissions. iPhone and iPad, standalone browsers and saved non-Primary Tauri connections keep their separate sign-in.

Sources and complete change list

Bug fixes

  • Reuse native approval in supported embedded dashboards, including Android Terminal and Desktop views, with both updated app and hosted UI required 28e16ee — @fuller-stack-dev
  • Keep the Mac Primary dashboard's approved native connection usable after route or URL refresh and reconnect, including without a shared startup token or password #160763 — @fuller-stack-dev
iPhone and iPad drafts

On iOS, typing and your first sent message stay visible while the app finishes finding your agent. On iPad, resizing the window or opening the sidebar keeps your chat and unsent draft in place.

If iOS setup reports a storage problem when switching Gateways, it keeps your setup code and existing connection. Fix the storage problem before retrying.

Sources and complete change list

Bug fixes

  • Preserve newly typed iOS characters during a reentrant screen refresh 7f43b35 — Peter Steinberger
  • Keep iPad chat and draft state while resizing or changing sidebar visibility #156683 — @solvely-colin, @vincentkoc
  • Recover stored replies in Swift chat after temporary history overload #156772
  • Preserve iOS drafts during initial discovery and submitted messages during stale history refreshes #159065 — @joshavant
  • Keep iOS typing and keyboard focus through the initial agent handoff #159296 — @joshavant
  • Retain the first accepted iOS send while automatic agent discovery completes #159404 — @joshavant
  • Expose actual composer readiness to accessibility and respect disabled parent views #159496 — @joshavant
  • Preserve iOS setup input and existing connection settings after offline-data preparation refuses replacement; overlapping setup-attempt races remain outside this repair #160218
Files and replies in Apple chat

Apple chat can now attach documents and audio, including PDFs, Office files and ZIP archives. Use Attach, drag-and-drop or Finder paste on Mac, and + → File on iOS. Size limits still apply, and an oversized send keeps your draft. What the agent can read depends on the model.

Replies keep their paragraph breaks and related tool activity together, and show message times and the answering model when recorded. Scrolling also avoids a stall that could happen after repeated sends.

Sources and complete change list

Improvements

  • Avoid rebuilding unchanged native streaming reply snapshots during tool updates #158492 — @vincentkoc
  • Skip unused word-reveal preparation for earlier streaming prose blocks #158534 — @vincentkoc
  • Show completed-message times and recorded originating models, with exact-date accessibility details #159366
  • Show resolved Mac agent names and text avatars, and update Apple New Thread choices without resetting selection #159528
  • Attach documents and audio through Apple file pickers, drops and Mac Finder paste, with draft-preserving size checks #159667

Bug fixes

  • Stop a canceled native media operation before starting an unnecessary byte request 4368865 — Peter Steinberger
  • Prevent chat scrolling from stalling after repeated sends #147770 — @vincentkoc
  • Keep Apple narration, tool work and final replies grouped with their own input #156944 — @iwhatsskill, @solvely-colin, @vyctorbrzezowski, @vacinc
  • Preserve preview and run metadata and display oversized tool-read ranges without crashing #158509
  • Handle oversized speech options, rebuild audio conversion after input changes and cancel stale chat-settings requests #159386
  • Preserve paragraph breaks before lists and neighboring blocks in Apple replies #159517
  • Prevent malformed-health and extreme-usage crashes and retain native model-scope metadata #159778
Mac startup and Gateway settings

Mac startup changes address the crash reported with 2026.9.6 and show clearer errors when a profile cannot start. Enabling or refreshing an installed Gateway from the Mac app also keeps your choice of the program that runs it. If that saved choice is invalid, reinstall explicitly with --runtime or --runtime-path. Disabling the Gateway removes both its service and that saved choice.

Sources and complete change list

Bug fixes

  • Avoid falsely rejecting a valid Developer ID signature during Mac cloud-worker setup #156301
  • Show the original named-profile startup failure when no process is listening #156441
  • Address async-sleep paths implicated in Mac launch crashes and add a bounded ARM64 packaging audit #156881 — @coygeek, @davidcittadini
  • Handle reversed braces in CLI diagnostics without crashing #158516
  • Preserve saved runtime choices during Mac Gateway enable or refresh and require explicit replacement of invalid choices #160127

Improvements

  • Clarify Dashboard sign-in and connection-recovery buttons and allow dragging the surrounding background #157096

Limits and compatibility

  • Record the temporary withdrawal of the affected 2026.9.6 Mac in-app update, which did not repair already-installed copies 01a8055 — Peter Steinberger
  • Refresh historical 2026.9.6 feeds for rebuilt archives; feed metadata alone does not establish successful launch or same-version automatic recovery #157194
Mac sign-in and Keychain prompts

The Mac app can renew saved Cloudflare Access sign-ins before they expire while you are using the app and computer. Your browser may open to finish signing in. If you deny a saved-Gateway Keychain prompt, background refreshes stop asking for that app session. Choose Connect or Reconnect, or restart the app, to try again.

Sources and complete change list

Bug fixes

  • Stop repeated background Keychain prompts after denial while retaining credentials and an explicit retry path #157951 — @stevenlee-oai

Improvements

  • Renew same-account saved Cloudflare Access sessions before expiry, with browser interaction when needed #159381
Voice Wake edits and Swabble triggers

Mac Voice Wake uses your edited transcript, and clearing the text cancels the request. Swabble now honors its configured minimum length and cooldown, so short commands may stop triggering hooks. The default minimum is 24 characters. An early partial transcript can trigger a hook and prevent its corrected final text from triggering another during the cooldown; manual test-hook remains exempt from the length limit.

Sources and complete change list

Bug fixes

  • Keep Voice Wake's pending message synchronized with edits and dismiss whitespace-only sends #159031

Limits and compatibility

  • Enforce Swabble's existing minimum length and cooldown, including their effect on short inputs and partial-to-final speech #159406
Android setup and permissions

Android setup groups optional permissions under a shorter initial list and Additional features. You can skip all of them. Camera and Location still need to be enabled separately after permission is granted. If your account allows it, you can approve the phone's requested access directly during setup.

Use Manage Gateways → Rename to give saved connections recognizable names, even offline. Names stay on that phone and may be lost if you downgrade to an older app.

Sources and complete change list

Improvements

  • Simplify optional setup permissions and offer Android Settings recovery for blocked requests #157701 — @iwhatsskill
  • Offer explicit, authorized phone-capability approval during setup and verify effective access before continuing #157830 — @joshavant
  • Save phone-local Gateway names without changing server identities or connection details #159714 — @iwhatsskill
  • Explain nodes, paired devices, offline retention and overlapping device lists in Settings #159732 — @iwhatsskill

Bug fixes

  • Preserve pairing's credential handoff during setup permission changes #157569 — @fuller-stack-dev
  • Correct release and debug App Actions package metadata #159060 — @joshavant
  • Preserve an open QR-pairing exchange when another network becomes available #159719 — @iwhatsskill
  • Add spacing around Nodes & Devices rows while retaining their management actions #159728 — @iwhatsskill
  • Keep the Gateway picker open while scrolling; use Back, an outside tap or accessibility dismissal to close it #159744 — @iwhatsskill

Documentation

  • Explain protocol compatibility, why release numbers need not match, and why pairing does not prove every feature works #157467 — @iwhatsskill, @tomdailey55
Android pages and conversations

Android's Pages menu lets you open and pin work pages such as Agents, Automations and Terminal. Settings is now on the footer gear, available even offline, and can no longer be pinned. Ordinary chats appear separately in Threads; find automation conversations under Threads → Automations and manage schedules on the Automations work page. Existing conversations and their saved pins are kept.

Sources and complete change list

Improvements

  • Present node availability as one readable online count while preserving approval and pairing information #157746 — @iwhatsskill
  • Use consistent Android phone text sizes, compact dialog headings and an animated floating host label #159676 — @iwhatsskill
  • Put the offline-accessible Settings gear beside the Gateway selector and introduce conversation-first defaults #159718 — @iwhatsskill
  • Separate automation conversations from ordinary lists while preserving their transcripts, pins and selected-chat access #159737 — @iwhatsskill
  • Put existing work pages in the Pages pin menu and make Settings footer-only, superseding earlier Settings-pin behavior #159961 — @iwhatsskill

Bug fixes

  • Match sidebar and pinned-page labels to the Overview screen #157434 — @iwhatsskill
  • Retry explicitly temporary history refusals so Android conversations can catch up after overload #157865 — @romneyda
  • Move Android camera snapshot processing off the UI thread without changing JPEG settings or capture limits #158189 — @vincentkoc
  • Show ordinary Android chats independently without changing their stored parent or inherited model settings #159984 — @iwhatsskill
Android messages and camera attachments

Android has a full-width writing field with compact controls underneath. Use + → Camera to add a photo or video to your draft; camera permission is required, plus microphone permission for video. Completed replies stay visible when you collapse the tool activity, with counts of failed or blocked tools.

Sources and complete change list

Improvements

  • Remove the badge covering Android image thumbnails while retaining tap-to-preview and its accessible label #156828 — @iwhatsskill
  • Show individual tool-outcome counts in collapsed completed work #156950 — @iwhatsskill
  • Add a full-width draft, compact controls and staged camera attachments; named models pin a choice and Default model clears the override #157799 — @iwhatsskill, @jiangzhao2121-debug

Bug fixes

  • Collapse an expanded link preview without opening its link #158252 — @masterswords1, @iwhatsskill
  • Keep the first draft line at the same height when more lines are added #159720 — @iwhatsskill
  • Identify the bound agent in the empty message field, with neutral wording while routing is unresolved #159721 — @iwhatsskill
  • Resume queued-message processing after the affected send/reconciliation handoff without changing persistence or order #160121 — @romneyda, @vyctorbrzezowski, @jalehman
Android model and context controls

Android model search supports multiple words and small spelling mistakes in longer words. The Effort gauge follows your adjustments even with Fast mode on, shown by a separate bolt. To check token use and costs, open Chat actions → Context; the usage ring has moved out of the writing area.

Sources and complete change list

Bug fixes

  • Preview Effort changes immediately during a drag and restore the saved value after cancellation or rejection #156728 — @iwhatsskill, @pluviobyte
  • Keep the Effort needle responsive with Fast enabled and show Fast through a separate bolt #156860 — @iwhatsskill

Improvements

  • Find Android models with multiple required terms and limited typo tolerance, ranking search relevance ahead of the default #159725 — @iwhatsskill
  • Move the live context ring and existing usage panel to Chat actions while preserving unknown values when usage is unavailable #159733 — @iwhatsskill
Android Talk setup

Android Talk keeps error messages open until you dismiss them, giving you time to read what needs fixing. Granting microphone permission can now start Listening on the first attempt. Missing providers or invalid credentials still need to be corrected in Gateway setup.

Sources and complete change list

Bug fixes

  • Keep Talk setup and failure dialogs visible until dismissed without hiding later failures 1ed6408 — @ivankuznetsov, @iwhatsskill
  • Preserve the Talk startup connection when microphone permission is granted #157971 — @joshavant
Wear OS display and controls

The Wear OS companion shows its full startup icon and keeps the watch background black in Light appearance. Voice controls and permission guidance can scroll when translated text or larger text sizes need more room. The watch still needs a paired Android phone running OpenClaw and connected to the Gateway.

Sources and complete change list

Bug fixes

  • Show the complete circular Wear OS icon during cold startup #157316 — @iwhatsskill
  • Keep Wear backgrounds black while preserving light panels and readable controls #157357 — @iwhatsskill
  • Keep translated Voice controls and permission feedback readable on small round watches #157358 — @iwhatsskill

Documentation

  • Explain existing Wear Tile voice/chat shortcuts and the paired-phone requirement in English store-description source #157317 — @iwhatsskill
Linux Quick Chat and desktop updates

Linux fixes a Quick Chat widget crash on X11 and shows clearer update instructions. On opt-in Windows desktop-test builds, the updater keeps the app and downloaded update available if the installer fails to launch, so you can retry.

Sources and complete change list

Bug fixes

  • Show Linux update status without raw release-note markup and clear stale download-page errors after retry #158037 — @vincentkoc
  • Initialize X11 threading before GTK to prevent the reproduced Quick Chat widget crash #158041 — @vincentkoc

Limits and compatibility

  • Upgrade the desktop updater while preserving failed-installer retry for opt-in Windows test builds #158230
Native app translations

More Android and Apple app controls, settings and error messages follow your chosen language. These updates refresh existing supported languages, including attachment controls, sidebar options and connection guidance.

Sources and complete change list

Improvements

  • Localize Android's failed, blocked and unknown tool-outcome counts #157337
  • Refresh Android optional-permission, approval and node-status translations #157850
  • Refresh Android camera, model-search and usage text #158377
  • Translate Android's Collapse link preview label #158599
  • Refresh native command-palette labels and keyboard hints #159501
  • Refresh native permission, connection-recovery, Gateway-name and status translations #159853
  • Translate Apple attachment controls and filename-specific errors #159934
  • Translate Android browser controls and offline, access and version guidance #159969
  • Refresh Android Settings labels and connection prompts in 21 existing locales #160008
  • Translate native sidebar sorting and view controls in 21 existing locales #160270
  • Refresh native conversation-view labels and recovery guidance #160345

Documentation

  • Restore notices for parser dependencies still bundled with the native Mermaid renderer #157461
iOS sidebar animation

The iPhone and iPad sidebar mascot pauses while hidden and resumes when you open the sidebar, avoiding animation work you cannot see.

Sources and complete change list

Bug fixes

  • Pause the hidden sidebar mascot without changing other mascot animations #160607

Models and Providers

The optional OpenAI Agents API runs chats in hosted workspaces, while Sign in with ChatGPT (Beta) gives eligible accounts another way to connect. Model and video-generation choices also expand.

Agents API hosted workspaces

The optional Agents API runtime runs chats in a persistent hosted Linux workspace, with web search, OpenClaw tools, and file transfers on supported Linux storage. It requires an OpenAI API key with access to the chosen model. Self-hosted execution needs your own controller and matching workspace path, and does not support file transfers.

Use this runtime only on a single-user Gateway, with OpenClaw as the sole controller of the session. Start a new or reset chat after changing its instructions, tools, model, credentials, or execution environment. Resetting or deleting the local chat does not delete hosted history or files. Check that returned attachments arrived. Choose another runtime if you need per-turn tool restrictions from prompt hooks, restrictions on native shell/file/web access, or strictly tool-free background calls.

Sources and complete change list

Improvements

  • Add explicitly selected hosted Agents API conversations, with API-key permissions and remote-history retention #151176 — Thanks @sjf-oa, @sjf.
  • Use OpenClaw tools in hosted Agents API sessions f80fef13 — Thanks @sjf-oa, @sjf.
  • Transfer hosted Agents API files with Linux-native or Docker-managed state; Windows and macOS bind-mounted state remain unsupported b5e55716 — Thanks @sjf-oa, @sjf.
  • Show Agents API activity and preserve native tool history #156182 — Thanks @sjf-oa, @sjf.
  • Enable live web search in new Agents API sessions #156306 — Thanks @sjf-oa, @sjf.
  • Offer self-hosted Agents API execution with an external controller, matching workspace, and a shared 60-second submission deadline #158307 — Thanks @sjf-oa, @sjf.
  • Generate dream narratives and restricted completions; a lost creation response can prevent remote session cleanup #159246 — Thanks @sjf-oa, @sjf.

Bug fixes

  • Supply workspace rules and persona to new Agents API sessions 099220cc — Thanks @sjf.
  • Report Agents API token usage from settled native turns #156092 — Thanks @sjf-oa, @sjf.
  • Honor model-supported Agents API reasoning on new and reused sessions #156116 — Thanks @sjf-oa, @sjf.
  • Preserve conversation context in Agents API messages #156167 — Thanks @sjf-oa, @sjf.
  • Retry Agents API submissions after temporary server errors #158775 — Thanks @sjf-oa, @sjf.
  • Deliver plugin prompt context on ordinary Agents API turns, without enforcing hook tool lists #159375 — Thanks @sjf-oa, @sjf.
Sign in with ChatGPT (Beta) and OpenAI accounts

OpenAI setup makes Codex login, Sign in with ChatGPT (Beta), and API keys easier to distinguish, with model choices tied to the selected account. ChatGPT sign-in requires registration and consent to share tokens. It does not cover every model or media tool, and OpenClaw cannot show its quota or set per-app limits. The authentication comparison explains which credentials you need.

Signing back into the same verified account preserves conversation choices. Missing older account selections may still need reconnection or an explicit choice. ChatGPT Beta sign-in supports automatic compaction in native Codex, but not manual compaction or remote execution; see the setup guide.

Sources and complete change list

Improvements

  • Add Sign in with ChatGPT preview #148567 — Thanks @stevenlee-oai, @kevinlin-openai.
  • Share model sign-in preparation across clients #156784 — Thanks @grynn.
  • Show the selected ChatGPT sign-in identity #157629 — Thanks @stevenlee-oai.
  • Clarify OpenAI connection methods and their allowance boundaries during the initial sign-in ordering update #157792 — Thanks @stevenlee-oai.
  • Mark Sign in with ChatGPT as Beta across setup surfaces #160011 — Thanks @stevenlee-oai.
  • Show Codex login before ChatGPT beta sign-in #160078 — Thanks @stevenlee-oai.

Bug fixes

  • Keep conversation account choices after OAuth sign-in #149591 — Thanks @zachisfine, @obviyus.
  • Clear covered deleted-account selections and offer verified replacements, with recovery gaps for unreadable stores and providers lacking setup methods #157745 — Thanks @stevenlee-oai.
  • Refresh Profile accounts after changes elsewhere #157950 — Thanks @stevenlee-oai.
  • Keep model pickers usable during provider sign-in #158132 — Thanks @obviyus.
  • Separate sign-in problems from model refresh failures #158207
  • Refresh retained Codex ChatGPT credentials across turns #158458 — Thanks @fuller-stack-dev, @hannesrudolph.
  • Match OpenAI media tools to compatible credentials #159920 — Thanks @stevenlee-oai.
  • Discover model choices for the selected ChatGPT account #160027 — Thanks @stevenlee-oai.

Documentation

  • Clarify ChatGPT sign-in capabilities, usage limits and credential boundaries #160023 — Thanks @stevenlee-oai.
GPT-6 Sol and Luna

GPT-6 Sol and Luna appear for accounts with access through supported OpenAI API, ChatGPT, and native Codex connections. Discovery fixes help subscription accounts find them without changing existing model choices. To use OpenClaw's own runtime, select it explicitly in the runtime settings; choosing the model alone does not switch runtimes.

Sources and complete change list

Improvements

  • Support GPT-6 Sol and Luna on API and embedded OpenClaw routes #155967 — Thanks @fduch-stranger.

Bug fixes

  • Restore eligible GPT-6 Sol and Luna subscription discovery and native Codex execution #155989 — Thanks @fduch-stranger.
Claude Opus 5.5

Claude Opus 5.5 becomes the default for new Anthropic and Claude CLI setups and the rolling opus choice. Explicit Opus 5 selections stay unchanged. Opus 5.5 always uses thinking, even when you hide it. Automatic PDF analysis can use 5.5 independently of your chat model; set a PDF model explicitly to keep a particular version.

Sources and complete change list

Improvements

  • Add Claude Opus 5.5 with its thinking and pricing rules #155966
  • Use Opus 5.5 for rolling defaults while preserving explicit Claude selections #156093 — Thanks @fuller-stack-dev.

Bug fixes

  • Restore Opus 5.5 requests with Claude subscription authentication #156062 — Thanks @serg0x, @aleps001, @kiiatkin.
Claude Sonnet 5.5

Claude Sonnet 5.5 is available through Anthropic, and the rolling sonnet choice now selects it. Explicit version selections, including sonnet-5, stay pinned, while fresh setup still defaults to Opus 5.5. Thinking defaults to high; choosing off still permits notes between tool calls.

Claude Code 2.1.277 rejects the new model ID. Use an explicit sonnet-5 selection to keep Sonnet 5 on that version.

Sources and complete change list

Improvements

  • Add Claude Sonnet 5.5 and advance the rolling sonnet alias, with a one-million-token context window, 128,000-token output limit, and Sonnet 5 API rates #160847

Fast mode and Priority Tier remain unavailable. Forced tool choices become automatic. Reasoning can carry from Sonnet 5 or Claude 4.x into Sonnet 5.5, but not from Opus 5/5.5, Fable, or Mythos; other models cannot reuse Sonnet 5.5 reasoning. Eligible direct Anthropic API-key requests may fall back to Sonnet 5 after safety refusals at the same rates. This change does not add Bedrock, Vertex, Foundry, or Mantle catalog entries or establish a minimum compatible Claude Code version.

Video generation providers

Video generation adds Kie AI, Z.AI, and Novita for text prompts and supported image inputs. Qwen and Alibaba Wan can also animate local images. Kie is enabled by default but needs an API key, and Z.AI video uses general API billing even if you use a Coding Plan for chat. Input and output limits vary by model; Kie AI, Z.AI, and Novita do not accept reference videos.

Sora and the bundled custom OpenAI-compatible video connection have been removed following Sora's retirement. Replace saved openai/sora-2 or openai/sora-2-pro selections with another configured provider. They are not changed automatically and can keep failing.

Sources and complete change list

Improvements

  • Add Kie AI, Z.AI, and Novita video models and allow Kie/Runway credential-only configuration #160080

Bug fixes

  • Show failed video and music providers in warning logs #158914 — Thanks @ayushdevo, @obviyus, @kybrcore.
  • Animate local images with Qwen and Alibaba Wan within tool intake and model-specific limits #160123

Limits and compatibility

  • Remove the retired OpenAI Sora video provider #159543 — Thanks @kybrcore.
Codex command results and conversations

The managed Codex runtime moves to 0.158.0, fixing missing output from completed commands. Parent agents can continue when workers finish, and conversation forks and compaction retain their context more consistently. These fixes need the updated runtime and do not replay previously failed deliveries. Model discovery also waits longer for slow responses, unless you configured a shorter timeout.

Sources and complete change list

Improvements

  • Reduce Codex relay processing for unchanged requests #155987
  • Release idle Codex catalog decoder memory #156202
  • Clarify deferred Codex catalog refresh warnings #157352 — Thanks @shakkernerd, @mrzeepek, @flyto168, @zl0nline, @brennan-scott, @msobrosa, @safrano9999.
  • Stop full Codex history scans while catalogs are idle #157565 — Thanks @pollybot13, @siskoyu.

Bug fixes

  • Keep Codex conversations usable after compaction b4d60fa5 — Thanks @jjjhenriksen, @jalehman.
  • Respect Codex compaction cancellation and close progress #132343
  • Recover stale heartbeat calls in ordinary Codex turns #148547 — Thanks @romneyda.
  • Report Codex connection failures and timeouts correctly #155710 — Thanks @vincentkoc.
  • Keep Codex plugin discovery deadlines stable across clock changes #155863 — Thanks @sunnyshu0925, @altaywtf.
  • Prevent duplicate Codex replies and stale Activity previews after streaming #156144 — Thanks @galiniliev.
  • Verify configured remote Codex services for Ask OpenClaw #156671 — Thanks @sjf-oa, @sjf.
  • Preserve unknown outcomes for running Codex commands #156764
  • Wait for Codex process cleanup after failed startup #157229 — Thanks @mmartoccia.
  • Restore caller-authorized native compaction, requiring compatible host and plugin versions #157977
  • Keep native sessions responsive during database contention #158396 — Thanks @fuller-stack-dev.
  • Use configured transport for remote Codex finalization #159331 — Thanks @kevinlin-openai.
  • Preserve saved conversation text in Codex forks #159651
  • Stop native terminals when canceling unsandboxed Codex runs #159841
  • Allow slow Codex model discovery to finish #160363 — Thanks @kimiyu-186.
  • Retain completed command output with Codex 0.158.0 #160487 — Thanks @kimiyu-186.
  • Resume Codex parent sessions after workers finish #160608 — Thanks @fuller-stack-dev.

Limits and compatibility

  • Repair Codex child-result delivery after parent yield in the earlier Tasks-backed implementation, before its retirement #156247 — Thanks @vincentkoc.
  • Repair native completion persistence and acknowledgements under contention in the earlier Tasks-backed implementation #158286 — Thanks @fuller-stack-dev.
  • Repair saved Codex child-assignment recovery before the shared Tasks runtime was retired #159735
Codex files, tools, and Ultrafast

Local Codex can read full uploaded documents beyond their shortened previews when running without a sandbox and with read permission. Optional plugin tools already granted to the agent remain available. You can opt into Ultrafast with appServer.enableUltrafast; it is off by default and requires account and model support.

User-home Codex connections now follow the provider configured in that Codex home, including when an existing chat resumes or forks. Check that it supports your model. To keep built-in OpenAI routing, set model_provider = "openai" there and restart the app-server, or use an agent-home setup with suitable credentials.

Sources and complete change list

Improvements

  • Opt into model-aware Codex Ultrafast tier selection #158703 — Thanks @sjf-oa, @sjf.

Bug fixes

  • Honor the native home's configured provider for user-home Codex chats, including cold resume and side questions #156226 — Thanks @galiniliev.
  • Let local Codex read complete uploaded documents #156758
  • Restore Codex model-reference validation in Docker #157175 — Thanks @sandra-peach.
  • Honor configured tool PATH in local Codex commands #157290 — Thanks @vincentkoc.
  • Exit normally after Codex model validation #157323 — Thanks @obviyus.
  • Preserve compact argument schemas for Codex plugin tools #157734 — Thanks @jalehman, @flyto168.
  • Restore granted optional plugin tools in Codex runs #157840 — Thanks @shootingsyh, @obviyus.

Limits and compatibility

  • Restore local Codex admission through the earlier detached-task owner, before that Tasks surface was retired #156624
Claude CLI conversations and tools

Foreground Claude CLI subagents can work beyond fifteen minutes while they continue making progress; silent work still has a timeout. Manual compaction keeps the conversation connected, and permitted shell tools keep working after a plugin refresh.

Claude CLI turns managed by the local plugin now allow quiet time while Claude shortens a long conversation. The overall run deadline still applies, and sessions running on a node keep their previous timeout behavior.

Sources and complete change list

Improvements

  • Reduce memory retained by Claude Desktop session listings #156266 — Thanks @goslingmanagment, @moerai.
  • Avoid duplicate concurrent Claude history imports #158232

Bug fixes

  • Keep working foreground Claude subagents alive beyond fifteen minutes #157248 — Thanks @olli0103, @obviyus, @openclawkobian99.
  • Keep plugin-owned Claude CLI turns active during silent compaction, within the existing outstanding-work allowance; stalled compaction can take longer to stop #157498 — Thanks @etzelm, @Patrick-Erichsen, @cipp-ashe.
  • Preserve Claude CLI conversation context during manual compaction #157870 — Thanks @obviyus, @amarsmission.
  • Keep Claude CLI shell tools working after plugin refresh #159000 — Thanks @vacinc.
Anthropic sign-in and prompt caching

Anthropic connections handle stored subscription credentials and custom beta settings more consistently, avoiding related request failures. Prompt caching also follows the provider's context settings, and rewinding no longer changes an otherwise identical prompt unnecessarily.

Sources and complete change list

Improvements

  • Reduce repeated configuration comparisons in model authentication #156054

Bug fixes

  • Honor Anthropic transport session-affinity opt-in 6fea6820
  • Keep prompt bytes stable across conversation rewind #155749 — Thanks @holny, @obviyus, @lennartack.
  • Honor installed Claude identity for stored subscription credentials #157595 — Thanks @serg0x.
  • Align Anthropic caching with provider context retention #157662 — Thanks @romneyda.
  • Keep required Anthropic fallback beta with custom betas #158300 — Thanks @romneyda.
  • Keep Active Memory recall prompts stable on Claude CLI so unchanged inputs can reuse the provider cache, without changing ordinary resumable turns #160768 — Thanks @obviyus, @ndakota79.
Copilot accounts and saved history

Copilot keeps credentials for different organizations separate during repair, refresh, and logout. If an agent relied on another organization's credentials, sign in for the intended organization. Newly saved conversations also preserve valid encrypted reasoning, and each agent keeps its own Code Mode controls without gaining extra tool permissions.

Sources and complete change list

Bug fixes

  • Preserve separate Copilot tenant credentials during Doctor repair 104e67f5 — Thanks @vasubansal7576.
  • Allow Copilot client creation to recover after immediate failure 6392e847
  • Preserve valid long-ID Copilot reasoning in newly stored transcripts without repairing earlier damage #155994 — Thanks @yashas-13, @obviyus, @baiwei0427.
  • Keep Copilot Code Mode controls with the executing agent #157044
Model menus

Model menus show known choices while the full list loads and keep your current model easy to find. Repeated background refreshes no longer stall native agent runs. Reopen the menu to see newly discovered models; your account and role restrictions still apply.

Sources and complete change list

Improvements

  • Reuse configured-model fallback preparation #156076 — Thanks @vincentkoc.
  • Keep current models visible in large pickers #157869 — Thanks @obviyus.
  • Show chat model menus while discovery continues #157899 — Thanks @obviyus.
  • Open model pickers during startup loading #158128 — Thanks @obviyus.
  • Preserve provider ordering in the first model picker #158130 — Thanks @obviyus.

Bug fixes

  • Keep starter models available after initial discovery failure 36def8be
  • Respect role restrictions in model pickers #154839 — Thanks @shakkernerd.
  • Keep custom endpoint capabilities separate from canonical catalog assumptions #156017
  • Identify native app sign-in failures in Models #156278
  • Keep catalog updates flowing when one provider disappears #156352 — Thanks @obviyus.
  • Warn and retain saved model selections when Doctor finds retired or route-incompatible replacements #156435 — Thanks @orionation, @bruce-yii, @sundaydriver, @shadesurgeon.
  • Recover model listings after interrupted credential refresh #156561 — Thanks @captain69g.
  • Keep shared catalog requests alive for remaining callers #157191 — Thanks @vincentkoc.
  • Stop repeated catalog refreshes from stalling agent runs #157459 — Thanks @mmartoccia, @goslingmanagment.
  • Return rejected direct session pins to the configured primary #157472 — Thanks @quinszouls, @polaris-arch, @obviyus.
  • Use primary for refused inherited or unavailable model pins #157556 — Thanks @obviyus, @quinszouls.
  • Refresh host-only model entries during account renewal #157772 — Thanks @romneyda.
  • Preserve legacy model catalogs after failed refreshes #158113
  • Preserve model discovery failures across provider aliases #158139
  • Explain unknown model-provider filters as invalid requests #159237
  • Reset session model overrides to the configured default, including already queued follow-ups #159587 — Thanks @obviyus, @dh-js.
  • Reduce model-catalog memory growth when switching providers #160055 — Thanks @cyb3rb1ade, @eliasopolski.
Provider errors and retries

OpenClaw avoids repeatedly sending requests that a provider has already rejected, while temporary failures keep their normal retry handling. Plugin background requests can use your configured fallback models unless you explicitly chose a model. Before retrying a failed turn, check whether its tools already completed any actions.

Sources and complete change list

Improvements

  • Avoid plugin discovery when preparing local-model context guidance #155505 — Thanks @romneyda.

Bug fixes

  • Keep Qwen token throttling from disabling saved profiles #152521 — Thanks @leon-sk668, @altaywtf, @apple2345-pixel.
  • Preserve model parameters in utility completions #153451 — Thanks @alix-007, @obviyus, @dwalthour.
  • Avoid write contention when selecting CLI fallback #156703 — Thanks @vacinc, @fuller-stack-dev.
  • Keep TypeSafe input rejections from blocking valid decisions #156746 — Thanks @jalehman.
  • Show provider recovery guidance when ACP returns no reply #156879
  • Preserve runtime publication errors without provider fallback #157218 — Thanks @gokay-ai, @wg-mojo, @obviyus.
  • Honor configured fallbacks for plugin background completions #157398 — Thanks @obviyus, @olli0103, @paweldrozd.
  • Recover proxy reasoning sessions with exhausted answer budgets #157673 — Thanks @obviyus, @name5566.
  • Skip repeated requests for provider rejections with misleading retry codes #159221 — Thanks @obviyus, @novaunboundai.
  • Return actionable errors from the embeddings API #159224
  • Stop replaying bodyless nontransient client errors #160584 — Thanks @obviyus, @bogdandragosvasile.
Streaming replies

OpenClaw does less repeated work when receiving long replies and preparing large model requests. Buffered Anthropic replies also give other conversations time to respond.

Sources and complete change list

Improvements

  • Yield between buffered Anthropic stream events #158410
  • Avoid full-prefix rescans in cumulative Responses streams #158526
  • Combine queued text fragments before agent delivery #158837
  • Skip unused extension dispatch during reply streaming #158859
  • Move provider-request hashing off the Gateway thread #159463
  • Encode eligible OpenAI-compatible HTTP requests once #159574
  • Reduce repeated inspection of streamed plugin replies across nested consumers fd17d340
  • Reduce repeated plugin wrappers and processing overhead during OpenAI streaming #160894

Bug fixes

  • Decode CR-only Anthropic events and reduce repeated framing scans; mixed-ending support remains incomplete #158503
Gemini and Grok voice conversations

Gemini 3.8 Live keeps spoken turns in history and handles requests for agent help more consistently. Grok Talk avoids duplicate saved utterances and supports longer playback. Speaking over Talk replies interrupts playback again during agent consults unless you disabled interruption; Gemini Extended Thinking may still resume speaking after an interruption.

Sources and complete change list

Bug fixes

  • Repair Gemini 3.8 Live consults, thinking settings, and response completion 0ba669ef — Thanks @saariuslystoned, @iwhatsskill, @fuller-stack-dev.
  • Restore Gemini 3.8 Live spoken turns and consults cf982200 — Thanks @saariuslystoned, @iwhatsskill.
  • Restore Gemini 3.8 Live and Extended Thinking replies when clients keep sending silent audio frames after speech; the bridge does not generate missing audio #152844 — Thanks @saariuslystoned.
  • Restore Talk interruption during forced agent consults #153727 — Thanks @saariuslystoned, @dreamer-hit, @destinedenergy.
  • Let GPT-Live start after recoverable provider warnings #155534 — Thanks @alix-007, @obviyus, @rmyers64.
  • Preserve Grok utterances, confirmed-action retry context, and longer playback within a 60-second queued-audio limit #155838 — Thanks @marvinthebored, @peetiegonzalez, @vacinc, @obviyus.
Gemini speech and two-voice dialogue

You can choose Gemini 3.8 Flash or Flash-Lite to generate speech, with delivery instructions kept separate from the words spoken. Gemini 3.1 Flash TTS Preview remains the default.

For dialogue, select a 3.8 speech model and configure exactly two voices, each with a distinct speaker name. Put the name and words on the same line, such as Puck: Hello, to choose that voice. Unrecognized labels are read aloud, and text without recognized labels uses the single-voice path.

Sources and complete change list

Improvements

  • Add optional Gemini 3.8 Flash and Flash-Lite speech models with separate delivery-style metadata #157331 — Thanks @saariuslystoned.
  • Generate Gemini dialogue with two explicitly configured voices and inline speaker labels #157465 — Thanks @saariuslystoned.

Set tts.providers.google.model to gemini-3.8-flash-tts or gemini-3.8-flash-lite-tts, and configure dialogue through tts.providers.google.speakers. Speaker names are case-sensitive, and a bare name without words on the same line does not switch voices. Lead-in text belongs to the first labeled speaker encountered. Older preview models reject recognized dialogue. These additions generate audio from text and do not change realtime voice conversations or automatically cast speakers.

Gemini Interactions

You can opt into Gemini Interactions for streamed replies, reasoning, images, and tools. Google defaults stay unchanged. This connection sends the needed history with each request without asking the API to store it, and can recover interrupted replies under the normal retry rules. Cached-content handles and video clipping offsets are not supported.

Sources and complete change list

Improvements

  • Add opt-in Gemini Interactions and fix pending thinking-level edits and rollback in the Control UI #149880 — Thanks @markmcd, @romneyda, @rboy1.

Bug fixes

  • Recover interrupted Google Interactions replies and release readers #159198
PDFs and unreadable images

PDF analysis works with valid OpenAI credentials when Codex is enabled and can fall back to your active vision model when other choices are unavailable. The image viewer can skip unreadable images while keeping valid ones in the same request, preventing them from breaking a new reply.

Sources and complete change list

Bug fixes

  • Skip unused discovery for configured image models #156482
  • Fix PDF authentication with OpenAI and Codex #156929
  • Use the active vision model as a final PDF fallback #159593 — Thanks @zyz619963502zyz, @obviyus, @dh-js.
  • Skip unreadable viewed images before they break replies #159668 — Thanks @obviyus, @chaolawo-byte.
Usage estimates and Ultra

Cost estimates now use the provider handling the request, and total CLI token counts are kept separate from the current conversation's context usage. Missing SuperGrok usage percentages are explained rather than shown as zero. You can also choose Ultra for planning and verification guidance across OpenClaw and Claude Code models. It uses only the reasoning the model supports; native Codex needs supported reasoning choices. Cost figures remain estimates.

Sources and complete change list

Improvements

  • Extend Ultra planning and verification across supported runtimes #155393 — Thanks @vincentkoc.

Bug fixes

  • Use provider-specific price estimates and preserve compatible downloaded catalogs; refreshed data activates after restart f1f18d72 — Thanks @vincentkoc, @obviyus.
  • Separate CLI token totals from current context usage f3857241 — Thanks @vincentkoc, @yuxin-qiao.
  • Explain missing SuperGrok usage percentages without inventing zero usage #155790 — Thanks @saariuslystoned, @obviyus.
  • Reject inherited keys in Moonshot and Tencent thinking policies #158437
  • Show the selected model's Fast Mode policy in status #158934 — Thanks @vacinc.
  • Preserve supported extra-high reasoning alongside configured context budgets on standard OpenRouter connections; already prepared models can still retain stale effort settings after a catalog refresh #160651 — Thanks @Olli0103, @obviyus, @AXEG0.
Decision model evaluations

Agents can use a configured Decision model to answer yes/no questions, choose between alternatives, or score supplied evidence. That evidence goes to your selected local or hosted provider, with its normal limits and charges. Results do not authorize actions, and the default-off Labs preference does not start automatic evaluations. Private or nightly setups using the old TypeSafe tool or model setting must move to the shared Decision selection.

Sources and complete change list

Improvements

  • Add explicit Decision evaluation, a Labs preference without automatic work, and replacement of the old TypeSafe-specific tool and model setting #155134 — Thanks @jjjhenriksen, @jalehman, @mertbasar0.

Bug fixes

  • Preserve runtime context after provider review efd9b981
ACP and OpenClaw model settings

ACP agents now keep their external agent's model choice separate from OpenClaw's own model calls. After updating, check agents.defaults.model and its credentials. This can change the provider and account used for those calls, who bills you, and where your data goes. Signing in to the external agent does not sign you in to that provider. The model guide explains the settings.

Sources and complete change list

Bug fixes

  • Separate ACP harness models from native model calls #153756 — Thanks @saariuslystoned, @shakkernerd, @ajmtrz.
  • Keep active turns working through configuration reloads #154462 — Thanks @treylawrence, @vacinc, @oldrich333.
  • Keep Gateway model commands out of local state preparation #158136 — Thanks @vacinc.

Documentation

  • Clarify that ACP steering queues a follow-up; cancel first when work needs immediate redirection #154372 — Thanks @saariuslystoned, @ubehera.
Responses API conversation continuity

Applications using the Responses API can continue non-Incognito conversations after a restart. Continuation lasts up to 30 days, subject to storage limits and the conversation's lifetime. If previous_response_id is unknown or expired, the API now returns an error instead of silently starting a new chat. Resend the full history without that ID. IDs from before this update are lost when the old Gateway exits; live Incognito chats need an authorized session key without a response ID.

Sources and complete change list

Bug fixes

  • Avoid false aborted results for running async tools #157212 — Thanks @obviyus.
  • Keep delayed tool results matched to their original calls across eligible Responses continuations, falling back to full history when the match is ambiguous 906dccdd — Thanks @hartmark and Patrick Erichsen.
  • Retain provider usage and error details after rejected tool calls in the built-in OpenAI Responses transport while blocking later calls a1a0ec6c — Thanks @RomneyDa.

Limits and compatibility

  • Persist response continuations and reject unresolved IDs #159227
Telnyx setup

Connect Telnyx by installing its official provider with openclaw plugins install telnyx, then adding your API key. The Telnyx guide covers setup and model selection. The plugin is installed separately, and available models depend on your account.

Sources and complete change list

Improvements

  • Add official Telnyx inference provider setup #116016 — Thanks @dynamite-bud, @jalehman, @patrick-erichsen, @dmmc12.
Ollama tool calls

Ollama agents no longer lose free-form tool arguments because of how OpenClaw describes them. This fixes affected Tool Search calls that repeatedly failed with missing-input errors.

Sources and complete change list

Bug fixes

  • Preserve free-form tool inputs in native Ollama requests #157564 — Thanks @hmache, @obviyus, @markomiric, @holny.
Fireworks default model

New Fireworks setups use GLM 5.3 Fast instead of the retired GLM 5.2 Fast. If you saved the old model, choose a replacement yourself. The bundled cached-input cost estimate rises from $0.21 to $0.39 per million tokens.

Sources and complete change list

Limits and compatibility

  • Replace Fireworks' retired default with GLM 5.3 Fast #160102
Grok and DeepSeek thinking controls

Supported newer standard Grok models get thinking controls and image-input support without waiting for each model name to be added. Grok 4.20 and variants such as Fast are excluded. DeepSeek Flash also honors thinking settings on affected OpenAI-compatible connections.

Sources and complete change list

Bug fixes

  • Recognize thinking and images for newer standard Grok releases #156397 — Thanks @serg0x.
  • Restore canonical DeepSeek Flash fallback thinking support #157304 — Thanks @sahilsatralkar, @obviyus, @anarchia-99.

Automations and Scheduling

Automations gain clearer setup, run history, and delivery status, alongside fixes for interrupted and delegated work.

Schedule settings

Jobs scheduled for a named conversation now run in its saved project directory or managed Git worktree. If the worktree is missing or no longer matches the conversation, the job stops. Restore its binding or recreate the job from a valid bound conversation before retrying. New unbound sessions still use the agent's configured workspace, while current and isolated jobs stay detached.

The Automations editor catches invalid webhook addresses before saving and correctly saves the default timing window for hourly jobs. The schedule guide explains exact timing and staggered starts.

If your scripts create system-event jobs, remove --timeout-seconds from those commands. Cron add and create now reject that previously ignored option. Agent and command jobs keep timeout support; script jobs use --script-timeout-seconds.

Sources and complete change list

Improvements

  • Reuse unchanged automation list results and look up pending-message names in the selected store #158077.
  • Reduce loading-related browser style work when searching expanded Automations lists #159901. Thanks @vyctorbrzezowski.

Bug fixes

  • Reject malformed webhook URLs and embedded credentials in the editor before saving #146706. Thanks @pengzh1, @obviyus, and @aniruddhaadak80.
  • Preserve hourly default staggering when saving and reopening timing choices #156974.
  • Let agents read automation jobs and update results containing scheduler error counts #157497. Thanks @he-yufeng, @obviyus, @nicolasderito, and @xiaozishan.
  • Use saved project directories for named-session schedules and retain workspace and tool restrictions across rollover, with conversation and worktree ownership checks #159444. Thanks @vyctorbrzezowski.
  • Identify invalid timezones separately from invalid timestamps and nonexistent daylight-saving times #159756.

Limits and compatibility

  • Reject unsupported timeout flags on system-event creation without changing stored jobs #159716.
Announcement recipients and delivery status

Announcement setup suggests known conversations after you select a channel and enter its Account ID, with manual entry still available. Scheduled announcements receive the channel's formatting instructions, and command or script announcements sent to an explicit destination can appear in chat history for follow-up replies.

Webhook delivery shows Unknown when the request may have arrived but no response confirms it. OpenClaw does not retry these sends. A successful job is not confirmation of delivery, including when best-effort delivery lets the job finish.

Sources and complete change list

Improvements

  • Suggest account-scoped announcement targets, preserve manual entry, and clear stale topics after routing changes; failure-alert suggestions remain separate 05af7bc. Thanks @zeroaltitude.
  • Reduce session-processing work for delivery previews and scheduled destination lookups while preserving routing choices and reading route changes afresh #160216.

Bug fixes

  • Record successful explicit-destination command and script announcements in chat context when destination lookup and session admission succeed #156962. Thanks @obviyus and @fourestfire.
  • Supply scheduled chat announcements with the delivering channel and account's formatting rules #157877. Thanks @obviyus.
  • Accept disabled failure alerts through the automations tool while keeping auto-disable safety notices; restricted-schema providers retain object-only settings #158325. Thanks @obviyus and @joshpetras.
  • Preserve unknown webhook delivery after timeouts, interrupted responses, and ambiguous redirects without replaying the send #159840. Thanks @joshavant.
Automation run transcripts

Choose View transcript on a run to read its conversation and load earlier messages. Isolated runs show their own conversation; custom-session jobs show the conversation shared across runs. Run history remains available after Tasks retirement, and the sessions CLI can archive or delete a stored run by its exact key. Retention limits are unchanged, and previously deleted history is not restored.

Sources and complete change list

Improvements

  • Give conversation-history reads a separate queue from cron retention scans, with an extra on-demand reader and memory and cold-start tradeoffs #155998.
  • Move scheduled-job history reads off the Gateway thread while preserving filters, pagination, and current access checks #158222.
  • Open and page the recorded automation transcript directly through Cron, preserving the selected session generation and checking access on every page #158776.

Bug fixes

  • Resolve exact cron-run session keys for CLI deletion, archiving, and dry runs while retaining confirmation and identity checks #158212. Thanks @obviyus and @abacha.
  • Recheck cron history grouping and current rank before overflow deletion; this change's managed-flow cancellation repair preceded the later TaskFlow removal #159064.
  • Close old transcripts when switching automation panels and ignore their delayed replies while retaining same-panel selections #159160.
Recovery after temporary failures

A temporary database error during startup no longer leaves future jobs unscheduled after the problem clears. Jobs using supported local Ollama or OpenAI-compatible endpoints also check the provider again on their next run after a connection check times out. The affected run may still be skipped.

Sources and complete change list

Improvements

  • Avoid redundant database snapshots during cron receipt checks without changing admission or deletion checks #156801.

Bug fixes

  • Preserve command output, exit status, and timeout details when cleanup fails; uncertain cleanup still reports an error and keeps backup write ownership held c6709b4. Thanks @masatohoshino.
  • Stop caching client-side local-provider probe timeouts for five minutes, allowing the next isolated run to probe again #156237. Thanks @obviyus and @charlie-morrison.
  • Resume future scheduling after transient startup catch-up failure, including subsequent suspension and resume #159086. Thanks @obviyus and @yetval.
  • Move manual, scheduled, and startup catch-up reservations to the database worker; execution still waits for a durable reservation #159792.
Permissions for delegated work

Scheduled jobs can launch workers with their already-approved permissions without a mistaken administrator-permission error. Configured channel owners can also manage automations again after delegated work finishes. Existing restrictions still apply, and explicitly requesting Full Access still requires administrator permission.

Sources and complete change list

Bug fixes

  • Recognize existing one-use automation management grants after subagent completion while retaining handler validation #157404. Thanks @obviyus.
  • Preserve the parent's effective execution mode for newly spawned workers without granting administrator identity or rewriting existing sessions #158270. Thanks @fuller-stack-dev and Jason Sy.
  • Read scheduled-job child status and answers through the database worker while retaining successor, paused-work, queued-delivery, and cancellation handling #160508.
  • Omit tool discovery and delegation instructions from Codex runs with an explicitly empty tool allowlist, including scheduled jobs; this corrects the prompt without adding permission enforcement #160840.
Heartbeat alerts and restarts

When a completed heartbeat decides no notification is needed, it also suppresses tool-failure warnings and attachments. Later runner failures still produce alerts. Restarting no longer hangs on a queued heartbeat job; that waiting job is marked skipped during shutdown.

Sources and complete change list

Bug fixes

  • Settle queued heartbeat jobs as skipped during shutdown to avoid a circular restart wait 24babfe. Credit Peter Steinberger.
  • Honor completed quiet heartbeat decisions and suppress their exact unsent warning records; already queued or ambiguous sends keep their recovery handling #156174. Thanks @pash-openai.
  • Correct Doctor's create and update summaries for disabled monitors without changing their stored enabled state #159711.
Workboard completion triggers

Enabled automations attached to a Workboard can now run when linked workers finish, fixing cases where they had to wait for the next scheduled run. Disabled jobs stay off, and the normal schedule remains a fallback. Older hosts without this trigger support report that it is unavailable.

Sources and complete change list

Bug fixes

  • Let the active Workboard service request completion-triggered runs while retaining disabled-job, cron-origin, and stopped-service exclusions #156130. Thanks @joshavant.
Gmail watch renewal

Gmail watches renew once after an overdue wake and avoid overlapping renewal attempts. Stopping or replacing a watcher also stops its unfinished renewal. The renewal schedule and mail forwarding behavior are unchanged.

Sources and complete change list

Improvements

  • Coordinate Gmail watch renewal with scheduling, replacement, and shutdown in the Gateway and standalone Gmail service #158913.
Scheduled-session cleanup

Cleanup of old scheduled sessions does more work in the background and uses less temporary memory, reducing interruptions to other activity. Retention rules and transcript archiving are unchanged, and cleanup can still take longer overall in custom stores. The scheduling guide explains late starts, startup catch-up, and shutdown.

Sources and complete change list

Improvements

  • Discover expired cron-run sessions in a worker while retaining shared-store ownership and deletion safeguards #155414.
  • Reduce temporary allocation during cleanup and previews without making previews persistent or changing retention policy #160510.

Documentation

  • Explain coalesced late timer wakes, Cron's own execution and catch-up policy, and shutdown waiting for registered work #160477.

Browser and Computer Use

The chat Browser panel shows tabs related to your conversation, and attached or cloud-session desktops let you hand control back to the agent after a manual step.

Lightpanda browser profiles

Experimental Lightpanda profiles let your agent read pages and fill forms. Lightpanda needs separate setup with a protected connection and supports one temporary page at a time. After a disconnect, reopen the page and take a new snapshot. Chromium remains the default for screenshots, PDFs, file transfers, saved sign-ins, multiple tabs, and unsupported sites.

Check the guide's licensing requirements before deploying or redistributing Lightpanda. Version 0.4.1 uses AGPL-3.0-or-later; OpenClaw's adapter remains MIT-licensed.

Sources and complete change list

Improvements

  • Add explicitly selected, externally started Lightpanda profiles with capability checks and connection-owned pages. b7eb012 — @vincentkoc
  • Show supported browser engines and their session and screenshot capabilities in status, without implying an engine is installed or running. 0a5178c — @vincentkoc
  • Add an optional Chromium headless-shell benchmark selection with distinct result labels; this does not change the production browser or establish resource savings. f5cf1b3 — @vincentkoc

Documentation

  • Add pinned native Linux/macOS and Linux-container setup examples, plus an opt-in text-and-form benchmark; Windows guidance uses containers or WSL. 645f1bc — @vincentkoc
  • Document engine licensing, artifact provenance, and redistribution obligations in the September 21 audit, without treating checksums as permission to redistribute. 322e358 — @vincentkoc
Browser tabs in chat

The chat Browser panel now shows tabs related to that conversation. The tagged Android source lets you interact with the agent's tab inside chat and return to your draft (see Native Apps for release availability). This requires administrator access and an updated Gateway with its bundled Control UI enabled. Closing the Android card leaves the tab open. New tabs opened through the Browser panel close when you reset or delete the conversation; older tabs remain in the Browser dock.

Session browser dashboards also let people with conversation write access interact without browser administrator access. They start without your saved sign-ins and require Playwright with local managed Chromium. Conversation access limits still apply, and read-only, sandbox-required, or locked-model sessions are excluded. Stopping the dashboard, resetting the conversation, or restarting OpenClaw loses its page state.

Sources and complete change list

Improvements

  • Limit chat Browser tab listings to session-owned and conversation-referenced tabs, with session cleanup for newly panel-opened tabs and the full Browser dock still available. #159891
  • Add Android in-chat remote browser control, touch and keyboard input, collapse, and reopening under existing administrator access. #159767 — @iwhatsskill, @ivankuznetsov
  • Let eligible session writers interact with isolated managed-Chromium dashboards, separate from administrator browsing; remote, attached, personal, node, and Lightpanda profiles are unsupported, and dashboard records remain in memory with a 64-record limit. #156371 — @vincentkoc

Bug fixes

  • Open the browser card's selected page after the panel finishes delayed rendering. #153253 — @vyctorbrzezowski
  • Give browser streaming one startup window of up to 30 seconds before cancelling a stalled attempt and falling back to a screenshot, followed by the existing retry. #156323 — @vincentkoc
  • Keep ordinary Chrome tabs usable when Chrome Web Store or another recognized protected page refuses control; the protected page stays excluded and no extension update is required. #156890 — @holny, @obviyus, @liyoulu
  • Refit visible shared browser views after remote resizing and discard late native-browser errors from a previous tab or session. #157087
Shared desktop control

After you sign in or finish a manual step on a conversation-attached or cloud-session desktop, you can ask the agent to continue without separately releasing control in the viewer. It uses its existing permission, takes a fresh screenshot, and does not replay interrupted input. You can take control back at any time. This handoff is limited to attached and cloud-session desktops.

Sources and complete change list

Improvements

  • Add explicit agent takeover after manual control, invalidate old observations, preserve human reclaim, and show a neutral reconnect message after a clean viewer disconnect. #159923
  • Update macOS desktop automation to Peekaboo 4.6.0 for capture and input fixes; contended actions time out if they cannot start within 15 seconds, while already executing actions keep their locks. #158022

Bug fixes

  • Treat blank optional computer selectors as omitted while retaining errors for invalid or unknown nonblank selections. #155072 — @ceckert, @obviyus
  • When tool-loop detection is enabled, recognize repeated reads of an unchanged window despite fresh element references and apply the existing no-progress stop. #160019 — @obviyus, @grape404
Linux desktop audio

Managed Linux desktop views now have an Unmute control for listening to application sound, including with view-only access. Audio starts muted, stops when you hide or disconnect the view, and stays muted after reconnecting. It carries no microphone audio, uses about 1.5 Mbit/s, and may not stay in sync with the picture.

If sound is unavailable, use the Audio unavailable control for setup help. Install pulseaudio and pulseaudio-utils, then restart the managed desktop. Successful setup replaces its existing PulseAudio route with a private output; failed setup leaves the old route in place without capturing it.

Sources and complete change list

Improvements

  • Add optional audio availability information to desktop observations while preserving screen-only clients. #157718 — @vincentkoc
  • Capture a private managed-Linux application output and recover audio independently of healthy desktop applications; exhausted recovery leaves audio disabled with restart guidance. #157720 — @vincentkoc
  • Report the current audio source after recovery, with setup guidance and sanitized failure information. #157723 — @vincentkoc
  • Add explicit Unmute and Mute controls to embedded and docked desktop panels, with stop-on-hide and muted reconnect behavior. #157724 — @vincentkoc
  • Add the same audio controls to the standalone Desktop view and keep its toolbar usable on narrow screens. #157726 — @vincentkoc
  • Move optional audio setup guidance into the Audio unavailable control while retaining playback-error alerts. #159487

Security and trust

  • Require screen authentication and explicit start before audio capture, using expiring one-use bearer tickets, and end audio with its screen observation. #157722 — @vincentkoc
Codex Computer Use on Mac

Codex Computer Use works with the replacement plugin and newer Desktop app layouts on Mac. Restart the Gateway after updating OpenClaw to load the fix. macOS permissions and your existing tool restrictions still apply; custom legacy policies may need updating.

If you disabled the old Computer Use plugin, automatic replacement now respects that choice. An owner or authorized administrator can run /codex computer-use install explicitly. To restore automatic setup, re-enable the old plugin setting as well.

Sources and complete change list

Bug fixes

  • Prepare the replacement macOS Computer Use runtime and refresh changed desktop assets and sibling plugins while respecting custom identities and native policy. #156556 — @bdjben, @shakkernerd
  • Recognize newer signed Desktop executable layouts and create writable isolated launch configuration without changing the signed app or its permissions. #158480 — @jalehman
  • Honor an explicit native disable during automatic setup, preserve explicit owner/admin installation, and fix symlinked cache discovery and stale launchers. #160133 — @bdjben
Browser and desktop support on Bun

Bun installations no longer need a separate Node installation for the packaged Chrome connector or managed-desktop control helper. Custom browser commands keep their existing behavior, and Windows extension connections still need node.exe.

Terminals on Bun have separate requirements. Node-free terminals on macOS and Linux need a compatible Bun build; stock Bun 1.4.2 still needs Node. This update does not change the apps' Bun versions. Some Bun builds can also take about 30 seconds to close a desktop command that launched an app.

Sources and complete change list

Bug fixes

  • Launch packaged Chrome MCP with OpenClaw's current runtime on the next browser session, preserving custom commands. #159422
  • Avoid the packaged Chrome server's npm startup update probe while retaining custom servers' existing checks. #160226
  • Run managed desktop control with the Gateway's executable, removing that helper's separate Node requirement. #159462

Limits and compatibility

  • Enable native terminals on compatible macOS/Linux Bun builds, retaining the Node helper for stock Bun and node-pty for Windows and Node runtimes. #159447
Desktop cleanup and shutdown

Desktops prepared for a cancelled or rejected action are now released when the run ends, with cleanup failures reported. Browser activity also avoids pauses caused by saving tab records to a busy database. Node shutdown waits for cleanup to finish, so a stuck plugin can still block shutdown or an automatic node update indefinitely.

Sources and complete change list

Bug fixes

  • Await node and desktop-worker cleanup before reporting shutdown complete, and require reconnecting after failed plugin disconnect cleanup. #156995
  • Retain responsibility for releasing an attached desktop when setup is cancelled, without sending the cancelled input. #157997 — @vincentkoc
  • Release every attached-desktop preparation at run end after rejected actions, including preparations that were never selected for use. #158546 — @vincentkoc
  • Move an in-root Browser symlink to Trash without moving its outside or missing destination, while continuing to refuse escaped parent directories. #158640
  • Move Browser tab database work off the main thread while preserving tab ownership, retention, and completion of accepted work during shutdown. #159599
Search accounts and browser connections

Automatic web search now uses an available xAI sign-in before a Tavily key, falling back to Tavily if Grok fails. A provider you selected explicitly keeps its existing behavior. Browser connection fixes also preserve supplied login credentials and correctly detect Windows browsers installed in paths with spaces.

Sources and complete change list

Bug fixes

  • Restore OAuth-aware Grok-before-Tavily automatic search selection while preserving explicit provider pins and their no-fallback behavior. #156048 — @holny, @obviyus, @darkjuanfra
  • Preserve CDP authorization supplied as Headers objects or header tuples, including explicit-header precedence over URL credentials. #159430
  • Detect Windows browser versions in paths with spaces and keep failed probes quiet, retaining the existing conditional directory fallback. #160432 — @irish-joseph, @obviyus, @avirtudazo-officeconnect, @ayushdevo

Plugins and Integrations

Plugin pages now explain what an integration does and how to set it up, alongside fixes for plugin updates, cloud sessions, and connected coding agents.

Cloud sessions and recovery

Stopping one cloud session no longer blocks unrelated sessions from starting. Interrupted downloads can resume, and compatible warm images skip unnecessary snapshot preparation. An interrupted Stop can also resume saving your workspace after a restart or update, provided the original machine is still available.

Messages sent during a cloud worker runtime update wait for it to finish before starting. Slow setup downloads get longer windows based on archive size and can continue while data is arriving, but initial pairing credentials still expire after ten minutes, so a slow first setup can still fail at pairing.

A lost machine leaves only the last saved workspace, and forced destruction discards unsaved edits. Failed cleanup can leave a machine running and charging you. If automatic cleanup gives up, inspect and stop the Crabbox lease, then retry Stop in the conversation.

All Crabbox providers now require 0.67.0 or newer. If your host cannot download updates, install a supported executable before updating OpenClaw or inspection and cleanup may fail. Azure, Daytona, and GCP operators should check the Crabbox migration notes.

Sources and complete change list

Improvements

  • Defer replacement snapshots for compatible changed-commit warm starts; disabling reserves also disables automatic image refresh #156380
  • Reduce remote snapshot-preparation commands and allow slower configured CLI probes #156767
  • Prepare first-dispatch runtime and worker archives concurrently #159520
  • Negotiate completion waits with paired nodes while older nodes retain polling #160162
  • Reduce paired POSIX host startup loading; update and restart the node host to use it #160163
  • Avoid full file application when both remote and local workspaces remain unchanged #160231

Bug fixes

  • Keep active worker history and Stop requests tied to their original session store #156452
  • Preserve unfinished recovery work when its selected session store or authority changes #156543
  • Resume worker event delivery from saved acknowledgments and reject stale completion replay #156612
  • Bound failed environment cleanup retries while retaining unconfirmed, potentially billed leases #158867
  • Allow coordinator inspection retries more time within provisioning deadlines #159399
  • Release unrelated cloud starts after Stop or cancellation of an unstarted Move #159482
  • Resume workspace saving for an interrupted Stop across restarts and updates #159484
  • Retry temporary bootstrap download failures within existing authorization limits #159546
  • Resume partial Crabbox bootstrap downloads with final size and hash verification; separate node-host bundle downloads remain unchanged #160655
  • Wait for an in-progress worker runtime update before starting new messages, with transfer activity reported for node-based updates #160248
  • Keep bootstrap downloads authorized through their size-based setup window while retaining cancellation and ownership checks #160687
  • Retain newly installed worker bundles while provisioning records which environment needs them #160730
  • Align setup deadlines with archive size and detect stalled downloads by inactivity; initial pairing credentials still expire after ten minutes #160904

Documentation

  • Correct profile reload guidance; new provisioning uses edited settings while running workers retain their settings, and reload-off mode retains its restart requirements #159640

Limits and compatibility

  • Raise the minimum to Crabbox 0.67.0 for every cloud-worker provider and remote-proof backend #160560
Application previews on attached workers

You can open interactive application previews on a conversation's dedicated attached secondary worker when your write and tool permissions allow it. Sessions that require a sandbox or lock model selection are excluded. Anyone with the preview link can use it while it is open, even if the person who created it loses access. Close the preview to withdraw the link.

Foreground apps on supported Linux workers can also use host-held model API keys without copying the real key to the worker. This needs a supported API-key connection and a proxy-compatible app; OAuth and detached apps are unsupported. If cleanup fails, check the remote app before reusing the worker. Revoking its key access does not stop the app.

Sources and complete change list

Improvements

  • Run prepared foreground Crabbox applications with command-scoped host credentials; source and dependencies must already be present, and the grant does not contain network access or restrict model operations #156207
  • Open, list, and close previews on the conversation's dedicated attached worker; reconnect or update an unavailable node before retrying #156373 — @vincentkoc
Plugin details and setup

Plugin pages show capabilities, setup guides, and the inputs their tools expect, so you can understand an integration before using it. Enabled image, video, and music providers also appear under Media. Customize UI is now in Advanced settings, with /settings/plugins?tab=advanced available to restore the built-in interface. A capability listing does not mean your account is connected or access is granted.

Sources and complete change list

Improvements

  • Load category navigation independently of catalog cards, with loading status and retry #155280 — @patrick-erichsen
  • Show trusted built-in attribution, local plugin overviews, and stable loading artwork #157716 — @patrick-erichsen
  • Open eligible catalog details directly from search and show plugin artwork #157915 — @patrick-erichsen
  • Preview top-level tool inputs and required fields without executing tools or loading disabled plugins #157946 — @patrick-erichsen
  • Add capability sections, bundled setup guides, and inline interface customization #157956 — @patrick-erichsen
  • Support coordinated curated ordering and Computer use browsing without changing Featured publication or adding computer-control capabilities #158686 — @patrick-erichsen

Bug fixes

  • Surface configured plugin failures and unavailable installations in health and deep-status text #118013 — @xiaov1024
  • Preserve provider model-selection choices during setup and remove included-file plugin settings without an unrelated root-config change during uninstall #159945
  • Standardize bundled icon tiles and correct product logos #155259 — @patrick-erichsen
  • Correct Agents API artwork and its Agent runtimes category #156549
  • Keep enabled image, video, and music providers visible under Media #160473 — @vacinc
  • Supply missing Kie artwork before the later branding correction #160529 — @vincentkoc
  • Replace Kie's fallback artwork with its own provider mark aa8f6c7 — Peter Steinberger

Documentation

  • Explain enabled versus actively used plugins and their credential requirements #144397 — @vincentkoc
Plugin installation and updates

You can install a package without changing whether it is enabled by using openclaw plugins install <package> --no-enable. Bun-only installations can manage npm plugins without separately installing Node or npm. When an install fails, the interface shows whether to retry or check its status first.

Plugin updates can apply supported settings repairs before activation, but check migrated listener settings afterward. Data migrations still need openclaw doctor --fix, and disabled plugins keep their pending changes. If an older updater rejects legacy settings, update OpenClaw itself first. An unconfirmed rollback leaves the matching package in place and reports the failure.

Sources and complete change list

Improvements

  • Install without changing allowlists, denylists, enabled entries, or exclusive slots; hook packs do not accept this option #152020 — @stevenlee-oai
  • Reuse one extraction for ClawHub file verification and installation #156246
  • Keep local TypeScript plugins usable without a production compiler; published plugins still ship JavaScript #156829
  • Reuse unchanged native binaries and complete companion directories during startup #158414 — @yyds-xxxx, @jb168
  • Use bundled npm for plugin management under Bun; Node installations keep using PATH npm #160224

Bug fixes

  • Cancel downloads and clean staging when temporary archive creation fails #156184
  • Verify legacy ZIP filenames using the extractor's canonical paths #156322
  • Preserve installed-host SDK identity for resolved plugin imports #156427 — @fchaudhryspear, @dwonshin, @salmunclaw, @zsh20000414, @ld5201d, @clode2026
  • Show rejected, saved, and uncertain install outcomes with appropriate recovery actions #157721 — @patrick-erichsen
  • Recreate a missing capture payload directory when its original parent and coordinator remain intact; deleted files are not restored #158769 — @yihan331313
  • Preserve newer installation records and source ownership during overlapping repairs #159033
  • Load current plugins while Git rollback trees remain; incidental scans also omit ordinary entries with matching transaction names #159052
  • Exclude unfinished, backed-up, quarantined, and substituted npm projects from recovery #159303 — @vincentkoc, @fuller-stack-dev
  • Ignore missing development dependencies of unused nested benchmark and example projects #159354 — @obviyus
  • Preserve package-relative companion libraries for native plugins such as Sharp #159536 — @fuller-stack-dev
  • Report invalid workspace filenames and portable ZIP collisions; rename affected host entries or republish corrected archives #159882
  • Reverify installed plugin files when saved capture directories have disappeared #160291
  • Keep plugin captures outside Doctor's disposable inspection snapshots #160446
  • Independently copy dependency manifests in new captures; earlier preview receipts are not repaired #160519 — @vincentkoc
  • Avoid false source-change errors for unchanged companion files after hardlink activity 68442a8 — Peter Steinberger
  • Apply supported config repairs before activation, including pending config-only retries for already-current packages #160682
Plugin reloads and removal

Plugin reloads can wait for work already in progress. Use openclaw plugins reload <ids...> --wait outside a conversation currently using that plugin to wait beyond the usual 60 seconds. Cancelling after the replacement takes effect does not undo it. Reload does not rebuild code, and some compiled changes still require a restart; browser-only changes can use Reload plugin UI.

After a forced stop during startup or plugin reload, OpenClaw can avoid an abandoned operation’s five-minute wait once it confirms the old process has exited on the same machine. Older operations without that process information and package installs still wait for their existing expiry.

Removal stops if settings reference the plugin again. Remove those references before retrying. Interrupted removal can leave the plugin disabled with cleanup still pending, and files already deleted are not restored.

Sources and complete change list

Improvements

  • Show the selected executable entry in reload JSON and CLI output #156902 — @loganwoooof
  • Let busy reloads wait for admitted work under the ordinary deadline #157796
  • Add explicit long-running wait and cancellation while retaining cleanup deadlines #158688 — @patrick-erichsen, @hannesrudolph
  • Move post-activation cleanup index reads off the caller thread #159254
  • Prepare cleanup migration facts in a worker while rechecking current config and source ownership #159338

Bug fixes

  • Preserve request context across reloaded or duplicated plugin modules #155925
  • Report when changed compiled bundled code still requires a restart #156827 — @loganwoooof
  • Preserve valid tool output after middleware removal; its historical shared Task settlement changes are superseded by Tasks retirement #157339 — @obviyus
  • Avoid false missing-plugin banners during uninstall #157728 — @patrick-erichsen
  • Avoid false busy replies after a failed reload #157771 — @jalehman
  • Keep unchanged sibling quarantine from blocking a healthy plugin's reload #157907 — @patrick-erichsen
  • Stop further cleanup when ownership or configuration references change #159563
  • Retain unchanged backends after UI rebuilds and avoid duplicate origin warnings #159883
  • Report busy-work completion once, after the full wait finishes 449fc2e
  • Recover startup and reload operations held by a proven-dead process on the same host, and explain remaining waits; older unidentified operations and package installs retain expiry protection #160795

Documentation

  • Correct rebuild and restart instructions in plugin management and RPC guides #157052 — @loganwoooof
Plugin files and temporary storage

OpenClaw keeps loaded native plugin files until it exits, then can reclaim retired copies at a later startup. Cleanup of older temporary files can still disrupt an older running process if OpenClaw cannot identify it. Plugin authors must replace shared temporary roots such as /tmp with a private, user-owned directory that others cannot write to, using the existing secure-root helper.

LanceDB statistics now limit database reads to 60 seconds and return zero when the memory table is missing. Plugin startup can take additional time.

Sources and complete change list

Bug fixes

  • Remove capture payloads before ownership metadata and reclaim eligible aged scratch after interrupted cleanup #157727 — @yyds-xxxx
  • Enforce existing Team Reports and Google Chat file limits while files are being read #158181
  • Retain loaded native addons through process exit and bound nonmutating LanceDB statistics reads #158950 — @blackeyes-boy

Limits and compatibility

  • Require private supplied temporary roots for backup, installation, and SDK workspace callers #159327
MCP tool discovery

MCP servers get more time to list their tools, helping slower servers make them available in new chats and scheduled runs. Repeated startup failures show when to retry instead of making every run wait again. After signing in, tools may still take up to ten minutes to reappear unless you explicitly reload MCP in the process using it.

Sources and complete change list

Bug fixes

  • Accept grouped valid messages on strict subprocess connections while retaining per-message limits #156165
  • Preserve plugin refusal reasons in Code Mode MCP calls instead of a result-projection error #156771 — @donniefi, @obviyus, @rmyers64
  • Wait for an already-closing idle connection during session reset or deletion #157041
  • Extend the default tool-listing deadline without changing normal request or connection timeouts #157855 — @obviyus, @baumus, @laisonamarante
  • Back off repeated startup failures and expose unavailable-server retry times #158088
  • Identify malformed OAuth metadata URLs as configuration field errors #158295
  • Retire session resources after failed CLI preparation without interrupting active borrowers #159421
  • Tie idle cleanup to the owning Gateway or command and preserve combined command/cleanup errors #159481
ACP sessions and recovery

Connected ACP coding agents accept prompts again after a settings-triggered restart, and Stop waits for work and cleanup to finish. Some cancellation and reset paths can still affect a replacement session. Codex and Claude can recover from missing adapter files; restart OpenClaw after updating to refresh their launchers. Recovery may need internet access to download an uncached adapter.

ACPX session storage moves to a writable location. Existing sessions move automatically only when that destination is empty. Check your sessions after updating; if they disappear from view, their old files may still be present, and the existing stateDir setting lets you keep using that location.

Sources and complete change list

Improvements

  • Avoid unrelated first-use module loading during ACP reply dispatch 28da46e — Peter Steinberger
  • Move file-backed ACP listings to database workers while preserving detached metadata #158782
  • Move ordinary ACP metadata work to workers and recheck authority before effects; the intermediate shared Task tracking repair is superseded by retirement #159084

Bug fixes

  • Restore prompt delivery after configuration-triggered Gateway restarts #157658 — @mertbasar0, @obviyus, @olyapop
  • Use writable reset storage, with empty-destination legacy adoption and repeated-warning suppression #158551
  • Format tool titles containing unset optional arguments #159417
  • Wait for Stop cleanup and protect replacement state on owner-qualified cancellation paths #160035
  • Fall back from missing captured Codex and Claude adapters to their pinned packages #160156 — @bruce-yii, @obviyus, @keysersozeh
OpenCode sessions

You can browse OpenCode v2 sessions, read their transcripts, and track activity again, with v1 still supported. Activity tracking also works for initially empty sessions. If listing takes too long, OpenClaw reports an error instead of showing a misleading empty list.

Sources and complete change list

Bug fixes

  • Restore v2 session listing, transcripts, and upstream activity reads #158056 — @obviyus, @paweldrozd
  • Treat an absent sequence as the empty-session baseline while rejecting invalid supplied values #160138 — @shakkernerd
Meeting captions and transcripts

Meeting captions and saved transcripts can keep speaker labels and information about where each caption came from. Those labels help you follow the conversation but do not verify a speaker's identity. Transcript saving and lookup do less repeated work, and failed audio startup cleans up any output process it already started. The experimental Google Meet interface does not yet provide native chat, reactions, or hand raising.

Sources and complete change list

Improvements

  • Retain caption provenance and expose experimental participation interfaces without enabling native Google Meet actions #152327 — @canvrno-oai
  • Move transcript save and export bookkeeping into the database worker while preserving recovery ownership #154965
  • Reuse prepared transcript lookup queries without caching results or authorization #159074

Bug fixes

  • Clean up output processes when local or paired-node meeting input startup fails #157982
  • Correct Teams transcribe-mode readiness text for its existing live-caption support #158441

Limits and compatibility

  • Add source-stage opt-in participation in active Slack huddles, requiring OpenClaw and plugin API 2026.9.8 or newer; package publication and live Slack operation remain unverified c432db8
  • Add missing icon and activity artwork for that source-stage Slack Huddles plugin, with the same 2026.9.8 host requirement 053c156 — Peter Steinberger
Team Reports collection

Team Reports keeps existing daily, weekly, and monthly reports when GitHub or Discord collection fails. A first failed collection leaves the affected period unpublished. Check status warnings and regenerate the affected day once access returns. Report generation moves more work into the background. After changing Discord channels or collection filters, manually regenerate affected days so those changes are included.

Sources and complete change list

Bug fixes

  • Preserve accepted reports on acquisition failure while allowing healthy zero-activity replacements #157933 — @vincentkoc

Improvements

  • Move collection and aggregation into workers with bounded payload batches #159101
  • Reduce repeated aggregation queries while retaining report ordering and deduplication #159148
Plugin development tools

Plugin authors can reuse workspace-context helpers and utilities for handling models and replies. Plugins using the new exports must declare a compatible OpenClaw version through openclaw.compat.pluginApi. Visitor-management tools also return usable lists and invitation links in Code Mode. Revoke existing visitor grants before changing their configured account, application, or policy.

Sources and complete change list

Improvements

  • Let plugins opt into Gateway-owned listeners that preserve existing webhook callback ports 11a11ef
  • Publish the existing node cancellation message contract with invocation and node identifiers #115390 — @giodl73-repo, @patrick-erichsen
  • Reduce primitive iterator-read overhead during streamed replies #158346
  • Expose shared workspace-context and root-instruction preparation to harness developers #158389 — @sjf-oa, @sjf
  • Reuse prototype checks within each streamed message graph #158501
  • Reuse prepared HTTP route paths while preserving request validation and routing precedence #158591
  • Reduce redundant processing of nested plugin stream results #158799
  • Expose five model-normalization, stream-transform, prefill, and assistant-message helpers #160038

Bug fixes

  • Reject explicitly blank native-hook relay timeouts while preserving the omitted-value default f62a5c8 — @hugenshen
  • Stop the agent-session SDK from treating an empty environment variable's name as a credential #155558 — @alix-007, @obviyus, @aniruddhaadak80
  • Contain asynchronous reply-observer failures without holding up delivery receipts #155691 — @sunnyshu0925, @obviyus
  • Return normal aborted results for in-flight plugin completion cancellation #156565
  • Preserve stable permission-denial codes for direct and isolated completions #156604 — @shakkernerd
  • Restore URL validation and annotation-only email and UUID handling #156855
  • Keep plugin-provided environments through repeated command preparation #158378
  • Bundle the standalone SDK's private session-URL dependency #159279
  • Let affected channel and voice paths operate without optional async diagnostics on older hosts; Telegram's separate 2026.9.6 Doctor dependency was addressed by the later repair under Messaging / Webhook setup on the Gateway port #159280
  • Permit replacement login after cancellation, settle throwing channel cleanup, release failed media readers, retain remote-skill labels, and redact cyclic migration reports #159299
  • Connect selected agent tools to services in their admitting Gateway #159410
  • Return structured visitor lists, invitation links, and revoke outcomes to Code Mode #159453
  • Preserve the standard completion-failure error when an isolated adapter rejects without a value #159600
  • Retain valid falsy targets in generic webhook matching, detect multiple matches, and omit empty-key anomaly logs; null or undefined targets in auth-or-reject wrappers retain an unresolved response limitation #160883
Paired nodes and remote Codex

Already-paired nodes can reconnect with --pair-if-needed after their setup code expires, provided their saved credentials still match the selected Gateway. New pairing still needs a fresh code. If you use a saved certificate fingerprint, verify the selected fingerprint before reconnecting because this recovery path does not compare it. Remote Codex connections can also retry brief connection failures before sending work; model and tool requests already sent are not replayed.

Chat now shows download and installation progress when preparing a paired session host, and setup failures point to the needed repair. Older 2026.9.6 hosts can keep running turns with their supported tools; update OpenClaw on the node and restart it to use newer tools such as presence.

Compatible paired hosts can keep up to two idle workers loaded for two minutes to reduce startup work for follow-up messages. Those workers continue to use memory while idle. Stop or reclaim the placement to release them sooner; Chat Stop without an active turn does not release them.

Sources and complete change list

Improvements

  • Await prepared node workspace storage and release late acquisitions after cancellation; async SDK callers need a supporting host 2e9a2ec
  • Reuse idle workers when the Gateway, node, and bundle support it, retaining up to two workers for two minutes and making their capacity reclaimable 968a08c
  • Show runtime transfer and installation progress for interactive paired-host setup; use Gateway logs for background reconciliation #160110

Bug fixes

  • Reuse saved scoped node credentials after fallback code expiry without sending the expired bootstrap token #159360 — @kevinlin-openai
  • Retry transient unopened remote Codex connections up to three times during harness replacement #159466 — @kimiyu-186
  • Limit launches to each node’s supported tools, with a 2026.9.6 fallback; update and restart older nodes for newer tools #160147
  • Explain session-host setup failures while retaining other approved node functions and retrying pending pairing; permission repairs remain manual, and already-paused clients may need one restart #160188
Session Share and collaboration

Chat can start while Session Share waits for a slow paired source, with available sessions appearing when the list arrives. Resetting or deleting a session no longer shuts down ClickClack discussions elsewhere, and Workboard action menus size themselves to their contents.

Sources and complete change list

Improvements

  • Share matching Session Share catalog requests and publish later results; targeted reads and pagination keep complete responses #156400

Bug fixes

  • Keep ClickClack discussions running after session cleanup and repair bundled setup loading #157098 — @masatohoshino
  • Size Workboard card action rows and menus to their contents #157913 — @patrick-erichsen
GitHub dates and connections

GitHub badges show when an item was merged or closed in your browser's local time, and closed draft pull requests are correctly marked Closed. Personal GitHub connections also skip unnecessary background checks while their tokens are fresh.

Sources and complete change list

Bug fixes

  • Match reader badge dates to merge or closure events, with creation-date fallback #158081 — @vincentkoc

Improvements

  • Skip periodic refresh coordination for fresh personal GitHub tokens #158525
1Password approvals

1Password requests save approvals in the background. Secret access still waits for a successfully saved approval, with the existing expiry and single-use rules.

Sources and complete change list

Bug fixes

  • Move pending approval storage into a worker while preserving single-use consumption and failed-write denial #156000
QA Lab keyboard navigation

QA Lab skips hidden sidebar controls when you navigate with the keyboard. Dashboard refreshes keep your selected tab, keyboard focus, and horizontal scroll position.

Sources and complete change list

Bug fixes

  • Make collapsed and Evidence Archive sidebars inactive for keyboard navigation #152189 — @vincentkoc
  • Preserve tab focus and scroll through polling refreshes and width changes #155284 — @vincentkoc
Plugin loading

Hermes migration, LLM Task, and TypeSafe now wait until first use to load their execution code, reducing work when those features are available but unused. Large plugin tool sets also avoid repeated setup work. When prepared plugins cover a turn’s needs, OpenClaw reuses them instead of copying and registering them again.

Sources and complete change list

Improvements

  • Reuse declared membership when registering and resolving large tool sets #156205 — @vincentkoc
  • Load Hermes detection, planning, and application code when requested #157231 — @vincentkoc
  • Keep LLM Task metadata available while deferring execution code #157233 — @vincentkoc
  • Load TypeSafe's evaluator on its first decision within the existing deadline #157380 — @vincentkoc

Bug fixes

  • Reuse the prepared plugin registry when it covers a turn’s needs while preserving separate model-catalog preparation #160658 — @ekinnee, @oxen-horse, @RomneyDa, @vincentkoc
Beam sidebar refreshes

The Beam sidebar does less work when refreshing its session list. Local changes trigger a refresh, while changes from other processes are checked periodically. Ongoing uploads can still delay a fresh listing.

Sources and complete change list

Improvements

  • Share Beam metadata refreshes while keeping transcript reads on canonical storage #158394
MXC sandbox cleanup

When MXC cannot prepare a command, it removes the temporary sandbox directory instead of leaving it behind. The original error remains available to help diagnose the failure.

Sources and complete change list

Bug fixes

  • Clean failed MXC preparation and correct documentation of Obsidian search's existing write-scoped RPC #158532
Voice Call compatibility

Voice Call loads again on OpenClaw 2026.9.6. Optional identity and workspace context remains off unless you enable it on that version.

Sources and complete change list

Bug fixes

  • Restore supported-host loading and bound older-host optional context without changing its settings #159987

Security and Privacy

You have more control over who can use OpenClaw, which models they can use, and whether they can upload files.

Incognito conversations

Incognito conversations now expire 24 hours after creation or when the Gateway restarts, whichever comes first. Activity does not extend the deadline. Expiry stops active work and discards the conversation without an archive, so save anything you need beforehand. Reloading or closing the tab also discards unsent drafts and attachments.

Incognito skips automatic memory and learning, and keeps conversation content out of saved browser copies and supported diagnostic logs and plugin observers. Tabs left open from the older UI must reload after updating to apply this browser protection, so save anything you need first. Older logs remain. Tools can still write files, and model providers can still retain messages.

Sources and complete change list

Security and trust

  • Exclude Incognito from persistent browser snapshots and permanently remove older private snapshots and metadata without backup. Reload already-open older tabs; an older-UI rollback may reset disposable ordinary browser cache. #154656 — @vincentkoc
  • Skip automatic session-memory capture, Skill Workshop learning, and LanceDB recall embeddings for Incognito conversations. #155594 — @vincentkoc
  • Suppress private content in cache traces, Anthropic payload logs, raw model-stream logs, and WebSocket previews while retaining operational metadata and live delivery. #155595 — @vincentkoc
  • Withhold Incognito LLM observations from plugins and send content-free completion callbacks for cleanup; policy, provider, approval, and explicit tool hooks remain active. #156417 — @vincentkoc
  • Remove private content from subsequent delegated Task and TaskFlow record writes before those runtimes were retired; older stored records were not scrubbed. #156446 — @vincentkoc
  • Suppress CLI and Gateway agent reply content in ordinary diagnostics, alongside prospective Task-record filtering implemented before Task retirement. Earlier recorded content remains. #157543

Improvements

  • Add the fixed 24-hour Incognito lifetime, stopping active work and deleting history without an archive. Failed cleanup retries while new work remains blocked, so physical deletion can lag expiry. #155596 — @vincentkoc

Bug fixes

  • Discard unsent Incognito drafts on reload while preserving same-page Settings/Back navigation and separate recovery for already-submitted tab-only outbox messages. #156398
  • Offer a fresh Incognito conversation after expiry, retain failed unsent text for copying or discarding, and keep private attachments out of persistent browser storage. #156544
  • Drain exact-session terminals before Incognito reset deletes state; failed drainage keeps the session for retry. Controller, worker, and worktree teardown remain separate. #159207

Documentation

  • Explain the 24-hour-or-restart limit in the English Incognito tooltip and notice. #156478
  • Align the Control UI guide with the creation-based lifetime and existing privacy limits. #156485
Model limits and Visitor access

Administrators can choose which models each role can use, including in supported native Codex runs. Removing a model stops affected requests. Visitor Access now requires an explicit modelPolicy; {} uses the source agent's models. Restricted Codex runs are refused if their connection cannot enforce the policy.

Invalid Codex network-proxy settings can now prevent startup. Run openclaw doctor --fix for blank networkProxy.profileName or remoteWorkspaceRoot values; other invalid fields need manual correction.

Sources and complete change list

Improvements

  • Add optional named-role model limits across selection, retries, child work, and live policy changes. Staff roles without a policy retain existing access; this is not a spending budget. #156346 — @shakkernerd

Security and trust

  • Extend role limits to actual native Codex inference and require explicit Visitor model policies. 17d2faf6 — @shakkernerd
  • Filter disallowed structured model and provider metadata from authorized historical session responses without rewriting conversation text, tool payloads, or stored data. #157821 — @vincentkoc

Bug fixes

  • Reject invalid enabled-proxy settings and provide Doctor repairs for the two supported blank fields while preserving the domain map. #156906 — @kevinlin-openai
  • Correct false below-GPT-5 audit warnings for matching newer GPT generations, including GPT-6. Older-model and separate small-model warnings remain; this classification does not establish model safety. #140012 — @holny, @IWhatsskill, @boycez, @Niriakot, @PollyBot13

Limits and compatibility

Restricted native execution excludes unowned attachments, local native models, AWS-signed requests, system proxies, custom native certificates, and incompatible proxy settings. Custom providers need explicit base_url and query_params; selecting beyond eight projected routes requires a fresh managed connection. Guardian and configured memory processing retain their service authority. Without qualified hooks, unrestricted staff work with ambiguous mixed-input attribution can continue under a valid receiver; this is not universal original-sender revocation. Historical metadata filtering does not cover every live event or model name in message text.

File and image upload controls

Operators can turn off client file and image uploads with gateway.uploads.enabled=false while text chat keeps working, without a restart. Uploads are enabled by default. Turning them off preserves draft attachments and lets already accepted uploads finish; downloads, channel media, and agent-created files follow their own settings.

Sources and complete change list

Improvements

  • Add live upload controls across documented chat, companion, terminal, avatar, skill, Workboard, node/tool, and OpenAI-compatible API inputs, with final-write checks and accepted-request retry handling. #158567

Limits and compatibility

The switch does not revoke shell, filesystem, administration, or arbitrary plugin capabilities. Third-party tools that persist client bytes must carry the provided final-write callback themselves.

Tool approvals and permissions

Approval handling now preserves the original permissions through waits and recovery. Approval diagnostics also explain why terminal tools are unavailable. If you used Disable All, repeat it and Save to include previously omitted GitHub and transcript tools.

Native Codex apps keep their configured approval settings, and permitted reads can ask for consent. Check explicit tool exceptions separately. Do not rely on the interactive destructive-action setting alone to disable explicitly enabled native tools.

Shell approvals now reject combined options that read commands from standard input instead of the reviewed script. If a command such as bash -se job.sh is refused, invoke the script directly when that is the code you intend to run.

Sources and complete change list

Bug fixes

  • Preserve native Codex app approval modes and reviewers across new, resumed, and side-question threads. This configuration repair does not establish complete destructive-denial enforcement for saved-enabled native tools. 1a7ba53b — @stevenlee-oai
  • Restore Allow once/Deny consent for recognized native app reads and bound-app side questions; exact-tool eligibility remains a separate, unresolved enforcement limit. #152085 — @stevenlee-oai
  • Include GitHub identity, GitHub publishing, and transcript tools in Disable All without changing saved permission-group membership. #156865
  • Retain captured permissions and cancellation checks when rebuilding tool hooks, including authorized Crabbox portal presentation. #159532
  • Keep original owner access after successful or failed child follow-ups in the same conversation, while retaining revocation, reassignment, and replacement-turn checks. #160018 — @vacinc

Security and trust

  • Recheck approval authority through database waits and recover definite storage refusals without extending deadlines or blindly replaying uncertain writes. Disconnection alone does not revoke accepted work. #150237
  • Bind worker approvals to the original live claim and cancel pending approvals when that claim is invalidated. #155898
  • Preserve original request permissions when Gateway handlers validate and dispatch requests. #156521
  • Reject combined shell stdin flags during script-file approval binding, while preserving ordinary arguments after the script filename. This is a scoped parser repair, not a general ban on stdin execution. #160698 — @eleqtrizit

Improvements

  • Explain missing terminal tools in Agent Tools and exec-policy show, with local --agent inspection and read-only saved-session --session previews. A preview does not prove execution access; remote previews still show local approval facts. #157014 — @joshavant, @pegorim

Documentation

  • Explain native app admission, tool exceptions, approval modes, reviewers, and stricter scheduled-run authority. #155089 — @stevenlee-oai
  • Correct exec-denial directions and Gateway-versus-node inspection commands. Missing TUI approval cards should not be confused with the manual /approve path for an authorized pending request. #159266
Browser connections and access errors

Closing a browser tab no longer causes false server errors. If access expires while a request is waiting, OpenClaw returns an access error or closes a response already in progress. Operators investigating connection failures on a shared network can use the connection rate-limit guide.

Sources and complete change list

Bug fixes

  • Handle disconnected and revoked HTTP requests without false unhandled errors, while retaining logs for genuine exceptions. #157501
  • Close partially registered connections after initial handshake failure and discard queued requests. #158504
  • Remove abandoned response headers so authorization changes produce correctly framed, uncached denials while preserving security and CORS headers. #158669
  • Return complete HTTP rejection responses, including oversized-upload errors and queued HEAD rejections, on affected newer Bun builds instead of premature connection resets. Node and older Bun behavior and the selected runtime version are unchanged. #160329

Documentation

  • Explain the existing 32 unauthenticated sockets per resolved IP and configurable override, plus bounded queue scheduling slices. Raising the socket budget admits more unauthenticated connections and requires restart; the 128-socket example is not a new default. #158535

That documentation describes the earlier limit. The final default in this release is 128 pending unauthenticated sockets per resolved IP. To restore 32, set OPENCLAW_MAX_PREAUTH_CONNECTIONS_PER_IP=32 and restart the Gateway.

Session resets and deletion

Resets that include sessions now remove SQLite conversation history and its archives. Check the dry-run first, because the selected scope also removes configuration and OAuth credentials. Legacy JSON/JSONL import files remain. An incomplete reset reports failure without restoring anything it already deleted.

Failed remote agent deletion or session cleanup now leaves the computer running the command untouched. Restore the remote connection or run the command on the Gateway host before retrying.

Sources and complete change list

Bug fixes

  • Allow intentional configuration shrinkage during authenticated agent deletion without weakening unrelated write protections. #156853 — @fuller-stack-dev
  • Finish database resource cleanup before reporting agent deletion complete, retaining failed closure for retry. #157631
  • Continue valid bulk session actions after an individual key lookup fails; transport and credential failures remain command-wide. #159170
  • Prevent failed remote agents delete and sessions cleanup --enforce from falling back to local mutations. Explicit local-store and dry-run operations retain their own scope. #159223
  • Return a failing exit status for incomplete resets and omit the premature onboarding hint. #159250
  • Remove canonical SQLite session history during session-inclusive resets, subject to exclusive ownership and archive-identity checks. This does not erase legacy import files. #159419
Permission changes and restart recovery

Changing another user's identity permissions preserves your unrelated connections, accepted chat work, HTTP requests, and pending approvals. Changes to your own effective grants or global access policy still revoke affected work, and restoring grants does not revive it. Revoking Guest access cancels its registered commands and stops private containers dedicated to that guest. Restart recovery also checks whether work is still authorized; stopped delegated work may need /new or /reset, while its transcript remains.

Back up your data before upgrading, including SQLite's write-ahead log. This change upgrades shared state from schema 18 to 19. Downgrading requires a matching pre-upgrade backup in a separate state directory and can lose later permission revocations and receipts. Never lower schema markers to force a downgrade.

Sources and complete change list

Improvements

  • Let session-only readers browse authorized conversations and progress, and session writers organize their own chats, without broad Gateway access. Other people's visible chats remain read-only; deletion, sharing, diagnostics, and artifact downloads require separate permissions. #155184 — @shakkernerd

Security and trust

  • Require surviving source authority before restart dispatch and retain eligible pending work when transcript reading fails. Existing queue-owned delivery keeps its separate owner. #150702 — @vincentkoc, @pgondhi987
  • Keep private child-session references out of unauthorized event projections while reusing eligible large-message encodings. #155997
  • Cancel commands after original Guest access is revoked and stop qualifying private containers. Workspace files and writable layers survive; process and temporary-filesystem state do not. Shared, preexisting, mixed-use, and unclassified containers are excluded from whole-container shutdown. #156106 — @shakkernerd
  • Preserve channel-owner revoke-and-restore history across recovery without automatically granting existing links recovery authority. #157709 — @joshavant
  • Require recorded human origin for internal restart recovery, including prepared replies, while retaining separate legacy channel, Control UI, and child-completion checks. Unverified internal work is skipped without dispatch or a recovery notice. #160130 — @vincentkoc, @romneyda

Bug fixes

  • Preserve verified WebSocket connections and accepted runs through unrelated identity-permission edits or equivalent scope reordering. Pending handshakes and HTTP/cookie authority retain their existing rules. #159939 — @vacinc
  • Extend unrelated identity-permission continuity to pending handshakes, token/password and node connections, HTTP requests, plugin cookies, queued work, and approvals. Own-grant and global-policy revocation remain; separate approval invalidation from agent/store inventory edits is outside this fix. #160136 — @Nakagawa-master

Limits and compatibility

If Guest access ends during container setup, inspect and preserve needed data before explicitly recreating the incomplete container. Container shutdown does not cover arbitrary detached descendants in shared or unclassified environments.

SSH connections and saved credentials

Paired diagnostics regain their expected access, and SSH Gateway connections keep using the right saved credential when a forwarding port changes. Existing sshTarget setups now manage forwarding automatically unless transport=direct is selected. Older URL-only setups need route configuration and one-time token or password enrollment with pairing approval. Use a new SSH alias for a different Gateway, or its saved token could go to the new destination.

Plugin authors must handle credentials becoming unavailable during reload and avoid caching them across reloads. If the managed-secret forwarding worker fails, restart the Gateway to restore forwarding.

Sources and complete change list

Security and trust

  • Reject late worker SSH identities before host credential preparation after cancellation, replacement, or timeout; provider-internal effects still depend on cooperation with the optional currentness callback. #150621 — @sallyom, @vincentkoc
  • Stop stale plugin credential reads and self-waiting reload cleanup. Prepared-secret access ends as soon as the exact instance retires, including admitted callbacks; already returned values are not erased and vendor credentials are not revoked. #153187 — @jb510, @jalehman, @patrick-erichsen
  • Reject whitespace-only Copilot enterprise credential scope during copying, adoption, and shared-owner checks without rewriting malformed stored values. #160171 — @patrick-erichsen

Improvements

  • Move managed-secret transfer processing to a dedicated worker while retaining destination restrictions and closing revoked streams. #156354
  • Reuse TLS trust and protected HTTPS connections within each process grant, with separate pools and revocation for other grants. #156357

Bug fixes

  • Accept trusted Windows secret-plan directories using structured owner and ACL facts while retaining stricter executable-parent checks. #158785
  • Restore paired diagnostics and bind managed SSH credentials to the selected route; unpinned manual-loopback diagnostics still need explicit credentials. #159169 — @iwhatsskill

Documentation

  • Clarify trusted IMAP authentication headers. Before enabling this trust option, the receiving mail server must strip or replace incoming headers claiming the trusted server identity. The option can admit mail despite local DMARC none or fail; OpenClaw cannot determine the originating hop from the message alone. Runtime behavior and defaults are unchanged. #160676 — @eleqtrizit
Workspace files and sandboxes

Memory reads stay within their authorized folder when retrying, and canceled delegated work stops starting new workspace transfers. Required sandboxing now applies from the first request through the OpenAI-compatible APIs. If the required sandbox is unavailable, the run is refused.

Podman follows your selected connection and SSH identity. If an existing sandbox stops working after upgrading, follow the Podman recovery guide. Restore its original connection and save needed container data before recreating it. Mounted workspace files remain, but data inside the old container is not transferred.

Sources and complete change list

Security and trust

  • Enforce role-required sandboxing before the first HTTP session run and reject restricted callers attempting to run existing unsandboxed sessions. #155964
  • Keep memory reads inside the original authorized directory when that directory is replaced during a read. #156222
  • Retain original session sources during asynchronous sandbox reporting and reject changed aliases or databases without granting new permissions. #156686
  • Recheck run authority around final workspace creation. Revocation detected after an already-started directory operation does not roll back its effects. #157505
  • Stop guarded later workspace and transport operations after delegated cancellation while preserving independently owned tunnels, accepted transfers, and cleanup. #159087 — @sallyom, @vincentkoc

Bug fixes

  • Honor Podman connection precedence and matching SSH identity, with explicit recovery for existing sandboxes and refusal when competing selectors cannot be resolved. 041bbac5 — @vincentkoc
  • Reject stale prompt refreshes and skip unused elevation-policy preparation when elevation is disabled. #157021
  • Refresh security-scan coverage, recheck workspace writes, complete short attachment reads, clean failed cookie snapshots, and preserve symlink chains and literal tilde paths. Scans remain bounded. #157524
  • Settle failed workspace transfers before returning and honor guarded agent-file metadata checks. #158313 — @lovelefeng-glitch
  • Preserve newline-bearing remote sandbox paths and allowed parent aliases, and accept structured-input choices with padded labels. SSH targets require GNU-compatible readlink -f and -n. #159346
  • Restore creation of new memory files in OpenShell mirror mode by recognizing wrapped missing-file errors, while retaining write provenance and rejecting permission or boundary errors. #160697 — @sunlit-deng, @jtatum, @obviyus
  • Preserve browser upload staging quotas when a queued upload is canceled, and hold memory-write locks until pending rollback, checkpoint, or rewind writes finish. Cancellation still returns promptly; partial write failures are not made atomic. #160810
File permissions during repairs

Doctor preserves compatible POSIX file permissions when moving retired TOOLS.md notes into AGENTS.md. If it cannot do so safely, it warns and keeps both originals. Fix the permissions or merge the notes manually, because agents no longer read TOOLS.md at startup. Cleanup of legacy temporary plugin files on macOS and Linux also skips files belonging to another account.

Sources and complete change list

Bug fixes

  • Preserve POSIX owner, group, and mode during compatible tool-note migration, creating missing destinations privately and refusing unsafe imports. This does not establish ACL preservation or Windows equivalence. #159194
  • Recheck ownership before removing eligible tokenless legacy plugin and model-catalog temporary directories on macOS and Linux. Windows keeps its existing age and rename checks. #160155 — @romneyda, @vyctorbrzezowski, @jalehman
Plugin command permissions

Plugin commands are now rejected if their permission declarations are invalid. Public commands also cannot pass along the private permission used to author skills. Valid plugin commands keep their existing behavior.

Sources and complete change list

Security and trust

  • Reject invalid plugin command permission scopes, including falsy entries and sparse-array holes. #158638
  • Strip private skill-authoring capability from public command input at runtime instead of relying on its TypeScript type. #159220
Duplicate user profiles

Administrators can merge duplicate user profiles, including profiles without email addresses, with openclaw users merge <source-profile-id> --into <target-profile-id>. The target keeps its role and conflicting preferences; old permissions do not transfer and historical records keep their original identities. Move personal USER.md files manually and expect affected clients to reconnect. The shared Owner profile cannot be merged.

Configured Cloudflare OIDC sign-in now recognizes GitHub identities in authenticated custom claims. If optional GitHub details are missing or lookup fails, otherwise authorized email sign-in can continue. Existing account conflicts still require an administrator to link the email explicitly with users.linkEmail; profiles are not merged automatically.

Sources and complete change list

Improvements

  • Add explicit administrator-only profile merging with exact live IDs, inherited alias/account transfer rules, safe repeat handling, and rejection of attempts to redirect a retired source. This does not automatically match people or rewrite historical access records. #159889

Bug fixes

  • Read Cloudflare OIDC GitHub claims from custom when oidc_fields is absent, preserving existing roles, co-author preferences, access requirements, and account-binding checks. A present oidc_fields container takes precedence; optional enrichment failures do not grant a GitHub identity or credit. #160661 — @shakkernerd
Execution audit identities

Optional execution audits now keep track of who started Control UI work through queued replies, retries, and ACP turns. Enable them with logging.audit.executionIdentity. Missing or ambiguous identities remain unknown.

Sources and complete change list

Bug fixes

  • Carry authenticated chat identity into execution audits while preserving the original queued identity through profile changes. The in-memory carrier does not restore identity from durable queue state. #159843 — @joshavant

Quality-of-Life Improvements

You can handle more everyday settings and shared work through chat, with updates to terminal controls and busy conversations.

Settings and skills in chat

You can ask your agent to change OpenClaw settings and update skills you own. Existing approvals still apply.

If your settings or tokens contain environment-variable expressions, check the configuration guidance before updating. Some values now change meaning and can break access.

Sources and complete change list

Existing ${VAR:-fallback} text now expands to an environment value or fallback. Use $${VAR:-fallback} when you intend literal text, and check existing credentials before updating. These defaults are ordinary configuration text, not secret storage.

Keys saved through chat go into shared team storage. Pasting a key has already exposed it to the model provider and transcript; use masked setup to keep it out of that context.

Improvements

  • Configure secret references and edit owner-controlled skills through chat 8fd72da. Thanks @obviyus.
  • Reduce repeated environment scans during configuration changes #156457. Thanks @vincentkoc.

Bug fixes

  • Reject unsupported secret-reference targets during configuration previews, retaining plain-value preview limits #157960. Thanks @olli0103, @obviyus, and @azakharko.
  • Make OC Path Markdown writes honor numbered, first, and last item selectors, including the selected duplicate key and positions after multiline edits #160552.

Limits and compatibility

  • Add inline environment defaults and literal escaping; existing fallback-shaped credentials require attention fcfa4bf. Thanks @etzelm and @jalehman.
Connected people and shared sessions

You can ask your agent who is connected and which device was recently used, within your existing access. Connected tabs may be idle, and any reported location is approximate.

With operator.write permission, you can also ask the agent to archive, restore, or stop sessions you can access and created or were assigned to. Stop normally clears queued follow-ups, so request clearQueued: false if you want to keep them.

Sources and complete change list

Improvements

  • Query connected people and device activity with the original caller's read authority #159117.
  • Give write operators limited archive, restore, and Stop controls for accessible creator or human-assignee sessions; assignment or operator.sessions.write alone is insufficient #160296. Thanks @vacinc.

Documentation

Larger Swarms and parallel agents

Swarms now default to 32 collectors per group, up from eight, and no longer compete with ordinary subagents for the same running slots. Ordinary subagent limits also apply separately to each spawning conversation. This can increase resource use; set tools.swarm.maxConcurrent=8 to keep the previous Swarm cap.

Agents also get guidance to avoid repeatedly asking permission for work you already requested. Existing approvals still apply, and verified human contributor credit can follow new delegations with the person's consent.

By default, zero-wait messages to an agent’s own running child now try to guide its current work. Choose mode: "followup" when you need a separate turn and completion. Acceptance does not confirm the child has read it, and queued guidance can be lost on restart.

Sources and complete change list

Improvements

  • Give each immediate spawning session its own ordinary subagent execution budget #156381.
  • Separate Swarm group capacity from ordinary children and raise the group default to 32 #158616.
  • Clarify bounded research delegation and diagnosis of missing results without restarting cancelled work #141209. Thanks @hartmark and @jalehman.
  • Preserve consenting, verified human coauthor eligibility through delegation, with up to 32 inherited profiles and forward-only credit repair #157268. Thanks @vincentkoc.
  • Reduce repeated confirmations for requested work, update new-workspace guidance, and preserve useful fetched-text previews #157447. Thanks @obviyus, @jalehman, and @joshavant.
  • Reduce history scanning during subagent capacity checks without changing which children count #155695. Thanks @vincentkoc.
  • Expose the existing zero-to-60-second wait range, 30-second default, and immediate-snapshot option to models #156542.
  • Avoid whole-store reloads for active-subagent context and selected lists #158397.
  • Avoid unrelated registry work when waiting for known collectors 51ec968. Thanks @fuller-stack-dev.
  • Update subagent list indexes when displayed facts change #158792.
  • Reduce repeated recovery reads, with unresolved rows backing off from one second to one minute #159082.
  • Move durable requester lookup during native, visible, and ACP spawning to database workers #159135.
  • Replace existing subagent registry entries without scanning unrelated siblings; the position indexes add some resident memory, and deletion still shifts later entries #160800.
  • Move native completion-binding and ACP notice lookups off the Gateway thread #157033.

Limits and compatibility

  • Historical subagent Task-ledger completion writes moved to workers before the Tasks retirement; this is not a retained Task-ledger capability #156467.
  • Default sessions_send calls with timeoutSeconds: 0 and no mode try steering the caller’s own active child; idle children and rejected steering fall through to a new turn on the same child. Accepted steering skips separate announcement delivery and does not confirm transcript persistence or model consumption; explicit modes, positive waits, and other targets retain their behavior #160842. Thanks @CarotaWealth.
Unfinished checklist reminders

Before ending a reply, the built-in agent gets one chance to revisit an unfinished checklist it saved during that run. It can continue the work or explain a blocker, which may use another model response. This does not restart old tasks or override cancellation and approval waits.

Sources and complete change list

Bug fixes

  • Add one current-run completion check for successfully saved unfinished checklists, preserving visible checkpoints and normal stopping exceptions #160297. Thanks @vacinc.
Terminal models and conversations

The terminal model picker opens while choices load and keeps your search as it refreshes. Startup and session refreshes also preserve the conversation you selected. Text submitted while a conversation loads stays editable until you press Enter again; a startup --message that was not sent is reported and is not retried automatically.

Selecting bare global now opens Home, including saved selections, while older history remains stored. Terminal math display and Tab completion for Chinese, Japanese, and Korean attachment names also improve.

Sources and complete change list

Improvements

  • Open model pickers immediately and refresh choices while preserving search and selection #157839. Thanks @obviyus.
  • Use the consistent openclaw process title for ordinary CLI commands #157118.
  • Reuse pinned configuration during proxy validation #158071.
  • Keep inference help and completion free of execution-only runtime loading #158624.
  • Improve terminal math display and explicit Tab completion for CJK attachment names; automatic completion triggers stay unchanged #160085.

Bug fixes

  • Keep session descriptions and remembered-session restoration with the selected agent #158240.
  • Preserve choices made during startup restore and join accepted remembered-session writes on normal exit #158845.
  • Keep history and sends on the selected conversation, falling back from qualified global to Home only after confirmed absence #159166.
  • Correct image and video timeout guidance to use --timeout-ms #157419. Thanks @obviyus and @sxh313; the source also records the name sxh without establishing another person.
  • Exit after plugin-sensitive help output has drained #158024. Thanks @obviyus and @ryanjkelly.
  • Return parseable JSON errors for rejected agent /compact messages, pointing to sessions compact #159212.
  • Tell operators to review a mismatched conditional config expectation rather than repeat the same command; expectation flags still cannot combine with --dry-run #159708.

Limits and compatibility

  • Let CLI commands exit during compile-cache cleanup; retention targets remain soft and Node permission mode skips maintenance #157884. Thanks @romneyda.
  • Reduce eligible Linux broker and service-anchor launch overhead; missing executables on that path now report ENOENT instead of shell status 127 #158367.
Code Mode activity and errors

Code Mode shows a purpose title for new executions, and its error reports distinguish a failed tool from a later JavaScript error. A failed script may already have sent a message or taken another action, so check before retrying. Optional loop detection also recognizes more repeated work and remains off by default.

Shell commands can use more of the current Code Mode call’s remaining time to finish, reducing unnecessary follow-up checks for short commands. Longer commands still return a process handle, and explicit background requests keep their behavior.

Sources and complete change list

Improvements

  • Require a nonblank title for new Code Mode calls while retaining older untitled history #157150.
  • Reduce Node execution overhead and retain bounded output when a worker times out #156066.
  • Extend bounded warm-worker reuse and expose per-script start and retirement counters #156387.
  • Reuse up to four compatible completed Code Mode workers, each with five-minute idle retention #156800.
  • Reduce temporary allocations in OpenClaw Tool Search catalog preparation #158805.
  • Reuse search terms for unchanged tool descriptions across Code Mode cells while refreshing changed entries and keeping visibility-specific results #160811.

Bug fixes

  • Skip spoken confirmation for supported read-only Talk file counts, listings, and composed commands whose every stage is read-only #156151. Thanks @obviyus, @peetiegonzalez, @vacinc, and @marvinthebored.
  • Explain when disabled exec exit notifications require polling or another continuation for needed results #158884. Thanks @vacinc.
  • Preserve explanatory text for supported explicit nested tool-error shapes #159359.
  • Avoid logging-import memory exhaustion before Code Mode programs start #159615.
  • Recognize repeated Code Mode work despite changing execution bookkeeping when loop detection is enabled #159864. Thanks @vacinc.
  • Distinguish JavaScript errors from original tool rejections across execution and waits, independently of replay safety #160217. Thanks @vacinc.
  • Give default shell commands the remaining Code Mode wait window minus a settlement margin instead of a one-second cap; explicit timing stays in effect, and slow settlement may still require another wait #160841.
Uploaded documents and PDF pages

The assistant keeps the filenames of uploaded documents and is told when extraction leaves out known pages, text, or images. PDF page selections now count the pages you request, so a small page limit no longer rules out a page near the end of a file. Recognized binary documents also return reading or conversion guidance instead of garbled text.

Sources and complete change list

Bug fixes

  • Report observed partial extraction and apply PDF limits to the number of selected pages 2a5cda2. Thanks @vyctorbrzezowski.
  • Recognize binary document bytes and return parser or conversion guidance, without adding automatic extraction 5cc0d5b. Thanks @vincentkoc and reporter @xx77yy.
  • Preserve uploaded filenames through storage and sandbox staging into model context #156696.
  • Preserve emoji and following embedding text under tiny byte caps, allowing one indivisible character to exceed the cap; stop cancelled browser permission-upgrade waits and reconnects while finishing storage of already-approved rotated credentials #158571.
Release notes and documentation

Release pages and plain-Markdown copies link to each other, so you can choose the format you prefer. Documentation navigation includes existing Persian and Thai translations, and old docs Showcase links point to the website Showcase. Contributors can also preview edits with the current website renderer.

Sources and complete change list

Documentation

  • Add the prior release's plain-Markdown changelog and contribution record #156875. Thanks @hannesrudolph.
  • Give formatted release pages and Markdown mirrors reciprocal reading-format links #156916. Thanks @hannesrudolph.
  • Use current-site local previews and include Persian and Thai in publishing navigation; Windows preview handoff remains unverified #157544. Thanks @hannesrudolph.
  • Retire the stale docs Showcase and configure old bookmarks to reach the existing website destination #158575. Thanks @hannesrudolph.
Managed workspace setup and cleanup

Managed workspaces skip unnecessary setup for empty checkouts and repeated cleanup scans of unchanged checkouts that cannot be removed. If you repair one outside OpenClaw, run openclaw worktrees gc to retry cleanup; otherwise it may remain deferred until OpenClaw records further activity or a lifecycle change.

Sources and complete change list

Improvements

  • Batch file-metadata checks when preparing large worktree snapshots 6fce79b. Credit to Peter Steinberger.
  • Save workspace safety records through the state worker while preserving durable timestamps and the 24-hour disappearance guard #158797.
  • Move managed-worktree run admission off the Gateway thread, retaining uncertain-outcome custody until recovery #159437.
  • Skip template creation for known-empty workspace trees while retaining normal checkout and capacity checks #159544.

Limits and compatibility

  • Remember worktree cleanup deferrals and reduce ordinary PR-polling Git work; external repairs require an explicit cleanup retry #158892.
Conversation history and lists

Opening conversation history and refreshing session lists require fewer repeated checks and reads. Lists also avoid unpacking large saved snapshots they do not need, and browsing a parent’s child conversations skips unrelated sessions. Large session-group changes do less background work, though the effect on loading time depends on your setup.

Back up your databases before updating and verify the backup. This update automatically moves agent databases to schema 24, which older builds cannot open. To downgrade, restore a verified pre-upgrade backup with its matching build; do not lower database version markers.

Sources and complete change list

Improvements

  • Reuse unchanged session placement information after transcript writes 08e5e35.
  • Reuse completed placement reads during overlapping archived-session preparation 63fa1d2. Credit to Peter Steinberger.
  • Separate large saved snapshots from frequently read session metadata in agent schema 24, preserving full reads and transcript bytes. Reported allocation reductions apply to isolated metadata-read fixtures, not total Gateway memory ae6a884.
  • Narrow eligible child-session lists through existing parent indexes while preserving visibility, ownership, counts, and paging; person-profile searches retain the full visible roster #160404.
  • Reuse authentication readers across connection and scheduled-work callbacks #155779.
  • Prepare operator profiles away from the Gateway request thread #155800.
  • Retain prepared session rows across refresh pauses #155957. Thanks @vincentkoc.
  • Avoid rebuilding rosters for progress and preview updates #155995.
  • Reuse prepared session information when loading conversation history #156055.
  • Reuse roster selection within session-list preparation #156221.
  • Reuse admitted database schema facts during session reads #156643.
  • Share overlapping same-row session reads during refresh #156791.
  • Remove repeated schema probes from warm session metadata reads #156817.
  • Share freshness checks within one synchronous read while later independent reads recheck for foreign commits #156922.
  • Avoid repeated schema inspection after data-only writes #157030.
  • Share pending validation across concurrent session readers #157043.
  • Avoid unrelated row-validation waits for targeted access after store admission #157113.
  • Avoid copying the process environment for resident subagent identity checks #157120.
  • Reuse session facts after model metadata changes #157129.
  • Reuse unchanged related rows during parent and child relationship refreshes #157552.
  • Reuse current participant facts when publishing session writes #157582.
  • Reuse current participant facts during warm transcript appends #157622.
  • Reduce temporary filtering arrays during session status reads #158326.
  • Batch exact reads for session-group changes involving at least ten members #158345.
  • Preserve unrelated placement facts after participant updates #158395.
  • Avoid repeated path normalization during warm session reads #158444.
  • Reuse prepared database-admission facts during session updates #158627.
  • Reuse resident session facts during mutation checks #158833.
  • Reuse resident exact rows during tool-policy preparation #158872.
  • Reuse healthy cleanup workers after settled commit refusals without replaying refused work #158878.
  • Reduce cleanup planning work and time occupying the writer #158885.
  • Decode exact session rows once for both use and validation #158961.
  • Avoid schema rescans caused by mistaking SQL expression endings for transaction boundaries #158973.
  • Route run events through existing session identities instead of repeatedly scanning full stores #159742.
  • Reduce duplicate ownership checks within uninterrupted state-read work #159876.

Limits and compatibility

  • Reuse dedicated-read ownership proof for less than one second, including after an out-of-band lock-sidecar replacement or directory-alias change; expired proof is checked before dispatch #160139.
Saving conversations

More conversation saving can wait for storage without holding up unrelated requests. Large messages and tool results also need less duplicate processing when saved, although individual saves can still take longer.

Sources and complete change list

Improvements

  • Move selected session writes off the request thread and let foreground writes progress between cleanup units #155631.
  • Move durable history and selected session-detail reads off the request thread #155740.
  • Reuse valid integrity proof across same-process database workers while retaining conservative cold-open checks #155785.
  • Move streamed transcript and runtime-report writes to workers while preserving commit ordering #156095.
  • Reduce large-message storage preparation without changing transcript bytes #158402.
  • Reduce host-side preparation for SQLite worker operations #158655.
  • Reuse warm agent-database execution context and reduce repeated host checks #158750.
  • Create fresh canonical durable sessions with one atomic transcript-header and entry write; alias, fork, and Incognito paths remain distinct #158771.
  • Reduce host CPU spent publishing small agent-state changes #158843.
  • Avoid transferring duplicate parsed tool calls and results to the database worker #159449.
  • Copy prior session-update context only when a callback reads it #159780.
  • Avoid unpacking unrelated large tool results during guarded writes and prior-answer matching, with clearer write diagnostics #159898.
Starting replies in parallel

Independent conversations can prepare replies at the same time through more paths, reducing waits behind other chats. Starting a new conversation also avoids unnecessary history scans. Busy setups can still experience pauses.

Sources and complete change list

Improvements

  • Remove redundant session-metadata reads during chat admission 7dc4905.
  • Move conversation-index publication and selected startup reads into workers e0d8000. Thanks @fuller-stack-dev and @joshavant.
  • Move managed-worktree snapshot reads off the calling thread #156315. Thanks @todddickerson.
  • Share simultaneous approval-replay preparation for matching session and reviewer bindings, retaining per-client checks and bounded retries #156358.
  • Batch worker-machine metadata refreshes through background database reads #157079.
  • Skip device-storage setup for eligible implicit local loopback CLI calls with authentication disabled #157166.
  • Read opt-in CLI timeline settings without opening shared state #157252.
  • Reuse healthy discovery workers during session creation and expose slow-create phase diagnostics #158433.
  • Avoid empty archive-recovery waits before replies when the committed database identity still matches #158559.
  • Reuse sandbox classification and avoid duplicate workspace-directory preparation #158610.
  • Skip unnecessary archive preparation when adopting existing sessions #158660.
  • Read targeted rows and label occupancy instead of unrelated session inventory during conversation creation #158809.
  • Prepare personal-account authority once for concurrent chat work; running installations require profile changes through Gateway RPCs #158941.
  • Yield between session-publication batches and combine pending activity recaps within the same session generation #159102.
  • Allow audited operations on independent session keys to prepare replies concurrently while overlapping operations keep their ordering #160183.

Limits and compatibility

  • Historical Task-owner startup persistence moved off the Gateway thread before the Tasks system was retired #156064.
Live replies and progress updates

OpenClaw does less repeated processing while displaying replies and sharing progress updates. Very large updates also avoid extra work once they exceed what can be replayed after a reconnect.

Sources and complete change list

Improvements

  • Skip full runtime-context cleanup scans when recognized removable headers are absent #153211. Thanks @jjjhenriksen, @patrick-erichsen, and @noelillinger.
  • Stop capturing oversized progress at the existing replay limit and retain compact tool metadata #158572.
  • Reuse unchanged tool-definition projections while applying current diagnostic redaction #158871.
  • Reduce repeated identity resolution and allocation in session-activity broadcasts #159182.
  • Encode matching multi-client broadcasts once while retaining JSON text frames and recipient restrictions; retained delivery and recipient-specific projections keep their existing paths #160787.
  • Reuse exact measurements of unchanged long text within an agent’s diagnostic recording attempt, while observing edits and compaction and leaving provider requests unchanged #160807.
Memory use during busy chats

Busy chats release large pieces of data they no longer need. Related memory-management changes reduced long pauses in tests with many simultaneous replies, though pauses can still occur.

Closing Control UI terminal tabs also releases memory that could remain held after the tab closed, while other open terminals keep working.

Sources and complete change list

Improvements

  • Move managed-worktree lease cleanup off the Gateway thread; the accompanying Task-backed maintenance settlement is historical after Tasks retirement #156640.
  • Prepare worktree cleanup workers earlier; the accompanying Task-backed maintenance-start transition was subsequently retired #156872.
  • Retain one idle agent-database executor for up to thirty minutes, with cross-agent eviction unchanged #158405.
  • Release unneeded large event payloads retained by live-chat ownership checks #158643.
  • Reduce plugin ownership bookkeeping behind long garbage-collection pauses during concurrent streaming #159103.
  • Reduce repeated tool-classification allocation during agent preparation #159464.

Bug fixes

  • Remove the listener retaining closed Control UI terminals’ canvas and WebAssembly memory. Browser tests cover this specific leak, without establishing recovery from native-app renderer crashes #160748. Thanks @fuller-stack-dev.

Other Bug Fixes

This release fixes several causes of stalled conversations, missing results, and interrupted worker chats.

Database and conversation history

Conversation lists keep refreshing while other chats save changes. The release also fixes temporary-file buildup that could block updates despite free disk space, and lets an agent accept new requests after a temporary database cleanup failure clears. Failed requests are not automatically repeated.

Busy installations may use more memory for queued database input, with its allowance rising from 64 to 256 MiB. If a global or unknown session address is rejected as ambiguous, choose a specific conversation. Existing history is kept without merging or renaming it.

Sources and complete change list

Bug fixes

  • Keep archived-session search, terminal history, Talk, and shared PR updates current. 0bbad56f Thanks @galiniliev, @steipete.
  • Keep history reads working during concurrent agent registration. 3d903819 Thanks Peter Steinberger.
  • Avoid database-worker contention during Gateway authentication recovery. 3f341061 Thanks Peter Steinberger.
  • Preserve concurrent session metadata while storage becomes ready. 526f67dc Thanks Peter Steinberger.
  • Release memory-pressure listeners after database-worker cleanup. 8a5386d6 Thanks @steipete.
  • Prevent temporary-file exhaustion from SQLite coordination, retain Cron result writes during shutdown, and stop retired Wear audio frames changing the current animation. 8b16e532 Thanks @steipete.
  • Explain when a database path disappears during access checks, without treating the file as recovered. 9512a28b Thanks Peter Steinberger.
  • Release database access after a command reaches a closed worker. a53728bd Thanks David Stephens.
  • Preserve stored session addresses, history, and family links through alias changes; reject stale queued writes. #155886 Thanks @steipete.
  • Preserve saved sessions, ACP metadata, and existing literal parent links when the main-session alias changes; absent parents retain the existing alias fallback. #156109 Thanks @vincentkoc.
  • Stop counting a completed request as active while background participant details are saved. #156172 Thanks @steipete.
  • End refresh loops for absent subagent runs and reuse unchanged run information. #156268 Thanks @steipete.
  • Keep session lists refreshing while unrelated sessions are being written. #156286 Thanks @steipete.
  • Avoid rebuilding unchanged session lists after identity-permission changes. #156339 Thanks @steipete.
  • Reject session and Cron metadata invalidated while their database reader closes. #156519 Thanks @steipete.
  • Restore sharing and transcript notes for custom session-store locators backed by symlinked databases. #156684 Thanks @steipete.
  • Show another connection's committed database changes on the next independent read, preserving an active read snapshot. #156824 Thanks @vincentkoc, @steipete.
  • Keep a healthy SQLite connection usable after a pre-commit automatic rollback; the failed write still fails. #157241 Thanks @steipete.
  • Save durable session activity through the database worker, preserving event order and stopping replay when a write's outcome is unknown; the first flush may take longer, and Incognito retains its existing handling. #157598 Thanks @steipete.
  • Keep older child-answer lookups and selected Cron database waits off the Gateway thread; accompanying Tasks and TaskFlow read paths were later retired. #157634 Thanks @fuller-stack-dev.
  • Reuse valid same-process database integrity checks after the last writer closes. #157666 Thanks @marinabotobs, @steipete.
  • Attempt tool-resource cleanup when agent setup fails, preserving the original error and reporting uncertain cleanup. #157678 Thanks @vincentkoc.
  • Resolve dangling workspace symlinks correctly during agent deletion and close File Transfer handles after identity-check errors; terminal uploads now remove some forbidden filename characters and use names such as CON_.txt. #158008 Thanks @steipete.
  • Let Gateway requests proceed while session cleanup and cold-storage commits settle. #158073 Thanks @steipete.
  • Prevent the reply-startup lock cycle caused by overlapping read-marker updates with a durable context engine. #158209 Thanks @iwhatsskill.
  • Skip malformed non-object Claude CLI history rows and retain the original abort error for already-aborted node work. #158228 Thanks @steipete.
  • Avoid chat-send lock waits when the needed device identity is already cached. #158259 Thanks @fuller-stack-dev.
  • Allow session creation through database directory aliases such as macOS /tmp. #158401 Thanks @joshavant.
  • Finish releasing a failed-startup turn claim after temporary database contention, allowing the next message without replaying the failed input. #158486 Thanks @fuller-stack-dev, @steipete.
  • Share agent database access across directory aliases and reject queued writes after an alias is retargeted. #158611 Thanks @joshavant.
  • Release completed-run diagnostic references after queued events drain. #158949 Thanks @steipete.
  • Allow the next request after a transient failed-operation database-cleanup fault clears, while explicit revocation remains terminal. #159451 Thanks @aspalagin and @obviyus; related issue report by @desksk.
  • Keep persistent reply startup and Stop responsive during database admission waits, joining cleanup before a queued successor. #159632 Thanks @steipete.
  • Restore the loaded conversation after a rejected nested transcript write, preserving selected branches and valid message ancestry. #159807 Thanks @steipete.
  • Let other Gateway work continue while a session update waits to begin its database write; the transaction itself remains synchronous. #160801 Thanks @steipete.
  • Retain the normal bounded commit wait after write admission, so brief competing reads do not immediately fail session updates on rollback-journal storage. Commit waits remain synchronous. #160887 Thanks @steipete.
  • Reject asynchronous transcript messages carrying stale writer or session-lifecycle claims before saving them. #160893 Thanks @steipete.

Limits and compatibility

  • Earlier asynchronous Tasks retention cleanup, superseded by the removal of Tasks and TaskFlow. ac9b848d Thanks @steipete.
  • Keep admitted chat writes attached to their original conversation and database; refuse ambiguous raw session aliases without merging history. #156819 Thanks @steipete.
  • Give independent database workers separate request slots and raise their shared queued-input allowance from 64 to 256 MiB. #157230 Thanks @steipete; issue report by @todddickerson.
Subagent results and restarts

A finished subagent batch can now return its results while an unrelated earlier batch keeps working. It still waits for its own helpers and their nested tasks. The release also fixes cases where helper results restarted work you had stopped, or an interrupted task could not find its original request after a restart. An agent resuming after its helpers finish can also keep using its authorized tools.

Sources and complete change list

Bug fixes

  • Preserve successful child completion timing when publishing its reply. 53f7e5fd Thanks Peter Steinberger.
  • Reserve collector queue order before requester lookup and retain the original completion destination. 5cf18de3 Thanks Peter Steinberger.
  • Resume an agent after a clean sessions_yield instead of mistaking a stale synthetic message for cancellation. 66791fc1 Thanks @steipete.
  • Finish failed-launch cancellation before deleting a collector session or advancing its queue, including restored queues. d00524c2 Thanks @vincentkoc.
  • Report cancellation before cleaning up a collector stopped during startup. d65bc76d Thanks Peter Steinberger.
  • Wait for the original replayable reply before agent.wait reports completion; replay remains limited to the existing process-local cache. #156078 Thanks @joshavant.
  • Prevent selected completed helpers from automatically restarting stopped work, retaining their results and allowing new human instructions. #156124 Thanks @shakkernerd.
  • Release a failed restart-recovery attempt so the conversation can retry within its existing recovery budget. #157214 Thanks @steipete.
  • Preserve completion input through compaction and stop futile retries for the specific closed-turn transcript mismatch. #157571 Thanks @steipete.
  • Limit repeated identical settlement-write warnings while keeping the existing retry cadence and reporting suppressed counts. #157871 Thanks @etzelm, @amesgit, @jalehman.
  • Record native subagent and ACP terminal outcomes without blocking unrelated Gateway events during database contention. #158118 Thanks @steipete.
  • Recover an interrupted request and saved tool results when large internal records obscure the loaded history window. #158363 Thanks @jalehman; related issue reports by @hannesrudolph and @simonspid.
  • Refresh optional parent-session attribution after creation, replacement, or deletion. #158581 Thanks @steipete.
  • Preserve a successful nested subagent result after restart when its exact pending continuation still owns the work. #158585 Thanks @jalehman.
  • Await orphaned-subagent database admission without blocking startup's main thread on integrity scans. #158620 Thanks @fuller-stack-dev.
  • Deliver a finished yielded batch without waiting for unrelated older work, retaining waits for its own nested children and cleanup. #158642 Thanks @obviyus; report by @potterdigital and independent diagnosis by @sxh313.
  • Avoid waiting again for results already being processed, show scheduled agents only permitted automation actions, and tolerate harmless session updates during publication-permission preparation. #160036 Thanks @steipete.
  • Move database work for stopping active or queued file-backed native subagents to workers, preserving the intended child and waiting for completion writes before follow-ups. #160203 Thanks @steipete; integration work by @vincentkoc and @Kimiyu-186.
  • Restore a parent's verified tool policy when it resumes after its helpers finish; missing or conflicting policies keep the restricted fallback, and revoked access stays revoked. #160786 Thanks @joshavant; related issue report by @andersonjeccel.

Limits and compatibility

  • Earlier missing-Task completion retirement and inspection, superseded by Tasks removal; this historical change discarded delivery rather than restoring it. #157061 Thanks @steipete.
Queued messages and steering

Canceling a queued message before it starts now leaves the current reply and goal running. Follow-ups sent after a reply finishes go to the next turn, and recovery from stuck loops can let waiting messages proceed. Steering sent to a busy built-in agent stays queued, but its acceptance does not mean it has been read or saved. Queued steering is lost on restart.

Sources and complete change list

Bug fixes

  • Route late follow-ups to the next turn after completion or handoff, while current-turn retries can still accept steering. 2fd61364 Thanks @steipete.
  • Prevent new input and reset confirmations from canceled or replaced requests and preserve recorded reset retry outcomes; already-adopted resets and child input may finish, and an unstarted follow-up needs a separate submission. #150640 Thanks @sallyom, @vincentkoc.
  • Keep exact session-description requests moving during unrelated bulk refreshes, within existing capacity bounds. #155471 Thanks @steipete.
  • Keep one redacted failed-image recovery note across same-run retries without reinserting compacted history; disk-backed internal writes use a worker. #155721 Thanks @steipete.
  • Retain the owning agent when resuming by session ID in partitioned custom stores; ambiguous shared-store sessions still require agent selection. #155741 Thanks @steipete.
  • Move file-backed reply-recovery reads to workers, preserve follow-ups across compaction, and keep successor sessions from hiding an interrupted run's warning. #155982 Thanks @steipete.
  • Report canceled queued chats as aborted to waiting and replaying clients. #156638 Thanks @joshavant.
  • Complete accepted self-archiving after the agent finishes; revoked authority still prevents it, and pending archives do not survive a Gateway restart. #156978 Thanks Vincent Koc (reporter and requester).
  • List saved conversation branches despite concurrent label or activity updates. #157060 Thanks @steipete.
  • Recognize unchanged progress-card content when loop detection is enabled, without changing defaults or thresholds. #157578 Thanks @jalehman.
  • Keep a canceled or expired waiting message from failing the active conversation, pausing its goal, or adding a false timeout entry. #157958 Thanks @steipete.
  • Recover from unchanged wait loops and repeated model requests without semantic progress, retaining legitimate tool and provider-retry allowances. #158428 Thanks @steipete.
  • Keep accepted explicit steering queued beyond the sender's reply deadline and remove only its unconsumed guidance when the receiving run ends. #160490 Thanks @vacinc.
Command completion and cleanup

A completed command keeps its result when a busy OpenClaw processes the finish notification late, instead of incorrectly reporting a timeout. Windows commands can finish their cleanup before exiting, and Linux background-process cleanup handles more leftover processes that have already exited. Commands still running keep their existing deadlines and operating-system restrictions.

Sources and complete change list

Bug fixes

  • Keep terminal input and resize callbacks in the running CLI's context. 3067f9cf Thanks Peter Steinberger.
  • Request command-group termination before an oversized control message causes the relay to lose cancellation authority. b8a66645 Thanks Peter Steinberger.
  • Treat permission-denied process probes as existing processes and fully exited single-thread Linux zombies as dead, including eligible Doctor recovery. #151107 Thanks @ekinnee, @altaywtf.
  • Keep Windows command cleanup alive until its awaited result settles. #157042 Thanks @steipete.
  • Collect eligible adopted Linux command descendants through longer configured shutdown grace periods without taking unrelated exit statuses. #157863 Thanks @steipete.
  • Preserve observed command exits and output during delayed timeout handling; completed results may survive slightly beyond the nominal deadline. #159578 Thanks @steipete.

Limits and compatibility

  • Earlier background-command registration and completion ordering protected fast-exit handles, exit results, and cleanup; its Tasks bookkeeping was later retired. #157177 Thanks @steipete.
Worker chats and workspaces

Worker chats keep their workspace through automatic daily or idle resets, so they can continue replying there. This does not change /new or /reset, or restore workspaces already disconnected from a chat. A stuck cloud worker also no longer blocks unrelated sessions, though work sharing a session or environment may still wait.

Wait for active work to finish before changing a chat's workspace. Worker shutdown now waits for accepted work that can still save data, so it can remain pending if a provider never finishes.

Sources and complete change list

Bug fixes

  • Identify the Docker or Podman operation and deadline in container timeout messages without displaying private arguments; check the selected daemon before retrying. 136cfdc7 Thanks Peter Steinberger.
  • Keep inbound worker-transfer staging filenames stable during quota checks, preserving validation before publication. a9760fd9 Thanks Peter Steinberger.
  • Reject new checkpoint imports or publication after a cloud edit loses authority, preserving pending results for recovery. #150611 Thanks @sallyom, @vincentkoc.
  • Keep admitted worker inventory usable after an independent database-open refusal, while terminal failure and quarantine still disable it. #155875 Thanks @meska, @vincentkoc, @obviyus.
  • Complete worker workspace verification and result uploads without the missing __name helper error under source-loader transforms. #156068 Thanks @joshavant.
  • Allow prepared-worker Git verification up to ten minutes per operation within the provider deadline, with specific failure diagnostics and unchanged integrity checks. #156212 Thanks @steipete.
  • Move worker inference persistence off the request thread, save admission before acknowledgment, and join accepted writes and provider work during cancellation and shutdown. #157422 Thanks @steipete.
  • Preserve worktree and repository-workspace bindings across automatic daily or idle resets, leaving explicit reset behavior unchanged. #159506 Thanks @chelsealong, @obviyus, @dimonnld.
  • Let independent sessions proceed during stuck cloud-worker operations and begin Stop cancellation before final cleanup waits. #160299 Thanks @steipete.
  • Return a fresh node launch's invalid-request diagnostic without canceling work never registered; update the older Gateway or node component for a descriptor-version mismatch. #160380 Thanks @steipete.
  • Finish Crabbox teardown for qualifying absent leases and release warm-image allocation holds; coordinator Stop requires matching read and release absence responses for that lease. #160571 Thanks @steipete.
  • Accept complete bundled CommonJS dependencies during cloud-session bootstrap validation; affected source installs need a rebuild and restart. #160583 Thanks @steipete.
  • Recognize Crabbox 0.67 lease-read query strings during absent-lease cleanup without treating inspection alone as Stop confirmation. #160660 Thanks @steipete.

Limits and compatibility

  • Require an idle session before workspace changes or preparation callbacks, preserving its conversation history when adoption succeeds. #157259 Thanks @vincentkoc.

Maintainer and Internal Changes

This release includes 1,620 changes to contributor tools, automated tests and internal code.

Tests, build tools and code maintenance

Contributors get fixes for test setup and build tools, alongside code cleanup. The testing guide and local proof guide explain how to check changes before submitting them.

Sources and complete change list

Improvements

  • Align Nextcloud Talk webhook test callbacks. 007822d8 Thanks Peter Steinberger.

  • Share Android phone compilation between tests and lint. 02cc444a Thanks Peter Steinberger.

  • Start additional CI checks directly after preflight. 0345e454 Thanks Peter Steinberger.

  • Share temporary-directory cleanup in QA CLI tests. 057a032f Thanks @steipete.

  • Consolidate shared skills, terminal UI, and setup internals. 0aed154b Thanks @steipete.

  • Consolidate sandbox registry read dispatch. 0dca2516 Thanks @steipete.

  • Overlap eligible Telegram CI test processes. 116a1571 Thanks Peter Steinberger.

  • Move channel-ingress account discovery to the read worker. 15a0f344 Thanks @steipete.

  • Reuse completed extension boundary compilations in CI. 15acf91c Thanks Peter Steinberger.

  • Test SDK artifact preservation after declaration-emission errors. 1636f620 Thanks Peter Steinberger.

  • Route critical CI checks away from hosted queue delays. 183595e7 Thanks @steipete.

  • Keep the fat64 fixture with macOS signing tests. 1a2cda64 Thanks @steipete.

  • Avoid recompiling unchanged declaration-test types. 1a956c8a Thanks Peter Steinberger.

  • Reduce CI control-job and completion observation delays. 1ea24b2d Thanks Peter Steinberger.

  • Remove a progress-snapshot numeric-coercion lint suppression. 20f3170d Thanks Peter Steinberger.

  • Simplify theme RPC tests within existing lint limits. 25d771cb Thanks Peter Steinberger.

  • Verify installed payloads in same-version upgrade tests. 286b9b07 Thanks @steipete.

  • Refresh Workboard generated Control UI asset references. 2871aef0 Thanks Peter Steinberger.

  • Retain Control UI test hang diagnostics in CI. 2968ae94 Thanks Peter Steinberger.

  • Strengthen Gateway reload tests and failure diagnostics. 2998a881 Thanks @steipete.

  • Apply shared Node arguments to CLI help-exit fixtures. 2ca9f7b7 Thanks Peter Steinberger.

  • Separate session and first-tool resource measurements. 2d94121b Thanks @vincentkoc.

  • Reuse iOS screenshot builds and simulators. 340cb1c8 Thanks Peter Steinberger.

  • Move Side Chat cleanup scheduling into the Gateway kernel. 362cee12 Thanks @steipete.

  • Exercise public Gateway startup in catalog tests. 3735aba0 Thanks Peter Steinberger.

  • Decouple UI scenario context types from Vitest instances. 3d66eb56 Thanks Peter Steinberger.

  • Isolate runner lifecycle tests from native services. 3e9e4cdd Thanks Peter Steinberger.

  • Support documented pre-existing CI failures in approved admin landings. 42c49835 Thanks Peter Steinberger.

  • Retain plugin metadata across Gateway handler tests. 51b995e1 Thanks Peter Steinberger.

  • Separate UI component tests into a type-check shard. 52ae7e31 Thanks Peter Steinberger.

  • Run independent declaration test commands concurrently. 53cc262c Thanks @steipete.

  • Split CI planner tests by ownership. 54d19ff2 Thanks Peter Steinberger.

  • Apply Go memory defaults to architecture CI checks. 57a30515 Thanks Peter Steinberger.

  • Use direct matching for literal CI policy paths. 58661920 Thanks Peter Steinberger.

  • Avoid duplicate native declaration transforms. 614aa3ac Thanks Peter Steinberger.

  • Add real-Gateway session pacing and lifecycle fixture coverage. 63f1dec2 Thanks @pollybot13, @romneyda.

  • Preserve boxed-number coercion without a misleading type assertion. 66b812f2 Thanks Peter Steinberger.

  • Restore Codex terminal cleanup protocol assertions. 687ab1d1 Thanks Peter Steinberger.

  • Use job-local hard links for Linux CI dependency installs. 69232a16 Thanks Peter Steinberger.

  • Select PR tests by changed owners and protected coverage. 6a501796 Thanks Peter Steinberger.

  • Group command-palette fixture writes by agent. 6a6f8a6e Thanks Peter Steinberger.

  • Extract agent database worker shutdown logic. 6c732509 Thanks Peter Steinberger.

  • Separate extension test estimates from runtime preparation. 6fdaf084 Thanks Peter Steinberger.

  • Test CI matrix limits for mixed plugin and core changes. 73da00a2 Thanks Peter Steinberger.

  • Test runtime plugin cleanup completion and failure reporting. 74351493 Thanks Peter Steinberger.

  • Prepare iOS Cloudflare Access session handling for later activation. 79cc65fd Thanks @vincentkoc.

  • Reuse pinned PR heads and verify main advances during admin admission. 809b62cc Thanks Peter Steinberger.

  • Verify committed writes during cold session maintenance validation. 80d6f078 Thanks @steipete.

  • Restore independent type ownership and native database test routing. 818b0092 Thanks @joshavant.

  • Validate deferred bundled MCP tools in release smoke tests. 837fad12 Thanks @steipete.

  • Recognize verified inherited main failures in PR checks. 83fb6a3a Thanks Peter Steinberger.

  • Test separate authorized TUI turns in FIFO order. 84742e3d Thanks Peter Steinberger.

  • Test borrowed and foreign plugin-state lifecycle ownership. 8ce411c1 Thanks Peter Steinberger.

  • Refresh qualified CI test timing weights. 90b45949 Thanks Peter Steinberger.

  • Diagnose missing PR wrapper imports before extraction tests. 932572ac Thanks Peter Steinberger.

  • Prepare Apple transport response-header probes for later ingress integration. 96c05e6b Thanks @vincentkoc.

  • Cover historical asynchronous task content projection. 9aa26763 Thanks Peter Steinberger.

  • Prepare missing AI declarations before CI consumer tests. 9c69495d Thanks Peter Steinberger.

  • Keep ACPX filesystem imports within the plugin SDK. 9d5ab59b Thanks Peter Steinberger.

  • Speed up exhaustive CI inventory checks. 9db8c45b Thanks Peter Steinberger.

  • Tune resources for bounded Linux lint shards. a1ba139b Thanks Peter Steinberger.

  • Isolate compiled lint tests from loader services. a53efa5e Thanks Peter Steinberger.

  • Isolate archive worker database dependencies. a759f770 Thanks Peter Steinberger.

  • Consolidate complete hybrid extension lint jobs. af17bf3b Thanks Peter Steinberger.

  • Preserve complete CI inputs and reviewed landing evidence. b2e0e562 Thanks Peter Steinberger.

  • Reduce recovery test fixture overhead. b3b78c42 Thanks Peter Steinberger.

  • Balance CI jobs using measured test costs. b3f4c0aa Thanks Peter Steinberger.

  • Extract maintenance parameter declarations. b67e6e0b Thanks Peter Steinberger.

  • Split slow hourly hosted test groups. b7d2a8b7 Thanks @steipete.

  • Retain native package-test failure details. c16f2979 Thanks @vincentkoc.

  • Rebalance agent session typecheck roots. d07b710d Thanks Peter Steinberger.

  • Retry transient pnpm archive downloads during CI setup. d9ba3895 Thanks Peter Steinberger.

  • Remove duplicate MiniMax speech-response tests. da49c7e4 Thanks @vincentkoc.

  • Capture complete compiler and lint failure evidence. decfd9ab Thanks Peter Steinberger.

  • Align WhatsApp admission and history finalization. df47b734 Thanks @mcaxtr.

  • Fit hourly test plans within the row cap. df582a40 Thanks Peter Steinberger.

  • Refresh tooling test timing weights. e072e5af Thanks @steipete.

  • Start Node tests alongside baseline checks. e337075d Thanks Peter Steinberger.

  • Focus PR lint on changed files and dependent code. e3afd941 Thanks Peter Steinberger.

  • Consolidate configuration and state helpers. e5478ff3 Thanks @steipete.

  • Simplify Gateway HTTP admission helpers. e693324a Thanks @steipete.

  • Reuse completed lint work for hosted SDK caches. e912d7cd Thanks Peter Steinberger.

  • Isolate session model override state. ea400438 Thanks Peter Steinberger.

  • Show CI infrastructure recovery warnings. eac43f0c Thanks Peter Steinberger.

  • Remove real-time waits from skill-refresh tests. ec4e102c Thanks Peter Steinberger.

  • Record completed Node test-shard execution. eedec20b Thanks Peter Steinberger.

  • Collect precise PR test timing samples. ef681882 Thanks Peter Steinberger.

  • Use public SDK error helpers in Codex. f2532a05 Thanks Peter Steinberger.

  • Avoid duplicate CI coercion scans. f45ac182 Thanks Peter Steinberger.

  • Extract session roster projection helpers. f8ae4fc4 Thanks Peter Steinberger.

  • Verify session identity in thinking-setting tests. fbaafc38 Thanks Peter Steinberger.

  • Simplify widget test handle notation. fde9ed68 Thanks Peter Steinberger.

  • Verify follow-up completion waits for cleanup. #115969 Thanks @vincentkoc.

  • Simplify temporary-directory cleanup in auth tests. #118084 Thanks @steipete.

  • Share exclusive QA smoke workers consistently. #120374 Thanks @vincentkoc, @xyrolle.

  • Preserve failed Gateway benchmark reports. #138016 Thanks @steipete.

  • Replace audit timeout sleeps with budget coverage. #138203 Thanks @steipete.

  • Prepare dormant Android Cloudflare Access session foundations. #147061 Thanks @vincentkoc.

  • Prepare Apple connections for asynchronous authorization. #147070 Thanks @vincentkoc.

  • Prepare Android connections for later access reauthentication. #147094 Thanks @vincentkoc.

  • Test thread-binding duration text boundaries. #148154 Thanks @vincentkoc.

  • Reuse Android TalkMode synthesis fixtures. #148326 Thanks @vincentkoc, @steipete.

  • Centralize tool-description exclusion rules. #148966 Thanks @vincentkoc.

  • Prepare corrections without rewriting incoming review verdicts. #149068 Thanks @fuller-stack-dev.

  • Share configuration documentation wildcard traversal. #149094 Thanks @vincentkoc.

  • Run MCP checks for tool-owner changes. #149696 Thanks @steipete.

  • Avoid unnecessary tool-validation lookup sets. #152066 Thanks @vincentkoc.

  • Share JSONL line selection for reads and edits. #152323 Thanks @vincentkoc.

  • Reduce locale catalog hashing overhead. #152355 Thanks @vincentkoc.

  • Reuse source hashes across bulk translation checks. #152657 Thanks @vincentkoc.

  • Move legacy sandbox imports to the shared writer. #153652 Thanks @steipete.

  • Centralize session-group default replacement. #154017 Thanks @vyctorbrzezowski, @steipete, @fuller-stack-dev, @vincentkoc, @shakkernerd.

  • Share native host-tool execution helpers. #154217 Thanks @sjf-oa, @sjf.

  • Share MCP and scheduled-job change construction. #154680 Thanks @vincentkoc.

  • Assert exact Codex interrupt identity in tests. #154853 Thanks @steipete.

  • Share QA Lab HTTP readiness polling. #154879 Thanks @vincentkoc.

  • Reuse prepared schema-version statements. #154946 Thanks @steipete.

  • Consolidate channel registry tests. #155014 Thanks @steipete.

  • Reduce unnecessary memory-helper imports. #155043 Thanks @steipete.

  • Reduce Vite test setup and preserve mock roster metadata. #155044 Thanks @steipete.

  • Share sandbox allowlist diagnostic checks. #155074 Thanks @vincentkoc.

  • Consolidate cron policy-field normalization. #155076 Thanks @vincentkoc.

  • Share Slack chart and table QA scenario construction. #155096 Thanks @vincentkoc.

  • Move SDK and Workboard type tests into compiler contracts. #155099 Thanks @steipete.

  • Exclude non-runnable tests before process planning. #155107 Thanks @steipete.

  • Share Signal transport port reservation logic. #155166 Thanks @vincentkoc.

  • Share Doctor preview warning aggregation. #155261 Thanks @vincentkoc.

  • Explain Vitest cache restoration and invalidation. #155444 Thanks @freeqaz-openai, @steipete.

  • Register existing Mattermost delivery tests. #155470 Thanks @romneyda.

  • Register existing Teams restart-reply coverage. #155472 Thanks @romneyda.

  • Simplify Channels view state wiring. #155485 Thanks @romneyda.

  • Simplify Skills view state wiring. #155487 Thanks @romneyda.

  • Reduce waits in ACP ordering tests. #155504 Thanks @romneyda.

  • Reuse dependency parsing in import-boundary tests. #155506 Thanks @romneyda.

  • Reuse the Git coauthor test database fixture. #155507 Thanks @romneyda.

  • Narrow UI CI selection and stabilize cancellation tests. #155566 Thanks @steipete.

  • Remove redundant CI planning test assertions. #155637 Thanks @steipete.

  • Limit Security Review checkout to required inputs. #155743 Thanks @steipete.

  • Export plugin inventory from an exact Git commit with Git 2.45 or newer. #155775 Thanks @vincentkoc.

  • Remove test-only subagent registry dependency overrides. #155796 Thanks @steipete.

  • Expose bounded Windows Testbox subprocess failure details. #155866 Thanks @vincentkoc.

  • Add opt-in Crabline Slack callback integration coverage. #155890 Thanks @vincentkoc.

  • Add deterministic Telegram delivery-failure testing. #155899 Thanks @obviyus, @steipete.

  • Retain Windows wrapper startup diagnostics on assertion failure. #155905 Thanks @vincentkoc.

  • Explicitly allow fresh npm fixtures in install-smoke packing. #155917 Thanks @steipete.

  • Prepare the large-index worktree cleanup test runtime. #155928 Thanks @steipete.

  • Record Doctor fixture settlement diagnostics. #155944 Thanks @vincentkoc.

  • Reuse the prepared CLI in backup process tests. #155945 Thanks @steipete.

  • Check plugin compatibility deadlines before release validation. #155971 Thanks @RomneyDa.

  • Remove unused package acceptance profile test setup. #155972 Thanks @steipete.

  • Prepare snapshot ownership test subprocess imports. #155973 Thanks @steipete.

  • Consolidate chat failure transcript test fixtures. #155974 Thanks @steipete.

  • Reuse Gateway setup and readbacks in UI tests. #155979 Thanks @steipete.

  • Reduce test fixture overhead and rebalance Node CI jobs. #155985 Thanks @steipete.

  • Move tool configuration checks to compiler contracts. #156004 Thanks @steipete.

  • Synchronize Android resources for the existing English Decision Evaluation label. #156006

  • Reduce complete-buffer assertion cost in llama.cpp tests. #156010 Thanks @steipete.

  • Prepare test children before execution deadlines. #156011 Thanks @steipete.

  • Move Kysely type checks into compiler contracts. #156012 Thanks @steipete.

  • Emit elapsed per-file tooling test timings. #156013 Thanks @steipete.

  • Reduce readiness polling delays in image-loading tests. #156022 Thanks @steipete.

  • Move shared harness tests beside their implementation. #156027 Thanks @sjf-oa, @sjf.

  • Make Doctor's existing legacy main-session repair choice explicit. #156034 Thanks @steipete.

  • Reuse prepared session-store lookup keys. #156035 Thanks @steipete.

  • Run independent activity-icon browser tests concurrently. #156042 Thanks @steipete.

  • Share voice-call realtime handler test fixtures. #156045 Thanks @steipete.

  • Share the Docker package build-context test probe. #156047 Thanks @steipete.

  • Split long lint and test-type checks across CI jobs. #156059 Thanks @steipete.

  • Consolidate existing Gateway session-method policy. #156071 Thanks @steipete.

  • Reuse Ollama stream fixtures and remove a redundant simulation. #156073 Thanks @steipete.

  • Match Node CI capacity to test memory requirements. #156079 Thanks @steipete.

  • Remove duplicate OpenAI request tests. #156083 Thanks @fuller-stack-dev.

  • Reuse Gradle caches and redistribute Android CI work with retained coverage. #156084 Thanks @steipete.

  • Test media-history trimming through agent subscriptions. #156087 Thanks @steipete.

  • Reduce Workboard notification replay test setup. #156114 Thanks @steipete.

  • Reuse a verified cold-storage lifecycle test fixture. #156128 Thanks @steipete.

  • Reduce large-buffer comparison overhead in plugin tests. #156141 Thanks @steipete.

  • Report local commit availability when merge receipt verification fails. #156143 Thanks @steipete.

  • Share repeated Talk relay test setup. #156149 Thanks @steipete.

  • Shorten deliberate cleanup waits in memory ownership tests. #156152 Thanks @RomneyDa.

  • Skip bundled plugin discovery in isolated cron tests. #156153 Thanks @RomneyDa.

  • Reuse a committed Git seed in plugin installation tests. #156154 Thanks @RomneyDa.

  • Link the compiled SDK fixture in native-loader tests. #156156 Thanks @RomneyDa.

  • Reuse Google Live bridge test fixtures. #156161 Thanks @steipete.

  • Simplify Dashboard defaults and pane navigation internals. #156164 Thanks @steipete.

  • Consolidate native model-selection rollback tests. #156169 Thanks @steipete.

  • Introduce the Astra/high Autoreview default, later replaced by GPT-6 Sol. #156175 Thanks @vincentkoc.

  • Share native harness output and transcript helpers. #156187 Thanks @sjf-oa, @sjf.

  • Reduce Control UI test overhead and Bun diagnostic memory growth. #156220 Thanks @steipete.

  • Batch pattern matching to reduce cold test-planning work. #156234 Thanks @steipete.

  • Shorten mock draft-proof shell waits. #156242 Thanks @RomneyDa.

  • Shorten CLI cleanup test delays. #156243 Thanks @RomneyDa.

  • Shorten Parallels test deadlines with descendant-readiness guards. #156244 Thanks @RomneyDa.

  • Shorten plugin release deadline test delays. #156245 Thanks @RomneyDa.

  • Reduce synthetic backup archive test setup. #156261 Thanks @steipete.

  • Update fs-safe and matching native helpers to 0.18.2. #156262 Thanks @steipete.

  • Consolidate plugin subsystem contracts and helpers. #156274 Thanks @steipete.

  • Use independent provider-picker test expectations. #156275 Thanks @steipete.

  • Skip irrelevant repository automation before runner allocation. #156293 Thanks @steipete.

  • Consolidate Codex and provider plugin internals. #156297 Thanks @steipete.

  • Consolidate agent execution and tool helpers. #156311 Thanks @steipete.

  • Remove duplicate Gateway node-admission coverage. #156325 Thanks @steipete.

  • Remove duplicated Doctor mock cases. #156337 Thanks @steipete.

  • Remove duplicate session-history sanitizer tests. #156351 Thanks @steipete.

  • Consolidate existing model-provider diagnostic checks. #156361 Thanks @vincentkoc.

  • Share session-tool schemas and derive their type contracts. #156365 Thanks @RomneyDa.

  • Derive channel configuration types from existing schemas. #156367 Thanks @RomneyDa.

  • Derive auth and security authoring types from existing schemas. #156368 Thanks @RomneyDa.

  • Derive root configuration authoring types from existing schemas. #156369 Thanks @RomneyDa.

  • Cancel remaining eligible PR checks while preserving failure evidence. #156375 Thanks @steipete.

  • Simplify automatic-reply and channel internals. #156377 Thanks @steipete.

  • Strengthen and consolidate Mattermost adapter tests. #156388 Thanks @vincentkoc, @steipete.

  • Verify older npm candidates with historical plugin ownership and sanitize packed declarations. #156391 Thanks @RomneyDa.

  • Retry individual release-validation jobs before unrelated workflows finish. #156395 Thanks @steipete.

  • Verify Anthropic rejection details in streaming tests. #156403 Thanks @steipete.

  • Consolidate media provider internals. #156406 Thanks @steipete.

  • Shorten Telegram media retry tests with controlled timers. #156413 Thanks @steipete.

  • Reuse single-turn agent-loop test streams. #156414 Thanks @steipete.

  • Run report ownership tests with bounded concurrency. #156418 Thanks @steipete.

  • Use HTTP completion to synchronize Telegram typing tests. #156454 Thanks @steipete.

  • Strengthen late-abort regression synchronization. #156460 Thanks @steipete.

  • Allow one automatic retry wave for predeclared intermittent validation jobs. #156463 Thanks @steipete.

  • Consolidate Doctor lint selection tests. #156488 Thanks @steipete.

  • Use strict byte equality in Matrix archive tests. #156490 Thanks @steipete.

  • Share existing canonical session-row selection. #156495 Thanks @steipete.

  • Retain Settings entrance test failure diagnostics. #156500 Thanks @steipete.

  • Consolidate repeated infrastructure logic. #156511 Thanks @steipete.

  • Define the catalog v2 schema with inline pricing. #156518 Thanks @vincentkoc.

  • Run independent publication test fixtures concurrently. #156527 Thanks @steipete.

  • Add opt-in catalog v2 generation alongside unchanged v1 output. #156530 Thanks @vincentkoc.

  • Register existing English Android personal-instructions strings. #156534

  • Reuse shared CLI process-exit test fixtures. #156550 Thanks @steipete.

  • Avoid unnecessary worker compilation in local audio tests. #156557 Thanks @steipete.

  • Consolidate LM Studio preload tests and join cleanup. #156558 Thanks @vincentkoc, @steipete.

  • Strengthen Twitch tests and remove redundant cases. #156573 Thanks @vincentkoc, @steipete.

  • Consolidate Discord transport and interaction internals. #156579 Thanks @steipete.

  • Remove repeated Cron and Gateway test setup. #156586 Thanks @steipete.

  • Run isolated Git workflow tests two at a time. #156587 Thanks @steipete.

  • Verify session reclamation worker completion directly. #156591 Thanks @steipete.

  • Consolidate filesystem reads and durable file creation. #156607 Thanks @steipete.

  • Reuse package manifests during managed npm plugin recovery. #156618 Thanks @vincentkoc.

  • Reuse shared SMS account test fixtures. #156619 Thanks @steipete.

  • Consolidate Doctor diagnostics and CLI internals. #156622 Thanks @steipete.

  • Reuse Gateway fixtures for config-read and rejection tests. #156637 Thanks @steipete.

  • Remove unused session-abort run exclusions. #156639 Thanks @steipete.

  • Share QA confidence-report test fixtures. #156644 Thanks @steipete.

  • Reduce skill-upload test assertion overhead. #156655 Thanks @steipete.

  • Share session lifecycle persistence test fixtures. #156658 Thanks @steipete.

  • Use native byte equality in APFS clone tests. #156662 Thanks @steipete.

  • Split large tests and extract project-state worker dispatch. #156677 Thanks @steipete.

  • Batch catalog-publication test fixture writes. #156679 Thanks @steipete.

  • Simplify migration and upgrade compatibility internals. #156682 Thanks @steipete.

  • Run intact source-version upgrade checks in parallel. #156717 Thanks @steipete.

  • Reuse GitHub Actions board test setup. #156718 Thanks @steipete.

  • Select PR tests by affected source and dependency consumers. #156729 Thanks @steipete.

  • Consolidate Comfy and Fal provider tests. #156731 Thanks @vincentkoc, @steipete.

  • Consolidate shared Control UI components and libraries. #156740 Thanks @steipete.

  • Consolidate Browser plugin helpers and remove private forwarding modules. #156742 Thanks @steipete.

  • Shorten the child-session error browser test with controlled time. #156745 Thanks @steipete.

  • Consolidate Telegram and WhatsApp transport helpers. #156752 Thanks @steipete.

  • Consolidate Gateway and worker internals. #156759 Thanks @steipete.

  • Set Autoreview to GPT-6 Sol/high with Luna retry for access failures. #156768 Thanks @vincentkoc.

  • Consolidate Slack event and delivery internals. #156773 Thanks @steipete.

  • Refresh generated chat-status translation records. #156775

  • Consolidate Matrix account, verification and delivery internals. #156777 Thanks @steipete.

  • Introduce hourly main CI with opt-in per-push validation. #156783 Thanks @vincentkoc.

  • Move transcript reconciliation coordination into existing workers. #156788 Thanks @steipete.

  • Restore strict lint for maintenance and state modules. #156809 Thanks @steipete.

  • Consolidate CLI TCP port parsing. #156815 Thanks @steipete.

  • Avoid unrelated model preparation in the Gateway reload context test. #156823 Thanks @steipete.

  • Consolidate Feishu registration and delivery internals. #156832 Thanks @steipete.

  • Share existing Feishu chat-read authorization. #156846 Thanks @vincentkoc.

  • Skip dependency setup for proven npm-lock CI no-ops. #156857 Thanks @freeqaz-openai, @steipete.

  • Consolidate shared memory plugin implementation. #156867 Thanks @steipete.

  • Align prior-release metadata and updater compatibility bridges. #156869 Thanks @steipete, @coygeek.

  • Reuse session fixtures in finalize integration tests. #156877 Thanks @steipete.

  • Reuse SQLite readers in node provisioning tests. #156889 Thanks @steipete.

  • Reuse Active Memory summary test fixtures. #156894 Thanks @steipete.

  • Reuse SQLite readers across worker RPC tests. #156913 Thanks @steipete.

  • Refresh generated Control UI translation memory. #156915

  • Avoid full deadline waits in invalid anchor-receipt tests. #156928 Thanks @steipete.

  • Simplify command implementations and shared diagnostics. #156931 Thanks @steipete.

  • Shorten intentional Code Mode metadata timeout tests. #156942 Thanks @steipete.

  • Consolidate five bundled chat transports. #156952 Thanks @steipete.

  • Consolidate duplicate idle-flush tests. #156963 Thanks @steipete.

  • Consolidate MCP stdio shutdown tests. #156973 Thanks @steipete.

  • Consolidate auto-reply internals. #157000 Thanks @steipete.

  • Share existing meeting audio write-completion logic. #157006 Thanks @vincentkoc.

  • Advance virtual time in bulk-delete browser tests. #157017 Thanks @steipete.

  • Split updater CLI tests for independent scheduling. #157018 Thanks @steipete.

  • Split Gateway session-creation tests into focused suites. #157022 Thanks @steipete.

  • Introduce an intermediate Kova CPU-accounting evaluator pin, later updated. #157029 Thanks @RomneyDa.

  • Share declaration validation in boundary lint checks. #157040 Thanks @vincentkoc.

  • Reduce descendant-session and Codex recovery test overhead. #157045 Thanks @steipete.

  • Consolidate infrastructure helpers. #157048 Thanks @steipete.

  • Share Wear chat-history test fixtures. #157058 Thanks @steipete.

  • Qualify plugin cold-import CPU and memory reports. #157071 Thanks @vincentkoc.

  • Refresh generated translation metadata. #157072

  • Consolidate Codex harness helpers. #157080 Thanks @steipete.

  • Record intentional macOS update withdrawals during release closeout. #157082 Thanks @steipete, @coygeek.

  • Split Doctor health integration tests into smaller suites. #157083 Thanks @steipete.

  • Batch more paths in staged-content checks. #157084 Thanks @steipete.

  • Test existing provider ownership during plugin replacement. #157090 Thanks @steipete.

  • Remove stale Android Talk translation resources. #157094

  • Simplify LINE, Voice Call, Reef and Workboard internals. #157099 Thanks @steipete.

  • Refresh generated translation memory for Settings recovery. #157110

  • Retry temporary notarization failures with bounded waits and retained submission identity. #157116 Thanks @steipete, @coygeek.

  • Refresh generated paused-draft translation records. #157125

  • Separate transcript media checks from transport-host imports. #157136 Thanks @steipete, @Kimiyu-186, Free Wortley.

  • Consolidate service, node-host, task and terminal internals. #157137 Thanks @steipete.

  • Refresh generated agent-tool translation memory. #157139

  • Consolidate configuration, secrets and transcript helpers. #157146 Thanks @steipete.

  • Consolidate QA Lab scenarios and reporting helpers. #157155 Thanks @steipete.

  • Refresh generated session-filter empty-state translation records. #157156

  • Share existing memory-pressure threshold selection. #157164 Thanks @vincentkoc.

  • Share existing active-run status priority. #157168 Thanks @steipete.

  • Simplify Discord and Slack reply-context handling. #157185 Thanks @steipete.

  • Remove obsolete compaction translation records. #157188

  • Share existing command-approval rule identity logic. #157198 Thanks @vincentkoc.

  • Share CLI diagnostics test setup. #157201 Thanks @steipete.

  • Consolidate channel, routing, pairing and hook helpers. #157208 Thanks @steipete.

  • Use focused ElevenLabs test setup. #157217 Thanks @steipete.

  • Reuse existing Feishu group session-scope policy. #157246 Thanks @vincentkoc.

  • Share Matrix direct-room CLI output projection. #157260 Thanks @vincentkoc.

  • Centralize existing SQLite checkpoint execution. #157263 Thanks @steipete.

  • Reuse compiler state and reduce selected guard and UI test overhead. #157265 Thanks @steipete.

  • Remove pacing waits from Telegram HTTP conformance fixtures. #157281 Thanks @steipete.

  • Package private QA Gateway fixtures for installed candidates. #157286 Thanks @steipete.

  • Consolidate agent execution and recovery helpers. #157294 Thanks @steipete.

  • Add a local review-artifact ignore entry. #157296 Thanks @steipete.

  • Test catalog capture reuse, credential isolation and physical footprints. #157300 Thanks @htuyer121, @RomneyDa, @goslingmanagment, @podulator, @chac4l, @villemac, @mmartoccia, @hurtlovewow, @msobrosa, @benlaube.

  • Reuse existing Matrix startup account-key normalization. #157310 Thanks @vincentkoc.

  • Refresh locale metadata hashes and timestamps. #157311

  • Prepare plugin storage commands independently. #157333 Thanks @steipete.

  • Skip futile skill-description fitting searches. #157343 Thanks @vincentkoc.

  • Consolidate overlapping MCP lifecycle tests. #157360 Thanks @steipete.

  • Retire LINE's unused private Express webhook adapter. #157369 Thanks @steipete.

  • Preserve selective type checks across hosted CI stripes. #157373 Thanks @steipete.

  • Refresh generated Diagnose update translation records. #157378

  • Consolidate model-selection transcript routing. #157382 Thanks @vincentkoc.

  • Consolidate unavailable cron delivery-target construction. #157393 Thanks @vincentkoc.

  • Advance the earlier Kova evaluator pin before its later CPU-accounting update. #157402 Thanks @RomneyDa.

  • Restore failover test lint compliance. #157406 Thanks @steipete.

  • Reduce Firecrawl and Parallel test fixture startup work. #157429 Thanks @steipete.

  • Share bounded Claw metadata and manifest reading. #157436 Thanks @vincentkoc.

  • Refresh Control UI locale provenance metadata. #157437

  • Retain PowerShell completion test startup diagnostics. #157439 Thanks @vincentkoc.

  • Share Feishu attachment test fixtures. #157440 Thanks @steipete.

  • Consolidate existing ACP runtime option validation. #157446 Thanks @vincentkoc.

  • Reuse Doctor's existing legacy vLLM parameter detector. #157453 Thanks @vincentkoc.

  • Add Apple transport handling for future browser-authorization requirements. #157454 Thanks @vincentkoc.

  • Share LINE message-context test defaults. #157488 Thanks @steipete.

  • Share Google Meet Doctor output handling. #157490 Thanks @vincentkoc.

  • Remove unused Android Work translation resources. #157495

  • Defer session-cleanup imports until stateful test fixtures are entered. #157515 Thanks @steipete.

  • Relocate unchanged Apple Gateway error conversion for native lint. #157516 Thanks @vincentkoc.

  • Separate diagnostic liveness sampling from heartbeat ownership. #157517 Thanks @steipete.

  • Advance virtual time in chat lifecycle browser tests. #157520 Thanks @steipete.

  • Reduce historical Tasks maintenance snapshot construction overhead. #157527 Thanks @steipete.

  • Capture bounded integrity diagnostics for failed upgrade tests. #157535 Thanks @vincentkoc.

  • Share completed media response test fixtures. #157540 Thanks @steipete.

  • Skip empty database resets in historical native-task custody fixtures. #157561 Thanks @steipete.

  • Verify IRC Unicode chunking through loopback tests. #157580 Thanks @steipete.

  • Make background-exec regression coverage deterministic. #157581 Thanks @steipete.

  • Consolidate existing directory CLI table formatting. #157585 Thanks @vincentkoc.

  • Tighten prepared-reply media regression tests. #157604 Thanks @steipete.

  • Share wizard selection request construction. #157607 Thanks @vincentkoc.

  • Reuse existing Codex marketplace-reference selection. #157621 Thanks @vincentkoc.

  • Consolidate existing process error-handler registries. #157632 Thanks @vincentkoc.

  • Reuse native localization branch extraction. #157636 Thanks @vincentkoc.

  • Consolidate existing slash-command failure-result construction. #157649 Thanks @vincentkoc.

  • Shorten progress-test waits and align requester settlement fixtures. #157653 Thanks @RomneyDa.

  • Shorten artificial compiler waits in watchdog tests. #157654 Thanks @RomneyDa.

  • Shorten historical background-task browser proof recording pauses. #157655 Thanks @RomneyDa.

  • Shorten the worker-lifetime timeout test fixture. #157656 Thanks @RomneyDa.

  • Consolidate existing Mistral streaming text handling. #157664 Thanks @vincentkoc.

  • Reuse worktree recovery fixtures and qualify their Bun test route. #157674 Thanks @steipete.

  • Explain compiler and process-cleanup build failures. #157677 Thanks @vincentkoc.

  • Reuse prepared fixtures in selected slow core tests. #157685 Thanks @steipete.

  • Reduce MCP archive and worker test-fixture preparation. #157689 Thanks @steipete.

  • Consolidate existing Teams approval-card labels. #157705 Thanks @vincentkoc.

  • Consolidate stored Teams service-URL validation. #157706 Thanks @vincentkoc.

  • Skip empty-database clearing in historical completion-ownership tests. #157707 Thanks @steipete.

  • Reduce repeated Gateway and state test setup. #157711 Thanks @steipete.

  • Isolate existing desktop audio buffering for direct tests. #157725 Thanks @vincentkoc.

  • Reuse selected private Feishu requester bindings. #157729 Thanks @vincentkoc.

  • Select narrow PR checks from affected inputs. #157740 Thanks @steipete.

  • Consolidate CLI, ACP and logging internals. #157748 Thanks @steipete.

  • Restore the workspace test lint gate. #157750 Thanks @steipete.

  • Keep new CI runs admitted during release validation. #157757 Thanks @RomneyDa.

  • Skip empty historical task-ledger clearing in cron tests. #157767 Thanks @steipete.

  • Reuse Matrix bounded direct-room cache insertion. #157775 Thanks @vincentkoc.

  • Share existing pending Signal migration results. #157777 Thanks @vincentkoc.

  • Honor advertised Code Mode interfaces in live qualification prompts. #157779 Thanks @RomneyDa.

  • Reuse existing Twitch setup account selection. #157787 Thanks @vincentkoc.

  • Simplify existing Tlon group-summary notice handling. #157789 Thanks @vincentkoc.

  • Retain baseline startup diagnostics in upgrade tests. #157793 Thanks @steipete.

  • Reuse existing Mattermost DM retry-option selection. #157800 Thanks @vincentkoc.

  • Remove redundant Synology loopback-test pacing waits. #157804 Thanks @steipete.

  • Keep authentication test fixtures within existing file limits. #157805 Thanks @steipete.

  • Reuse shared Codex app-server contracts. #157810 Thanks @sjf-oa, @sjf.

  • Share model-catalog reads between New Session and command search. #157832 Thanks @obviyus.

  • Consolidate plugin control and runtime helpers. #157833 Thanks @steipete.

  • Reuse Node promisification for diff compression. #157835 Thanks @vincentkoc.

  • Keep one hosted pricing context per usage operation. #157838 Thanks @obviyus.

  • Show redacted nested causes for PR worktree allocation failures. #157889 Thanks @fuller-stack-dev.

  • Select publication tooling by commit SHA and preserve candidate tag identity on resume. #157896 Thanks @steipete.

  • Reduce Linux Node coverage-discovery matching work. #157901 Thanks @steipete.

  • Refresh generated plugin-installation translation records. #157908

  • Extend reserved runners to eligible release jobs and remove automatic priority writes. #157910 Thanks @steipete.

  • Reuse verified parent approval for ClawHub publishing before later npm approval consolidation. #157911 Thanks @steipete.

  • Refresh optional Lit analyzers to TypeScript 5.9.3. #157914 Thanks @steipete.

  • Introduce nightly stable-profile qualification, later replaced by three-hourly pinned checks. #157917 Thanks @steipete.

  • Share repeated web-tool credential test fixtures. #157924 Thanks @steipete.

  • Add saved progress and resume controls for stable releases, with recovery gaps retained. #157941 Thanks @steipete.

  • Refresh Control UI locale generation metadata without changing translations. #157955

  • Add QA coverage for private operator credential handoff. #157966 Thanks @Patrick-Erichsen.

  • Consolidate Gateway validation and shared helpers. #157976 Thanks @steipete.

  • Refresh generated account-selection translation records. #157978

  • Split Codex lifecycle and provider helpers to meet preparation limits. #157980 Thanks @steipete.

  • Centralize existing new-session draft restoration checks. #157983 Thanks @vincentkoc.

  • Repeat an already-present upgrade-survivor fixture baseline assignment. #157996 Thanks @vincentkoc.

  • Reduce full-buffer assertion cost in spawn broker tests. #158003 Thanks @steipete.

  • Reuse complete recent CI proof for unchanged inputs and scope scheduled checks. #158018 Thanks @vincentkoc.

  • Run qualified Gateway client tests on Bun and reuse drained history fixtures. #158019 Thanks @steipete.

  • Consolidate agent runtime internals and synchronize lifecycle fixtures. #158020 Thanks @steipete.

  • Reuse unchanged Quick Chat area-selection geometry. #158029 Thanks @vincentkoc.

  • Reuse browser Gateway handshake test fixtures. #158031 Thanks @steipete.

  • Remove unused Claw package-update manifest plumbing. #158036 Thanks @vincentkoc.

  • Consolidate shared text tests and remove unused internal separator options. #158040 Thanks @vincentkoc, @steipete.

  • Remove real-time waiting from release-verifier retry tests. #158048 Thanks @steipete.

  • Add safe context to macOS Gateway settings test failures. #158049 Thanks @vincentkoc.

  • Extract Gateway chat metadata authentication fixtures. #158050 Thanks @steipete.

  • Consolidate backup EOF retry tests while preserving retry checks. #158066 Thanks @steipete.

  • Reuse prepared restart-marking test fixtures. #158078 Thanks @steipete.

  • Test shutdown waiting for admitted cron work within the existing drain budget. #158080 Thanks @vincentkoc.

  • Share FaceTime RPC test startup fixtures. #158107 Thanks @steipete.

  • Reuse Android call-log JSON parameter parsing. #158111 Thanks @vincentkoc.

  • Share CLI no-output timeout test fixtures. #158117 Thanks @steipete.

  • Defer jsdom initialization for Node tests that do not need a DOM. #158125 Thanks @steipete.

  • Reuse trajectory recorder test fixtures. #158133 Thanks @steipete.

  • Centralize existing macOS status icon overrides. #158137 Thanks @vincentkoc.

  • Remove unused prompt-composition fixture metadata. #158151 Thanks @vincentkoc, @steipete.

  • Consolidate browser and memory-core internals. #158172 Thanks @steipete.

  • Extract unchanged sidebar session error feedback. #158173 Thanks @vincentkoc.

  • Use virtual timers in mocked session-placement startup tests. #158175 Thanks @steipete.

  • Remove duplicate Cron lifecycle tests and unused fixture support. #158176 Thanks @vincentkoc.

  • Reuse process-result fixtures in Windows Scheduled Task stop tests. #158184 Thanks @steipete.

  • Consolidate retry timer regression tests beside their shared owner. #158185 Thanks @vincentkoc.

  • Refresh generated desktop-audio translation records. #158186

  • Precompile the SQLite idle-worker test fixture. #158188 Thanks @steipete.

  • Consolidate QA Lab helpers and shared contracts. #158192 Thanks @steipete.

  • Batch infrastructure tests within existing full-run capacity and isolate installer fixtures. #158197 Thanks @steipete.

  • Strengthen full-output normalization serialization tests. #158200 Thanks @vincentkoc.

  • Separate channel ingress record types ahead of worker integration. #158203 Thanks @steipete.

  • Remove unused iOS host-stats encoding and test the existing payload directly. #158204 Thanks @vincentkoc.

  • Consolidate infrastructure helpers under existing owners. #158210 Thanks @steipete.

  • Share Discord lifecycle test manager fixtures. #158215 Thanks @steipete.

  • Remove duplicate Google model alias tests. #158220 Thanks @vincentkoc.

  • Extract shared inbound-message record decoders without activating workers. #158233 Thanks @steipete.

  • Consolidate agent ID validation tests. #158234 Thanks @vincentkoc.

  • Refresh generated Incognito draft-review translation records. #158236

  • Reuse compiled database workers in Logbook batch-image tests. #158238 Thanks @steipete.

  • Share Codex work-profile test fixtures. #158249 Thanks @steipete.

  • Strengthen independent tool-argument validation tests. #158254 Thanks @vincentkoc.

  • Synchronize Workshop comparison translation metadata. #158264

  • Distinguish the internal Gateway auth-limiter name while retaining the public SDK alias. #158275 Thanks @steipete.

  • Reduce repeated name lookup in large JavaScript artifact validation. #158278 Thanks @steipete.

  • Expand qualified Bun tests and streamline IRC import smoke. #158280 Thanks @steipete.

  • Test both Anthropic prefix-binding predicate outcomes. #158289 Thanks @vincentkoc.

  • Share Docker installation-proof readiness polling without changing budgets. #158291 Thanks @vincentkoc.

  • Hash Crabbox source bundles in bounded chunks. #158294 Thanks @vincentkoc.

  • Use resource-aware workers and compact output for protected PR gates. #158297 Thanks @vincentkoc.

  • Refresh dependencies and preserve integration compatibility. #158298 Thanks @steipete.

  • Strengthen nested URL redaction cutoff tests. #158304 Thanks @vincentkoc.

  • Reuse typed Talk relay provider test fixtures. #158309 Thanks @steipete.

  • Consolidate non-Error cause tests with their shared implementation. #158321 Thanks @vincentkoc.

  • Use bounded copies when staging Crabbox source files. #158327 Thanks @vincentkoc.

  • Avoid unrelated synchronous test discovery during narrow CI planning. #158336 Thanks @steipete.

  • Separate pure Talk relay checks from storage fixtures. #158343 Thanks @steipete.

  • Reuse isolated Git seed copies in publication recovery tests. #158349 Thanks @steipete.

  • Consolidate session projection regression fixtures. #158355 Thanks @vincentkoc.

  • Remove unused MCP command-test workspaces. #158381 Thanks @vincentkoc.

  • Reuse streaming text segments within each Apple chat view update. #158393 Thanks @vincentkoc.

  • Consolidate shared logic across provider plugins. #158403 Thanks @steipete.

  • Share Parallels dev-update acceptance checks. #158427 Thanks @vincentkoc.

  • Consolidate Azure voice-discovery timeout tests at the HTTP boundary. #158430 Thanks @vincentkoc, @steipete.

  • Consolidate ElevenLabs HTTP diagnostic tests. #158462 Thanks @vincentkoc, @steipete.

  • Refresh generated plugin-capability translation records. #158466

  • Reuse the existing macOS overlay dismissal implementation. #158476 Thanks @vincentkoc.

  • Avoid loading the agent execution runtime for xAI attribution. #158488 Thanks @steipete.

  • Remove duplicate Deepgram JSON syntax coverage. #158493 Thanks @vincentkoc, @steipete.

  • Synchronize generated Control UI translation metadata and memory. #158498

  • Consolidate iOS routing, storage and presentation internals. #158512 Thanks @steipete.

  • Consolidate CLI command handling and update maintenance. #158514 Thanks @steipete.

  • Schedule event-loop health sampling through the Gateway kernel. #158531 Thanks @steipete.

  • Extract interrupted-replay test fixtures to meet existing lint limits. #158538 Thanks @steipete.

  • Consolidate Android and Wear app internals. #158539 Thanks @steipete.

  • Remove duplicate Inworld diagnostic and timeout tests. #158560 Thanks @vincentkoc.

  • Share ClawHub external-install assertions between E2E entrypoints. #158580 Thanks @vincentkoc.

  • Consolidate Gradium speech regression tests. #158590 Thanks @vincentkoc.

  • Consolidate auto-reply command and lifecycle helpers. #158598 Thanks @steipete.

  • Reuse streaming-response fixtures in speech tests. #158602 Thanks @vincentkoc.

  • Reduce redundant scope entries for plain plugin-stream chunks. #158604 Thanks @steipete.

  • Consolidate Codex helpers and reject stale cache publication after reset. #158613 Thanks @steipete.

  • Pack selected CI tests into fewer compatible jobs. #158621 Thanks @steipete.

  • Consolidate Nostr Gateway test fixtures. #158623 Thanks @vincentkoc.

  • Extract reusable ingress queue mutations while retaining native callers. #158628 Thanks @steipete.

  • Remove unused Microsoft Teams send-test fixtures. #158635 Thanks @vincentkoc.

  • Refresh generated localized Swarm concurrency hints. #158644

  • Use exact native buffer comparison in Agents API attachment tests. #158645 Thanks @steipete.

  • Consolidate benchmark child-process teardown tests. #158654 Thanks @vincentkoc.

  • Remove duplicate Gateway roster and test-fixture code. #158656 Thanks @steipete.

  • Move placement maintenance under Gateway scheduling. #158662 Thanks @steipete.

  • Remove redundant core tests and consolidate retained fixtures. #158663 Thanks @steipete.

  • Reuse Doctor's existing blocked-plugin ID collector. #158664 Thanks @vincentkoc.

  • Refresh generated Activity empty-state translation records. #158670

  • Remove obsolete Nextcloud Talk replay-test scaffolding. #158677 Thanks @vincentkoc.

  • Extract mention helpers and historical Tasks cleanup to meet lint limits. #158684 Thanks @fuller-stack-dev.

  • Refresh Control UI locale metadata without changing translations. #158689

  • Move unchanged Incognito expiry deadlines to Gateway scheduling. #158690 Thanks @steipete.

  • Consolidate runtime, UI and tooling tests and internal helper visibility. #158691 Thanks @steipete.

  • Remove redundant Tlon SSE test bookkeeping. #158692 Thanks @vincentkoc.

  • Consolidate duplicate core, plugin and chat tests. #158698 Thanks @steipete.

  • Move follow-up reply ownership into session completion ahead of Tasks retirement. #158702 Thanks @steipete.

  • Remove obsolete Synology Chat integration-test mocks. #158711 Thanks @vincentkoc.

  • Use exact native buffer comparisons in integration tests. #158713 Thanks @steipete.

  • Consolidate repeated core, plugin and UI tests. #158714 Thanks @steipete.

  • Schedule independent GitHub OAuth maintenance jobs through the Gateway owner. #158717 Thanks @steipete.

  • Consolidate runtime and provider tests and remove private test-only exposure. #158721 Thanks @steipete.

  • Remove unused Google Chat adapter test mocks. #158722 Thanks @vincentkoc.

  • Remove duplicate tests and consolidate current fixtures. #158725 Thanks @steipete.

  • Schedule secret expiry and publication recovery under Gateway ownership. #158727 Thanks @steipete.

  • Use typed deferred helpers in Gateway and draft tests. #158729 Thanks @fuller-stack-dev.

  • Simplify ZaloUser directory-test fixtures. #158736 Thanks @vincentkoc.

  • Refresh generated split-pane recovery translation records. #158741

  • Remove an obsolete generated Android index placeholder. #158743

  • Consolidate audited channel, infrastructure and SDK tests. #158764 Thanks @steipete.

  • Share filesystem permission and atomic-write helpers. #158772 Thanks @steipete.

  • Consolidate Gateway request and lifecycle helpers. #158786 Thanks @steipete.

  • Consolidate shared Control UI components and helpers. #158787 Thanks @steipete.

  • Skip redundant typechecks for conservatively verified inert TypeScript edits. #158796 Thanks @steipete.

  • Consolidate repeated tests and private test tooling. #158802 Thanks @steipete.

  • Consolidate core, plugin and tooling tests. #158811 Thanks @steipete.

  • Schedule worker-environment maintenance through the Gateway owner. #158812 Thanks @steipete.

  • Use the shared Gateway scheduler for session PR refreshes. #158821 Thanks @steipete.

  • Move historical cron Tasks recovery off-thread before Tasks retirement. #158827 Thanks @steipete.

  • Remove a duplicate Crabbox mirror scan and reject unrecorded allocations. #158828 Thanks @steipete.

  • Simplify unchanged-file edit planning. #158831 Thanks @steipete.

  • Simplify artifact history types and cursor pruning. #158834 Thanks @steipete.

  • Await plugin batch inventory preparation while retaining lifecycle authority. #158836 Thanks @steipete.

  • Consolidate core, channel and UI tests. #158856 Thanks @steipete.

  • Pass Telegram ingress queue account and state scope directly. #158860 Thanks @steipete.

  • Reserve dormant ordered provider recommendations in catalog v2. #158863 Thanks @obviyus.

  • Consolidate shared CLI and embedded-runner logic. #158879 Thanks @steipete.

  • Consolidate core, Control UI and plugin tests. #158882 Thanks @steipete.

  • Share ingress test cleanup and await queue settlement. #158887 Thanks @steipete.

  • Consolidate agent tool, sandbox and harness implementation. #158891 Thanks @steipete.

  • Share the ingress queue contract and failure decoder. #158896 Thanks @steipete.

  • Consolidate core, plugin and UI-support tests. #158907 Thanks @steipete.

  • Consolidate duplicate tests and fixtures across runtime components. #158919 Thanks @steipete.

  • Extract ingress listing and recovery operations with duplicate pending-row decoding retained. #158928 Thanks @steipete.

  • Await completed ingress work and preserve teardown errors in channel tests. #158933 Thanks @steipete.

  • Consolidate internal code across six messaging plugins. #158937 Thanks @steipete.

  • Consolidate CLI and Doctor command helpers. #158940 Thanks @steipete.

  • Consolidate test fixtures across core, UI and plugins. #158948 Thanks @steipete.

  • Consolidate repeated tests across nine groups. #158960 Thanks @steipete.

  • Shorten intentional CLI metadata failure-test waits. #158962 Thanks @steipete.

  • Consolidate core and plugin tests, with the OpenRouter lint mismatch later repaired. #158964 Thanks @steipete.

  • Consolidate core and plugin test fixtures. #158965 Thanks @steipete.

  • Add an overlapping Signal stream test suite that was later removed. #158978 Thanks @steipete.

  • Share channel ingress shutdown fixtures and await settlement. #158980 Thanks @steipete.

  • Run audit retention maintenance on its lifecycle scheduler. #158982 Thanks @steipete.

  • Consolidate duplicated core runtime helpers and types. #158984 Thanks @steipete.

  • Await channel ingress timing and shutdown boundaries in tests. #158987 Thanks @steipete.

  • Isolate Telegram polling test clocks from database workers. #159006 Thanks @steipete.

  • Wait for Telegram webhook test work to settle before cleanup. #159008 Thanks @steipete.

  • Isolate agent preparation and selected Codex test timing. #159027 Thanks @steipete.

  • Move historical Tasks maintenance onto Gateway scheduling before retirement. #159038 Thanks @steipete.

  • Schedule delayed Gateway startup work through the shared owner. #159042 Thanks @steipete.

  • Move post-ready Gateway timing into the kernel scheduler. #159047 Thanks @steipete.

  • Consolidate configuration and session storage internals. #159054 Thanks @steipete.

  • Avoid unnecessary declaration parsing and tolerate vanished nonleader test threads. #159068 Thanks @steipete.

  • Move historical Copilot Task mirroring off-thread before Tasks retirement. #159071 Thanks @steipete.

  • Remove idle waits from Android queued-action tests. #159077 Thanks @steipete.

  • Schedule unchanged approval expiry and cleanup through the Gateway owner. #159081 Thanks @steipete.

  • Schedule existing transcript cold-storage maintenance through the Gateway. #159088 Thanks @steipete.

  • Consolidate core and plugin tests and private release-helper access. #159090 Thanks @steipete.

  • Simplify iOS and Watch internals and remove obsolete previews. #159091 Thanks @steipete.

  • Remove the duplicate Signal container WebSocket test suite. #159092 Thanks @steipete.

  • Consolidate core, plugin and Control UI tests. #159093 Thanks @steipete.

  • Move outbound delivery recovery onto the Gateway scheduler. #159096 Thanks @steipete.

  • Consolidate core, plugin and UI tests and QA fixtures. #159097 Thanks @steipete.

  • Shorten POSIX local-provider shutdown recovery tests. #159098 Thanks @steipete.

  • Move cron due wakes and suspended-admission cancellation into Gateway scheduling. #159099 Thanks @steipete.

  • Consolidate plugin, model-picker and terminal tests. #159108 Thanks @steipete.

  • Consolidate plugin, SDK, project and Telegram QA tests. #159113 Thanks @steipete.

  • Schedule existing cron foreign-run receipt checks through the Gateway. #159114 Thanks @steipete.

  • Refresh generated scheduled-run transcript translation records. #159122

  • Share state read-context and diagnostic recovery types. #159128 Thanks @steipete.

  • Share scheduling for existing system-job reconciliation retries. #159129 Thanks @steipete.

  • Simplify Gateway presence and profile request code. #159130 Thanks @steipete.

  • Simplify Android and Wear app internals. #159154 Thanks @steipete.

  • Consolidate cron, provider and utility tests. #159165 Thanks @steipete.

  • Distinguish ACP execution instances in historical Tasks completion notices. #159173 Thanks @steipete.

  • Consolidate internal Gateway helpers and type contracts. #159177 Thanks @steipete.

  • Consolidate provider and network-policy tests. #159181 Thanks @steipete.

  • Consolidate repository maintenance scripts. #159183 Thanks @steipete.

  • Remove obsolete generated Android node-approval locale entries. #159191

  • Reuse Crabbox mirrors across concurrent worktrees with recoverable eviction. #159195 Thanks @steipete.

  • Reuse prepared runtime modules in supervisor process tests. #159210 Thanks @steipete.

  • Remove obsolete generated native-app localization entries. #159211

  • Consolidate repeated Codex harness implementation. #159225 Thanks @steipete.

  • Run qualified memory-plugin PR tests on Bun while retaining dual-runtime release coverage. #159236 Thanks @steipete.

  • Consolidate OpenAI, Anthropic and llama.cpp internals. #159239 Thanks @steipete.

  • Refresh generated locale records for chat draft states. #159241

  • Add dormant earliest-deadline mode to the Gateway scheduler. #159260 Thanks @steipete.

  • Reuse worker setup in subsequently retired Tasks maintenance. #159271 Thanks @steipete.

  • Guard against two costly Control UI CSS selector patterns. #159290 Thanks @steipete.

  • Move update-watcher wakeups onto the shared Gateway scheduler. #159291 Thanks @steipete.

  • Consolidate provider, media and localization tests. #159292 Thanks @steipete.

  • Consolidate provider and core regression tests. #159298 Thanks @steipete.

  • Consolidate provider, model-validation and UI tests. #159308 Thanks @steipete.

  • Consolidate provider, retry and media tests. #159312 Thanks @steipete.

  • Move historical Codex Tasks tracking off-thread before retirement. #159325 Thanks @steipete.

  • Simplify plugin and core regression tests. #159337 Thanks @steipete.

  • Consolidate Crabbox cloud-worker command handling. #159357 Thanks @steipete.

  • Simplify existing one-turn update triage and retained recovery validation. #159358 Thanks @steipete.

  • Consolidate helpers across nine bundled plugins. #159364 Thanks @steipete.

  • Run eligible CI plans concurrently around exclusive-plan barriers. #159368 Thanks @vincentkoc.

  • Share MCP requester and transcript test fixtures. #159372 Thanks @steipete.

  • Avoid unnecessary storage setup in ACPX policy tests. #159374 Thanks @steipete.

  • Remove redundant in-place sorting lint exceptions. #159379 Thanks @steipete.

  • Split routing binding cache and tests to remove file-size exceptions. #159382 Thanks @steipete.

  • Consolidate Codex plugin tests and fixtures. #159383 Thanks @steipete.

  • Consolidate durable session persistence bookkeeping. #159384 Thanks @steipete.

  • Consolidate duplicated runtime helpers and type contracts. #159409 Thanks @steipete.

  • Consolidate update error handling and service recovery. #159415 Thanks @steipete.

  • Consolidate Codex and Telegram helper tests. #159418 Thanks @steipete.

  • Simplify shared Control UI helpers and flows. #159436 Thanks @steipete.

  • Detect exercised Node dependencies in advisory Linux Bun release validation. #159439 Thanks @steipete, @Patrick-Erichsen.

  • Move authentication cleanup to Gateway scheduler ownership. #159455 Thanks @steipete.

  • Consolidate plugin and Vitest tests. #159494 Thanks @steipete.

  • Consolidate plugin tests and fixtures. #159518 Thanks @steipete.

  • Remove an unused iOS Gateway controller import. #159534 Thanks @steipete.

  • Refresh generated diff-preview translation records. #159580

  • Consolidate Android phone and Wear helpers. #159589 Thanks @steipete.

  • Simplify embedded agent runner internals. #159597 Thanks @steipete.

  • Reuse fs-safe directory scans while preserving caller policies. #159603 Thanks @steipete.

  • Delegate guarded config writes to fs-safe. #159605 Thanks @steipete.

  • Consolidate extension tests and remove redundant cases. #159607 Thanks @steipete.

  • Run isolated Doctor migration-order process tests concurrently. #159609 Thanks @steipete.

  • Share capability CLI agent-selection test cases. #159616 Thanks @vincentkoc.

  • Reuse subagent announcement test fixtures. #159618 Thanks @vincentkoc.

  • Share typed image-provider test fixtures. #159620 Thanks @vincentkoc.

  • Add the English Presence label to generated Android resources. #159635

  • Consolidate shared agent-tool internals. #159639 Thanks @steipete.

  • Reuse fs-safe traversal for skill snapshots. #159641 Thanks @steipete.

  • Consolidate duplicate shared-package tests. #159645 Thanks @steipete.

  • Consolidate protocol, channel, memory, AI and Workboard tests. #159648 Thanks @steipete.

  • Share assistant failover test inputs. #159655 Thanks @vincentkoc.

  • Show sanitized Docker upgrade failure coordinates in GitHub checks. #159659 Thanks @RomneyDa.

  • Consolidate ACP, MCP, Code Mode and agent tests. #159703 Thanks @steipete.

  • Consolidate sidebar narration stream state. #159705 Thanks @steipete.

  • Consolidate agent and model tests. #159713 Thanks @steipete.

  • Remove duplicate recap publication test fixtures. #159724 Thanks @steipete.

  • Simplify Codex plugin internals. #159726 Thanks @steipete.

  • Consolidate repeated agent tests and fixtures. #159741 Thanks @steipete.

  • Distinguish recovery failure stages in upgrade acceptance diagnostics. #159751 Thanks @RomneyDa.

  • Consolidate agent, authentication and CLI-runner tests. #159763 Thanks @steipete.

  • Update an earlier Kova release-performance pin, later superseded by the census repair. #159766 Thanks @RomneyDa.

  • Share prompt preparation and context policies across harnesses. #159779 Thanks @sjf-oa, @sjf.

  • Refresh generated translation metadata for interrupted status. #159795

  • Simplify browser and memory plugin internals. #159798 Thanks @steipete.

  • Consolidate agent, audit, worktree and reply tests. #159802 Thanks @steipete.

  • Synchronize generated Control UI locale records after Tasks retirement. #159808

  • Consolidate channel-core admission and helpers without changing delivery behavior. #159811 Thanks @steipete.

  • Remove the retired Task selector from artifact lookup tests. #159819 Thanks @steipete.

  • Refresh generated translation records for Dashboard navigation errors. #159821

  • Consolidate overlapping core tests and fixtures. #159829 Thanks @steipete.

  • Add database-relocation regressions and worker-access documentation. #159835 Thanks @steipete.

  • Synchronize generated Activity translation records. #159837

  • Consolidate worktree, reply and authorization tests. #159838 Thanks @steipete.

  • Diagnose exited Linux test helpers, with an unbounded regression-test wait remaining. #159849 Thanks @steipete.

  • Reduce CI workflow size and add an early file-size guard. #159855 Thanks @steipete.

  • Consolidate CLI, updater and Doctor tests. #159874 Thanks @steipete.

  • Move worker-placement recovery selection reads off the Gateway thread. #159881 Thanks @steipete.

  • Use native readiness waits and a larger paid runner for iOS qualification. #159890 Thanks @joshavant.

  • Refresh generated translation metadata for unknown installation dates. #159922

  • Consolidate shared package parsing and provider request helpers. #159933 Thanks @steipete.

  • Move unchanged omitted-media rendering to the attachment-status owner. #159938 Thanks @steipete.

  • Consolidate updater, backup and Doctor tests, with revoked-owner coverage removed. #159952 Thanks @steipete.

  • Refresh generated Tool Search and browser-message translations. #159954

  • Consolidate updater and Doctor test fixtures. #159963 Thanks @steipete.

  • Prepare an Android Play icon for later upload and repair installer smoke coverage. #159964 Thanks @iwhatsskill.

  • Refresh generated provider-setup translation metadata. #159967

  • Consolidate shared helpers across six messaging plugins. #159998 Thanks @steipete.

  • Update selected CI Bun lanes for package installation by multiple accounts. #160012 Thanks @steipete.

  • Add an opt-in Linux process-tree memory limit without activating tooling callers. #160024 Thanks @vincentkoc.

  • Reuse iOS qualification setup while retaining pairing, relaunch and transcript checks. #160025 Thanks @joshavant.

  • Request more memory for manual Testbox validation while retaining resource admission. #160034 Thanks @steipete.

  • Refresh generated worker-container-image locale records. #160051

  • Add cancellation-safe artifact waits for callers supplying a signal. #160057 Thanks @vincentkoc.

  • Remove unused Gateway node-presence timer bookkeeping. #160068 Thanks @steipete.

  • Refresh generated session-count translation records. #160077

  • Consolidate core tests, with agent-auth, provider-streaming and LAN-denial coverage removed. #160084 Thanks @steipete.

  • Add shared compiler and lint memory admission without activating commands. #160094 Thanks @vincentkoc.

  • Split root-test typechecking into four serial compiler runs. #160098 Thanks @vincentkoc.

  • Use a fast identity-scope test in routine CI and retain targeted full-process coverage. #160111 Thanks @steipete.

  • Select a smaller compiler project for script-test lint. #160142 Thanks @vincentkoc.

  • Reduce the compiler graph for session-source lint. #160143 Thanks @vincentkoc.

  • Restore attachment-module lint compliance by moving an unchanged image helper. #160159 Thanks @steipete.

  • Forward-port cached disclosure callback rebinding for a synthetic lifecycle case. #160166 Thanks @steipete, @RomneyDa, @vyctorbrzezowski, @jalehman.

  • Bound mobile store-note generation to five minutes and stop before unapproved upload. #160194 Thanks @joshavant.

  • Refresh generated collaboration translation records. #160199

  • Cap retained lint reports at 1 MiB and stream overflow without annotations. #160204 Thanks @vincentkoc.

  • Consolidate internal tests with unresolved exec-cleanup and migration coverage gaps. #160205 Thanks @steipete.

  • Consolidate regression tests with OAuth and corrupt-archive refusal coverage removed. #160223 Thanks @steipete.

  • Test configured heartbeat typing refresh during an in-flight reply. #160229 Thanks @steipete.

  • Select relevant retention-helper tests in CI. #160260 Thanks @steipete.

  • Use a smaller fallback compiler graph for package lint. #160281 Thanks @vincentkoc.

  • Consolidate agent and worktree tests with default cleanup-cap coverage removed. #160308 Thanks @steipete.

  • Consolidate agent and Codex tests with producer-origin authorization coverage removed. #160309 Thanks @steipete.

  • Reduce source lint compiler graphs while retaining shared declarations. #160311 Thanks @vincentkoc.

  • Remove obsolete internal MCP timer overrides. #160326 Thanks @steipete.

  • Narrow the core plugin source lint project. #160327 Thanks @vincentkoc.

  • Schedule question deadlines and retained-delivery cleanup with shutdown ownership. #160334 Thanks @steipete.

  • Move cron stream retry and stability deadlines into the shared scheduler. #160341 Thanks @steipete.

  • Consolidate shared feature-plugin helpers while preserving existing contracts. #160362 Thanks @steipete, @vincentkoc.

  • Schedule presence publication and await active preparation during shutdown. #160369 Thanks @steipete.

  • Schedule retained device permission-result cleanup. #160370 Thanks @steipete.

  • Remove unused internal Side chat timer overrides. #160371 Thanks @steipete.

  • Schedule node connection notices with shared shutdown ownership. #160374 Thanks @steipete.

  • Schedule cron exit-watcher retries and join startup settlement. #160381 Thanks @steipete.

  • Pin Kova for the process-census repair before later resource-budget calibration. #160385 Thanks @RomneyDa.

  • Refresh generated shortcut-hint translation memory. #160390

  • Use the scheduler for session-write retention while preserving pending writes. #160391 Thanks @steipete.

  • Give TLS renewal shared scheduler shutdown ownership. #160395 Thanks @steipete.

  • Share unchanged worker identity checks and test cleanup. #160402 Thanks @steipete.

  • Use the existing single-pass matcher for large CI ownership searches. #160408 Thanks @steipete.

  • Consolidate workspace transfer lifecycle and test fixtures. #160415 Thanks @steipete.

  • Consolidate Gateway placement lifecycle fixtures and remove an unused reader. #160439 Thanks @steipete.

  • Share cloud-worker fixtures and existing readiness error handling. #160445 Thanks @steipete.

  • Avoid repeated directory checks in CI test planning. #160458 Thanks @steipete.

  • Reuse equivalent CI planner fixture snapshots within a test suite. #160466 Thanks @steipete.

  • Cover existing Android catalog chat creation without terminal or admin requirements. #160475 Thanks @IWhatsskill.

  • Simplify Android and Wear internals and stabilize synthetic screenshots. #160478 Thanks @steipete.

  • Consolidate core, QA Lab and tooling regression tests. #160480 Thanks @steipete.

  • Consolidate Discord and setup tests with committed config-edit recovery coverage removed. #160481 Thanks @steipete.

  • Remove duplicate Zalo prefix coverage while retaining loopback delivery tests. #160512 Thanks @vincentkoc.

  • Skip unmatched source import parsing in targeted CI ownership checks. #160517 Thanks @steipete.

  • Reuse CI ownership inventories and avoid redundant planner scans. #160531 Thanks @steipete.

  • Simplify Mattermost reaction test response helpers. #160556 Thanks @vincentkoc.

  • Consolidate session, agent, migration and cron tests. #160576 Thanks @steipete.

  • Restore local update-planning lint by extracting an unchanged Node helper. #160591 Thanks @fuller-stack-dev.

  • Refresh generated desktop-state translation memory. #160594

  • Reuse the shared package-root test fixture. #160595 Thanks @vincentkoc.

  • Consolidate agent and channel tests with command-level Nix uninstall refusal coverage removed. #160605 Thanks @steipete.

  • Simplify shared helper use across ten channel plugins. #160639 Thanks @steipete.

  • Remove obsolete backup-capture test branches. #160648 Thanks @vincentkoc.

  • Reuse backup runtime fixtures and remove an unused verifier mock. #160692 Thanks @vincentkoc.

  • Scan frozen product and trusted release-tool dependencies separately; update canonical and live Kova pins while retaining the earlier legacy-list pin. #160694 Thanks @RomneyDa.

  • Refresh generated preview and worktree translation records. #160704

  • Share caller-mode migration setup while retaining suite-owned teardown. #160714 Thanks @vincentkoc.

  • Reuse unchanged Crabbox source mirrors across commits on the same retained ref. 039b32a6 Thanks Peter Steinberger.

  • Select the full test-retention sweep for relevant PR changes and retain hourly and release coverage. 7d0c9758 Thanks Peter Steinberger.

  • Consolidate configuration and session-storage internals. b4d93d20 Thanks @steipete.

  • Consolidate command and Doctor internals. d45a5b9a Thanks @steipete.

  • Remove redundant CI planner scans and reduce source-matching work. #160586 Thanks @steipete.

  • Consolidate wizard, CLI, browser, Code Mode and Codex tests. #160606 Thanks @steipete.

  • Reduce database-image assertion overhead in preflight lifecycle tests. #160728 Thanks @steipete.

  • Refresh generated browser-approval translation records. #160753

  • Share the LINE carousel delivery test fixture. #160754 Thanks @vincentkoc.

  • Remove an unused read after final-delivery receipt persistence. #160764 Thanks @steipete.

  • Refresh generated plugin-account and session-count translation records. #160771

  • Consolidate overlapping tests and update their CI routing. #160776 Thanks @steipete.

  • Remove the duplicate QA Lab Gateway agent and artifact API test. #160779 Thanks @vincentkoc.

  • Consolidate cron service, storage and isolated-agent internals. #160788 Thanks @steipete.

  • Remove redundant Windows Scheduler tests and unused fixture overrides. #160794 Thanks @vincentkoc.

  • Remove redundant LINE tests and unused fixtures. #160829 Thanks @vincentkoc.

  • Consolidate SQLite recovery file checks and cleanup error handling. #160835 Thanks @steipete.

  • Consolidate ingress queue dispatch and existing pressure checks. #160848 Thanks @steipete.

  • Share cron stream line assembly, batching and dispatch settlement. #160849 Thanks @steipete.

  • Remove unused Windows daemon test fixture controls. #160854 Thanks @vincentkoc.

  • Refresh generated Gateway retry-message translation records. #160855

  • Simplify existing Gateway suspension and restart state tracking. #160862 Thanks @steipete.

  • Remove unused Unix daemon test fixture controls. #160874 Thanks @vincentkoc.

  • Consolidate core, Codex and chat UI tests and their CI fixtures. #160879 Thanks @steipete.

  • Refresh generated session-recovery and Cloudflare Access translation records. #160880

  • Consolidate regression tests and shared fixtures. #160892 Thanks @steipete.

  • Simplify existing cron model precedence and fallback selection. #160903 Thanks @steipete.

  • Refresh generated worker-progress, Side chat and Slack reviewer translation records. #160905

  • Align 2026.9.7 package, catalog and macOS metadata and prepare release records. #160937 Thanks @steipete.

Bug fixes

  • Count only catalog workers in the captures integration test, avoiding false failures alongside other tests. #161348

  • Warn about valid unused Apple translations in CI. 0033a497 Thanks Peter Steinberger.

  • Preserve UI development command exit results during shutdown. 017d224a Thanks Peter Steinberger.

  • Accept valid CI plans after job repacking. 01c8d36b Thanks Peter Steinberger.

  • Update PR wrapper expectations for admin evidence arguments. 02c68e2a Thanks Peter Steinberger.

  • Wait for Slack test acknowledgement readiness. 02fd4869 Thanks Peter Steinberger.

  • Restore required SQLite modules in PR tooling. 0338fa2f Thanks Peter Steinberger.

  • Place CLI authority integration tests in the database worker. 0437c689

  • Wait for configuration writes in identity reload tests. 055d97a0 Thanks Peter Steinberger.

  • Initialize native-assignment state in upgrade test fixtures. 069a974b Thanks Peter Steinberger.

  • Preserve qualified CI timing estimates across shard renaming. 06e0673c Thanks Peter Steinberger.

  • Avoid deleting executed Windows binaries during test cleanup. 074198a6 Thanks Peter Steinberger.

  • Supply a scheduler to cron startup recovery tests. 0830a3fa Thanks @joshavant.

  • Complete the session-placement test policy fixture. 09012603 Thanks Peter Steinberger.

  • Restore model-provider categories for Z.AI and Novita. 09bea762 Thanks Peter Steinberger.

  • Include the session-configuration dependency in PR tooling. 0a9fa7da Thanks Peter Steinberger.

  • Handle workspace retention in portal integration fixtures. 0c5fd66f Thanks Peter Steinberger.

  • Register the prior-CI verifier for unused-code analysis. 0d02ab7a Thanks Peter Steinberger.

  • Retain current model owners in minimal Gateway validation. 0fffd0de Thanks Peter Steinberger.

  • Include shared plugin-loader dependencies in PR archives. 10145049 Thanks Peter Steinberger.

  • Synchronize session-read role-revocation tests. 135ebe6e Thanks Peter Steinberger.

  • Scale app-server test cost assertions with chunk size. 15ab76c3 Thanks Peter Steinberger.

  • Keep the advisory test-shard limit private. 1619aff4 Thanks Peter Steinberger.

  • Repair Doctor state-directory migration mocks. 162dea17 Thanks Peter Steinberger.

  • Close skills watchers during Gateway test teardown. 17c64c0f Thanks @saariuslystoned.

  • Distinguish owner-count refreshes in session roster tests. 1820ff93 Thanks Peter Steinberger.

  • Repair QA scenario protocol source references. 18b0130a Thanks Peter Steinberger.

  • Preserve Gateway network tests in owner watch selections. 18ce5c82 Thanks Peter Steinberger.

  • Split full release UI and Gateway tests into bounded jobs. 19ab2d03 Thanks Peter Steinberger.

  • Preserve worker policy in selected-test CI timing records. 1a8f1d14 Thanks Peter Steinberger.

  • Wait for the target session in progress widget tests. 1a94ee9e Thanks Peter Steinberger.

  • Keep Codex QA mock catalogs out of live discovery. 1ad43659 Thanks Peter Steinberger.

  • Apply code-owner review requirements to relevant PRs. 1ca6a5d0 Thanks Peter Steinberger.

  • Align fake clocks in session-change event tests. 1cc14e5d Thanks Peter Steinberger, Vincent Koc.

  • Sequence queued-collector test admission and dispatch waits. 1e13fc8a Thanks Peter Steinberger.

  • Wait for subagent cleanup before test assertions. 1f067fa0 Thanks Peter Steinberger.

  • Capture live operator authority in guest-question fixtures. 229ab8a1 Thanks @steipete.

  • Observe actual subagent recovery readiness in tests. 22e8095b Thanks @steipete.

  • Pin Windows CI to Node 24.20.0. 23834722 Thanks Peter Steinberger.

  • Await macOS Cron test setup before background polling. 2542df6c Thanks Peter Steinberger.

  • Remove a retired lint-suppression test allowance. 256abd76 Thanks Peter Steinberger.

  • Wait for configuration publication in command-palette tests. 25f07e88 Thanks Peter Steinberger.

  • Preserve setup and cleanup failures in cloud browser tests. 276537bf Thanks @vincentkoc.

  • Resolve unknown prior-CI mergeability with complete REST observations. 28340c41 Thanks Peter Steinberger.

  • Include the limit helper in packaging test fixtures. 2989020e Thanks Peter Steinberger.

  • Restore selective iOS screenshots and hourly simulator tests. 29b4f90b Thanks Peter Steinberger.

  • Restore deferred PR checks across large release pauses. 2a7b059f Thanks @steipete.

  • Restore late source-mutation coverage in SDK baseline tests. 2b2ae319 Thanks Peter Steinberger.

  • Make fallback birthtime tests deterministic. 2da0e9a4 Thanks Peter Steinberger.

  • Preserve large tracked test inventories during discovery. 31587f12 Thanks Peter Steinberger.

  • Correct discovery outcomes in model lifecycle fixtures. 3241d947 Thanks Peter Steinberger.

  • Measure worker heap after startup collection. 32ba81a4 Thanks Peter Steinberger.

  • Allow independent task completions in either order in tests. 346219cf Thanks Peter Steinberger.

  • Wait for Gateway readiness in iOS document tests. 34e8976a Thanks Peter Steinberger.

  • Remove webhook deadline coupling from Telegram admission tests. 36030c61 Thanks Peter Steinberger.

  • Preserve the first Vitest timeout failure. 36baa2cd Thanks Peter Steinberger.

  • Correct CI base-recovery fetch assertions. 380a77a8 Thanks Peter Steinberger.

  • Make daemon lazy loaders recognizable to source checks. 385ac289 Thanks Peter Steinberger.

  • Supply sealed npm artifacts to release writer tests. 3928d51b Thanks Peter Steinberger.

  • Repair the upgrade-survivor no-op test handover. 39db93e0 Thanks Peter Steinberger.

  • Isolate progress hovercard tests from native catalog discovery. 3a129a7c Thanks Peter Steinberger.

  • Repair worktree QA scenario test references. 3a300c65 Thanks Peter Steinberger.

  • Include missing SQLite reader dependencies in PR wrappers. 3a4bbc68 Thanks Peter Steinberger.

  • Wait for maintenance startup in ownership tests. 3b1f0372 Thanks Peter Steinberger.

  • Stop scheduling focused CI work after a test failure. 3b8ed47b Thanks Peter Steinberger.

  • Remove stale worktree test references from CI metadata. 3e0def14 Thanks Peter Steinberger.

  • Recover cancelled auto-merge requests with replacement-head evidence. 3e4e9cd4 Thanks Peter Steinberger.

  • Supply required titles in QA Code Mode calls. 412eb6e8 Thanks Peter Steinberger.

  • Wait for maintenance lifecycle signals in shutdown tests. 441c3df8 Thanks @joshavant.

  • Await Talk test storage cleanup before removing fixtures. 444f09ee Thanks Peter Steinberger.

  • Wait for Watch receipt publication in regression tests. 44c58430 Thanks Peter Steinberger.

  • Stabilize cron tests and retain no-op upgrade diagnostics. 45061103 Thanks Peter Steinberger.

  • Avoid missing proof uploads after CI cancellation. 45765010 Thanks Peter Steinberger.

  • Isolate nested worker-artifact test caches. 45e3fb02 Thanks Peter Steinberger.

  • Wait for observed Android Gateway handoff state in tests. 46a01b1b Thanks Peter Steinberger.

  • Repair concurrent session-group defaults test sequencing. 46dfea6a Thanks Peter Steinberger.

  • Keep sidebar reconnect test data consistent. 470c69ce Thanks Peter Steinberger.

  • Stage missing diagnostics support for frozen upgrade tests. 47b36e51 Thanks Peter Steinberger.

  • Isolate CLI process-title test state. 481045d4 Thanks Peter Steinberger.

  • Wait for stable widget pointer routing in UI tests. 48c6a318 Thanks Peter Steinberger.

  • Use the Settings agent selector in Memory browser tests. 4b225bae Thanks Peter Steinberger.

  • Supply the scheduler in config-commit projection tests. 4bd10540 Thanks Peter Steinberger.

  • Answer refreshed Talk configuration requests in Android tests. 4c4fc7b7 Thanks Peter Steinberger.

  • Control media deadlines in Slack history-policy tests. 4c88390c Thanks Peter Steinberger.

  • Preserve Node library paths in update test fixtures. 4e455c29 Thanks Peter Steinberger.

  • Wait for profile preference requests in UI tests. 4e4b5c5c Thanks Peter Steinberger.

  • Initialize the update registry-order test baseline. 4fa09e93 Thanks Peter Steinberger.

  • Await abort-event publication in Gateway tests. 5046031a Thanks Peter Steinberger.

  • Include Android Access checks in release coordination. 533664f8 Thanks Peter Steinberger.

  • Await Telegram test-worker acknowledgements directly. 547bb312 Thanks Peter Steinberger, chopin-op60.

  • Recognize verified CI deadlines reported as cancellations. 548a1b89 Thanks Peter Steinberger.

  • Register workflow script entrypoints in Knip. 54a9d03d Thanks Peter Steinberger.

  • Find collapsed session rows in thinking-metadata tests. 54bd2d6f Thanks Peter Steinberger.

  • Refresh Workboard Control UI bundle paths. 559b4f84 Thanks Peter Steinberger.

  • Recognize the current CI cancellation step. 56376753 Thanks Peter Steinberger.

  • Prepare the paired iPhone for Watch simulator tests. 56c64394 Thanks Peter Steinberger.

  • Restore the node-provisioning return type. 57f12db9 Thanks Peter Steinberger.

  • Repair CI static-evidence test fixtures. 57f1abec Thanks @joshavant.

  • Fix MCP Code Mode test fixture arguments. 596280a1 Thanks Peter Steinberger.

  • Include config snapshot dependencies in PR tooling archives. 5b210a8e Thanks Peter Steinberger.

  • Warn on verified obsolete native translation rows in CI. 5b384871 Thanks Peter Steinberger.

  • Tolerate exited helper threads in process test snapshots. 5b3cb698 Thanks Peter Steinberger.

  • Prepare compaction test handlers before timed event observation. 5ea791a8 Thanks Peter Steinberger.

  • Preserve native lint configuration validation in CI. 5ebe0d43 Thanks Peter Steinberger.

  • Reconcile the lint suppression test inventory. 5f99e4b2 Thanks @joshavant.

  • Align image ticket tests with existing larger previews. 5f9fa811 Thanks Peter Steinberger.

  • Prepare Watch pairing fixtures before the invoke deadline. 60237157 Thanks Peter Steinberger.

  • Wait for stdin closure in Codex lifecycle tests. 619405d4 Thanks Peter Steinberger.

  • Stabilize media download tests during image reload. 63410c30 Thanks Peter Steinberger.

  • Keep Gateway test configuration identity stable. 636e5611 Thanks Peter Steinberger.

  • Restore QA mock session identity from transport metadata. 6386dc46 Thanks Peter Steinberger.

  • Route Gateway network tests to the host-broker owner. 63d299c3 Thanks Vincent Koc.

  • Disable unrelated reloads in completion test fixtures. 659f4b73 Thanks Peter Steinberger.

  • Prepare retention-test readers before measuring contention. 65e3eeca Thanks Peter Steinberger.

  • Align CLI tests with current provider error messages. 66898a63 Thanks Peter Steinberger.

  • Load real filesystem dependencies in update swap fixtures. 691d2e5c Thanks @steipete.

  • Await database cleanup in Gateway startup race tests. 696987cb Thanks Peter Steinberger.

  • Include mobile release evidence in CLI test fixtures. 69a2b509 Thanks Peter Steinberger.

  • Check maintenance refusals through plugin-state error causes. 6ad6f1fb Thanks Peter Steinberger.

  • Wait for the initial session roster in sidebar tests. 6b9da9dc Thanks Peter Steinberger.

  • Stabilize database and timing test fixtures. 6c7544ad Thanks Peter Steinberger.

  • Match compaction QA requests by session identity. 6cf4b810 Thanks Peter Steinberger.

  • Wait for database release in heartbeat replacement tests. 6d1826f1 Thanks Peter Steinberger.

  • Match CI concurrency expectations to the runner profile. 6d18cb7c Thanks Peter Steinberger.

  • Isolate Doctor rollback fixtures from bundled plugins. 6d204ed2 Thanks Peter Steinberger.

  • Await attribution fixture cleanup in its owning lifecycle. 6d327782 Thanks Peter Steinberger.

  • Wait for model availability updates in Android tests. 6d684b94 Thanks Peter Steinberger.

  • Stop checkout test actors when lease reads are denied. 6d8d7772 Thanks Peter Steinberger.

  • Wait for parent completion in subagent QA fixtures. 6dc9d864 Thanks Peter Steinberger.

  • Initialize the MCP scheduler in Workshop review tests. 6dd3011e Thanks Peter Steinberger.

  • Account for the Bun launcher variable in validation budgets. 6e0d8aa1 Thanks Peter Steinberger.

  • Await lifecycle completion before registry test assertions. 6efe0434 Thanks Peter Steinberger.

  • Align native text inventory tests with existing permission wording. 6f325d20 Thanks Peter Steinberger.

  • Preserve native sockets in upgrade-lane tests. 716cec26 Thanks Peter Steinberger.

  • Wait for delivery readiness in reconnect tests. 74b00d7d Thanks Peter Steinberger.

  • Check pending Crabbox work without ripgrep. 752571ec Thanks Peter Steinberger.

  • Apply jsdom compatibility to the active test worker. 7526f600 Thanks Peter Steinberger.

  • Preserve serial Control UI CI workers. 75fe4fec Thanks Peter Steinberger.

  • Wait for complete TUI test log records. 764c3e39 Thanks Peter Steinberger.

  • Remove obsolete clock overrides from Workshop tests. 764c9331 Thanks Peter Steinberger.

  • Wait for resumed Gateway work to settle in tests. 765ec334 Thanks Peter Steinberger.

  • Settle chat test fixtures before closing session stores. 77b32334 Thanks Peter Steinberger.

  • Wait for preflight test commands before cleanup. 789e24c3 Thanks Peter Steinberger.

  • Recognize complete legacy-migration refusals in lifecycle tests. 78e3b5cc Thanks Peter Steinberger.

  • Repair Team Reports scheduler test imports. 7c4866c7 Thanks Peter Steinberger.

  • Update the Google realtime assertion baseline. 80c3c742 Thanks Peter Steinberger.

  • Preserve typed ownership checks in chat route resolution. 813a10e7 Thanks Peter Steinberger.

  • Repair CI type checks and database test routing. 82411a34 Thanks Peter Steinberger.

  • Honor the workflow Node pin on hosted CI runners. 84bf30fe Thanks Peter Steinberger.

  • Remove stream-ordering races from legacy update tests. 85af7152 Thanks Peter Steinberger.

  • Finish native parser fixture provisioning before execution. 85ca5a54 Thanks Peter Steinberger.

  • Include read-only reuse support in PR wrappers. 86d36530 Thanks Peter Steinberger.

  • Align CI planner assertions with precise target inventory. 88e2ebef Thanks Peter Steinberger.

  • Wait for Gateway request settlement before test cleanup. 88f60ff9 Thanks Peter Steinberger.

  • Wait for claim settlement in Gateway persistence tests. 897b8e90 Thanks Peter Steinberger.

  • Separate iOS screenshot logs from capture evidence. 89f9250f Thanks Peter Steinberger.

  • Isolate first-turn chat tests from background wakes. 8a14f266 Thanks Peter Steinberger.

  • Align ClawHub approval tests with parent approval receipts. 8a73a178 Thanks Peter Steinberger.

  • Use the active runtime in post-core update tests. 8b549de1 Thanks Peter Steinberger.

  • Recognize completed deletion cancellation in SQLite lifecycle tests. 8ba18cf1 Thanks Peter Steinberger.

  • Prevent port-allocation races in model inventory tests. 8c65491b Thanks Peter Steinberger.

  • Restore pane identity in footer scroll tests. 91ee6aa3 Thanks Peter Steinberger.

  • Align catalog lifecycle tests with selected-first ordering. 93ed0fac Thanks Peter Steinberger.

  • Isolate session-path performance tests from extra Gateway work. 9423fbd9 Thanks Peter Steinberger.

  • Wait for the owner roster before keyboard navigation tests. 94cbd133 Thanks Peter Steinberger.

  • Isolate source-installer validation from shared image dependencies. 9a6a5376 Thanks @vincentkoc.

  • Remove duplicate extension inventory from CI coverage tests. 9a7e90e7 Thanks Peter Steinberger.

  • Avoid package repair in channel presentation tests. 9b730f0c Thanks Peter Steinberger.

  • Stabilize Android voice-note lifecycle tests. 9d561769 Thanks Peter Steinberger.

  • Avoid core-collector delays in Linux abort tests. 9f4b6e97 Thanks Peter Steinberger.

  • Bound simulated time in recovery tests. 9fe93a20 Thanks Peter Steinberger.

  • Register Codex attempt tests with database workers. a018e414 Thanks Peter Steinberger.

  • Keep selected CI coverage within matrix planning limits. a08479ac Thanks Peter Steinberger.

  • Repair isolated QA routing and evidence collection. a19ae3ed Thanks @joshavant.

  • Target roster requests in follow-up tests. a2792b9a Thanks Peter Steinberger.

  • Prepare Google Chat runtime before setup tests. a3dcaa1a Thanks @teacup404, Peter Steinberger.

  • Remove duplicate timing declaration in upgrade tests. a46cde88 Thanks Peter Steinberger.

  • Separate lifecycle test timing from fixture startup. a4f6aa28 Thanks Peter Steinberger.

  • Load staged swap targets in restart fixtures. a61b5214 Thanks Peter Steinberger.

  • Prepare native UI fixtures before compilation. ab165b4e Thanks Peter Steinberger.

  • Align lint planning fixtures with file selection. ac00c476 Thanks Peter Steinberger.

  • Place the schema exception where lint reads it. af545bf3 Thanks Vincent Koc.

  • Stabilize the Discord retry-budget test clock. af9ffedc Thanks Peter Steinberger.

  • Drain historical task-history readers before fixture reset. b21237a9 Thanks Peter Steinberger.

  • Refresh preview-session browser fixtures. b2452cb2 Thanks Peter Steinberger.

  • Correct interrupted-subagent test expectations. b459eb60 Thanks Peter Steinberger.

  • Remove the stale Copilot test baseline entry. b7cf7d90 Thanks Peter Steinberger.

  • Match mock session sampling clocks. b7e2666e Thanks Peter Steinberger.

  • Avoid false iOS typing-focus test timeouts. b8d9869f Thanks Peter Steinberger.

  • Isolate Gateway health in update lease tests. b9a42793 Thanks Peter Steinberger.

  • Remove a duplicate chat clipboard helper. bb05e779 Thanks Peter Steinberger.

  • Prevent database lock stalls in worker recovery tests. bbbb3b46 Thanks Peter Steinberger.

  • Recover known base-change admin merge refusals. bff74e5f Thanks Peter Steinberger.

  • Wait for assignment menus to render in tests. c05b74fb Thanks Peter Steinberger.

  • Close configured databases before deleting test homes. c07f1eb4 Thanks Peter Steinberger.

  • Align cron fixtures with Gateway scheduling. c0e6951d Thanks Peter Steinberger.

  • Correct widget frame types in browser tests. c21a63f7 Thanks Peter Steinberger.

  • Wait for announcements before test history reads. c2256122 Thanks Peter Steinberger.

  • Avoid webhook deadlines in Telegram pipeline tests. c582939c Thanks Peter Steinberger.

  • Await worktree test cleanup. c65004f9 Thanks Peter Steinberger.

  • Wait for historical maintenance-task publication in disposal tests. c947420a Thanks Peter Steinberger.

  • Await historical task-history scope cleanup. c9651107 Thanks Peter Steinberger.

  • Isolate release baseline fetches from freshness settings. cac0c021 Thanks @romneyda.

  • Repair schema and CI planning fixtures. cb3e6df6 Thanks @joshavant.

  • Stabilize subagent deadline and completion tests. cff310fe Thanks Peter Steinberger.

  • Isolate prepared provider-catalog tests. d204850d Thanks Peter Steinberger.

  • Isolate authentication test identity stores. d21edfe3 Thanks Peter Steinberger.

  • Align progress-widget test session state. d6aa710c Thanks Peter Steinberger.

  • Account for historical snapshot coercion in lint tests. d6dc69c0 Thanks Peter Steinberger.

  • Isolate parent requests and replacement heartbeat tests. d94eac54 Thanks Peter Steinberger.

  • Stabilize heartbeat and session-title tests. d9569745 Thanks Peter Steinberger.

  • Preserve native animation behavior in splash tests. d9fc2556 Thanks Peter Steinberger.

  • Restore the reliability helper export for tests. da2efd83 Thanks Peter Steinberger.

  • Correct the retained-assets UI test type import. da8149b8 Thanks Peter Steinberger.

  • Wait for session fixture reads before cleanup. db8095d7 Thanks Peter Steinberger.

  • Scope desktop retry tests to the selected worker. dbd7453f Thanks Peter Steinberger.

  • Supply Gateway context in HTTP tests. dd3fb2bd Thanks Peter Steinberger.

  • Isolate legacy-listener test connections. df3ea62f Thanks Peter Steinberger.

  • Synchronize voice and side-chat browser tests. e256cbef Thanks Peter Steinberger.

  • Prepare historical task readers before test barriers. e3560607 Thanks Peter Steinberger.

  • Add launcher provenance to Windows service tests. e36b63c1 Thanks Peter Steinberger.

  • Load timing helpers in upgrade reset tests. e5fae567 Thanks Peter Steinberger.

  • Register intentional plugin ownership suppressions. e6fae686 Thanks Peter Steinberger.

  • Update ACP test observer calls. e9af8ebc Thanks Peter Steinberger.

  • Synchronize UI fixtures with imports and deliveries. e9df7063 Thanks Peter Steinberger.

  • Complete ACP dispatch metadata mocks. ea6bf83e Thanks Peter Steinberger.

  • Remove deleted paths from test inventories. ed0a056c Thanks Peter Steinberger.

  • Remove timing races from CLI and process fixtures. ee15d2ba Thanks Peter Steinberger.

  • Register prebuilt UI assets in root test types. ee558121 Thanks Peter Steinberger.

  • Observe lifecycle events in Codex authentication tests. eed9d9bf Thanks Peter Steinberger.

  • Align UI fixtures with startup readiness. f03d64f6 Thanks Peter Steinberger.

  • Remove obsolete Gateway test-routing entries. f46cdd41 Thanks Peter Steinberger.

  • Stabilize historical ACPX cancellation test lifetimes. f4a796a2 Thanks @steipete.

  • Remove obsolete merge-recovery test rejection. f9cb2891 Thanks Peter Steinberger.

  • Align retained-custody tests with existing errors. fa90c83d Thanks Peter Steinberger.

  • Isolate extension fixtures from compiler discovery. fad9fc56 Thanks Peter Steinberger.

  • Wait for sidebar hovercard readiness in motion tests. fc255f85 Thanks Peter Steinberger.

  • Align legacy updater test refusal wording. fd28e926 Thanks Peter Steinberger.

  • Restore UI test diagnostic context typing. ffa7c2ba Thanks Peter Steinberger.

  • Stabilize native patch and subagent QA evidence. #120353 Thanks @vincentkoc, @romneyda.

  • Await readiness in Tailscale worker tests. #125396 Thanks @steipete.

  • Recover distant PR bases in shallow CI checkouts. #129492 Thanks @steipete.

  • Await Google Chat media cleanup in tests. #136768 Thanks @leilei3167, @wangmiao0668000666.

  • Wait for captured output before releasing managed commands. #147781 Thanks @vincentkoc, @fuller-stack-dev.

  • Preserve line-cap allowances in JetBrains terminals. #151755 Thanks @alix-007, @obviyus.

  • Preserve higher plugin API requirements during release sync. #154640 Thanks @steipete.

  • Correct Computer Use cancellation test replies. #154911 Thanks @steipete.

  • Align Workshop tests with validated deferred calls. #154915 Thanks @steipete.

  • Wait for avatar readiness in sidebar tests. #155578 Thanks @steipete.

  • Isolate base64 memory measurements from previous tests. #155638 Thanks @steipete.

  • Wait for maintenance completion in SDK retention tests. #155659 Thanks @steipete.

  • Honor explicit worker caps in CI allocation expectations. #155735 Thanks @steipete.

  • Keep native locale refresh independent of UI-only changes. #155738 Thanks @steipete.

  • Settle background subagent test work before teardown. #155888 Thanks @steipete.

  • Wait for subagent notification delivery before test cleanup. #155910 Thanks @vincentkoc.

  • Wait for Gateway abort-test deliveries before teardown. #155913 Thanks @vincentkoc.

  • Recover Security Review checkout and report setup failures. #155919 Thanks @joshavant.

  • Retry Security Review when GitHub diff data is temporarily inconsistent. #155921 Thanks @joshavant.

  • Wait for Doctor corpus work and cleanup before removing fixtures. #155922 Thanks @vincentkoc.

  • Accept supported process snapshots in operation-lock tests. #155923 Thanks @vincentkoc.

  • Finish persistence-test deliveries before fixture cleanup. #155934 Thanks @vincentkoc.

  • Finish asynchronous UI fixture work before cleanup. #155936 Thanks @steipete.

  • Run installed-package channel checks on plain Node. #155940 Thanks @steipete.

  • Limit the storage job file-count assertion to GitHub CI. #155943 Thanks @steipete.

  • Assign picker fixture cleanup to its owning test. #155949 Thanks @steipete.

  • Wait for queued-turn admission in the Telegram retry test. #155955 Thanks @steipete.

  • Finalize retired subagent test fixtures after directory-removal errors. #155962 Thanks @vincentkoc.

  • Synchronize Discord retry tests with committed queue outcomes. #155965 Thanks @vincentkoc.

  • Dispose shared session fixtures after UI tests. #155968 Thanks @steipete.

  • Recognize nested Code Mode tools in QA transcript checks. #155976 Thanks @steipete.

  • Preserve Git identity for hydrated Linux AWS test commands. #156021 Thanks @vincentkoc.

  • Reload historical Tasks pagination fixtures without closing live test storage. #156028 Thanks @steipete.

  • Isolate update-executor test handoff state. #156037 Thanks @fuller-stack-dev.

  • Compare dependency changes against the PR common ancestor. #156040 Thanks @joshavant.

  • Capture large changed-path lists for correction reviews. #156043 Thanks @fuller-stack-dev.

  • Repair Windows census lease-rejection fault injection. #156049 Thanks @steipete.

  • Isolate filesystem mode in Claw project tests. #156058 Thanks @steipete.

  • Shorten macOS worker test socket paths. #156081 Thanks @steipete.

  • Keep PR provisioning tests on private handoff stores. #156100 Thanks @fuller-stack-dev.

  • Restore compact CI test-failure annotations. #156119 Thanks @steipete.

  • Allow additional worktree cleanup result fields in lifecycle tests. #156127 Thanks @RomneyDa.

  • Await SQLite cleanup before historical Tasks registry test reloads. #156131 Thanks @RomneyDa.

  • Remove namespace dependence from the Codex output-fidelity test. #156132 Thanks @steipete.

  • Complete Gateway test cleanup and repair CI fixtures. #156136 Thanks @steipete.

  • Repair Gateway identity and presence integration fixtures. #156142 Thanks @RomneyDa.

  • Restore lockfiles from the PR merge base during cleanup. #156171 Thanks @joshavant.

  • Recover Security Review after temporary GitHub read timeouts. #156176 Thanks @joshavant.

  • Finish Gateway persistence test cleanup after cancellation. #156197 Thanks @obviyus, @vincentkoc, @areslp.

  • Keep one-worker test budgets under moderate host load. #156258 Thanks @steipete.

  • Close agent-test databases before removing temporary storage. #156284 Thanks @steipete.

  • Honor explicitly declared exact test exclusions in frozen release validation. #156300 Thanks @steipete.

  • Tolerate temporary duplicate jobs while reading release-validation retry evidence. #156302 Thanks @steipete.

  • Accept frozen stable MCP contracts and larger SDK evidence. #156309 Thanks @RomneyDa.

  • Dispose sidebar test sessions when tests finish. #156320 Thanks @steipete.

  • Keep release tooling outside npm candidate source checks. #156332 Thanks @RomneyDa.

  • Preserve request details in Discord smoke-test timeout errors. #156347 Thanks @RomneyDa.

  • Start native Talk test readiness after preparation. #156376 Thanks @steipete.

  • Disconnect sidebar indicator test fixtures during teardown. #156408 Thanks @steipete.

  • Recognize host-installed SwiftLint in dependency checks. #156415 Thanks @RomneyDa.

  • Align thinking-metadata tests with existing Ultra mode. #156422 Thanks @steipete.

  • Keep Docker advisory warning relays nonfatal. #156444 Thanks @steipete.

  • Start credential-test cooldowns when fixtures execute. #156449 Thanks @fuller-stack-dev.

  • Prevent idle-socket races in Telegram HTTP tests. #156466 Thanks @steipete, @obviyus.

  • Wait for browser-context routes before test cleanup. #156473 Thanks @steipete.

  • Synchronize update progress scrollback tests with disclosure events. #156546 Thanks @steipete.

  • Avoid caller process IDs in Doctor test fixtures. #156564 Thanks @vincentkoc.

  • Retire finished composer fixtures and settle browser-test network failures. #156566 Thanks @steipete.

  • Preserve explicit Testbox test concurrency settings. #156620 Thanks @steipete.

  • Fix macOS update-feed filenames for architecture-specific release builds. #156645 Thanks @steipete.

  • Synchronize dashboard identity tests with reconnect completion. #156653 Thanks @steipete.

  • Preserve live browser-test timeout diagnostics before teardown. #156659 Thanks @steipete.

  • Reject incomplete required release-verifier results. #156661 Thanks @steipete.

  • Await owned completion in disposed-requester tests. #156685 Thanks @steipete.

  • Avoid false watchdog test receipt timeouts. #156708 Thanks @steipete.

  • Restore WhatsApp QA actions through catalog tool search. #156719 Thanks @joshavant.

  • Restore WhatsApp sticker replies in QA mock fixtures. #156722 Thanks @joshavant.

  • Skip republishing superseded package versions during npm preflight. #156724 Thanks @steipete.

  • Restore WhatsApp status-reaction QA configuration. #156727 Thanks @joshavant.

  • Restore WhatsApp broadcast QA configuration. #156733 Thanks @joshavant.

  • Preserve full WhatsApp QA silence windows after connection setup. #156734 Thanks @joshavant.

  • Require a genuine current-message batch in WhatsApp reply-quote QA. #156735 Thanks @joshavant.

  • Accept superseded already-published plugin versions during final verification. #156737 Thanks @steipete.

  • Stop obsolete Security Reviews between reads and eligible recovery waits. #156798 Thanks @VACInc, @vincentkoc.

  • Wait for child completion and SQLite shutdown in Gateway tests. #156805 Thanks @steipete.

  • Wait for every initial skill-watcher generation in integration tests. #156833 Thanks @steipete.

  • Isolate session-list test databases. #156837 Thanks @steipete.

  • Wait for compaction disposal events in tests. #156850 Thanks @steipete.

  • Preserve PR preparation evidence when gate settings are invalid. #156851 Thanks @vincentkoc.

  • Keep WebChat cron preview tests on synthetic channel plugins. #156863 Thanks @steipete.

  • Recognize the published Node recovery bootstrap in compatibility recording. #156873 Thanks @vincentkoc.

  • Preserve root dependency checks in legacy plugin bundles. #156886 Thanks @RomneyDa.

  • Target native inventory CI tests and synchronize maintenance test startup. #156991 Thanks @IWhatsskill.

  • Settle session-test reads before removing temporary databases. #156997 Thanks @steipete.

  • Clarify lockfile cleanup fallback when write access is unavailable. #157008 Thanks @joshavant.

  • Settle maintenance test work before cleanup. #157009 Thanks @fuller-stack-dev.

  • Seal frozen npm declarations after prepack. #157026 Thanks @RomneyDa.

  • Validate bundled native bindings in eligible frozen packages. #157027 Thanks @RomneyDa.

  • Match frozen-candidate validation to supported tests and package layouts. #157034 Thanks @RomneyDa.

  • Test compaction disposal order without a machine-speed threshold. #157036 Thanks @obviyus, Ayaan.

  • Stream large Crabbox proof plans without argument-size failures. #157051 Thanks @vincentkoc.

  • Check cron timer cleanup independently of unrelated Gateway work. #157081 Thanks @steipete.

  • Observe ONNX test progress without filesystem notifications. #157104 Thanks @steipete.

  • Preserve dependencies in relocated Doctor test fixtures. #157130 Thanks @steipete.

  • Restore dependencies in extracted PR wrappers. #157133 Thanks @vincentkoc.

  • Stabilize Gateway lifecycle and sidebar archive tests. #157159 Thanks @vincentkoc.

  • Scope normalization package builds to their own sources. #157174 Thanks @vincentkoc.

  • Publish complete private Telegram QA handoff requests atomically. #157176 Thanks @steipete.

  • Clean up media-authority tests after setup failures. #157178 Thanks @freeqaz-openai.

  • Render empty-tuple defaults in SDK API reports. #157183 Thanks @freeqaz-openai.

  • Prevent preflight HTTP test mocks from leaking into shared workers. #157207 Thanks @vincentkoc.

  • Keep scoped checks for both sides of file renames. #157219 Thanks @vincentkoc.

  • Synchronize macOS Gateway test fixtures. #157224 Thanks @steipete.

  • Preserve original PowerShell completion test errors during cleanup. #157267 Thanks @vincentkoc.

  • Let canceled development checks finish owned child cleanup. #157272 Thanks @vincentkoc.

  • Restore live-media release test discovery. #157282 Thanks @steipete.

  • Repair sandbox and session-reload release-test fixtures. #157285 Thanks @steipete.

  • Remove tracked scratch blocking remote source capture. #157308 Thanks @steipete.

  • Synchronize Git backoff cancellation test fixtures. #157315 Thanks @steipete.

  • Keep package declaration builds independent of unrelated test types. #157318 Thanks @steipete.

  • Synchronize Codex and Signal tests under load. #157334 Thanks @steipete.

  • Prevent retained-restart test handshake deadlocks. #157342 Thanks @steipete.

  • Reuse prepared runtime in changed-target E2E jobs. #157365 Thanks @steipete.

  • Synchronize pasted-text rendering and late-child test fixtures. #157375 Thanks @vincentkoc, @steipete.

  • Restore cold maintainer PR worktree provisioning. #157394 Thanks @vincentkoc.

  • Isolate Android obsolete-translation test fixtures. #157397 Thanks @steipete.

  • Wait for CLI test fixture readiness and managed cleanup. #157424 Thanks @steipete.

  • Release retired plugin caches in shared test workers. #157470 Thanks @steipete.

  • Avoid heap exhaustion in large-bundle import checks. #157471 Thanks @steipete.

  • Separate launcher signal tests from build setup. #157478 Thanks @steipete.

  • Restore stable release manifest performance controls. #157486 Thanks @steipete.

  • Restore model-probe test fixtures after rejected work. #157487 Thanks @vincentkoc.

  • Wait for widget menu animations in browser tests. #157494 Thanks @vincentkoc.

  • Remove request-arrival assumptions from update deadline tests. #157504 Thanks @vincentkoc.

  • Wait for account-history test turns to settle before compaction. #157530 Thanks @steipete.

  • Recover browser relay fixtures from initial port collisions. #157550 Thanks @RomneyDa.

  • Avoid false Projects upgrade acceptance failures from forwarding exports. #157579 Thanks @steipete.

  • Wait for historical task-notification fixture cleanup. #157589 Thanks @steipete.

  • Retain test runtimes when child cleanup cannot be verified. #157602 Thanks @steipete.

  • Restore TypeScript loading in frozen upgrade checks. #157609 Thanks @RomneyDa.

  • Use candidate-owned UI test planning for frozen releases. #157610 Thanks @RomneyDa.

  • Avoid redundant sealed-worker parsing in npm verification. #157618 Thanks @RomneyDa.

  • Finish SDK dependency preparation before API rendering. #157620 Thanks @RomneyDa.

  • Preserve outer test storage during Talk relay cleanup. #157623 Thanks @vincentkoc.

  • Find onboarding prompts throughout long terminal logs. #157624 Thanks @RomneyDa.

  • Retry recognized interrupted Security Review response reads. #157651 Thanks @joshavant.

  • Isolate Security Review checkout retry directories. #157652 Thanks @joshavant.

  • Repair npm package helper type imports. #157659 Thanks @steipete, @fuller-stack-dev.

  • Isolate first-hop update validation controls by source release. #157680 Thanks @RomneyDa.

  • Settle announcement cleanup within its registry test. #157681 Thanks @steipete.

  • Use native scheduled-event policies for hourly main CI. #157751 Thanks @vincentkoc.

  • Align Windows MCP packaging success-test budgets. #157754 Thanks @vincentkoc.

  • Isolate maintainer test fixtures from outer PR controls. #157755 Thanks @steipete, @fuller-stack-dev.

  • Avoid probing child-private Telegram QA state during parent cleanup. #157764 Thanks @RomneyDa.

  • Wait for historical task-completion publication in requester tests. #157768 Thanks @steipete.

  • Align release-validation fixtures with current CLI and Doctor contracts. #157780 Thanks @RomneyDa.

  • Authenticate the worktree-successor test creator. #157785 Thanks @RomneyDa.

  • Avoid redundant npm version startup during package checks. #157809 Thanks @steipete.

  • Restore automatic signing identities for macOS distribution builds and ad-hoc smoke tests. #157861 Thanks @RomneyDa.

  • Isolate Git maintenance tests from inherited settings. #157893 Thanks @steipete.

  • Reuse Crabbox Testboxes with custom state directories while preserving repository claims. #157898 Thanks @steipete.

  • Prevent CI selection stalls in large scans and unfinished Unicode escapes. #157900 Thanks @steipete.

  • Keep explicitly watched policy checks in changed-file CI. #157902 Thanks @RomneyDa.

  • Preserve running stable closeouts and tag serialization, with waiver replay later retired. #157905 Thanks @steipete.

  • Synchronize cancellation test fixtures with retry backoff. #157909 Thanks @steipete.

  • Wait for config reconciliation in plugin lifecycle tests. #157918 Thanks @steipete.

  • Prepare the Windows CLI test runtime before test deadlines begin. #157928 Thanks @steipete.

  • Add bounded publishing recovery for transient reads, registry delays and eligible stale children. #157937 Thanks @steipete.

  • Isolate docs audit tests from sibling checkouts. #157962 Thanks @steipete.

  • Synchronize deferred-restart tests with reload completion. #157964 Thanks @vincentkoc.

  • Reuse compatible test-job capacity in hosted push CI. #157967 Thanks @vincentkoc.

  • Accept unchanged declaration-build inputs at clock boundaries while checking file identity. #157968 Thanks @steipete.

  • Scope popup resize cleanup assertions to the popup. #157988 Thanks @steipete.

  • Wait for cancelled backup-test processes before cleaning fixtures. #157991 Thanks @vincentkoc.

  • Isolate release test fixtures from compiler inputs. #158005 Thanks @steipete.

  • Preserve Git executable names in macOS test fixtures. #158015 Thanks @steipete.

  • Wait for the actual reload lease in deferred-restart tests. #158027 Thanks @steipete.

  • Restore strict macOS readiness lint compliance without changing behavior. #158033 Thanks @vincentkoc.

  • Prevent text-busy failures in systemd test fixtures. #158045 Thanks @steipete.

  • Invalidate CI dependency caches when imported install helpers change. #158069 Thanks @vincentkoc.

  • Repair Gateway lint limits and Doctor test observer cleanup. #158074 Thanks @vincentkoc, @steipete.

  • Let hourly core CI proceed while scheduled iOS checks serialize separately. #158075 Thanks @vincentkoc.

  • Prepare Crabbox wrapper dependencies before test child deadlines. #158086 Thanks @steipete.

  • Validate frozen packages against trusted exact Chrome MCP version contracts. #158098 Thanks @RomneyDa, @vyctorbrzezowski, @steipete, @jalehman.

  • Correct profile-specific model discovery outcomes in integration fixtures. #158115 Thanks @steipete.

  • Check durable release markers in ONNX test workers. #158146 Thanks @steipete.

  • Restore targeted Control UI test planning and browser-runner selection. #158149 Thanks @vincentkoc.

  • Prepare Gateway modules before timed catalog integration cases. #158157 Thanks @steipete, @vincentkoc.

  • Await verifier child lifecycle events instead of premature test polling deadlines. #158171 Thanks @steipete.

  • Resume interrupted PR preparation from verified successful-push receipts. #158174 Thanks @vincentkoc.

  • Reject previously captured notifications in the memory watcher test. #158193 Thanks @steipete.

  • Drain session-sharing test resources before deleting state. #158205 Thanks @steipete.

  • Isolate browser and worker lifecycle test fixtures. #158221 Thanks @steipete.

  • Keep streaming backup test directories private under group-writable umasks. #158223 Thanks @steipete.

  • Establish shared skill watcher test roots before watcher admission. #158258 Thanks @steipete.

  • Drain database readers before update-history cold-cache tests. #158279 Thanks @steipete, @giodl73-repo.

  • Stabilize Doctor OAuth-isolation and repair-command argument fixtures. #158282 Thanks @steipete.

  • Remove a single-event dependency from catalog watcher test readiness. #158283 Thanks @steipete.

  • Restore stream-test and Telegram file-size lint compliance. #158292 Thanks @RomneyDa.

  • Identify missing cached Convex launchers in QA diagnostics. #158311 Thanks @steipete.

  • Wait for subagent completion before test assertions. #158344 Thanks @steipete.

  • Synchronize queued-RPC restart tests with terminal admission evidence. #158347 Thanks @steipete.

  • Share runtime helpers and return QA response-size errors without waiting for cancellation. #158365 Thanks @steipete.

  • Use the captured candidate/main fork for native PR growth checks. #158368 Thanks @steipete.

  • Include generated SQLite fixture dependencies in changed-test selection. #158409 Thanks @RomneyDa.

  • Avoid an unhandled rejection in Gateway catalog startup tests. #158440 Thanks @vincentkoc.

  • Restore exact file-approval transport test coverage. #158453 Thanks @RomneyDa.

  • Recognize native Codex truncation markers in cache-stability QA. #158454 Thanks @RomneyDa.

  • Supply default close reasons in WhatsApp connection tests. #158456 Thanks @romneyda.

  • Enable required debug transport logs in managed ClawRouter tests. #158457 Thanks @RomneyDa.

  • Restore Gateway steering test fixture contracts. #158478 Thanks @RomneyDa.

  • Preserve iOS signing failures after transient process-group errors and confirmed cleanup. #158483 Thanks @steipete.

  • Require session identity for history-bearing QA utility requests. #158496 Thanks @RomneyDa.

  • Skip redactor startup for empty E2E logs. #158508 Thanks @steipete.

  • Prevent onboarding test FIFO startup hangs. #158605 Thanks @steipete.

  • Restore config-apply restart wake-up QA coverage. #158608 Thanks @joshavant.

  • Stabilize startup generation-race test preparation. #158619 Thanks @steipete.

  • Use the configured owner in approval QA. #158622 Thanks @joshavant.

  • Restore existing core lint line limits without relaxing thresholds. #158625 Thanks @steipete, @fuller-stack-dev.

  • Use exact session reports for instruction-injection QA. #158634 Thanks @joshavant.

  • Recognize validated nested tool results in QA evidence checks. #158641 Thanks @joshavant.

  • Extract profile authority reads to meet the worker lint limit. #158661 Thanks @fuller-stack-dev.

  • Make removed-skill-root watcher assertions portable. #158693 Thanks @steipete.

  • Close outbound test resources before fixture removal. #158730 Thanks @fuller-stack-dev.

  • Restore Docs Agent Git fallback fixture coverage. #158739 Thanks @fuller-stack-dev.

  • Accept valid terminal capability output in TUI tests. #158748 Thanks @fuller-stack-dev.

  • Run the CI watcher from worktrees using an installed tooling root. #158754 Thanks @steipete.

  • Stabilize browser-test dependencies and session fixtures. #158755 Thanks @steipete.

  • Retain subprocess test inputs until canceled work settles. #158767 Thanks @fuller-stack-dev.

  • Join timed-out UI page cleanup before successor tests. #158774 Thanks @steipete.

  • Restore sidebar navigation lint compliance. #158778 Thanks @steipete.

  • Settle SDK fixture lifecycle writes before artifact discovery. #158790 Thanks @steipete.

  • Make SQLite snapshot allocation tests independent of watch-event delivery. #158798 Thanks @steipete.

  • Split read-worker settlement tests to restore lint compliance. #158820 Thanks @fuller-stack-dev.

  • Recognize nested tool receipts in instruction-profile QA. #158838 Thanks @joshavant.

  • Reuse prepared Corepack cache in Crabbox transport tests. #158850 Thanks @steipete.

  • Accept historical Android upload codes while requiring public-build source records. #158864 Thanks @joshavant.

  • Use installed compatible simulators for iOS release checks. #158865 Thanks @joshavant.

  • Share QA Matrix completion outcomes and clean failed setup resources. #158889 Thanks @steipete.

  • Separate Signal container WebSocket and REST tests to restore lint compliance. #158955 Thanks @steipete.

  • Stabilize asynchronous regression fixtures across five suites. #158994 Thanks @steipete.

  • Isolate test inputs and await asynchronous observations. #158996 Thanks @steipete.

  • Stabilize scheduling and observation in test fixtures. #159009 Thanks @steipete.

  • Stabilize ACP and cron test initialization. #159014 Thanks @steipete.

  • Restore OpenRouter test line-limit checks. #159039 Thanks @shakkernerd.

  • Resume interrupted protected PR preparation from its exact proof run. #159045 Thanks @vincentkoc.

  • Stabilize test readiness and fixture cleanup. #159046 Thanks @steipete.

  • Reduce timing and mock-isolation races in lifecycle tests. #159049 Thanks @steipete.

  • Remove invocation-owned CI scratch after verified resource cleanup. #159051 Thanks @steipete.

  • Wait for actual process-group disappearance in ownership tests. #159061 Thanks @MuseTeaParty, @steipete.

  • Make occupied webhook-port test fixtures portable. #159063 Thanks @steipete.

  • Synchronize lifecycle test fixtures and isolate setup. #159078 Thanks @steipete.

  • Stabilize Gateway and plugin test setup and cleanup. #159095 Thanks @steipete.

  • Make WhatsApp shutdown-drain test schedules explicit. #159115 Thanks @steipete.

  • Preserve scoped dependency rules in plugin release locks. #159124 Thanks @RomneyDa.

  • Restore update restart-outcome test inputs. #159127 Thanks @steipete.

  • Reorganize Cron tests and Web Push dispatch to meet existing lint limits. #159133 Thanks @steipete.

  • Reuse retained iOS screenshot evidence after verified partial retries. #159149 Thanks @steipete.

  • Accept valid Android screenshot metadata from ImageMagick 7. #159158 Thanks @steipete.

  • Wait for reply delivery in the Feishu replay test. #159168 Thanks @steipete.

  • Isolate Azure Speech unit tests from worker compilation. #159180 Thanks @steipete.

  • Isolate maintainer and scheduled-message test fixtures. #159200 Thanks @steipete.

  • Preserve original HTML translation and browser smoke-test failures. #159218 Thanks @steipete.

  • Consolidate E2E helpers and repair pairing, discovery and recovery fixtures. #159247 Thanks @steipete.

  • Check WhatsApp send-timer cleanup by its exact handle. #159270 Thanks @steipete.

  • Explain missing asynchronous capture support in QA tools. #159277 Thanks @steipete.

  • Use canonical paths for temporary test-state cleanup. #159281 Thanks @steipete.

  • Keep Telegram QA probes in the selected conversation and topic. #159284 Thanks @vincentkoc, @RomneyDa.

  • Isolate Control UI proxy tests from host addresses. #159287 Thanks @altaywtf.

  • Keep the QA launcher executable immutable in process tests. #159307 Thanks @steipete.

  • Refresh publication authority after long protected Crabbox proofs. #159321 Thanks @vincentkoc.

  • Restore WhatsApp invalid-input test cast form. #159340 Thanks @steipete.

  • Align requester-wake tests with independent yielded batches. #159352 Thanks @steipete.

  • Refresh repeated config checks and consolidate script helpers. #159362 Thanks @steipete.

  • Accept valid plugin locks with multiple dependency versions while enforcing authored overrides. #159376 Thanks @RomneyDa.

  • Acquire first-hop compatibility inventory for sparse release validation. #159391 Thanks @RomneyDa.

  • Preserve unchanged session-list publication identities. #159394 Thanks @steipete.

  • Reuse shared write options to restore deferred-migration worker lint compliance. #159426 Thanks @steipete.

  • Correct the mock preview's pending-question fixture. #159435 Thanks @steipete.

  • Accept retained v1 release-validation evidence without rewriting its immutable digests. #159440 Thanks @RomneyDa.

  • Preserve active SQLite writer queues during test cleanup. #159450 Thanks @steipete.

  • Release compiler resources after canceling type-check shards. #159454 Thanks @steipete.

  • Simplify session-row refresh to satisfy the existing lint limit. #159473 Thanks @steipete.

  • Keep same-version candidate and baseline packages distinct in installer smoke tests. #159490 Thanks @steipete.

  • Restore automatic-restart upgrade-test coverage with real fixture service membership. #159498 Thanks @steipete.

  • Isolate canary deadline tests from host disk capacity. #159508 Thanks @RomneyDa.

  • Suppress the Screen Time teardown race in macOS test views. #159535 Thanks @steipete.

  • Restore frozen-validation ClawHub security-mode checks. #159547 Thanks @RomneyDa.

  • Remove the native-completion test observer lint suppression. #159553 Thanks @steipete.

  • Keep paused SSH QA fixtures alive until deliberate termination. #159572 Thanks @steipete.

  • Repair QA evidence linking, Matrix cleanup and remote profile handling. #159582 Thanks @steipete.

  • Split subagent settlement test support to meet existing lint limits. #159584 Thanks @steipete.

  • Apply an exact-candidate test-clock repair during frozen release CI. #159594 Thanks @RomneyDa.

  • Prevent iOS typing tests from resuming inside keyboard updates. #159622 Thanks @steipete, @joshavant.

  • Prepare matching Control UI assets before selected browser tests. #159624 Thanks @vincentkoc.

  • Isolate diagnostic reporting tests from session recovery. #159628 Thanks @steipete.

  • Restore worker installation union typing. #159629 Thanks @altaywtf.

  • Stabilize SQLite integrity diagnostic fixtures. #159643 Thanks @steipete.

  • Settle Codex catalog startup scanning before recovery tests. #159664 Thanks @steipete.

  • Surface early worktree creation errors in hook tests. #159685 Thanks @steipete.

  • Prepare runtime prerequisites for supported root-directory test runs. #159723 Thanks @steipete.

  • Replace invalid PNG fixture data in the Windows media test. #159771 Thanks @obviyus.

  • Isolate the session-catalog privacy test deadline clock. #159788 Thanks @steipete.

  • Keep iOS release source clean by separating qualification from signing. #159797 Thanks @joshavant.

  • Allow failed-job release retries to reuse verified earlier-attempt packages. #159813 Thanks @RomneyDa.

  • Prepare Telegram webhook test storage before starting request deadlines. #159828 Thanks @steipete.

  • Build the host SDK before standalone TUI identity tests. #159832 Thanks @steipete.

  • Update ACP, media and Gateway recovery test fixtures. #159836 Thanks @IWhatsskill.

  • Await Plugin SDK test database cleanup within each case. #159846 Thanks @steipete.

  • Allow Crabbox recovery past unattached claims while retaining independent holds. #159848 Thanks @steipete.

  • Await SQLite worker shutdown before test schema downgrades. #159885 Thanks @steipete.

  • Resolve maintainer merge evidence paths from the caller directory. #159936 Thanks @vyctorbrzezowski.

  • Prime plugin lease test children before starting contention. #159959 Thanks @steipete.

  • Handle split terminal codes and both observed frozen-onboarding prompt sequences. #159973 Thanks @RomneyDa.

  • Isolate refresh intervals in heartbeat typing tests. #159980 Thanks @steipete.

  • Discover manifest-only plugins in contributor test routing. #159981 Thanks @steipete.

  • Keep session fixture maintenance out of Codex fake-clock tests. #159986 Thanks @steipete.

  • Verify large or cluttered Crabbox recovery witnesses with bounded explicit budgets. #159989 Thanks @steipete.

  • Run the unchanged reply-preview retention proof on Node in PR CI. #159991 Thanks @vyctorbrzezowski.

  • Isolate Doctor migration test fixtures from retention maintenance. #159992 Thanks @steipete.

  • Respect loaded stop policy and uncertain process settlement in upgrade fixtures. #160000 Thanks @RomneyDa.

  • Remove scheduling races from session-history broadcast worker tests. #160005 Thanks @steipete.

  • Package frozen plugins without importing newer absent source helpers. #160007 Thanks @romneyda.

  • Synchronize sandbox HTTP cancellation tests with actual response readiness. #160029 Thanks @steipete.

  • Respect named exports available in frozen plugin sources. #160033 Thanks @RomneyDa.

  • Use recorded session dates in transcript tests across UTC midnight. #160042 Thanks @steipete.

  • Test frozen targets against their supported restart contract. #160043 Thanks @RomneyDa.

  • Prevent Vitest preload inheritance in packaged-worker test launches. #160069 Thanks @joshavant.

  • Await SQLite worker shutdown before raw database access in tests. #160090 Thanks @steipete.

  • Join placement recovery test work before database teardown. #160124 Thanks @vincentkoc, @steipete.

  • Prepare both model catalogs and retain recovery files after interrupted publication; a mixed pair needs manual reconciliation and one publisher. #160157 Thanks @steipete, @vincentkoc.

  • Forward-port host-credential isolation for linked-plugin update tests. #160165 Thanks @steipete, @RomneyDa, @vyctorbrzezowski, @jalehman.

  • Enable approved first-time ClawHub publication recovery without claiming completed publication. #160180 Thanks @steipete.

  • Avoid duplicate prerelease tests and preserve successor source mirrors during recovery. #160187 Thanks @vincentkoc.

  • Isolate Gateway waiter fixtures and Bun plugin-retention collection timing. #160200 Thanks @steipete.

  • Join scheduled database closes between tests, with retry-setup ordering limits. #160258 Thanks @steipete.

  • Keep OOM test allocations alive until kernel termination. #160276 Thanks @steipete.

  • Share packed CI compilers across groups with different scheduling limits. #160290 Thanks @steipete.

  • Repair Docker harness scheduler dependencies and service-reset setup. #160306 Thanks @steipete.

  • Make update-repair test clocks independent of runner load. #160319 Thanks @steipete.

  • Preserve plugin test ownership to avoid unnecessary CI jobs. #160324 Thanks @VACInc.

  • Repair release-test request selection, update timing, Windows paths and Telegram mock dispatch. #160346 Thanks @steipete.

  • Align test fixtures with canonical skill sources and database-worker ownership. #160349 Thanks @vincentkoc, @steipete.

  • Separate uninstall deletion-lock assertions from later configuration publication. #160360 Thanks @vincentkoc.

  • Restore ACP command test collection with a partial metadata mock. #160365 Thanks @steipete.

  • Move UI fixture typechecks to their existing owner without raising budgets. #160368 Thanks @steipete.

  • Control install-policy test deadlines, with a missing-callback cleanup risk remaining. #160372 Thanks @steipete.

  • Recognize marked delegated update workers in release-test evidence. #160384 Thanks @steipete.

  • Join Gateway completion test work before assertions and teardown. #160387 Thanks @vincentkoc.

  • Prepare tests without unrelated service permissions while checking output separation; a service can still start after admission. #160392 Thanks @VACInc.

  • Join requester retry work before advancing the remaining test clock. #160407 Thanks @vincentkoc.

  • Recognize definitively exited children in UI wrapper tests. #160412 Thanks @vincentkoc.

  • Await major garbage collection in heap-profile tests and retain failure output. #160414 Thanks @steipete.

  • Remove an invalid original-owner timing ceiling from CI planner tests. #160456 Thanks @vincentkoc.

  • Keep unknown Discord QA cleanup state unverified while consolidating QA helpers. #160460 Thanks @steipete.

  • Align canonical session state in progress-widget browser fixtures. #160463 Thanks @vincentkoc.

  • Compact npm release manifests within the unchanged verification size limit. #160464 Thanks @RomneyDa.

  • Preserve sampled session rows across rename-test metadata invalidation. #160476 Thanks @steipete.

  • Join chat test execution before checking final status. #160479 Thanks @VACInc.

  • Publish complete PID markers before Gateway startup tests observe them. #160482 Thanks @steipete.

  • Prepare missing sandbox images for selected Linux Node CI tests. #160489 Thanks @VACInc.

  • Remove incomplete lifecycle-error mocks from state-lease tests. #160493 Thanks @steipete.

  • Check smooth-scroll intent and destination instead of sampled frame counts. #160506 Thanks @VACInc.

  • Isolate artifact-preflight fixtures from host service discovery. #160515 Thanks @vincentkoc.

  • Remove the retired private Voice Call barrel from contract-test expectations. #160526 Thanks @vincentkoc.

  • Model successful AI declaration builds in clean-checkout E2E fixtures. #160532 Thanks @VACInc.

  • Wait for child identity binding before reading update-test receipts. #160545 Thanks @steipete.

  • Recognize transparent literal lazy-import forwarders in export checks. #160558 Thanks @vincentkoc.

  • Commit mock Gateway activity changes before post-Stop reads. #160563 Thanks @VACInc.

  • Wait for the full session roster before testing sidebar overflow. #160570 Thanks @VACInc.

  • Size capacity-aware automatic lint plans to effective memory limits. #160581 Thanks @vincentkoc.

  • Complete correction preparation after its own first branch publication. #160587 Thanks @vincentkoc.

  • Route literal package-directory tests to their existing specialized runners. #160653 Thanks @steipete.

  • Wait for initial roster rendering in mocked UI navigation tests. #160657 Thanks @steipete.

  • Await actual fixture completion in state, Skills and update-WAL tests. #160711 Thanks @steipete.

  • Isolate plugin packaging test builds from shared checkout outputs. 172043bb Thanks Peter Steinberger.

  • Keep hybrid hourly test plans within the existing job cap. 2e7f4f8f Thanks Peter Steinberger.

  • Isolate E2E build-path tests from inherited build-skipping flags. 3b504305 Thanks Peter Steinberger.

  • Remove the unused 1Password dependency declaration after the resolver migration. 4ed0cb36 Thanks Peter Steinberger.

  • Remove retired plugin runtime API files from the test inventory. 5b76930a Thanks Peter Steinberger.

  • Stage the candidate provider catalog for frozen upgrade-test planning. 682ffe55 Thanks Peter Steinberger.

  • Initialize shared credential ownership in OAuth test fixtures. 70d7e7ab Thanks Peter Steinberger.

  • Include extracted configuration helpers in the PR review wrapper. 73182e75 Thanks Peter Steinberger.

  • Align release-test fixtures with current completion, request and scheduler contracts. 78c83b53 Thanks Peter Steinberger.

  • Align upgrade-survivor test expectations with the existing startup budget. 8799587f Thanks Peter Steinberger.

  • Stage unpublished candidate providers for legacy-operator upgrade tests. ac59199a Thanks Peter Steinberger.

  • Include missing planner dependencies in frozen release tooling and test fixtures. ae1d3da7 Thanks Peter Steinberger.

  • Update the Synology context-builder caller test expectation. c4845a61 Thanks Peter Steinberger.

  • Isolate Gateway spawn receipts and utility requests in live-test fixtures. cdf60f45 Thanks Peter Steinberger.

  • Retry the narrowly identified older Windows updater failure in release checks. db5f2df5 Thanks Peter Steinberger.

  • Isolate QA startup scenarios and select the Voice Call fixture's mock model. #157695 Thanks @RomneyDa.

  • Wait for queued delivery to finish in near-limit Telegram webhook tests. #160588 Thanks @steipete.

  • Restore Doctor plugin-repair lint compliance through an internal extraction. #160715 Thanks @steipete.

  • Recognize eligible retry-aware CI cancellation in maintainer landing checks. #160721 Thanks @steipete.

  • Restore the environment-variable count check while preserving Windows browser path handling. #160756 Thanks @steipete.

  • Wait for WebKit and app-link events in macOS dashboard tests. #160816 Thanks @steipete.

  • Retire the actual shared SQLite worker owner between Gateway test files. #160838 Thanks @jalehman.

  • Restore configuration and node-adapter lint limits through helper and fixture extraction. #160843 Thanks @steipete.

  • Stop obsolete Security Reviews and preserve scheduled same-revision findings after merge. #160890 Thanks @joshavant.

  • Retain upgrade-test repair diagnostics and restore deadline-hook selection. #160896 Thanks @steipete.

  • Check service-file contents at the launchd bootstrap boundary in restart tests. #160898 Thanks @vincentkoc.

  • Settle pending zero-delay wait callbacks before subagent test cleanup. #161038 Thanks @steipete, @giodl73.

  • Wait for reply-recovery fixture cleanup before deleting databases and restore cancellation and restart-adoption tests. #161177 Thanks @steipete.

Security and trust

  • Guard QA session observer requests. 3e53db71 Thanks @joshavant.

  • Verify tested merge contents before prior-CI admission. 54a0ea67 Thanks Peter Steinberger.

  • Preserve security authority when admitting baseline CI failures. 824982ca Thanks Peter Steinberger.

  • Recheck evidence before same-head merge recovery. bc635fc9 Thanks @steipete.

  • Sync autoreview Git isolation and incomplete-review reporting. #156039 Thanks @vincentkoc.

  • Require full CI validation for automatic Docs Agent writes. #157852 Thanks @RomneyDa.

  • Authenticate package-owned modules throughout Windows repair probes. #157856 Thanks @RomneyDa.

  • Validate both main revisions and unchanged policy during eligible prior-CI REST admission. d5447648 Thanks Peter Steinberger.

Documentation

  • Shorten contributor guidance on hourly main CI. 040e0416 Thanks Peter Steinberger.

  • Document GitHub release activation after npm publication. 1738e9d1 Thanks Peter Steinberger.

  • Clarify release tooling propagation, cleanup, and CI checks. 18d218fa Thanks Peter Steinberger.

  • Prefer focused local validation over additional CI proof runs. 3880bb13 Thanks Peter Steinberger.

  • Refresh the iPhone App Review walkthrough. 41d076f3 Thanks @joshavant.

  • Clarify full and targeted extension lint layouts. 55a7756d Thanks Peter Steinberger.

  • Align planner checks and CI budget documentation. 57dfbc31 Thanks Peter Steinberger.

  • Adopt Apple-specific iOS App Review notes. 932abb0a Thanks @joshavant.

  • Document release publishing approvals and recovery. 948115ac Thanks Peter Steinberger.

  • Document bounded landing exceptions. a48bd1c4 Thanks Peter Steinberger.

  • Condense CI workflow comments. be535fd2 Thanks Peter Steinberger.

  • Document PR selection and hourly coverage. bf9162b5 Thanks Peter Steinberger.

  • Correct plugin publication recovery guidance. cbb40268 Thanks Peter Steinberger.

  • Clarify hourly main validation guidance. ea9f5939 Thanks Peter Steinberger.

  • Restore the npm-publication documentation bookmark. eb223579 Thanks @vincentkoc.

  • Remove redundant CI comments. f9861b1a Thanks Peter Steinberger.

  • Record historical release flake-waiver guidance. fc1d9ce8 Thanks Peter Steinberger.

  • Add the v2026.9.6 release documentation page. #155225 Thanks @hannesrudolph.

  • Clarify completion publication and plugin authority guidance. #156140 Thanks @joshavant.

  • Clarify native Team updater acceptance guidance. #156199 Thanks @steipete, @jalehman.

  • Clarify npm and ClawHub release priority while retaining required gates. #156272 Thanks @steipete.

  • Document an earlier stable-release fast path before stricter publication gates. #156295 Thanks @steipete.

  • Strengthen test-authoring guidance and subsystem audits. #156316 Thanks @obviyus.

  • Clarify release-owner control of candidate bases. #156577 Thanks @steipete.

  • Document database admission ownership and add a preparatory query-budget guard. #156610 Thanks @steipete.

  • Document source-reply completion rules. #157057 Thanks @joshavant.

  • Document recipient evidence for source-reply completion. #157070 Thanks @joshavant.

  • Retain authorized Team update ownership through verified acceptance. #157195 Thanks @steipete, @jalehman, @vincentkoc, @romneyda.

  • Remove completed Mintlify migration cleanup from docs sync. #157583 Thanks @hannesrudolph.

  • Correct historical release-priority recovery guidance. #157853 Thanks @RomneyDa.

  • Update macOS promotion guidance with remaining checkpoint-precedence inconsistencies. #157897 Thanks @steipete.

  • Exclude root repository instructions from public docs sync while preserving workspace templates. #158253 Thanks @hannesrudolph.

  • Require public Gateway session-creation proof for ownership changes. #158315 Thanks @joshavant.

  • Keep requested PR handoffs draft and allow adapted maintainer workflows. #159859 Thanks @vacinc.

  • Document temporary source-checkout fs-safe recovery and restoration. #160101 Thanks @steipete.

  • Explain the existing Node assignment for plugin retention tests. 632b150d Thanks Peter Steinberger.

  • Clarify existing SimSlim use in iOS qualification comparisons. #160784 Thanks @steipete.

Limits and compatibility

  • Stop replaying canceled CI workflows automatically. 0708f975 Thanks Peter Steinberger.

  • Revert special worker-retirement signaling after schema scopes end. 1664e4cf Thanks Peter Steinberger.

  • Treat Swift generic type-name length as a lint warning. 460bce50 Thanks Peter Steinberger.

  • Reverted worker-retirement signaling for ended schema scopes. 601bb5ba Thanks Peter Steinberger.

  • Restore backend-aware CI routing after hosted saturation. 8ab43884 Thanks Peter Steinberger.

  • Move channel-health checks to the Gateway scheduler with unresolved shutdown risk. 8ccd3f58 Thanks @steipete.

  • Revert broadly applied Gateway session fixture settlement changes. 9bb3ccca Thanks Peter Steinberger.

  • Report numeric CI budgets as Actions warnings while retaining strict local checks. 9ed5a04a Thanks Peter Steinberger.

  • Move adopted-session probes into Gateway scheduling with unresolved shutdown risk. 9f6554c1 Thanks @steipete.

  • Reverted hosted-first PR verification placement. ab416e26 Thanks Peter Steinberger.

  • Revert cached-worker retirement changes. af9e273f Thanks Peter Steinberger.

  • Use Podman's native init helper to reap detached children in isolated tests. b29a7f67 Thanks @vincentkoc.

  • Preserve the first iOS screenshot capture failure. b8a3ca30 Thanks Peter Steinberger.

  • Preserve failed release-validation attempts. c93c3e0b Thanks Peter Steinberger.

  • Reverted universal Gateway fixture read and cleanup waits. cb13cf88 Thanks Peter Steinberger.

  • Record reverted stale-worker retirement work. e52420e1 Thanks Peter Steinberger.

  • Defer unrelated slow integrations to hourly and release CI. e68cfe26 Thanks @steipete.

  • Allow upgrade compatibility tests enough time to finish. f0280ee9 Thanks Peter Steinberger.

  • Allow validation to start with locale drift warnings while keeping strict checks. f4a5f852 Thanks Peter Steinberger.

  • Keep prebuilt test readers from rebuilding AI artifacts. f6c237fd Thanks Peter Steinberger.

  • Record reverted Gateway abort-test timing changes. fc574daa Thanks Peter Steinberger.

  • Share native agent coordination through matching host and plugin versions. #152181 Thanks @sjf-oa, @sjf.

  • Add scheduled CI gate recovery with a remaining PR/head publication race. #155392 Thanks @steipete.

  • Pack CI jobs and add RunsOn qualification; GitHub-only settings may still select paid runners. #155403 Thanks @steipete.

  • Record superseded baseline-before-tests CI scheduling. #155443 Thanks @freeqaz-openai.

  • Reuse tooling fixtures and conditionally schedule historical updater tests. #155731 Thanks @steipete.

  • Separate native plugin-loader tests and correct FaceTime expectations; direct project selection can omit loader coverage. #155892 Thanks @steipete.

  • Extend selected browser package-test subprocess timeouts before the later outer-budget repair. #155931 Thanks @steipete.

  • Extend the shared subagent test cleanup wait without adding delivery-result capture. #155960 Thanks @steipete.

  • Give Docker channel-switch tests a separate 900-second timeout budget. #155961 Thanks @steipete.

  • Move six real-Gateway UI suites from ordinary main CI to release validation. #155996 Thanks @steipete.

  • Expand execution-identity QA; private-app topic validation and live qualification remain incomplete. #156033 Thanks @joshavant.

  • Rebalance Node CI and transcript fixtures; defer seven specialized MCP cases to release validation. #156061 Thanks @steipete.

  • Reduce routine UI shards and defer six exhaustive browser tours to release validation. #156065 Thanks @steipete.

  • Move three costly lifecycle suites to release verification. #156077 Thanks @steipete.

  • Defer nine native-process test files to release validation. #156085 Thanks @steipete.

  • Run a streamlined upgrade survivor check on admitted main CI; defer broader Docker scenarios. #156097 Thanks @steipete.

  • Defer ten expensive tooling matrices and reuse compiler fixtures. #156104 Thanks @steipete.

  • Move release-tooling process tests out of PR checks; native Windows coverage remains incomplete. #156123 Thanks @steipete.

  • Isolate macOS Quick Chat tests and report unmet host-deactivation preconditions. #156134 Thanks @steipete.

  • Defer 40 integration files to release validation. #156254 Thanks @steipete.

  • Split real-Gateway UI validation and defer additional browser tours. #156270 Thanks @steipete.

  • Introduce historical release-priority admission and advisory native-check reporting. #156305 Thanks @steipete.

  • Raise the Docker compatibility-lane budget; enclosing job deadlines may still truncate it. #156336 Thanks @steipete.

  • Record permission-root test cleanup with an empty shipped delta. #156438 Thanks @RomneyDa.

  • Record transcript fixture repair with no new shipped delta. #156450 Thanks @RomneyDa.

  • Prepare selected database-worker tests before deadlines; bracketed checkout paths remain a selector concern. #156489 Thanks @steipete.

  • Extend selected hosted validation job timeouts from 20 to 35 minutes. #156570 Thanks @steipete.

  • Retire obsolete skills downgrade test support. #156575 Thanks @steipete.

  • Repair selected Bun test fixtures and subprocess launches; key proof uses a patched runtime. #156581 Thanks @steipete.

  • Record the subsequently removed general release lane-waiver policy. #156585 Thanks @steipete.

  • Allow four hours for delegated Testbox validation. #156614 Thanks @steipete.

  • Move catalog startup tests from routine CI to release validation. #156676 Thanks @steipete.

  • Record the superseded commentary-status layout repair. #156680 Thanks @steipete.

  • Handle disappearing DMG mounts during packaging without proving device detachment. #156702 Thanks @steipete.

  • Retry plugin publication preparation with up to two fresh children; terminal-state checks remain incomplete. #156760 Thanks @steipete.

  • Remove an earlier general release waiver before the final strict publication policy. #156811 Thanks @RomneyDa.

  • Reuse bound release evidence, with publication exceptions later removed. #156812 Thanks @steipete.

  • Record the historical release lane-waiver forwarding repair. #156816 Thanks @steipete.

  • Record v2026.9.6 macOS feed metadata later withdrawn. #156852 Thanks @steipete.

  • Require stable publication validation before later exceptions were fully retired. #156934 Thanks @RomneyDa.

  • Raise Vercel mirror layer-size preflight to the documented 2 GB cap. #156954 Thanks @steipete.

  • Record the superseded updater inventory proposal with no shipped delta. #156987 Thanks @steipete.

  • Introduce Windows repair-worker checks whose transitive authentication was later repaired. #157047 Thanks @steipete.

  • Checkpoint signed macOS artifacts before notarization, with automatic signing selection later restored. #157117 Thanks @steipete.

  • Use ordinary operational file reads without promising atomic snapshots of in-place edits. #157171 Thanks @steipete.

  • Use main-tier validation for hourly CI. #157186 Thanks @steipete.

  • Recover uncertain auto-merge requests with a remaining delayed-submission risk. #157193 Thanks @steipete.

  • Allow longer native Windows task-state test probes. #157289 Thanks @vincentkoc.

  • Reduce Node fixture overhead and defer seven matrices in broad PR plans. #157341 Thanks @steipete.

  • Defer the session-row scale benchmark to full validation. #157576 Thanks @steipete.

  • Use recorded compatibility files in update-validation fixtures. #157608 Thanks @RomneyDa.

  • Defer eight slow runtime suites from routine CI to full validation. #157611 Thanks @steipete.

  • Require blocking release checks and retire waiver-bearing publication recovery. #157864 Thanks @RomneyDa.

  • Offer eligible release-tooling PRs an opt-in reduced-coverage CI lane. #157921 Thanks @steipete.

  • Require the pinned actionlint build for local workflow checks. #157932 Thanks @vincentkoc.

  • Move heavier hourly iOS checks to full validation and distinguish canceled-job proof. #158413 Thanks @steipete.

  • Allow supported sessionless QA utility completions, with history admission later narrowed. #158452 Thanks @RomneyDa.

  • Cache unchanged diagnostic text with an unresolved plaintext-retention concern. #158471 Thanks @steipete.

  • Use parent approval receipts for npm children and protected tags for direct recovery. #158500 Thanks @steipete.

  • Reuse retained Testbox source mirrors with bounded slots and an unresolved crash-recovery gap. #158681 Thanks @steipete.

  • Reuse Doctor ingress authority checks with promise rejection for expired async calls. #158768 Thanks @steipete.

  • Replace mobile beta preparation with store-release workflows and retained recovery plans. #158807 Thanks @joshavant.

  • Consolidate browser and memory helpers with a padded snapshot-reference compatibility gap. #158829 Thanks @steipete.

  • Schedule registered update-check work with a remaining minimal-Gateway startup race. #158909 Thanks @steipete.

  • Consolidate tests with unresolved media-alias and credential-redaction coverage concerns. #158911 Thanks @steipete.

  • Schedule Gateway and CLI capture cleanup with a recurring-cleanup gap for direct hosts. #158959 Thanks @steipete.

  • Consolidate core and plugin tests with a retained WhatsApp voice-note coverage concern. #158975 Thanks @steipete.

  • Stabilize lifecycle fixtures with an unresolved frozen-clock acquisition deadline. #159015 Thanks @steipete.

  • Add narrowly pinned iOS beta record recovery with an external-group compatibility gap. #159109 Thanks @vincentkoc.

  • Consolidate provider and channel tests with retained Alibaba coverage concerns. #159120 Thanks @steipete.

  • Schedule media cleanup with whole-Gateway shutdown proof still unresolved. #159126 Thanks @steipete.

  • Keep older published upgrade baselines usable while marking unsupported recovery coverage. #159150 Thanks @steipete.

  • Skip verbose Xcode diagnostics in screenshot and qualification tests while retaining ordinary evidence. #159261 Thanks @joshavant.

  • Read package handoff facts once and require supplied timestamps for inferred backup recovery. #159361 Thanks @steipete.

  • Consolidate extension tests with a retained Codex idle-refresh coverage concern. #159369 Thanks @steipete.

  • Remove the guest deadline from a persistence test while narrowing its execution coverage. #159377 Thanks @steipete.

  • Adapt release checks to verified frozen candidates with explicit omitted coverage. #159505 Thanks @RomneyDa.

  • Consolidate bundled-plugin tests with a retained PDF render-failure coverage concern. #159513 Thanks @steipete.

  • Consolidate bundled-plugin tests with a retained advertised-schema coverage concern. #159530 Thanks @steipete.

  • Consolidate plugin tests with a retained denied-child authorization coverage concern. #159552 Thanks @steipete.

  • Consolidate plugin tests with a retained revoked-token fallback coverage concern. #159568 Thanks @steipete.

  • Consolidate provider, policy and QA tests with retained RTP coverage concerns. #159573 Thanks @steipete.

  • Consolidate channel and QA tests with retained parent-settlement coverage concerns. #159627 Thanks @steipete.

  • Restore File Transfer's SDK filesystem boundary with a retained wide-directory scan concern. #159654 Thanks @steipete.

  • Await Doctor fixture plugin retirement with a retained failure-path cleanup concern. #159754 Thanks @steipete.

  • Consolidate agent tests with a retained persisted-model invalidation coverage concern. #159774 Thanks @steipete.

  • Record the reverted Codex cancellation test expectation change. #159852 Thanks @VACInc.

  • Offer default-off authorized omission of unsupported frozen-target Tool Search recipes. #159996 Thanks @RomneyDa.

  • Require memory-control qualification on opted-in Linux CI runners. #160014 Thanks @vincentkoc.

  • Require Crabbox 0.67.0 and task-bound Testbox receipts; stop and reallocate old leases, with no stale override or enforced provider TTL. #160052 Thanks @vincentkoc.

  • Omit unavailable-fixture Telegram identity QA from implicit release defaults. #160072 Thanks @RomneyDa.

  • Pin scheduled release checks to one commit every three hours; queued triggers and the hosted six-hour watcher limit still apply. #160106 Thanks @steipete.

  • Record the duplicate attachment-helper merge later corrected by the direct cleanup commit. #160177 Thanks @steipete.

  • Repair frozen Telegram checks and use absolute UI budgets when historical builds fail. #160190 Thanks @RomneyDa.

  • Record a duplicate clipboard-image repair proposal with no landed source delta. #160210 Thanks @vyctorbrzezowski.

  • Use one release-validation transport branch; require pushed targets and older tooling to reconcile old request records. #160212 Thanks @steipete.

  • Retire new Tideclaw alpha releases while preserving historical version readback. #160261 Thanks @steipete.

  • Audit narrowly eligible unavailable context links without omitting required release evidence. #160305 Thanks @steipete.

  • Schedule remote skill refresh and join shutdown work, with slow-node wait concerns. #160318 Thanks @steipete.

  • Capture iOS screenshots on fresh sequential simulators; require an idle local pool and retain the shared release-workflow queue. #160347 Thanks @joshavant.

  • Pack broad CI selections under the row cap, with low-capacity rows still able to exceed the estimated workflow duration. #160376 Thanks @steipete.

  • Raise six Kova acceptance budgets, including five shared smoke and diagnostic limits; later pins further revise CPU limits. #160573 Thanks @steipete.

  • Raise Kova Gateway CPU acceptance budgets for reported variation; later canonical and live pins differ from the legacy list. #160616 Thanks @steipete.

  • Record the assigned-owner header correction later fully reverted, with no surviving display improvement. #160673 Thanks @Patrick-Erichsen.

  • Fully revert the assigned-owner header change; shared headers again hide the assignee, while the Owner menu can show the creator. #160709 Thanks @Patrick-Erichsen.

  • Admit the sealed recovery bundle and reviewed plugin inventory; the helper import-check gap and unpacked-size warning remain. #160717 Thanks @steipete.

  • Extend hosted upgrade-validation budgets while retaining the shared command timeout. 0eb4ad70 Thanks Peter Steinberger.

  • Extend upgrade-test startup waits and honor configured readiness budgets. 1fd2ad9b Thanks Peter Steinberger.

  • Pin the OpenCode Go release smoke test to one accessible model pending workspace region changes. 6d644f27 Thanks Peter Steinberger.

  • Warn on untouched file-length overages in eligible local changed-file checks while retaining strict changed-file and correctness checks. 7c1838a4 Thanks @steipete.

  • Consolidate Gateway tests with unresolved authentication, session and delivery coverage gaps. #160115 Thanks @steipete.

  • Fully revert the separate Stop button; a ready follow-up replaces Stop until cleared, with dictation retaining priority. #160725 Thanks @vyctorbrzezowski.

  • Consolidate agent, channel and CLI tests with unresolved Telegram authorization and model-picker coverage gaps. #160766 Thanks @steipete.

  • Rename the iOS release workflow to ios-store-release.yml and retire one-time reconciliation; external dispatch callers must update the old filename. #160791 Thanks @joshavant.

  • Extend future extended-stable npm verification waits while retaining exact-version and channel checks. #160796 Thanks @RomneyDa.

  • Consolidate webhook limiter and body-reader ownership with an unresolved Feishu rejection Content-Type concern. #160846 Thanks @steipete.

  • Wait longer for queued release-validation receipts and advance eligible GitHub release activation while retaining publication approvals and verification. #160859 Thanks @steipete.

  • Record three temporary E2E waivers; restart-adoption coverage was later restored, while child-timeout and memory-consolidation cases remain skipped. #161143 Thanks @steipete.

  • Reverted change: Keep Stop available while drafting a follow-up #160233. Thanks @vyctorbrzezowski.

Was this useful?