openclaw - 💡(How to fix) Fix Bundled channel runtime deps not installed on default install (silent loss of Telegram/Discord/Slack/Nostr) [1 comments, 2 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#76226Fetched 2026-05-03 04:40:27
View on GitHub
Comments
1
Participants
2
Timeline
2
Reactions
2
Timeline (top)
closed ×1commented ×1

After a clean global npm install or openclaw update.run self-update, OpenClaw's bundled channel extensions (Telegram, Discord, Slack, Nostr) cannot resolve their runtime dependencies (grammy, discord-api-types/v10, @slack/web-api, nostr-tools). The CLI prints Cannot find module warnings during status/doctor, channels disappear from the channels table, and outbound delivery on those channels silently fails. (Telegram inbound polling kept working in our case, which masked the failure further.)

Confirmed on macOS 26.4.1 / Node 25.5.0 / OpenClaw 2026.4.29 installed via global npm to /opt/homebrew/lib/node_modules/openclaw.

Root Cause

scripts/postinstall-bundled-plugins.mjs discovers per-extension runtime dependencies from each dist/extensions/<plugin>/package.json and the extensions declare openclaw.bundle.stageRuntimeDependencies: true. However, the postinstall skips eager install of those deps unless OPENCLAW_EAGER_BUNDLED_PLUGIN_DEPS=1 is set in the environment. After a fresh install, the bundled channel loaders silently fail at import time because the modules they require never landed under root node_modules.

Fix Action

Fix / Workaround

Local workaround

This installs the ~65 missing runtime packages, applies the Baileys runtime hotfix, and channels recover after a gateway restart. Required env flag should not be necessary on a default install.

Status output before workaround

Code Example

npm install -g openclaw@latest
openclaw status
# observe "Cannot find module grammy" / "discord-api-types/v10" / "@slack/web-api" / "nostr-tools"
# channels table is empty

---

OPENCLAW_EAGER_BUNDLED_PLUGIN_DEPS=1 \
  node /opt/homebrew/lib/node_modules/openclaw/scripts/postinstall-bundled-plugins.mjs
RAW_BUFFERClick to expand / collapse

Summary

After a clean global npm install or openclaw update.run self-update, OpenClaw's bundled channel extensions (Telegram, Discord, Slack, Nostr) cannot resolve their runtime dependencies (grammy, discord-api-types/v10, @slack/web-api, nostr-tools). The CLI prints Cannot find module warnings during status/doctor, channels disappear from the channels table, and outbound delivery on those channels silently fails. (Telegram inbound polling kept working in our case, which masked the failure further.)

Confirmed on macOS 26.4.1 / Node 25.5.0 / OpenClaw 2026.4.29 installed via global npm to /opt/homebrew/lib/node_modules/openclaw.

Reproducer

npm install -g openclaw@latest
openclaw status
# observe "Cannot find module grammy" / "discord-api-types/v10" / "@slack/web-api" / "nostr-tools"
# channels table is empty

openclaw doctor --non-interactive reports the same missing-dep warnings.

Root cause

scripts/postinstall-bundled-plugins.mjs discovers per-extension runtime dependencies from each dist/extensions/<plugin>/package.json and the extensions declare openclaw.bundle.stageRuntimeDependencies: true. However, the postinstall skips eager install of those deps unless OPENCLAW_EAGER_BUNDLED_PLUGIN_DEPS=1 is set in the environment. After a fresh install, the bundled channel loaders silently fail at import time because the modules they require never landed under root node_modules.

Local workaround

OPENCLAW_EAGER_BUNDLED_PLUGIN_DEPS=1 \
  node /opt/homebrew/lib/node_modules/openclaw/scripts/postinstall-bundled-plugins.mjs

This installs the ~65 missing runtime packages, applies the Baileys runtime hotfix, and channels recover after a gateway restart. Required env flag should not be necessary on a default install.

Suggested fixes (any one)

  1. Default OPENCLAW_EAGER_BUNDLED_PLUGIN_DEPS=1 so postinstall installs channel deps by default. Keep an opt-out for low-disk / embedded scenarios.
  2. Move the per-extension runtime deps into the root package.json dependencies so npm handles them natively at install.
  3. Bundle channel deps under dist/extensions/<plugin>/node_modules directly in the published tarball (via files allowlist) so nothing has to run at install time.
  4. Make openclaw status / doctor exit non-zero when a bundled channel cannot resolve its declared runtime deps, so failures surface immediately instead of silently after restart.

Why this matters

  • The failure mode is silent loss of outbound channel delivery.
  • openclaw update.run re-installing the same version (2026.4.29 → 2026.4.29) does not re-run postinstall side effects on a clean tree, so it cannot self-heal once the deps are missing.
  • Telegram inbound polling continued working in our setup, hiding the regression from casual liveness checks.

Environment

  • macOS 26.4.1 (arm64)
  • Node v25.5.0
  • OpenClaw 2026.4.29 (commit a448042), stable channel, npm install path
  • Install root: /opt/homebrew/lib/node_modules/openclaw
  • 4 affected channels confirmed: Telegram, Discord, Slack, Nostr

Status output before workaround

Cannot find module 'grammy', Cannot find module 'discord-api-types/v10', Cannot find module '@slack/web-api', Cannot find module 'nostr-tools' — channels table empty.

After running the postinstall with OPENCLAW_EAGER_BUNDLED_PLUGIN_DEPS=1, all four channels resolve and load normally; gateway came back clean.

extent analysis

TL;DR

Set the OPENCLAW_EAGER_BUNDLED_PLUGIN_DEPS environment variable to 1 during installation to ensure that OpenClaw's bundled channel extensions' runtime dependencies are installed.

Guidance

  • To resolve the issue, run the postinstall script with the OPENCLAW_EAGER_BUNDLED_PLUGIN_DEPS=1 environment variable set, as shown in the local workaround.
  • Verify that the channels are loading correctly by running openclaw status and checking the channels table.
  • Consider one of the suggested fixes to prevent this issue in the future, such as defaulting OPENCLAW_EAGER_BUNDLED_PLUGIN_DEPS to 1 or moving the per-extension runtime dependencies into the root package.json.

Example

OPENCLAW_EAGER_BUNDLED_PLUGIN_DEPS=1 \
  node /opt/homebrew/lib/node_modules/openclaw/scripts/postinstall-bundled-plugins.mjs

Notes

The issue is specific to the installation process and the environment variables set during installation. The suggested fixes aim to prevent the silent loss of outbound channel delivery by ensuring that the runtime dependencies are installed correctly.

Recommendation

Apply the workaround by setting OPENCLAW_EAGER_BUNDLED_PLUGIN_DEPS=1 during installation, as this is a straightforward and effective solution to the problem. This approach ensures that the necessary dependencies are installed, and the channels can function correctly.

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…

Still need to ship something?

×6

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

Back to top recommendations

TRENDING