โ OpenClaw
OpenClaw openclaw 2026.7.35
securitymodelpricing2026-09-21 ยท official notes
Summary
- This is a gateway-only extended-stable release, which is our current equivalent to LTS. This release is OpenClaw from the end of July 2026, plus critical security updates, reliability and performance
- Doctor plugin registry: preserve the complete bundled plugin inventory when Doctor creates or repairs registry state, so default Browser, Canvas, pairing, file-transfer, phone-control, Talk voice, and
- Complete contribution record
Full notes
This is a gateway-only `extended-stable` release, which is our current equivalent to LTS. This release is OpenClaw from the end of July 2026, plus critical security updates, reliability and performance fixes, and features like new model support. The latest version of OpenClaw at the time of this release is [2026.9.5](https://github.com/openclaw/openclaw/releases#release-v2026.9.5)
## 2026.7.35
### Fixes
- **Doctor plugin registry:** preserve the complete bundled plugin inventory when Doctor creates or repairs registry state, so default Browser, Canvas, pairing, file-transfer, phone-control, Talk voice, and Bonjour plugins remain available after restart. State-migration discovery now also recovers from the partial registry written by 2026.7.34 while retaining external plugin install records. Backported from #136045. Thanks @wangmiao0668000666.
### Complete contribution record
This extended-stable follow-up was selected from a complete 1,418-commit audit after the prior 2026.7.34 audit cursor. No other defect observed during clean install or the 2026.6.35 upgrade required a July-line backport.
## Cumulative July extended-stable notes
OpenClaw 2026.7.33 and 2026.7.34 were unstable extended-stable builds and were intentionally not published as GitHub Releases. Because 2026.7.35 is the first GitHub Release for the July maintenance line, it includes their complete changelogs below.
## 2026.7.33
### Highlights
- **Security and credential safety:** harden command parsing, browser origin checks, plugin Git installs, diagnostics, service credentials, and webhook logging across Gateway and official plugins.
- **Message and session integrity:** preserve queued, imported, streamed, and tool-result messages across retries, hooks, recovery, and channel lifecycle transitions.
- **Gateway reliability:** close failed HTTP and Responses streams, bound expensive reads and history queries, and settle shutdown work before reporting completion. Thanks @RomneyDa.
- **Channel delivery:** repair Discord, Matrix, Telegram, Slack, WhatsApp, LINE, Feishu, Zalo, and meeting-plugin edge cases that could lose, corrupt, or stall messages.
- **Provider and media robustness:** bound provider requests and diagnostics, reject malformed payloads, and preserve valid tool schemas and response lifecycles. Thanks @RomneyDa.
### Changes
- **Extended-stable release tooling:** carry the current Docker channel classifier, promoter, verification policy, and tests so `v2026.7.33` can move only the `extended-stable*` aliases. Thanks @RomneyDa.
### Fixes
- **Security boundaries:** reject escaped-newline command words, exact-origin mismatches, injected Git option arguments, inherited secret-response identifiers, unsafe browser mutations, and malformed or oversized node payloads.
- **Delivery and transcript recovery:** keep retry delays accurate, preserve imported messages and plugin-blocked tool results, retain detached admissions, and avoid silently dropping channel actions or recovery work. Thanks @RomneyDa.
- **Resource and lifecycle safety:** bound catalog, history, media, stderr, API, and provider waits; stop canceled parallel tools; drain channel shutdown; and reject queued worker requests after close. Thanks @RomneyDa.
- **Text and schema correctness:** preserve UTF-16 boundaries across user-visible truncation paths, keep root tool-schema properties, reject non-finite schema values, and report exact UTF-8 write sizes.
- **Official plugins:** repair message parsing, proxy paths, request timeouts, media handling, privacy-safe logging, and runtime aliases across the npm-published plugin inventory.
### Complete contribution record
This audited record covers the complete v2026.7.1-2..42625327f91254cfe66cbeb6d7a1812780b1a694 history: 126 merged PRs. The generation manifest also supplies direct commits as editorial input; the grouped notes above prioritize user impact.
#### Pull requests
- **PR #102438** fix: auth bookkeeping no longer reverts rotated OpenAI OAuth credentials. Related #102430. Thanks @obviyus.
- **PR #102125** fix(gateway): finish plugin HTTP responses after post-header failures. Thanks @mushuiyu886.
- **PR #102451** fix(memory-host): reject queued worker requests on shutdown. Thanks @QiuYuang.
- **PR #102276** fix(agent-core): stop canceled parallel tools from starting. Related #102252. Thanks @harjothkhara and @yetval.
- **PR #101739** fix(secrets): reject inherited exec response ids. Thanks @Alix-007.
- **PR #102089** fix(twilio): redact webhook turnToken diagnostics. Thanks @Alix-007.
- **PR #102403** fix(backup): write backup archive with owner-only 0o600 permissions. Thanks @yetval.
- **PR #102398** fix(plugins): terminate git clone args so git: specs cannot inject options. Thanks @yetval.
- **PR #38290** Gateway: allow extension origins in browser allowlist. Related #46520. Thanks @brunowowk and @mosidevv.
- **PR #102013** fix(gateway): bound sessions.usage all-agent session discovery concurrency. Thanks @masatohoshino.
- **PR #102825** fix(gateway): parse image data URLs linearly. Related #102393. Thanks @wangyan2026 and @yetval.
- **PR #102426** fix: redact diagnostic config fields with schema hints [AI]. Thanks @pgondhi987.
- **PR #101000** fix(plugins): bound hosted catalog feed reads on non-streaming responses. Thanks @hugenshen and @cursoragent.
- **PR #104625** fix(gateway): demote startup close transport races.
- **PR #104540** fix(sessions): prevent corrupted Unicode in persisted tool details. Thanks @zhangguiping-xydt.
- **PR #104734** fix(models): redact synthetic auth credentials from models status --json. Related #104713. Thanks @ObliviateRickLin and @davefano.
- **PR #104811** fix(gateway): keep channels stopped during shutdown and reload. Thanks @ShiroKSH.
- **PR #102881** fix(gateway): reject disallowed browser Origin before accepting auth.mode=none on HTTP (#102834). Thanks @wangyan2026 and @yetval.
- **PR #101469** fix(hooks): bound HOOK.md reads during hook install validation. Thanks @cxbAsDev.
- **PR #103562** fix(discord): retry reply session init conflicts to prevent silent message loss. Related #102381. Thanks @cxbAsDev and @zuofengboss.
- **PR #113700** fix: recover outbound messages after the correct retry delay.
- **PR #113703** fix: preserve distinct imported CLI session messages.
- **PR #113697** fix: repair tool-call transcripts when plugins block results.
- **PR #114134** fix: require approval for escaped newline shell words [AI]. Thanks @pgondhi987.
- **PR #102331** fix(google-meet): keep Meet sessions on the agent that joined them. Thanks @steipete-oai.
- **PR #101630** fix(mattermost): truncate inbound preview on code-point boundary. Thanks @hugenshen and @cursoragent.
- **PR #101736** fix(agents): keep steering metadata truncation UTF-16 safe. Thanks @chengzhichao-xydt and @Alix-007.
- **PR #101617** fix(discord): prevent stale gateway error listeners after restart. Thanks @zhangguiping-xydt.
- **PR #102246** fix(discord): keep gateway close reasons UTF-16 safe. Thanks @mushuiyu886.
- **PR #102332** fix(agents): keep truncation surrogate-safe. Thanks @QiuYuang.
- **PR #101815** fix(discord): split encoded video URLs from captions. Thanks @VectorPeak.
- **PR #102090** fix(gateway): keep session title and preview text truncation UTF-16 safe. Thanks @wm0018.
- **PR #101976** fix(acp): keep background-task summaries UTF-16 safe at truncation boundaries. Thanks @MoerAI.
- **PR #102378** fix(acp): keep session update text truncation surrogate-safe. Thanks @zw-xysk.
- **PR #102085** fix(agents): keep chunkString and buildResumeMessage truncation UTF-16 safe. Thanks @wm0018.
- **PR #102105** fix(google-meet): handle stdout/stderr stream errors in node host. Thanks @wangmiao0668000666.
- **PR #102157** fix(google-meet): bound Calendar v3 events.list request deadline. Thanks @wangmiao0668000666.
- **PR #102395** fix(matrix): keep HTTP error and tool-progress truncations UTF-16 safe. Thanks @wangmiao0668000666.
- **PR #102266** fix(security): keep channel-metadata and install-policy truncation surrogate-safe. Thanks @zw-xysk.
- **PR #101781** fix(telegram): keep DM topic auto-rename user message UTF-16 safe. Thanks @hugenshen and @cursoragent.
- **PR #101934** fix: keep task title truncation UTF-16 safe in restart/diagnostic output. Thanks @wm0018.
- **PR #102407** fix(channels): keep inbound log previews UTF-16 safe. Thanks @miorbnli.
- **PR #102466** fix(agents): keep tool-result context guard truncation UTF-16 safe. Thanks @chengzhichao-xydt.
- **PR #102464** fix(tool-policy-audit): use truncateUtf16Safe for audit field truncation. Thanks @lsr911.
- **PR #102467** fix(native-hook-relay): use truncateUtf16Safe for hook display text truncation. Thanks @lsr911.
- **PR #102470** fix(gateway): keep chat history display text truncation surrogate-safe. Thanks @zw-xysk.
- **PR #102483** fix(auto-reply,infra): keep startup context and heartbeat event text UTF-16 safe. Thanks @wings1029.
- **PR #102478** fix(memory): snippets split emoji when truncated. Thanks @qingminglong.
- **PR #101649** fix(zalouser): clear probe timeout after auth resolves. Thanks @Alix-007.
- **PR #101506** fix(browser): bound Chrome launch stderr diagnostics. Thanks @mikasa0818.
- **PR #102484** fix(gateway): keep live chat assistant buffer tail truncation UTF-16 safe. Thanks @wings1029.
- **PR #102477** fix(talk): use truncateUtf16Safe for LLM-prompt-facing text truncation. Thanks @xydt-tanshanshan.
- **PR #102496** fix(agents): keep provider error detail truncation UTF-16 safe. Thanks @chengzhichao-xydt.
- **PR #102500** fix(mcp-runtime): use truncateUtf16Safe for MCP metadata text truncation. Thanks @lsr911.
- **PR #102515** fix(compaction): use truncateUtf16Safe for post-compaction context text. Thanks @lsr911.
- **PR #102525** fix(discord): use truncateUtf16Safe for deploy error body truncation. Thanks @lsr911.
- **PR #102527** fix(oc-path): use truncateUtf16Safe for error message path truncation. Thanks @lsr911.
- **PR #102536** fix(nodes): restore Mac app allowlist execution. Related #102528.
- **PR #102149** fix(google-meet): bound Meet v2 + Drive files.export request deadlines. Thanks @wangmiao0668000666.
- **PR #102524** fix(memory-core): use truncateUtf16Safe for diary context truncation. Thanks @lsr911.
- **PR #102389** fix(web-fetch): report exact-limit response bodies as complete, not truncated [AI-assisted]. Related #101837. Thanks @Supsumintong and @qingminglong.
- **PR #101832** fix: keep Gemini thinking disabled after clamp. Related #101785. Thanks @MonkeyLeeT and @aniruddhaadak80.
- **PR #104049** fix: installer removes temporary files after failed commands.
- **PR #97828** fix(telegram): clear reasoning preview before forceNewMessage rotation (#80862). Thanks @ly-wang19 and @kyle20026.
- **PR #102859** fix(nextcloud-talk): add timeout to room info lookup. Thanks @Alix-007 and @Leon-SK668.
- **PR #102862** fix(minimax): add timeouts to OAuth HTTP requests. Thanks @Alix-007 and @Leon-SK668.
- **PR #103547** fix(voice-call): redact phone numbers in event logs via subsystem logger. Thanks @xialonglee.
- **PR #103555** fix(voice-call): consolidate webhook logs on the injected plugin logger and assert transcript privacy boundary. Thanks @xialonglee.
- **PR #104229** fix: live updater builds complete runtime assets.
- **PR #104306** fix: start local embedding services on demand. Related #104214. Thanks @vincentkoc.
- **PR #102965** fix(inworld): add timeout to voices list request. Thanks @chengzhichao-xydt.
- **PR #103752** fix(google-meet): validate chrome node policy params. Thanks @Leon-SK668.
- **PR #103728** fix(memory): skip blank search provider bootstrap. Thanks @Leon-SK668 and @vincentkoc.
- **PR #104426** fix(commitments): isolate extraction batches by agent. Related #104425.
- **PR #103731** fix(plugins): honor empty document extractor scope. Thanks @Leon-SK668 and @vincentkoc.
- **PR #104263** fix(gateway): cap history when numeric limit is huge. Thanks @qingminglong.
- **PR #104156** fix(agents): truncate multibyte middleware details at byte limit. Thanks @qingminglong.
- **PR #104173** fix(onboard): wait for gateway warnings before installing service. Thanks @qingminglong.
- **PR #104110** fix(agents): cancel pending bundle LSP requests when the agent stops. Thanks @zhangguiping-xydt and @vincentkoc.
- **PR #104404** fix(agents): preserve UTF-16 boundaries in context pruning. Thanks @mushuiyu886 and @vincentkoc.
- **PR #104440** fix(browser): reject hex click coordinates in act route. Thanks @qingminglong.
- **PR #104260** fix(voice-call): use sliceUtf16Safe for bounded child output tail cap. Thanks @hugenshen.
- **PR #104151** fix(file-transfer): keep bounded stderr tail UTF-16 safe. Thanks @hugenshen.
- **PR #104148** fix(agents): keep scp stderr tail UTF-16 safe. Thanks @hugenshen.
- **PR #104414** fix(nodes): reject malformed media payloads when base64 is invalid. Thanks @qingminglong.
- **PR #104556** fix(file-transfer): reject oversized inline file writes before node dispatch. Thanks @qingminglong.
- **PR #102974** fix(google): stream Gemini batch JSONL output instead of res.text(). Thanks @hugenshen.
- **PR #104610** fix(gateway): demote expected startup socket aborts.
- **PR #104301** fix(utils): use UTF-16 safe truncation for long URL timeout logs. Thanks @whiteyzy.
- **PR #103445** fix(slack): preserve unrelated action rows after interactions. Thanks @zw-xysk and @cursoragent.
- **PR #104677** fix(browser): run mutation guard before JSON parsing. Thanks @Leon-SK668.
- **PR #104423** fix(agents): preserve UTF-16 boundaries in bootstrap context. Thanks @mushuiyu886.
- **PR #104560** fix(write): report actual UTF-8 byte count in success message. Thanks @wings1029.
- **PR #104454** fix(attempt-execution): use truncateUtf16Safe for summary text truncation. Thanks @chenyangjun-xy.
- **PR #104715** fix(browser): apply profile proxy policy to tab list redaction. Thanks @Leon-SK668.
- **PR #104470** fix(ai): reject non-finite tool schema numbers. Related #104469. Thanks @VectorPeak.
- **PR #104498** fix(feishu): avoid logging raw duplicate card-action tokens. Thanks @VectorPeak.
- **PR #113259** fix(gateway): reject incomplete usage date ranges. Thanks @lzw112.
- **PR #112855** fix: doctor preserves locks owned by exact gateway process title. Related #112854. Thanks @fr-meyer.
- **PR #113609** fix(gateway): return 404 for disabled OpenAI API routes.
- **PR #113683** fix: route skill verification through the managed proxy.
- **PR #113685** fix: preserve child process signal exit codes.
- **PR #113106** fix(xiaomi): reject malformed base64 audio in TTS responses. Thanks @zenglingbiao.
- **PR #113109** fix(volcengine): reject malformed base64 audio in TTS responses. Thanks @zenglingbiao.
- **PR #113790** fix: recognize Bash completion installed in login profiles.
- **PR #113897** fix(models): keep empty model lists machine-readable.
- **PR #114051** fix(agents): prevent session stalls under concurrent load.
- **PR #114061** fix(gateway): prevent missing assets on nested dashboard routes.
- **PR #114280** fix(gateway): keep failed account stops from stranding siblings. Thanks @yangxiansheng.
- **PR #114325** fix: report unavailable system Node versions accurately. Thanks @RomneyDa.
- **PR #93516** fix(matrix): reverse-proxy path support for Matrix homeserver URLs. Related #102885. Thanks @Papilionidae.
- **PR #114450** fix(zalo): deliver text when optional media is blank. Related #105078. Thanks @VectorPeak.
- **PR #114512** fix(cron): avoid false agent timeouts while execution lanes are busy. Thanks @hugin-bot.
- **PR #112352** fix(model): report the model change before the thinking remap it triggers. Thanks @kesava500.
- **PR #114540** fix(cron): prevent local model preflight socket leaks. Thanks @hugenshen.
- **PR #114500** fix(auto-reply): normalize newline-delimited silent tokens. Related #103735. Thanks @Maless88.
- **PR #97024** fix(session-delivery): propagate non-ENOENT retry persistence failures. Thanks @0xghost42.
- **PR #114076** fix: debug proxy respects response backpressure (issue #105701). Thanks @qingminglong and @aniruddhaadak80.
- **PR #128799** fix(ai): preserve root properties when flattening root-level anyOf tool schemas. Related #128743. Thanks @LiuwqGit and @Patrick-Erichsen and @schaba21.
- **PR #131546** fix(copilot): own BYOK response stream lifecycles. Related #131544.
- **PR #131195** fix(line): /card splits an action, list item, or receipt entry at a comma inside its data. Related #129349. Thanks @edenfunf and @obviyus.
- **PR #131783** fix(agents): keep dangling symlinks visible in ls listings.
- **PR #132014** fix(line): give the agent the selection a postback carries. Related #132000. Thanks @edenfunf and @obviyus.
- **PR #102636** fix(handoff): skip orchestrator framing for solo agents without subagents. Related #102628. Thanks @Gary-Jia-new and @altaywtf and @Joakim-Emanuelson.
- **PR #132545** fix(plugins): keep compiled plugin aliases on the built runtime.
- **PR #102160** fix(agents): run-lifecycle reliability โ bounded release, evidence-based liveness, watchdog semantics. Related #85826, #96168. Thanks @obviyus and @kiagentkronos-cell and @alvelda.
## 2026.7.34
### Highlights
- **Current model families:** add GPT-6 Astra, GPT Image 2.5 Flare/Sunburst, Muse Spark 1.3, Claude Opus 5, Gemini 3.6/3.7 Flash, Grok 4.6, Kimi K3, GLM 5.3, Qwen 3.8, DeepSeek V4 Flash Vision Experimental, and Nemotron 3.5 Lightning support across the provider catalogs and runtime policies that ship on extended stable. Fable 5.1 remains deferred because its prefix-bound reasoning contract requires the newer append-only replay lifecycle.
- **GPT-5.6 compatibility:** retain and verify the complete GPT-5.6 Sol, Terra, and Luna family across direct OpenAI and Codex OAuth routing, reasoning controls, pricing, context, and vision metadata.
### Fixes
- **Installer recovery:** preserve the original npm recovery diagnostics when an install repair attempt also fails, so operators see the actionable package-manager error instead of a secondary cleanup failure.
### Complete contribution record
This extended-stable candidate was selected from a complete 11,198-commit audit after `v2026.7.33`. It adapts the approved provider and installer slices to the 7.33 SDK and configuration surface without importing later architectural refactors.
### Release verification
- npm package: https://www.npmjs.com/package/openclaw/v/2026.7.35
- registry tarball: https://registry.npmjs.org/openclaw/-/openclaw-2026.7.35.tgz
- integrity: `sha512-2ZzpVrK4sOzKLRyS5S6rHjkXQS11FHe361FQSvUy8CBBG0TkzZUisBCmCZ0PLfK8Hpym2ZPHHpknZQaD4WONGQ==`
- release SHA: `aa94808cb05668cdf1c10bc8f034a8176deba483`
- full release validation: https://github.com/openclaw/openclaw/actions/runs/35574936025/attempts/2
- plugin npm publication: https://github.com/openclaw/openclaw/actions/runs/35595949221
- OpenClaw npm publication: https://github.com/openclaw/openclaw/actions/runs/35597355437 โ npm accepted publication; the job failed only because bounded registry readback expired before propagation completed.
- Docker publication recovery: https://github.com/openclaw/openclaw/actions/runs/35598889849
- Manual finalization: owner-approved after independent verification of npm signatures and provenance, the `extended-stable` selector, all 70 plugin readbacks, Docker digests and attestations, and npm/OCM/Gateway/container smoke tests.
Weekly digest: every breaking change, retirement and price change across 20+ coding agents, one email.
Form not loading? Subscribe here.