openclaw - ✅(Solved) Fix [Bug]: 2026.4.25+ macOS startup hot loop / 100% CPU in bundled plugin path [2 pull requests, 3 comments, 4 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#73705Fetched 2026-04-29 06:16:09
View on GitHub
Comments
3
Participants
4
Timeline
8
Reactions
0
Timeline (top)
commented ×3cross-referenced ×2closed ×1labeled ×1

macOS, 8GB RAM, Node 24. 2026.4.23 works. 2026.4.25 and 2026.4.26 peg Node/openclaw-gateway at 100% CPU for many minutes during startup. No obvious errors in logs. OPENCLAW_DISABLE_BUNDLED_PLUGINS=1 makes startup fast. Using Ollama with manually configured models. Attached: macOS sample while CPU is pegged.

Root Cause

macOS, 8GB RAM, Node 24. 2026.4.23 works. 2026.4.25 and 2026.4.26 peg Node/openclaw-gateway at 100% CPU for many minutes during startup. No obvious errors in logs. OPENCLAW_DISABLE_BUNDLED_PLUGINS=1 makes startup fast. Using Ollama with manually configured models. Attached: macOS sample while CPU is pegged.

Fix Action

Fixed

PR fix notes

PR #73760: fix: [Bug]: 2026.4.25+ macOS startup hot loop / 100% CPU in bundled plugin path

Description (problem / solution / changelog)

Summary

Backport of the fix from PR #73275 to resolve the macOS startup hot loop / 100% CPU issue in the bundled plugin path.

Root cause: When OPENCLAW_BUNDLED_PLUGINS_DIR was set, the code returned any existing path without validating whether it contained usable plugins. Additionally, the cwdRoot was included in package root candidates, which could lead to incorrect bundled directory resolution on macOS. The VITEST environment variable check also caused inconsistent behavior in test environments.

Fix: Added resolveTrustedExistingOverride() which validates override paths against trusted bundled plugin roots, using safeRealpathSync (via fs.realpathSync.native) to safely resolve symlinks. Removed cwdRoot from package root candidates and removed the VITEST environment variable check from preferSourceCheckout.

Testing: The fix was validated in PR #73275 which addressed the same issue in the main branch.

Changes

  • Add safeRealpathSync() - wraps fs.realpathSync.native to safely resolve symlinks without throwing
  • Add pathContains() - checks if a child path is within a parent directory
  • Add trustedBundledPluginRootsForPackageRoot() - lists trusted plugin root directories
  • Add resolveTrustedExistingOverride() - validates override paths against trusted roots
  • Add overrideResolvesUnderPackageBundledRoot() - checks if a rejected override uses a package bundled root
  • Modify resolveBundledDirFromPackageRoot() - use hasUsableBundledPluginTree instead of bare fs.existsSync
  • Modify resolveBundledPluginsDir() - use resolveTrustedExistingOverride for validation; remove cwdRoot and VITEST check

Testing

  • The fix was validated in PR #73275 (merged)
  • OPENCLAW_DISABLE_BUNDLED_PLUGINS=1 continues to work as a workaround

Fixes openclaw/openclaw#73705

Changed files

  • .agents/skills/openclaw-release-maintainer/SKILL.md (modified, +33/-5)
  • .github/workflows/full-release-validation.yml (modified, +11/-1)
  • .github/workflows/npm-telegram-beta-e2e.yml (modified, +150/-7)
  • CHANGELOG.md (modified, +20/-106)
  • docs/.generated/config-baseline.sha256 (modified, +3/-3)
  • docs/.generated/plugin-sdk-api-baseline.sha256 (modified, +2/-2)
  • docs/ci.md (modified, +26/-2)
  • docs/help/testing.md (modified, +4/-2)
  • docs/reference/RELEASING.md (modified, +36/-4)
  • extensions/video-generation-providers.live.test.ts (modified, +7/-0)
  • extensions/xai/xai.live.test.ts (modified, +3/-2)
  • scripts/e2e/parallels-npm-update-smoke.sh (modified, +2/-1)
  • src/agents/models.profiles.live.test.ts (modified, +10/-0)
  • src/cli/update-cli/restart-helper.test.ts (modified, +7/-1)
  • src/cli/update-cli/restart-helper.ts (modified, +20/-0)
  • src/config/bundled-channel-config-metadata.generated.ts (modified, +6/-0)
  • src/gateway/gateway-codex-harness.live-helpers.test.ts (modified, +12/-0)
  • src/gateway/gateway-codex-harness.live-helpers.ts (modified, +7/-1)
  • src/plugins/bundled-dir.ts (modified, +78/-22)

PR #73678: fix: cache plugin manifest loads by file signature

Description (problem / solution / changelog)

Summary

  • cache loadPluginManifest results by manifest path, hardlink policy, optional real root, and file signature
  • reuse the normalized manifest result when the manifest file is unchanged
  • add regression coverage for repeated unchanged manifest loads

Context

This is the smallest upstreamable slice from a v2026.4.26 CPU investigation on a Docker/Synology deployment. The gateway was repeatedly spending CPU in plugin manifest/runtime discovery during channel startup; caching normalized manifest loads reduced repeated strict JSON/JSON5 parse and normalization work in bursty startup paths.

Related issue: #73647

Validation

  • node --import tsx <manifest-cache-smoke> => manifest cache smoke ok
  • corepack pnpm exec oxfmt --check --threads=1 src/plugins/manifest.ts src/plugins/manifest.json5-tolerance.test.ts
  • corepack pnpm run tsgo:test:src

Note: direct vitest run src/plugins/manifest.json5-tolerance.test.ts was not used as final validation on the NAS because the default Vitest invocation spent several minutes in project bundling. The source typecheck and a direct runtime smoke both passed.

Changed files

  • src/plugins/manifest.json5-tolerance.test.ts (modified, +35/-1)
  • src/plugins/manifest.ts (modified, +68/-7)
RAW_BUFFERClick to expand / collapse

Bug type

Regression (worked before, now fails)

Beta release blocker

No

Summary

macOS, 8GB RAM, Node 24. 2026.4.23 works. 2026.4.25 and 2026.4.26 peg Node/openclaw-gateway at 100% CPU for many minutes during startup. No obvious errors in logs. OPENCLAW_DISABLE_BUNDLED_PLUGINS=1 makes startup fast. Using Ollama with manually configured models. Attached: macOS sample while CPU is pegged.

Steps to reproduce

2026.4.23 works. 2026.4.25 and 2026.4.26 peg openclaw-gateway/Node at 100% CPU for many minutes during startup. No obvious log errors. OPENCLAW_DISABLE_BUNDLED_PLUGINS=1 makes startup fast. Using Ollama with manually configured models. Attached macOS sample while CPU was pegged.

Expected behavior

anything other than this

Actual behavior

mac mini is nothing but a space heater

OpenClaw version

2024.4.26

Operating system

macOS 15.0.1

Install method

npm

Model

kimi-k2.6

Provider / routing chain

idk man, nothing works

Additional provider/model setup details

openclaw-hotloop-diagnostics.zip

Logs, screenshots, and evidence

Impact and severity

No response

Additional information

No response

extent analysis

TL;DR

Disabling bundled plugins with OPENCLAW_DISABLE_BUNDLED_PLUGINS=1 may resolve the high CPU usage issue during startup.

Guidance

  • The issue seems to be related to the introduction of a regression between versions 2026.4.23 and 2026.4.25/2026.4.26, as indicated by the significant increase in CPU usage.
  • Disabling bundled plugins using the OPENCLAW_DISABLE_BUNDLED_PLUGINS=1 environment variable results in faster startup times, suggesting that the issue might be related to the plugins.
  • To further diagnose the issue, it might be helpful to examine the differences in behavior or configuration between the working version (2026.4.23) and the non-working versions (2026.4.25 and 2026.4.26).
  • Reviewing the attached openclaw-hotloop-diagnostics.zip file could provide additional insights into the problem.

Example

No specific code example is provided due to the lack of direct code references in the issue description.

Notes

The exact cause of the high CPU usage is not clear from the provided information, and the issue might be specific to the combination of OpenClaw version, operating system, and model configuration being used.

Recommendation

Apply workaround: Disabling bundled plugins with OPENCLAW_DISABLE_BUNDLED_PLUGINS=1 appears to mitigate the issue, allowing for faster startup times. This workaround can be used until a more permanent fix is found or the root cause is fully understood.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

anything other than this

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - ✅(Solved) Fix [Bug]: 2026.4.25+ macOS startup hot loop / 100% CPU in bundled plugin path [2 pull requests, 3 comments, 4 participants]