npm openclaw 2026.7.35
openclaw 2026.7.35

one day ago

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 current latest version of OpenClaw is 2026.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..4262532 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

Don't miss a new openclaw release

NewReleases is sending notifications on new releases.