Get started
v2026.8.1: Plugins and Integrations
Admins can now browse, search, install, enable, disable, and remove plugins from the Control UI, while the same hub can install curated ClawHub skills and add vetted MCP connectors. Managed installs pause for source review where needed, roll failed changes back to a retryable state, and repair stale or incomplete records without throwing away healthy configuration. Plugin updates also keep work already in flight on the version it started with, then move later work to the replacement only after it loads successfully.
ClawHub installs carry the selected publisher, version, scan state, and source across desktop and mobile, MCP servers recover independently when a connection or catalog changes, and plugin authors get typed Gateway and SDK contracts for building against OpenClaw. Vendor-neutral Agent Plugins can bring skills and supported MCP servers together with scoped storage, giving integrations a clearer path from package to running system.
Installing and managing plugins
Admins can now browse and search installed plugins in the Control UI, see what each one provides, enable or disable it, remove external plugins, install curated ClawHub results, and add vetted MCP connectors. Read-only operators can inspect the same inventory, while advanced sources, updates, and configuration that the web form cannot safely represent remain available through the command line.
The first install from an arbitrary package, repository, archive, local path, or marketplace source stops for explicit review. A plugin that still needs setup can stay disabled, and a failed managed install rolls partial changes back so it can be retried normally. Repair can recover stale or incomplete install generations while preserving healthy configuration, with integrity or version drift still requiring review.
Plugin lists and diagnostics now distinguish disabled plugins, discovery or validation failures, active runtime failures, and background-service failures. Use plugins doctor for local discovery and configuration checks, and openclaw health for the plugin and service state of the running system. Some installs and removals still require a restart before the change becomes active.
Sources and complete change list
Improvements
- Require acknowledgement for arbitrary plugin sources #102197
- Manage plugins and MCP connectors in the Control UI #103176
- Let Codex turns use approved workspace-directory plugins #104188
- Put plugin controls directly on cards and rows #106040
- Show plugin catalog artwork in Control UI #109510
- Add reviewed acknowledgement for install-policy warnings #116489
- Speed up every
openclaw plugins listform #117900 - Make configured CLI help and status load much faster #124562
- Stabilize Plugins hub navigation and controls #126061
- Use trusted hosted metadata in plugin listings #109629
- Order Featured plugins by recency #110273
- Clarify Plugins navigation and align Settings controls #110482
- Speed up plugin listings with the current metadata snapshot #115353
- Speed up hook status commands through the Gateway #118288
- Speed up Doctor plugin contract checks #120811
- Speed up cold Telegram channel setup #122955
- refactor(plugins): separate consent mutation from inventory #131146
- perf(plugins): keep state-db write machinery out of metadata read paths #131417
- Align plugin filter styling #106168
- Clarify MXC sandbox settings and warn on outbound network access #110256
- Add a canonical Plugins Discover URL #115587
- Speed plugin doctor and setup loading #120876
- Remove retired ACPX configuration keys #120937
- Defer rendering of offscreen plugin rows #125585
- Add troubleshooting steps to plugin compatibility warnings #94019
Bug fixes
- Block Git option injection in plugin and skill installs #102398
- Reduce plugin listing startup memory #103132
- Preserve healthy plugins when npm metadata checks fail #107063
- Recover managed npm plugins from incomplete lock metadata #107294
- Recover plugin lifecycle commands from stale managed installs #107691
- Load the active managed plugin generation after upgrades #111141
- Serialize plugin lifecycle changes and preserve setup-required installs #112763
- Report all executable calls in plugin security scans #116222
- Preserve selected-agent workspace plugins in management views #117265
- Preserve plugin install records during recovery #121045
- Keep multi-entry plugin packages consistent across their lifecycle #121174
- Authorize plugins from discovered Codex marketplaces #122389
- Reject blank skill credential values #108848
- Keep Control's Featured plugins aligned with trusted ClawHub curation #109418
- Report unreadable plugin manifests as permission failures #110200
- Make root and plugin CLI help exit cleanly #111322
- Honor configured plugin load paths during Doctor repair #113200
- Preserve plugin settings across compatibility IDs #114521
- Enforce supported plugin kinds before slot selection #114537
- Load the replacement npm plugin after reinstall #114713
- Keep valid plugins from being quarantined by stale npm metadata #115610
- Report corrupt curated marketplaces during Codex migration #115865
- Recover plugin installs from pnpm-only override syntax #116245
- Preserve Skills credentials and order configuration updates #116749
- Show actionable warnings in plugins doctor #117357
- Refresh the running Gateway after marketplace updates #117724
- Remove disabled plugins' owned channel configuration #118127
- Plugin updates preserve index policy and rollback safely #119228
- Return safe plugin-install warnings to administrators #120783
- Restore plugin configuration labels from manifests #121329
- Fix bundled plugin inventory and Talk voice configuration #121354
- fix(plugins): allow install when outgoing channel schema disagrees #122984
- Preserve managed ownership for deduplicated bundled plugins #123063
- Keep plugin inventory available without a system owner #123378
- Preserve newer-database errors during plugin inspection #125493
- fix(plugins): list MXC in the offline marketplace #126211
- Recover plugin catalog after transient startup failures #126815
- fix(ui): retire stale plugin lifecycle feedback #127273
- fix(plugins): report missing manifest instead of misleading id mismatch on install #128527
- fix(cli): render hooks report JSON failures #128641
- fix(cli): preserve active target in plugin install hints #129283
- fix(plugins): roll back managed npm install state on thrown failures #130884
- fix(plugins): refuse git installs onto an existing managed checkout #131175
- fix(plugins): avoid duplicate manifest reads during status #131334
- fix(cli): avoid repeated plugin preparation at startup #131503
- fix(plugins): preserve read errors before registry recovery #131521
- Refresh stale plugin registry for newly added extensions #96080
- Update plugin records without rewriting user config #98422
- Bound plugin manifest reads during deep security audits #101773
- Find global plugins correctly when home variables are blank #102413
- Prevent plugin update and uninstall from misreading prototype-named records #102872
- Honor Doctor's current install policy during plugin repair #103808
- Let Control UI admins enable installed plugins with restrictive allowlists #106318
- Restore plugin-source validation before approval #107768
- Reject blank required hook environment values #108928
- Allow CLI plugin uninstall to shrink configuration #110991
- Correct optional-plugin CLI enable guidance #112019
- Omit unobserved harness IDs from plugin list JSON #112235
- Find Control UI plugins by npm package name #113933
- Explain silent npm plugin-install failures #114215
- Report missing plugin files without false boundary warnings #115053
- Stop repeated bundledDiscovery migration notices on beta #115208
- Report eventless hooks as not ready #116083
- Show eventless hook status consistently #116127
- Report missing plugin dependencies with actionable errors #117029
- Preserve icon metadata for authenticated HEAD requests #117079
- Clarify what plugins doctor actually checks #117160
- Keep marketplace JSON output parseable #117307
- Reject duplicate hook names before package installation #117439
- Report manifest-declared tools in cold plugin inventory #117461
- fix(plugins): report registered inspection capabilities #117518
- Return an error when plugin policy blocks enablement #117536
- Explain filtered installed plugins in CLI output #117556
- Surface validated plugin warnings in plugins doctor #118526
- Remove stale plugin load paths during uninstall #118930
- Speed up status checks for missing channel plugins #119203
- Return 404 for malformed plugin icon routes #119559
- Preserve missing-icon metadata on HEAD requests #120133
- Stop Doctor from treating channel metadata as plugins #120891
- Prevent duplicate Skills page preload requests #123705
- Show required plugin setup after chat installs #123727
- Return a failing status when skills info misses #123997
- Surface plugin cleanup, setup, and CLI loading failures #124570
- Let hook toggles select an agent workspace #124761
- Report stale plugin registries consistently #125048
- Warn when installed plugin metadata cannot be read #125117
- Show plugin policy refusals without crash framing #125304
- Stop fresh installs from showing a false plugin-registry repair warning #126799
- Reject unknown agent IDs in Skills commands #126954
- Return JSON errors from failed skills commands #127016
- fix(cli): give hooks enable/disable failures a next step #127370
- fix(cli): render plugin search JSON failures #127679
- fix(plugins): normalize correction versions in drift repair commands #127800
- fix(plugins): surface load errors in the default plugin list #128849
- fix(plugins): inspection loads the wrong plugin when names collide #129079
- fix(plugins): doctor reports supported hook-only plugins as unhealthy #129083
- fix(plugins): list silently hides discovery and registry failures #129091
- fix(plugins): normal disablement is reported as an error #129158
- fix(health): activated plugin failures are silently omitted #129161
- fix(cli): keep plugin update recovery hints inside the active container #129231
- fix(plugins): keep healthy CLI commands when another plugin fails #129248
- fix: return JSON when marketplace listing fails #129263
- fix(plugins): show missing dependencies as errors in Plugins Hub #129480
- fix(plugins): avoid repeated command names in plugin inspection #130339
- fix(plugins): report registerFull routes in runtime inspection #130904
- fix: inspect exact hook names before matching key aliases #131081
- fix(ui): align plugin hub header and tabs with content #131239
- fix(ui): shrink oversized Plugins trash icons #131280
- fix(plugins): hide uninstalled TGZ plugins from inventory #131880
- fix(plugins): resolve CLI plugin metadata once per invocation #131884
- fix(plugins): show package provenance in CLI and chat inspection #133140
Documentation
ClawHub, Claws, and sharing skills
ClawHub now carries the selected publisher, version, scan result, and exact source through review and installation, including when two skills share a name. Before a skill or plugin is installed, its ClawHub Security Audit shows the exact release, a Safe, Review, or Blocked result, ClawHub's overview, and the audit link. A Review result gives you that context and continues through the ordinary confirmation instead of a second risk gate, while a Blocked release still cannot be installed. Mac, iPhone, iPad, and Android users use the same publisher, version, and audit contract, while external skills.sh results keep their pinned source identity and are clearly marked as outside ClawHub scanning.
Skill updates protect local and concurrent edits unless an operator explicitly forces the overwrite. Direct downloads verify a declared digest and inspect the complete archive within the supported size limit, and older tracked installs without fingerprints need one forced update to establish that baseline.
Experimental Claws can package an agent with managed workspace files, skills, plugins, MCP servers, and scheduled work. You preview the exact plan before applying it, updates and removal act on resources the Claw owns, and shared resources remain in place unless you deliberately choose conflict-aware cleanup. Recreating a Claw with the same ID now waits until the old Claw's cleanup is complete, so interrupted removal remains fenced and retryable instead of deleting replacement state. Claws remain behind OPENCLAW_EXPERIMENTAL_CLAWS=1, uncertain outside actions can leave visible partial state that needs a fresh plan, and the package does not carry credentials, providers, bindings, arbitrary local paths, executable configuration, sessions, or host state it does not own.
Sources and complete change list
Improvements
- Preview experimental Claw agent packages safely #101328
- Add consented Claw agent installation #101755
- Manage skills and install from ClawHub on Android #101864
- Create Claw-managed workspace files #101973
- Bind and expire signed ClawHub catalog trust #101981
- Install exact ClawHub packages for experimental Claws #102228
- Inspect and safely remove experimental Claw agents #102296
- Export installed agents as portable Claw packages #102306
- Let experimental Claws manage MCP server ownership safely #102406
- Add experimental read-only Claw lifecycle diagnostics to Doctor #102427
- Preview grouped Claw agent updates safely #102959
- Apply consent-bound updates to installed Claws #102982
- Make Android skill management easier to scan and review #105592
- Add native Skills management across iOS and macOS #105814
- Add human-authored CLAW.md manifests #111391
- Install external skills.sh catalog references #112751
- Separate portable Claw identity from OpenClaw policy #112773
- Let CLAW.md carry a portable agent prompt #113454
- Add portable OpenClaw profiles and native Claw bootstrap #115237
- Export reviewed first-run instructions with a Claw package #115371
- Add plugin requirements to schema-v1 Claw profiles #115962
- Add an experimental local Claw authoring lifecycle #117037
- Load repository skills alongside agent workspace skills #125786
- feat(clawhub): show security audit before installs #131233
- Verify signed marketplace feeds during refresh and snapshot reuse #98338
- Move skill-upload staging into SQLite #108346
- Show ClawHub skill icons in Control UI #114152
- Configure trust keys for signed marketplace feeds #98316
- Expose signed marketplace feed trust in CLI output #98350
- Add Bear Notes skill through the grizzly CLI #120
Bug fixes
- Retry transient ClawHub package reads #105388
- fix(skills): stop skills update from destroying local skill changes #118190
- Preserve external ClawHub skill identity through install #124250
- fix(skills): reject altered download archives before extraction #129486
- Honor standard ClawHub plugin API comparators #106889
- Normalize agent git package install identities #107637
- Preserve signed-feed rollback protection across key rotation #108342
- Reject malformed timestamps in signed plugin catalogs #109742
- Accept standard DSSE plugin catalog feeds #110037
- Show ClawHub security verdicts on the first Skills load #110166
- Install the right recommended skill and keep failures retryable #111518
- Show and install alternative skill CLI requirements #113767
- Harden experimental Claw add and remove lifecycle #114670
- Report missing plugin credentials in Claw readiness checks #114899
- Restore consent for skill dependency installs #116644
- Preserve the selected ClawHub publisher through review and install #121697
- Recover Claw lifecycle ownership safely #123254
- Reject incomplete tar listings before skill extraction #125406
- fix(claws): unchanged owned skills no longer block updates #126479
- fix(cli): reject ClawHub-only flags for source skills #128162
- fix(claws): keep deletion fence through cleanup #128500
- fix(skills): bound installer downloads #129630
- fix(native): retire unsupported ClawHub acknowledgement retries #131979
- fix(android): stop offering obsolete ClawHub acknowledgement retries #132016
- Restore Fish Audio publishing through ClawHub 05e3ce1
- Preserve Unicode when migrating Claude command descriptions #102616
- Keep ClawHub promotions refresh within its timeout #105411
- Ignore malformed ClawHub Retry-After timing #105479
- Link globally installed ClawHub skills through the managed lockfile #106479
- Reject impossible dates in ClawHub promotions feeds #106942
- Warn when ClawHub skill verification fails #107143
- Keep emoji intact in ClawHub release errors #108172
- Ignore malformed ClawHub rate-limit reset hints #108815
- Show publishers for duplicate ClawHub skill results #110903
- Reject malformed UTF-8 in ClawHub responses #111164
- Keep ClawHub skill search results on one terminal line #111441
- Reject malformed UTF-8 in hosted plugin catalogs #111768
- Stop doctor from flagging current OCM skill paths as stale #112236
- Clarify unverified plugin trust guidance #112249
- Count successful ClawHub plugin installs #113133
- Route skill verification through managed proxies #113683
- Preserve startup safeguards for version-pinned skills #114924
- Keep Skills command hints on the selected instance #117555
- Remove owner-qualified ClawHub skills safely #119606
- Migrate the Fish Audio plugin to its canonical identity #119900
- Keep Skills verification errors machine-readable #123761
- Keep Claws update JSON output parseable #124130
- Give missing ClawHub skills actionable errors #124764
- Make missing-skill verification errors actionable #125317
- Keep Claw project artifacts deterministic across runtimes #125801
- Fix ClawHub prerelease compatibility checks #126020
- Point missing ClawHub skills to search #126987
- Clean up failed ClawHub archive staging #127065
- fix(plugins): include required ClawHub scaffold metadata #129712
- fix(plugins): report ClawHub tags as floating install sources #130917
Documentation
- Add Buzz to the generated plugin inventory #114875
Loading and updating plugins
Plugin updates now preserve one runtime generation for work already underway. Accepted messages, completions, and workers finish with the plugin version they started with, and later work moves to the replacement only after it has loaded successfully. If a live reload fails, OpenClaw restores the last active commands, providers, hooks, memory, and other registrations.
OpenClaw also reuses prepared plugin metadata and runtimes across turns instead of rebuilding the same setup each time, while health shows failed activation, cleanup, or background services directly. A known plugin-owned failure can be quarantined without taking healthy plugins or all of OpenClaw offline, while invalid configuration, failed migrations, ambiguous ownership, and unverifiable state still stop activation.
Context-engine plugins remain selected on fresh turns and can advance durable state through long sessions by applying limits to the accepted turn instead of all accumulated history. Existing v1 engines keep their full-history contract until they adopt the newer interface, and a single accepted turn above 8 MiB or 20,000 events still stops.
Sources and complete change list
Improvements
- Reduce inactive startup cost from the bundled Ollama plugin #119745
- Reuse plugin preparation across warm Gateway turns #105646
- Add durable replay guards for plugin ingress side effects #110846
- Reuse plugin channel discovery across repeated catalog reads #114324
- Reuse prepared plugin metadata during loading #114807
- Reduce plugin-heavy Gateway startup time and memory #115020
- Remove repeated plugin fingerprint work from gateway turns #118334
- Reuse prepared plugin context during agent tool construction #118398
- Defer optional xAI capability runtimes until first use #119374
- Lazy-load the Anthropic session catalog #119619
- Reuse unchanged sandbox skill snapshots #121379
- perf(plugins): reuse lifecycle metadata on secrets hot paths #126629
- Reuse plugin metadata during skill watcher refresh #127088
- perf(plugins): unify progressive plugin cache ownership #131442
- perf(plugins): avoid logging imports during provider discovery #132744
- Avoid cold plugin loading in routing and status paths #109348
- Stop plugin metadata lookups from polling disk #114289
- Avoid repeated lookups for missing plugin facades #124664
- perf(plugins): reuse one plugin metadata snapshot per CLI process #129181
- perf(agents): avoid unused extension contexts during streaming #130158
Bug fixes
- Prevent Codex plugin discovery from stalling agent turns #108311
- Keep healthy skills available when one secret fails #109791
- Keep the Gateway running when one configured plugin is broken #110239
- Preserve bundled plugin discovery and scoped activation #114547
- Reduce repeated plugin registry path scans #115783
- Keep installed plugins available during one-shot agent runs #116336
- Restore prepared-runtime reuse for configured agent turns #117768
- Unify plugin webhook route ownership and startup failure handling #118203
- fix(plugins): isolate malformed manifest schemas from plugin load and config validation #119825
- Preserve multi-entry plugins and linked install sources #120026
- Stop repeated plugin scans from freezing the gateway #120344
- Keep configured context engines active on fresh turns #121461
- Reduce Gateway stalls from repeated plugin metadata discovery #124844
- Keep profiled plugin tools available across agent runtime paths #124947
- Stop plugin metadata rescans from stalling Gateway #125596
- Isolate plugin runtime ownership across Gateway instances #125821
- Stop terminal context-engine rows from degrading later turns #126593
- fix: plugin conversation bindings fail for opaque targets #132733
- fix: resume sessions with trusted runtime plugins absent at startup #132804
- fix(channels): honor trusted plugin activation contracts (#114492) 9b77c06
- Preserve built plugins across prepared Gateway runtimes ef91c81
- Stop repeated scans for unavailable channel plugins #100377
- Prevent recursive prompt-build hook dispatch #102554
- Keep active plugins working when a hot reload fails #103812
- Clean up scheduler jobs after failed plugin registration #106890
- Fully restore plugin state after registration failures #108084
- Keep stateful plugin hooks and tools on the same registration #108110
- Preserve Device Pair notifications during slow Telegram sends #108164
- Prevent duplicate bundled plugin instances on source installs #108508
- Prevent ACPX process cleanup from hanging #109146
- Bound reply-hook usage metadata during bursts #109610
- Release abort listeners when channel runtime contexts are disposed #109708
- Prevent unresponsive plugin middleware from freezing agent runs #110731
- Load configured standalone plugin files without manifests #111515
- Refresh provider metadata when plugins reload #112699
- Release shared state leases when CLI processes exit #113839
- Isolate Gateway plugin state across lifecycle and agent runs #114476
- Preserve ACPX process ownership across reconnects #115247
- Avoid plugin metadata stalls during agent turns #115426
- Bound plugin hook waits and retire stale registrations #115695
- Publish the plugin-activated Gateway config before model owners #115747
- Keep Codex app inventory fresh across shared runtimes #115866
- Keep plugin registry state on the correct database #116427
- Clean up failed plugin service starts exactly once #116804
- Refresh channel metadata after plugin lifecycle changes #117005
- Correct plugin diagnostics and stabilize discovery order #117025
- Keep deferred plugin transforms in a durable cache #117355
- Keep persisted plugin registry snapshots consistent #117561
- Return retryable 503s until plugin routes are ready #117852
- Contain rejected synchronous plugin hooks #117988
- Release llama.cpp model memory when the plugin stops #119238
- Load installed agent harnesses for local agent exec #119855
- Prevent stopped ACPX runtimes from returning #120029
- Stop false legacy context-engine degradation warnings #120722
- Refresh ACPX skills when runtime availability changes #121181
- fix(beam): retry failed terminal mirror uploads #121186
- Keep durable context engines advancing in long sessions #121647
- Keep context-engine state advancing in long sessions #122149
- Make plugin setup registration atomic #123506
- Preserve failed-plugin diagnostics without activating capabilities #125046
- Surface plugin service failures in health #125366
- Keep compaction on one prepared plugin generation #125688
- Keep completions and workers on one plugin generation #125761
- Keep one plugin generation through Gateway turns #125990
- Keep agent turns on their admitted plugin generation #126626
- Prevent stale plugin state after Gateway reloads #126627
- Limit Gateway startup runtime loading to active plugins #126703
- Retire executable plugin caches on lifecycle changes #126719
- Reuse prepared plugin metadata when loading execution-workspace skills #126720
- Preserve refreshed plugin extractors after stale load failures #126829
- fix(plugins): bound failed-start service cleanup with replacement stop timeout #126907
- fix(plugins): reload replaced setup modules after lifecycle resets #128110
- fix(agents): prevent reloads from losing queued replies or restoring stale credentials #128138
- fix(plugins): prevent duplicate background services and discovery advertisers #128179
- fix(hooks): reload mutable handlers after restored-mtime edits #128477
- fix(agents): preserve plugin tool termination #128505
- perf(plugins): enforce load-once — default credential-source gate and containment registry reuse #128639
- fix(plugins): keep channels authoritative after activation rollback #129232
- fix(plugins): block retired callbacks from changing run context #129250
- fix(sessions): isolate maintenance from channel plugin resolvers #129490
- fix(plugins): surface invalid background and discovery services #129651
- fix(agents): scope fall-through plugin registry loads to the active runtime registry #130167
- fix(plugins): fail closed when plugin runtime is unavailable during registration #130597
- fix(sandbox): retire plugin backends with registry lifecycle #130662
- fix(plugins): report failed plugin slash commands instead of silently ignoring them #130743
- fix(plugins): keep SecretRef configurations loadable #131310
- fix: gateway startup fails refreshing plugins across workspaces #131936
- fix(plugins): retire loader cache with runtime registrations #132093
- fix(plugins): load source artifacts without losing credential targets #132166
- fix(plugin-sdk): preserve ambient agent resolution #132541
- fix(gateway): stop heap growth across in-process restarts #132933
- fix(channels): resolve registered plugins before agent workspace (#124709) 4f59053
- Finish plugin HTTP responses after route failures #102125
- Preserve Unicode in ACPX Codex error diagnostics #103738
- Cancel pending bundle LSP tools when an agent stops #104110
- Keep plugin run context available after registration #107028
- Ignore TypeScript declaration files during plugin discovery #107994
- Recognize configured plugin dependencies by manifest ID #113691
- Prevent path-only bootstrap files from crashing agent turns #115395
- Refresh bundled plugin artifact locations after metadata updates #117041
- Make plugin verification restart guidance install-neutral #119508
- Keep ACPX handle operations on one session snapshot #120924
- Load configured plugin runtimes for direct agent ingress #121787
- Return HTTP 500 when plugin route dispatch fails #124033
- Stop canceled llm-task calls from returning stale JSON #124673
- Reject cached plugin load failures before activation #126737
- fix(plugins): bound allowlist warning history #127126
- fix(agents): preserve admitted runtime generation for channel turns #127217
- perf(agents): reuse active Gateway plugin generation #127278
- fix(diffs): stop lightweight CLI registration from crashing when runtime.state is unavailable #128360
- fix(plugins): show registered Gateway discovery services during inspection #130267
- fix(plugins): consolidate setup errors and roll back failed channels #131983
- fix(plugins): keep concurrent catalog adoption scoped to each agent #132734
MCP servers and apps
MCP servers can now recover their connection and catalog after late startup, transport loss, a server restart, or a changed tool list without restarting OpenClaw or taking healthy servers down with them. Tool results retain structured data, screenshots, audio, resources, recovery guidance, and real error state. A call that first discovers an expired stateful session still fails once without replay because it may already have changed something.
Local MCP sign-in can finish in the browser, save and verify the credential, and resume a newly started authorization after a process restart. Shared operator sign-in remains the default, while supported HTTP MCP servers can opt into per-person OAuth that keeps each credential attached to the trusted channel, bot account, and sender. Remote and headless operators keep the manual code path, and this first per-person mode does not add private sign-in delivery, automatic turn resumption, or Control UI account management.
MCP Apps remain opt-in and can show supported interactive server interfaces after the required configuration and restart. They extend trust to UI code supplied by the server, reconstructed conversation views stay read-only, and app context enters the next turn as untrusted input. Headless nodes can publish request-response MCP tools into Code Mode, while OAuth, streaming, notifications, sampling, and mobile publication remain outside this first node-hosted version.
Sources and complete change list
Improvements
- Add requester-scoped MCP connections #106359
- Add a consent-gated MCP App messaging bridge and live host context #109807
- Add a ticketed read-only standalone MCP App host #109861
- Enable tools and resources in standalone MCP Apps #110515
- Let interactive MCP Apps provide one-turn model context #111212
- Let native plugins declare MCP Apps #113224
- Share Control UI styles with embedded MCP apps #113464
- Give node MCP servers a typed Code Mode namespace #114876
- Add per-requester OAuth for MCP servers #122166
- Add opt-in sandboxed MCP Apps to Control UI #69039
- Node-hosted tools, MCP servers, and skills #90431
- Lazy-load the MCP Apps chat bridge #106288
- Centralize MCP OAuth identity and resumable login state #122115
- Cache immutable bundled MCP config discovery #79882
Bug fixes
- Redact MCP credentials from shared-chat show output #103396
- Keep MCP server configuration out of group replies #103502
- Bind MCP refresh tokens to their issuer #112032
- Preserve non-text MCP content alongside structured results #115521
- fix(gateway): own standalone MCP App request lifetimes #119388
- Complete MCP OAuth login after browser approval #120431
- Recover node-hosted MCP catalogs and sessions live #125092
- Prevent stale MCP catalogs and silent tool failures #125564
- Mark resolved OpenClaw tool failures as MCP errors #126472
- Clean up stale MCP processes after session reset or deletion #93559
- Make MCP OAuth credentials work in CLI and local Codex runtimes #96120
- Suppress responses for MCP notifications #101730
- Bound stalled MCP OAuth requests with configured timeouts #103704
- Preserve node MCP pairing and disconnect recovery #104745
- Preserve MCP App previews across silent turns and reloads #105728
- Preserve every MCP literal-union action #108054
- Fail closed on malformed MCP App CSP metadata #108883
- Keep shared MCP transport alive after CLI run cleanup #110251
- Let embedded MCP Apps finish cleanup before views close #111124
- Reject malformed UTF-8 in MCP App sandbox policies #111282
- Retry MCP tool catalogs after server recovery #111962
- Keep requester-scoped MCP resolvers across registry changes #112579
- Recover bundled MCP servers after disconnects and repeated timeouts #113916
- Reject the reserved
__proto__MCP server name #116112 - Bound MCP catalog pagination and loading time #116845
- Show timeouts instead of hanging standalone MCP Apps #119276
- Isolate oversized MCP stdout frames instead of crashing the host #119379
- Complete MCP OAuth login through the browser callback #120433
- fix(mcp): preserve client and requester lifecycle ownership #120894
- Reuse valid MCP OAuth sessions during login #122129
- Make Codex MCP approval settings and dead ends actionable #124766
- Explain timed-out Codex MCP approvals #125860
- Preserve recovery guidance in structured MCP tool results #125914
- Retire stale MCP transports and process trees #126101
- Repair MCP channel media, event delivery, and cleanup #126592
- fix(node-host): prevent MCP reconnect storms after outages #128196
- fix(ai): preserve root properties when flattening root-level anyOf tool schemas #128799
- fix(codex): turns using dotted MCP tool names end muted with no reply #128900
- fix: stale dashboard app views render after Gateway replacement #130172
- fix(mcp): keep metadata and cleanup from eagerly loading runtimes #133028
- fix(gateway): preserve standalone MCP app HEAD response metadata (#120905) 6f4b9a2
- Preserve prototype-named fields in MCP tool schemas #102856
- Repair MCP flags stored in a direct included config #103970
- Reject and repair unsupported MCP disabled settings #104495
- Reject hexadecimal MCP timeout options #104633
- Prevent immediate MCP timeouts from oversized timer settings #105769
- Clamp oversized MCP timeouts to Node-safe limits #105784
- Bound concurrent MCP doctor probes #109870
- Reject malformed decoded MCP sandbox policy metadata #110275
- fix(mcp): prevent chunked stdio diagnostics from being corrupted #110652
- Fail MCP setup when initialize times out #111318
- Keep resource-only MCP servers available #115169
- fix(agents): materialize MCP for server-name toolsAllow globs #115277
- Reconnect stateful MCP tools after server restarts #115614
- Preserve Content-Length on MCP App sandbox HEAD responses #118553
- Make MCP doctor honor Windows PATH casing #121595
- fix(cli): merge nested MCP configure and tools patches #124551
- fix(mcp): dedupe blocked stdio env warnings #128102
- fix(mcp): keep add from replacing existing servers #128129
- fix(cli): recognize OAuth authorization headers regardless of casing #129279
- fix(codex): preserve disabled MCP transports #130872
- fix(doctor): ignore disabled MCP servers in warnings #131352
- fix(agents): invalidate advertised MCP catalogs on config changes #131793
- fix(macos): MCP Apps stay inside the dashboard #132096
Building plugins and integrations
Developers building a Gateway client or embedding OpenClaw now have typed protocol schemas, runtime validation, authentication, reconnect, readiness, timeout, and browser or Node entry-point guidance. The Gateway protocol and reference client are prepared as calendar-versioned npm packages and become installable when the release train publishes them.
Plugin authors also get focused contracts for requester-aware hooks, channel setup, CLI backends, bounded provider streams, read-only secret references, and browser meeting adapters. Hook policy remains underneath channel admission, sandboxing, approvals, owner-only tools, and other host policy, and the timeout cleanup for Codex hook relays applies to POSIX hosts rather than Windows.
The contract cleanup removes retired July and August SDK paths and replaces the deactivate alias with gateway_stop, while the beta.5 session-store bridge remains available through October 12, 2026. Clients using the v2026.7.2 beta question, worker, or session-catalog shapes need to move to the renamed and flattened contracts. Custom agents.defaults.cliBackends commands, arguments, environment, aliases, and parsers now belong in a backend plugin whose executable is available to the OpenClaw service.
Sources and complete change list
Improvements
- Publish embedded-run startup phases to diagnostics #107984
- Expose requester identity to plugin tool hooks #111190
- Add session discussions to the Control UI through a plugin provider #111337
- Add channel-owned setup contracts #112176
- Move CLI backend adapters from config into plugins #112539
- Add facts-first media APIs while preserving legacy compatibility #113355
- Add fresh tool-free model completions #114343
- Retire Slack inline reply directives for typed presentation #114738
- Speed up Codex native hook startup #115078
- Retire August Plugin SDK compatibility paths #124416
- Add plugin-owned JSONL parsing for CLI backends #95386
- Keep additive Swift protocol fields source-compatible #103493
- Add a shared Plugin SDK HTML escaping helper #105975
- Add one canonical plugin config merge helper #106919
- Extract a shared meeting-bot runtime and adapter SDK #109755
- Add a reliable session-idle event for extensions #110174
- Add bounded transcript cursors across replacements #110374
- Consolidate channel capabilities and attachment hints #110985
- Clean up gateway protocol contracts before public package publication #111041
- Retire global Plugin SDK provider publication #111426
- Remove expired plugin SDK compatibility surfaces #111451
- Publish the Gateway protocol package to npm #111664
- Prepare the Gateway client for npm publishing #111707
- Expose canonical inbound message identity to before-dispatch hooks #112359
- Share attributed Markdown rendering across native-text channels #112907
- Normalize inbound reply text once for every consumer #113179
- Add a shared Plugin SDK contract for channel DM policy setup #113537
- Forward tool cancellation to plugin hooks #115817
- Move GitHub Copilot OAuth ownership into its provider plugin #118063
- Start new CLI-agent sessions in Gateway terminals #121020
- Retire deprecated Plugin SDK imports and deactivate hook alias #121845
- Add a provider-only video input contract #121887
- Add a canonical Computer Use provider SDK #123509
- Add shared Plugin SDK stream and SecretRef utilities #124835
- Reuse the shared cache for WhatsApp deduplication #104962
- Deprecate the Discord abort-signal helper without breaking imports #109166
- Unify plan-update callbacks on typed steps #109660
- Remove legacy media-placeholder parsing #111891
- Share channel probe timing and error handling #113540
- Add a shared Plugin SDK resolver for messaging approval targets #113568
- Remove the superseded sessions.observer.ask Gateway method #113791
- Unify live provider model projection #113903
- Add a standard raw-event ingress profile #117859
- Share plugin migration and secret-contract helpers #120346
- Move Chutes OAuth refresh into the provider plugin #120840
- Remove unused Gateway RPC and client surfaces #121387
- Retire the legacy context-engine host-parameter default #122434
- Export managed URL ingestion from the focused media SDK #125278
Bug fixes
- Restore official beta plugin upgrades and Repo E2E #105287
- Stop timed-out Codex hook relays from exhausting Linux memory #109446
- Limit Codex hook relays to the tools plugins target #109603
- Keep plugin next-turn injections callable after registration #111131
- Restore published channel plugin compatibility and preserve concurrent install records #113101
- fix(gateway): isolate SDK event streams and preserve reconnect ownership (#116904) b611914
- fix(plugin-sdk): preserve shipped caller contracts e1199b1
- Let plugin tools use supported provider credentials #103852
- fix(cron): abort superseded reconciliation hooks #104368
- Reject noncanonical array indices in local tool schema refs #105922
- Prune deprecated SDK exports and modernize Zalo delivery #106010
- Terminate completed native Codex hook relays #106899
- Keep claiming-hook timeouts registration-owned #107996
- Let reply hooks claim ordinary user turns #108353
- Sanitize malformed URL errors in the Plugin SDK SSRF helper #109729
- Prevent prepared channel-turn lifecycle leaks #110981
- Make ACP help and stdin EOF exit cleanly #111091
- fix(sessions): reject altered visible message cursors #111264
- Move channel setup flags into plugin manifests #112239
- Keep channel config promotion owned by plugins #112293
- Safer manifest-driven provider registration #114381
- Migrate DeepInfra embeddings to the supported plugin contract #114727
- Restore provider stream compatibility exports #115757
- Declare context-engine host parameters explicitly #115872
- Restore the OpenAI Chat response-hook lifecycle #117056
- Preserve setup and agent binding for contract-only channels #117106
- Prevent fractional chunk limits from stalling text delivery #117727
- Stop ACP servers when client handshakes fail #117901
- Consolidate plugin helpers and repair Voice Call and Vault behavior #118509
- Warn when legacy hook registration cannot receive typed events #118601
- Report malformed plugin schema references without crashing #120254
- Keep OpenAI Responses hooks inside request timeouts #121163
- Make external Plugin SDK entrypoints type-compatible #121512
- fix: prevent $-pattern injection in prompt template and approval substitution #123015
- fix(plugins): restore shipped channel compatibility #126003
- fix(sessions): preserve model-run sessions when probe retention is disabled #128023
- fix(agents): treat native hook relay records with a dead pid as absent #128112
- fix(plugin-sdk): read snake_case keys in readBooleanParam #131350
- fix(http): deliver body rejection responses before closing uploads #131724
- Add a Codex loop-relay opt-out for tool-heavy runs #97224
- Complete plugin session-catalog contracts dfa580e
- keep Plugin SDK expect declarations self-contained feff4c7
- Resolve valid local references in large schema arrays #102195
- Honor explicitly empty document extractor scopes #103731
- fix(channels): honor empty catalog docs prefixes #103794
- fix(ai): reject non-finite tool schema numbers #104470
- Preserve deprecated Plugin SDK error-classification exports #104546
- Let plugin authoring finish after its launch directory disappears #106425
- Preserve Unicode text in extension command output #108365
- Let plugin runtime completions request reasoning #108759
- Share channel retry helpers and remove redundant state probes #108903
- Validate constrained plugin configuration schemas #109569
- Show malformed package paths in plugin build errors #109916
- Harden channel turn lifecycle boundaries #110406
- Prevent native hook relay deadline races from failing the CLI #111413
- Preserve zero values in normalized SDK event IDs #113349
- Resolve inbound-claim conversation identity once per hook pair #115491
- Ship TypeScript declarations for documented Plugin SDK imports #116345
- Unify JSON Schema validation across core and Control UI #116622
- Share native command merging across Discord and Slack #120972
- Keep the inbound reply shim until the next SDK major #121922
- Ignore malformed New Session drafts while consolidating coercion helpers #122020
- Report ClickClack media support accurately #126168
- Consolidate media and process runtime helpers #126490
- fix(auto-reply): cap trailing blank lines in chunkByNewline to the chunk limit #127253
- fix(protocol): make chat history cursor types consumable #128018
- fix(mcp): retrieve attachments from older messages #131702
- fix(gateway): accept nullable plugin approval metadata #133112
Documentation
- Correct the beta Plugin SDK session-store compatibility contract #105341
- Add guides for Gateway clients and embedded apps #111726
- Preserve literal names in translated documentation 6beb726
- Preserve exact plugin surface identifiers in reference docs ce07836
- Privatize Mattermost and Microsoft Teams test-only exports #107924
- Publish removal windows for deprecated plugin SDK paths #108035
- Announce Plugin SDK subpath removal and demotion windows #108415
- Update migration guidance for retained Plugin SDK facades #111535
- Link plugin setup deprecations to migration guidance #112692
- Fix the Copilot CLI link in the ACPX setup guide #114057
- Clarify that pairing-request hooks are observation-only #116055
- Clarify which plugin owns inbound message claims #116082
- Document the plugin shutdown drain deadline #118099
- docs(plugins): note the factory tool execute signature #120097
- Clarify when the Codex loop-detection relay is installed #124918
- [AI-assisted] docs(copilot): describe the transcript journal, not the removed dual-write mirror #125599
- Document plugin root CLI commands separately from chat commands #126621
- docs(hooks): clarify command logger storage #128478
- docs(plugins): CLI backend example fails to compile after installation #129646
- docs(hooks): clarify setup and execution contracts #130734
- docs(plugins): clarify installed entrypoint source fallback #131640
- docs(protocol): reconstruct July and August wire history; add deferred-changes section #133063
- Clarify hook-only plugin startup and runtime checks #77629
Maintenance
- Consolidate sibling provider adapters #117822
Plugin Packages and Host Compatibility
OpenClaw can now install vendor-neutral Agent Plugins from directories, archives, or Git sources, load their immediate-child skills and valid stdio, HTTP, or SSE MCP servers, and give them scoped bundle and persistent data paths. The OpenClaw extension can add activation hints, while providers, channels, configuration schemas, and runtime entry points stay outside this portable bundle contract. An invalid MCP entry is skipped without blocking valid siblings.
Cohere, Meta, BytePlus, ComfyUI, OpenCode, Voyage, Vydra, Volcengine, Mistral, NovitaAI, Teams meetings, and Zoom meetings now ship as separately installed official packages. New setups install the relevant package and restart OpenClaw, and an existing enabled setup relocates when the external artifact is available. OpenCode Go remains bundled because its external placeholder was not usable.
Plugin loading now handles the specific npm 10 through 12 metadata and lock behavior, direct and peer OpenClaw dependencies, packed host-runtime imports, and concurrent Node ESM cases that had prevented successful installs from activating. Canvas is now focused on the macOS presenter and session-board A2UI path, with its standalone workspace, eval and snapshot surfaces, native push and reset commands, and iOS, Android, and Linux clients removed. Dashboard and A2UI actions remain explicitly granted and sandboxed.
Sources and complete change list
Improvements
- Add Canvas and A2UI support to the Linux desktop app #107633
- Launch hosted widgets from typed presentation buttons #108927
- Unify show_widget across Control UI and Discord #108983
- Give dashboard widgets approved network and host tools #111687
- Move Mistral to an official external provider plugin #116919
- Externalize NovitaAI as an official provider plugin #117007
- Move OpenCode to an official external provider plugin #117035
- Move OpenCode Go to the official external plugin catalog #117064
- Redesign the browser extension popup #118095
- Support Agent Plugins bundles #120115
- Add OpenClaw activation metadata to portable Agent Plugins #120214
- Add automatic local Chrome extension setup #121586
- Add a preflight check for the managed Codex app-server #124137
- Run A2UI apps as session board widgets #125803
- Refocus Canvas as a macOS widget presenter #126030
- Add a custodian-scoped operational skill library #126186
- feat(dashboard): let widgets run granted actions and open links #127315
- Add an official Windows MXC sandbox plugin #97086
- Replace npm shrinkwrap for npm 12 compatibility #114006
- Move Cohere and Meta providers out of the core package #116662
- Move Teams and Zoom meetings to official external plugins #116682
- Move DuckDuckGo search to an on-demand official plugin #116740
- Move Voyage embeddings to an external plugin #116785
- Move Vydra from the core package to an official external plugin #116813
- Move Volcengine into an official external provider package #116854
- Move BytePlus to an official external provider plugin #116866
- refactor(plugins)!: remove OpenProse #128494
- Retire the experimental Workspaces plugin #110416
- Move inline widget hosting into core #110475
- Externalize ComfyUI as an official provider plugin #116888
- Link the Chrome Web Store listing from the Apps page #118327
Bug fixes
- Restore plugin metadata reads on npm 12 #109699
- Restore Canvas controls and harden retired-Workspaces cleanup #110927
- Restore host runtime imports for official external plugins #112021
- Restore connected apps for token-authenticated Codex runs #115075
- fix(scripts): build heap ignores its systemd memory budget and takes the full default #123979
- fix(openshell): sandbox cleanup, workspace sync, and gateway setup failures #129641
- Prevent Node 24 plugin fallback startup races 5839c2e
- Evaluate Codex app-server startup deadlines before launching work 6625ea9
- Restore the packaged Codex sessions command #102803
- Package selected external plugins in source-built images #103629
- Stop quiet Codex ACP leases from creating empty stderr logs #106799
- Allow OCM local builds with workspace dependencies #110426
- Preserve MXC Windows path fallbacks when environment values are blank #111077
- Prevent packaged macOS Settings from crashing #111300
- Give Codex connected-app discovery more startup time #112418
- Keep user-home Codex app-servers on native authentication #114397
- Honor user-home Codex settings without enabling supervision #114413
- Recover plugin loading from Node ESM require races #114618
- Stop packaged macOS Settings crashes #114648
- Enable configured Codex apps in service sessions #115433
- Stop Diffs guidance from naming unavailable tools #115919
- Recognize Codex's API curated plugin marketplace name #115955
- Accept materialized skill directories as sandbox workdirs #116414
- Prevent canvas refresh storms and stale renewal timers #117173
- fix(ui): bound stalled widget content fetches in the sandbox host #117363
- Restore host runtime links for managed plugins #117408
- Generate the official channel catalog from owning manifests #118097
- Fix CUA packaging and Slack fallback limits for prerelease builds #118103
- Refresh bundled channel skills for current tools and safer workflows #119020
- Align the Fish Audio Speech plugin directory #120084
- Keep OpenCode Go available as a bundled provider #120985
- Execute the packaged
.mjsCLI fallback #121963 - Restore npm-installable source Worker bundles #122430
- Resolve newly exported media-core paths for bundled plugins #122523
- Wake local Chrome extension relays on first connection #122537
- Recover failed bundled plugin views #122823
- Avoid Codex transcript warnings for sessionless runs #122831
- Keep the packaged Zalo setup wizard loadable #122902
- fix(dashboard): open widget links through the host instead of sandbox popups #128125
- fix(startup): preserve preloaded resolver hooks #128663
- fix(sessions): normalize package resource loading #129098
- fix(skills): load trusted Bun and Nix package hardlinks safely #129662
- chore(deps): refresh seven-day-cooled providers and native tooling #130653
- fix(codex): update managed runtime to 0.150.1 #130685
- Bundle the private SSRF runtime for packaged plugins #96994
- Ship the Crabbox lease helper in npm packages 28954c8
- Stop Codex startup phases after the deadline c953d8e
- Build Microsoft Teams runtime entrypoints as native CommonJS #102366
- Keep Codex app inventory diagnostics UTF-16 safe #102414
- Keep AI package environment-key loading browser-bundle safe #102947
- Preserve Unicode in Codex diagnostics boundaries #103740
- Restore selected-plugin image builds on Podman #103814
- Prevent stale plugin builds from crashing Slack startup #104831
- Honor bundle command invocation policy #105013
- fix(plugins): forward-port bundled SDK fallback hardening #107131
- Enforce the OC Path limit for multibyte URIs #108576
- Bound Docker signing-key downloads during image builds #108894
- Fix Codex command session resolution and prerelease checks #113820
- Compare plugin metadata by JSON structure #117486
- Ignore malformed plugin build-version metadata #117639
- Link plugins that declare OpenClaw as a direct dependency #117738
- fix(diffs): restore GET/HEAD Content-Length parity on viewer routes #120280
- fix(diffs-language-pack): serve byte-accurate Content-Length on asset HEAD requests #120282
- Report OS-incompatible always-on skills as unavailable #123731
- Keep packaged external plugin entries inside their runtime roots #125173
- fix: packaged Crabbox commands run without dev dependencies #125419
- Protect plugin overlays in immutable deployments #125902
- fix(oc-path): quote positional JSONC keys #130499
- fix(plugins): native imports fail after source dependency pruning #131615
- fix(plugins): keep development runs on checkout plugins #132201
- fix(plugins): keep compiled plugin aliases on the built runtime #132545
- Enable model-usage on Linux with CodexBar #87986
Documentation