#Issue after update

1 messages · Page 1 of 1 (latest)

sonic houndBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> ✅ Mark Solution

rugged roostBOT
#

Yep — openslaw is just a typo, but the real issue is this:

Cannot find module '@slack/web-api'

That usually means a bundled plugin runtime dependency went missing after update.
Run this exact sequence:

openclaw --version
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

doctor --fix is specifically meant to repair missing bundled runtime deps.

If it still fails with the same module error, do a clean global reinstall, then rerun doctor:

wintry fiber
#

primas@primas ~ % pnpm add -g openclaw@latest

WARN  3 deprecated subdependencies found: basic-ftp@5.1.0, glob@10.5.0, node-domexception@1.0.0
Packages: -1

Progress: resolved 618, reused 550, downloaded 0, added 0, done
Done in 3.2s using pnpm v10.33.0
primas@primas ~ % openclaw doctor --fix

[openclaw] Failed to start CLI: Error: Cannot find module '@slack/web-api'
Require stack:

  • /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw/dist/client-C5Kf086m.js
    at Module.resolveFilename (node:internal/modules/cjs/loader:1455:15)
    at require.resolve (node:internal/modules/helpers:163:19)
    at jitiResolve (/Users/primas/Library/pnpm/global/5/.pnpm/jiti@2.6.1/node_modules/jiti/dist/jiti.cjs:1:148703)
    at jitiRequire (/Users/primas/Library/pnpm/global/5/.pnpm/jiti@2.6.1/node_modules/jiti/dist/jiti.cjs:1:150290)
    at /Users/primas/Library/pnpm/global/5/.pnpm/jiti@2.6.1/node_modules/jiti/dist/jiti.cjs:1:157987
    at /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5
    @napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw/dist/client-C5Kf086m.js:1:370
    at eval_evalModule (/Users/primas/Library/pnpm/global/5/.pnpm/jiti@2.6.1/node_modules/jiti/dist/jiti.cjs:1:155533)
    at jitiRequire (/Users/primas/Library/pnpm/global/5/.pnpm/jiti@2.6.1/node_modules/jiti/dist/jiti.cjs:1:150967)
    at /Users/primas/Library/pnpm/global/5/.pnpm/jiti@2.6.1/node_modules/jiti/dist/jiti.cjs:1:157987
    at /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw/dist/channel-cVxfXBcu.js:48:23
rugged roostBOT
#

Got it — thanks for the output.
This is a broken bundled-runtime-deps state, and in your case the CLI dies before doctor --fix can run.

Let’s do a manual repair first:

# 1) Go to the installed OpenClaw package dir
cd "$(pnpm root -g)/openclaw"

# 2) Re-run bundled plugin runtime dependency installer
node scripts/postinstall-bundled-plugins.mjs

# 3) Quick check that Slack dep now resolves
node -e "console.log(require.resolve('@slack/web-api/package.json'))"

# 4) Now doctor + restart
#
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

If step 3 still fails, do this fallback, then rerun steps 3–4:

pnpm add -g @slack/web-api@^7

Also check this env var isn’t disabling the postinstall flow:

echo "$OPENCLAW_DISABLE_BUNDLED_PLUGIN_POSTINSTALL"
wintry fiber
#

primas@primas openclaw % openclaw doctor --fix

[openclaw] Failed to start CLI: Error: Cannot find module '@buape/carbon'

rugged roostBOT
#

Nice catch — the @buape/carbon error confirms this is a broken bundled-deps install (not your config).

Let’s do a clean repair in one go:

# 0) make sure pnpm is allowed to run postinstall scripts
pnpm config get ignore-scripts
# if that prints "true", run:
pnpm config set ignore-scripts false

# 1) hard reinstall OpenClaw globally
pnpm remove -g openclaw
pnpm store prune
pnpm add -g openclaw@2026.4.5 --force

# 2) manually run bundled plugin dep installer (important)
#
cd "$(pnpm root -g)/openclaw"
node scripts/postinstall-bundled-plugins.mjs

# 3) verify both previously-missing deps resolve
node -e "require.resolve('@slack/web-api/package.json'); require.resolve('@buape/carbon/package.json'); console.log('bundled deps OK')"

# 4) now run normal repair/startup commands
openclaw doctor --fix
openclaw --version
openclaw gateway restart
openclaw gateway status

If step 3 still fails, paste exactly that output — then we’ll target the package root directly with an npm install --no-save ... workaround.

Docs: https://docs.openclaw.ai/gateway/doctor

#

(And yeah, this smells like a packaging/runtime-deps bug in 2026.4.5.)

wintry fiber
#

[postinstall] installed bundled plugin deps: @buape/carbon@0.14.0, @larksuiteoapi/node-sdk@^1.60.0
primas@primas openclaw % openclaw doctor --fix

[openclaw] Failed to start CLI: Error: Cannot find module '@buape/carbon'
Require stack:

  • /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.97_node-llama-cpp@3.18.1/node_modules/openclaw/dist/ui-7MjYF8PY.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1455:15)
    at require.resolve (node:internal/modules/helpers:163:19)
rugged roostBOT
#

Perfect, this explains it.

You likely ran the postinstall in an openclaw folder that is not the global install used by your openclaw binary.
So it installed deps, just in the wrong place.

Run this exactly (it forces the repair in the real global path):

# 1) go to the actual global OpenClaw package dir
GLOBAL_OPENCLAW_DIR="$(pnpm root -g)/openclaw"
cd "$GLOBAL_OPENCLAW_DIR"
pwd
# should be something like: /Users/primas/Library/pnpm/global/5/node_modules/openclaw

# 2) run bundled deps repair there
node scripts/postinstall-bundled-plugins.mjs
#

# 3) install exact required versions from bundled plugin manifests (belt + suspenders)
CARBON_VER=$(node -p "require('./dist/extensions/discord/package.json').dependencies['@buape/carbon']")
SLACK_VER=$(node -p "require('./dist/extensions/slack/package.json').dependencies['@slack/web-api']")
npm install --omit=dev --no-save --package-lock=false --ignore-scripts --legacy-peer-deps "@buape/carbon@${CARBON_VER}" "@slack/web-api@${SLACK_VER}"

# 4) verify both resolve in THIS install
node -e "console.log(require.resolve('@buape/carbon/package.json')); console.log(require.resolve('@slack/web-api/package.json'))"

# 5) retry
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

If step 4 fails, paste that exact output + pwd and I’ll give you a one-line surgical fix for that exact install path.

wintry fiber
#

To address all issues (including breaking changes), run:
npm audit fix --force

Run npm audit for details.
primas@primas openclaw % openclaw doctor --fix
[openclaw] Failed to start CLI: Error: Cannot find module '@larksuiteoapi/node-sdk'
Require stack:

  • /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.97_node-llama
rugged roostBOT
#

Great datapoint. Also: ignore the npm audit fix --force suggestion — that’s not the fix here.

You’re in a half-installed global package state, and openclaw is loading from the .pnpm/...canvas@0.1.97... tree.

Run this exact repair against that exact install root:

cd /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.97_*/node_modules/openclaw

npm install --omit=dev --no-save --package-lock=false --ignore-scripts --legacy-peer-deps \
@slack/web-api @buape/carbon @larksuiteoapi/node-sdk

node scripts/postinstall-bundled-plugins.mjs

node -e "['@slack/web-api','@buape/carbon','@larksuiteoapi/node-sdk'].forEach(m=>console.log(m,'->',require.resolve(m+'/package.json')))"
#
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

If that still throws missing-module, paste only these two outputs:

  1. pwd (right after the cd)
  2. the node -e ...require.resolve... output

Then I’ll give you a one-liner for the exact active tree.

wintry fiber
#

node:internal/modules/cjs/loader:1458
throw err;
^

Error: Cannot find module '@buape/carbon/package.json'
Require stack:

  • /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.97_node-llama-cpp@3.18.1/node_modules/openclaw/[eval]
    at Module.resolveFilename (node:internal/modules/cjs/loader:1455:15)
    at require.resolve (node:internal/modules/helpers:163:19)
    at [eval]:1:100
    at Array.forEach (<anonymous>)
    at [eval]:1:62
    at runScriptInThisContext (node:internal/vm:219:10)
    at node:internal/process/execution:451:12
    at [eval]-wrapper:6:24
    at runScriptInContext (node:internal/process/execution:449:60)
    at evalFunction (node:internal/process/execution:283:30) {
    code: 'MODULE_NOT_FOUND',
    requireStack: [
    '/Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5
    @napi-rs+canvas@0.1.97_node-llama-cpp@3.18.1/node_modules/openclaw/[eval]'
    ]
    }
rugged roostBOT
#

Boom, we found it. You’re repairing .97, but your actual openclaw command is still running from .96.

From your stack trace, the active tree is:

...openclaw@2026.4.5_@napi-rs+canvas@0.1.96.../node_modules/openclaw

So patch that exact one:

cd /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw

npm install --omit=dev --no-save --package-lock=false --ignore-scripts --legacy-peer-deps \
@slack/web-api @buape/carbon @larksuiteoapi/node-sdk

node scripts/postinstall-bundled-plugins.mjs
#
node -e "['@slack/web-api','@buape/carbon','@larksuiteoapi/node-sdk'].forEach(m=>console.log(m,'->',require.resolve(m+'/package.json')))"

openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

After it’s working, run this once so we can clean up the dual-install weirdness:

which -a openclaw

(And yep: do not run npm audit fix --force for this issue.)

wintry fiber
#

primas@primas openclaw % node -e "['@slack/web-api','@buape/carbon','@larksuiteoapi/node-sdk'].forEach(m=>console.log(m,'->',require.resolve(m+'/package.json')))"
@slack/web-api -> /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw/node_modules/@slack/web-api/package.json
node:internal/modules/cjs/loader:1458
throw err;
^

Error: Cannot find module '@buape/carbon/package.json'
Require stack:

  • /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw/[eval]
    at Module.resolveFilename (node:internal/modules/cjs/loader:1455:15)
    at require.resolve (node:internal/modules/helpers:163:19)
    at [eval]:1:100
    at Array.forEach (<anonymous>)
    at [eval]:1:62
    at runScriptInThisContext (node:internal/vm:219:10)
    at node:internal/process/execution:451:12
    at [eval]-wrapper:6:24
    at runScriptInContext (node:internal/process/execution:449:60)
    at evalFunction (node:internal/process/execution:283:30) {
    code: 'MODULE_NOT_FOUND',
    requireStack: [
    '/Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5
    @napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw/[eval]'
    ]
    }

Node.js v25.6.1

rugged roostBOT
#

Perfect — now we’re down to one concrete miss in the active tree: @buape/carbon.

Run this in that same .96 directory:

cd /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw

npm install --omit=dev --no-save --package-lock=false --ignore-scripts --legacy-peer-deps \
@buape/carbon@0.14.0 @larksuiteoapi/node-sdk@^1.60.0

node -e "for (const m of ['@slack/web-api','@buape/carbon','@larksuiteoapi/node-sdk']) { try { console.log(m,'->',require.resolve(m+'/package.json')) } catch { console.log('MISSING',m) } }"

openclaw doctor --fix
openclaw gateway restart
openclaw gateway status
#

If the verify line still prints MISSING @buape/carbon, paste the exact npm install ... output (that’s the key bit now).

wintry fiber
#

primas@primas openclaw % openclaw doctor --fix

[openclaw] Failed to start CLI: Error: Cannot find module '@buape/carbon'
Require stack:

  • /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.97_node-llama-cpp@3.18.1/node_modules/openclaw/dist/ui-7MjYF8PY.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1455:15)
    at require.resolve (node:internal/modules/helpers:163:19)
rugged roostBOT
#

Yeah, this is bouncing between .96 and .97, so let’s stop chasing one-by-one and patch all installed 2026.4.5 trees at once.

Copy/paste this whole block:

BASE="$HOME/Library/pnpm/global/5/.pnpm"

for d in "$BASE"/openclaw@2026.4.5_*/node_modules/openclaw; do
[ -d "$d" ] || continue
echo "== patching: $d"
(
cd "$d" || exit 1
npm install --omit=dev --no-save --package-lock=false --ignore-scripts --legacy-peer-deps \
@slack/web-api @buape/carbon @larksuiteoapi/node-sdk
node scripts/postinstall-bundled-plugins.mjs
)
#
done

openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

This should handle whichever tree the shim is actually hitting.

If it still fails, send:

which -a openclaw
ls -l "$(which openclaw)"

and we’ll fix the shim target directly.

wintry fiber
#
primas@primas openclaw % 
primas@primas openclaw % 
primas@primas openclaw % 
primas@primas openclaw % BASE="$HOME/Library/pnpm/global/5/.pnpm"

for d in "$BASE"/openclaw@2026.4.5_*/node_modules/openclaw; do
[ -d "$d" ] || continue
echo "== patching: $d"
(
cd "$d" || exit 1
npm install --omit=dev --no-save --package-lock=false --ignore-scripts --legacy-peer-deps \
@slack/web-api @buape/carbon @larksuiteoapi/node-sdk
node scripts/postinstall-bundled-plugins.mjs
)
for> 
for>    
rugged roostBOT
#

Yep — you’re stuck in zsh continuation mode (for>), because the loop wasn’t closed with done.

  1. Press Ctrl+C now to exit that prompt.
  2. Paste this complete block (includes done):
BASE="$HOME/Library/pnpm/global/5/.pnpm"

for d in "$BASE"/openclaw@2026.4.5_*/node_modules/openclaw; do
[ -d "$d" ] || continue
echo "== patching: $d"
(
cd "$d" || exit 1
npm install --omit=dev --no-save --package-lock=false --ignore-scripts --legacy-peer-deps \
@slack/web-api @buape/carbon @larksuiteoapi/node-sdk
node scripts/postinstall-bundled-plugins.mjs
#
)
done

openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

If anything errors, paste from the first == patching: line onward.

wintry fiber
#
for>    
primas@primas openclaw % clear

primas@primas openclaw % BASE="$HOME/Library/pnpm/global/5/.pnpm"

for d in "$BASE"/openclaw@2026.4.5_*/node_modules/openclaw; do
[ -d "$d" ] || continue
echo "== patching: $d"
(
cd "$d" || exit 1
npm install --omit=dev --no-save --package-lock=false --ignore-scripts --legacy-peer-deps \
@slack/web-api @buape/carbon @larksuiteoapi/node-sdk
node scripts/postinstall-bundled-plugins.mjs
for subsh> 
for subsh> 

rugged roostBOT
#

You’re super close — you’re just entering an unfinished subshell (for subsh>).
Let’s avoid loops entirely.

  1. Press Ctrl+C to exit that prompt.
  2. Run these single-line commands exactly:
cd /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw
npm install --omit=dev --no-save --package-lock=false --ignore-scripts --legacy-peer-deps @slack/web-api @buape/carbon @larksuiteoapi/node-sdk
node scripts/postinstall-bundled-plugins.mjs
node -e "for (const m of ['@slack/web-api','@buape/carbon','@larksuiteoapi/node-sdk']) { try { console.log(m,'->',require.resolve(m+'/package.json')) } catch { console.log('MISSING',m) } }"
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

No loops, no multiline blocks, no \ line continuations.

#

If anything fails, paste that one failing command + output.

wintry fiber
#


added 9 packages, and audited 526 packages in 11s

90 packages are looking for funding
  run `npm fund` for details

2 high severity vulnerabilities

To address all issues, run:
  npm audit fix

Run `npm audit` for details.
[postinstall] installed bundled plugin deps: @aws-sdk/client-s3@3.1023.0, @aws-sdk/s3-request-presigner@3.1023.0, @aws/bedrock-token-generator@^1.1.0, @clawdbot/lobster@2026.1.24, @discordjs/voice@^0.19.2, @grammyjs/runner@^2.0.3, @grammyjs/transformer-throttler@^1.2.1, @lancedb/lancedb@^0.27.2, @microsoft/teams.api@2.0.6, @microsoft/teams.apps@2.0.6, @opentelemetry/api@^1.9.1, @opentelemetry/api-logs@^0.214.0, @opentelemetry/exporter-logs-otlp-proto@^0.214.0, @opentelemetry/exporter-metrics-otlp-proto@^0.214.0, @opentelemetry/exporter-trace-otlp-proto@^0.214.0, @opentelemetry/resources@^2.6.1, @opentelemetry/sdk-logs@^0.214.0, @opentelemetry/sdk-metrics@^2.6.1, @opentelemetry/sdk-node@^0.214.0, @opentelemetry/sdk-trace-base@^2.6.1, @opentelemetry/semantic-conventions@^1.40.0, @pierre/diffs@1.1.10, @pierre/theme@0.0.29, @slack/bolt@^4.6.0, @tloncorp/tlon-skill@0.3.2, @twurple/api@^8.1.3, @twurple/auth@^8.1.3, @twurple/chat@^8.1.3, @urbit/aura@^3.0.0, @whiskeysockets/baileys@7.0.0-rc.9, discord-api-types@^0.38.44, fake-indexeddb@^6.2.5, grammy@^1.41.1, https-proxy-agent@^9.0.0, jimp@^1.6.0, mpg123-decoder@^1.0.3, music-metadata@^11.12.3, nostr-tools@^2.23.3, openai@^6.33.0, opusscript@^0.1.1, silk-wasm@^3.7.1, zca-js@2.1.2
@slack/web-api -> /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw/node_modules/@slack/web-api/package.json
MISSING @buape/carbon
MISSING @larksuiteoapi/node-sdk
primas@primas openclaw % 
primas@primas openclaw % 
primas@primas openclaw % 
rugged roostBOT
#

Nice progress — that output is actually useful.

One correction: checking require.resolve('<pkg>/package.json') can be a false negative (some packages hide that path via exports).

Let’s do a real module check + explicit install:

cd /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw

npm install --omit=dev --no-save --package-lock=false --ignore-scripts --legacy-peer-deps @buape/carbon@0.14.0 @larksuiteoapi/node-sdk@1.60.0

node -e "for (const m of ['@slack/web-api','@buape/carbon','@larksuiteoapi/node-sdk']) { try { console.log('OK', m, '->', require.resolve(m)) } catch (e) { console.log('MISS', m, e.code) } }"

openclaw doctor --fix
openclaw gateway restart
openclaw gateway status
#

If openclaw doctor --fix then errors from the .97 path, run the same 3 first commands in the .97 directory too:

...canvas@0.1.97.../node_modules/openclaw

We’re basically there; this should clear it.

wintry fiber
#

primas@primas openclaw % node -e "for (const m of ['@slack/web-api','@buape/carbon','@larksuiteoapi/node-sdk']) { try { console.log('OK', m, '->', require.resolve(m)) } catch (e) { console.log('MISS', m, e.code) } }"
MISS @slack/web-api MODULE_NOT_FOUND
MISS @buape/carbon ERR_PACKAGE_PATH_NOT_EXPORTED
OK @larksuiteoapi/node-sdk -> /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw/node_modules/@larksuiteoapi/node-sdk/lib/index.js
primas@primas openclaw %

rugged roostBOT
#

Great, that output cracked it.

  • @slack/web-api is truly missing.
  • @buape/carbon is installed but wrong shape/version for this build (ERR_PACKAGE_PATH_NOT_EXPORTED).

Let’s install the exact versions this OpenClaw build expects (from its own bundled plugin manifests):

cd /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw

CARBON_VER=$(node -p "require('./dist/extensions/discord/package.json').dependencies['@buape/carbon']")
SLACK_VER=$(node -p "require('./dist/extensions/slack/package.json').dependencies['@slack/web-api']")
echo "CARBON_VER=$CARBON_VER"
echo "SLACK_VER=$SLACK_VER"

npm install --omit=dev --no-save --package-lock=false --ignore-scripts --legacy-peer-deps --force "@buape/carbon@$CARBON_VER" "@slack/web-api@$SLACK_VER"
#

node -e "try{console.log('slack ->', require.resolve('@slack/web-api'))}catch(e){console.log('slack FAIL', e.code)}; try{console.log('carbon ->', require.resolve('@buape/carbon'))}catch(e){console.log('carbon FAIL', e.code)}"

openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

If doctor then complains from the .97 tree, run the same commands there too (same path, just canvas@0.1.97).

wintry fiber
#

primas@primas openclaw % cd /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw

CARBON_VER=$(node -p "require('./dist/extensions/discord/package.json').dependencies['@buape/carbon']")
SLACK_VER=$(node -p "require('./dist/extensions/slack/package.json').dependencies['@slack/web-api']")
echo "CARBON_VER=$CARBON_VER"
echo "SLACK_VER=$SLACK_VER"

npm install --omit=dev --no-save --package-lock=false --ignore-scripts --legacy-peer-deps --force "@buape/carbon@$CARBON_VER" "@slack/web-api@$SLACK_VER"
CARBON_VER=0.14.0
SLACK_VER=^7.15.0
npm warn using --force Recommended protections disabled.

added 9 packages, removed 6 packages, and audited 520 packages in 1s

90 packages are looking for funding
run npm fund for details

2 high severity vulnerabilities

To address all issues (including breaking changes), run:
npm audit fix --force

Run npm audit for details.
primas@primas openclaw % node -e "try{console.log('slack ->', require.resolve('@slack/web-api'))}catch(e){console.log('slack FAIL', e.code)}; try{console.log('carbon ->', require.resolve('@buape/carbon'))}catch(e){console.log('carbon FAIL', e.code)}"
slack -> /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.96_node-llama-cpp@3.18.1/node_modules/openclaw/node_modules/@slack/web-api/dist/index.js
carbon FAIL ERR_PACKAGE_PATH_NOT_EXPORTED
primas@primas openclaw %

rugged roostBOT
#

This is the key clue: you’re on Node v25.6.1 (from your earlier output), and these Carbon exports are import-only.
At this point, the clean fix is: switch to Node 22 LTS, then reinstall OpenClaw fresh once.

Do this:

# if you use nvm:
nvm install 22
nvm use 22
hash -r

node -v
# should now be v22.x

pnpm remove -g openclaw
pnpm add -g openclaw@2026.4.5 --force
#

openclaw --version
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

If you’re not on nvm, tell me how Node was installed (which node + node -v) and I’ll give the exact Node-22 switch command for your setup.

(And yep: still ignore npm audit fix --force for this issue.)

wintry fiber
#

nvm not found

rugged roostBOT
#

Got it — no nvm. Let’s do Node 22 via Homebrew (mac-safe path).

Run these:

brew install node@22
export PATH="$(brew --prefix node@22)/bin:$PATH"
hash -r
node -v
which node

node -v should show v22.x.

Then reinstall OpenClaw under that Node:

#
pnpm remove -g openclaw
pnpm add -g openclaw@2026.4.5 --force

openclaw --version
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

If brew is not installed, say that and I’ll give you the no-brew Node 22 path.

wintry fiber
#

primas@primas openclaw % openclaw --version

OpenClaw 2026.4.5 (3e72c03)
primas@primas openclaw %

primas@primas openclaw %
primas@primas openclaw %
primas@primas openclaw %
primas@primas openclaw % openclaw doctor --fix
[openclaw] Failed to start CLI: Error: Cannot find module '@buape/carbon'
Require stack:

  • /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.97_node-llama-cpp@3.18.1/node_modules/openclaw/dist/ui-7MjYF8PY.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1383:15)
    at Function.resolve (node:internal/modules/helpers:157:19)
    at jitiResolve (/Users/primas/Library/pnpm/global/5/.pnpm/jiti@2.6.1/node_modules/jiti/dist/jiti.cjs:1:148703)
rugged roostBOT
#

Nice — this is now very specific.

openclaw doctor --fix is loading from the 0.1.97 tree, and that tree is missing @buape/carbon.

Run this exact set (single-line commands):

cd /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.97_node-llama-cpp@3.18.1/node_modules/openclaw
npm install --omit=dev --no-save --package-lock=false --ignore-scripts --legacy-peer-deps @buape/carbon@0.14.0 @slack/web-api@^7.15.0 @larksuiteoapi/node-sdk@1.60.0
npm ls @buape/carbon @slack/web-api @larksuiteoapi/node-sdk --depth=0
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

If npm ls ... shows all 3 present but doctor still fails, paste just the npm ls output + the new doctor error and I’ll give the final shim fix.

wintry fiber
#

To address all issues (including breaking changes), run:
npm audit fix --force

Run npm audit for details.
openclaw@2026.4.5 /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.97_node-llama-cpp@3.18.1/node_modules/openclaw
├── @buape/carbon@0.14.0 extraneous
├── @larksuiteoapi/node-sdk@1.60.0 extraneous
└── @slack/web-api@7.15.0 extraneous

primas@primas openclaw % openclaw doctor --fix
[openclaw] Failed to start CLI: Error: Cannot find module 'grammy'
Require stack:

  • /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.97_node-llama-cpp@3.18.1/node_modules/openclaw/dist/allowed-updates-CPeb0arL.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1383:15)
    at Function.resolve (node:internal/modules/helpers:157:19)
    at jitiResolve (/Users/primas/Library/pnpm/global/5/.pnpm/
rugged roostBOT
#

Perfect, we finally have the real signal:

Now it fails on grammy, which means the .97 tree still doesn’t have the full bundled runtime deps set.

Run this in the .97 install root:

cd /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.97_node-llama-cpp@3.18.1/node_modules/openclaw
node scripts/postinstall-bundled-plugins.mjs
npm ls grammy @slack/web-api @buape/carbon @larksuiteoapi/node-sdk --depth=0
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

node scripts/postinstall-bundled-plugins.mjs is the key step now (it should pull grammy and the rest in one go).

#

And yep, still ignore npm audit fix --force for this case.

wintry fiber
#

bash-3.2$
bash-3.2$ cd /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.97_node-llama-cpp@3.18.1/node_modules/openclaw
bash-3.2$ node scripts/postinstall-bundled-plugins.mjs
bash-3.2$ npm ls grammy @slack/web-api @buape/carbon @larksuiteoapi/node-sdk --depth=0
bash-3.2$ openclaw doctor --fix
[openclaw] Failed to start CLI: Error: Cannot find module '@buape/carbon'
Require stack:

  • /Users/primas/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_@napi-rs+canvas@0.1.97_node-llama-cpp@3.18.1/node_modules/openclaw/dist/ui-7MjYF8PY.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1383:15)
    at Function.resolve (node:internal/modules/helpers:157:19)
rugged roostBOT
#

At this point, let’s stop patching the broken global package tree.
You already have an openclaw source checkout (primas@primas openclaw %), so use that directly as a clean workaround.

Run this from your repo root:

cd ~/openclaw
pnpm install
pnpm build
pnpm ui:build
pnpm openclaw doctor --fix
pnpm openclaw gateway restart
pnpm openclaw gateway status

This bypasses the corrupted global pnpm install paths entirely.

wintry fiber
#

I don't build from source though

rugged roostBOT
#

Totally fair — if you don’t want source builds, let’s do the clean non-source workaround:

Roll back to last stable package before this regression (2026.4.2)

pnpm remove -g openclaw

# remove only old global OpenClaw package trees (so .96/.97 stop fighting)
rm -rf "$HOME/Library/pnpm/global/5/node_modules/openclaw"
rm -rf "$HOME/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_"*

pnpm add -g openclaw@2026.4.2 --force

cd "$(pnpm root -g)/openclaw"
node scripts/postinstall-bundled-plugins.mjs
#
openclaw --version
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

If you want, once you’re unblocked on 2026.4.2, you can stay there until a fixed 2026.4.5+ ships.
And this is definitely issue-worthy: https://github.com/openclaw/openclaw/issues

wintry fiber
#

Last login: Sun Apr 5 12:47:12 on ttys003
primas@primas openclaw % pnpm remove -g openclaw

dyld[57337]: Library not loaded: /opt/homebrew/opt/simdjson/lib/libsimdjson.29.dylib
Referenced from: <C109A2D5-5157-3549-AC5B-4147AA906449> /opt/homebrew/Cellar/node/25.6.1/bin/node
Reason: tried: '/opt/homebrew/opt/simdjson/lib/libsimdjson.29.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/opt/simdjson/lib/libsimdjson.29.dylib' (no such file), '/opt/homebrew/opt/simdjson/lib/libsimdjson.29.dylib' (no such file), '/opt/homebrew/Cellar/simdjson/4.6.1/lib/libsimdjson.29.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/Cellar/simdjson/4.6.1/lib/libsimdjson.29.dylib' (no such file), '/opt/homebrew/Cellar/simdjson/4.6.1/lib/libsimdjson.29.dylib' (no such file)
zsh: abort pnpm remove -g openclaw
primas@primas openclaw %

rugged roostBOT
#

Nice catch — this is now a Homebrew Node runtime break, not OpenClaw directly.

pnpm is crashing because your Node binary links to a missing simdjson dylib.

Fix base runtime first:

brew reinstall simdjson
brew install node@22
export PATH="$(brew --prefix node@22)/bin:$PATH"
hash -r

node -v
corepack enable
corepack prepare pnpm@10 --activate
pnpm -v
#

Once node and pnpm work again, continue with the non-source rollback:

pnpm remove -g openclaw
rm -rf "$HOME/Library/pnpm/global/5/node_modules/openclaw"
rm -rf "$HOME/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_"*
pnpm add -g openclaw@2026.4.2 --force
openclaw --version
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

If brew reinstall simdjson errors, paste that output and I’ll give the exact brew repair sequence.

wintry fiber
#
primas@primas openclaw % 
primas@primas openclaw % export PATH="$(brew --prefix node@22)/bin:$PATH"
hash -r

node -v
corepack enable
corepack prepare pnpm@10 --activate
pnpm -v
v22.22.2
Preparing pnpm@10 for immediate activation...
10.33.0
primas@primas openclaw % 

rugged roostBOT
#

Perfect — that’s exactly what we needed. ✅
Node/pnpm are healthy now.

Now run the cleanup + rollback block:

pnpm remove -g openclaw
rm -rf "$HOME/Library/pnpm/global/5/node_modules/openclaw"
rm -rf "$HOME/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_"*

pnpm add -g openclaw@2026.4.2 --force

openclaw --version
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status
#

Optional (to keep Node 22 after new terminals):

echo 'export PATH="$(brew --prefix node@22)/bin:$PATH"' >> ~/.zshrc

If any command errors, paste that exact chunk and I’ll finish it with you.

wintry fiber
#
rm -rf "$HOME/Library/pnpm/global/5/node_modules/openclaw"
rm -rf "$HOME/Library/pnpm/global/5/.pnpm/openclaw@2026.4.5_"*

pnpm add -g openclaw@2026.4.2 --force

openclaw --version
Packages: -475
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Progress: resolved 128, reused 109, downloaded 0, added 0, done

/Users/primas/Library/pnpm/global/5:
- openclaw 2026.4.5

Done in 407ms using pnpm v10.33.0


shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
node:internal/bootstrap/switches/does_own_process_state:142
    cachedCwd = rawMethods.cwd();
                           ^

Error: ENOENT: no such file or directory, uv_cwd
    at process.wrappedCwd (node:internal/bootstrap/switches/does_own_process_state:142:28)
    at process.cwd (/Users/primas/Library/pnpm/.tools/pnpm/10.33.0_tmp_41348_0/node_modules/pnpm/dist/pnpm.cjs:1339:23)
    at process.cwd (/Users/primas/Library/pnpm/.tools/pnpm/10.33.0_tmp_41348_0/node_modules/pnpm/dist/pnpm.cjs:3560:23)
    at ../node_modules/.pnpm/get-source@2.0.12/node_modules/get-source/impl/path.js (/Users/primas/Library/pnpm/.tools/pnpm/10.33.0_tmp_41348_0/node_modules/pnpm/dist/pnpm.cjs:35363:58)

rugged roostBOT
#

Yep — that uv_cwd / getcwd error means you deleted the directory you were currently inside (you were in the global openclaw folder when removing it). Easy fix.

Run:

cd ~
pwd

Then reinstall and continue:

pnpm add -g openclaw@2026.4.2 --force
openclaw --version
openclaw doctor --fix
openclaw gateway restart
#
openclaw gateway status

You’re actually close now — this is just a broken current-working-directory state from the cleanup.

wintry fiber
#

Doctor works

Ends with this though

Invalid config:
- channels.bluebubbles: Unrecognized key: "network"
│
rugged roostBOT
#

Huge progress — now it’s just a config schema mismatch.

channels.bluebubbles.network is no longer a valid key.
Remove it, then rerun doctor:

openclaw config unset channels.bluebubbles.network
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

If you were using that old key to point to your BlueBubbles server, use:

  • channels.bluebubbles.serverUrl
  • channels.bluebubbles.password
wintry fiber
#

primas@primas ~ % openclaw config unset channels.bluebubbles.network

Invalid config at /Users/primas/.openclaw/openclaw.json:\n- channels.bluebubbles: Unrecognized key: "network"

🦞 OpenClaw 2026.4.2 (d74a122) — You had me at 'openclaw gateway start.'

Config invalid
File: ~/.openclaw/openclaw.json
Problem:
  - channels.bluebubbles: Unrecognized key: "network"

Run: openclaw doctor --fix
primas@primas ~ % 
rugged roostBOT
#

Yep — now the CLI is refusing to load before it can run config unset, so we need one manual file edit.

Do this:

cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak
nano ~/.openclaw/openclaw.json

In nano, find the channels.bluebubbles section and delete the network entry (or full network: { ... } block), then save and exit:

  • save: Ctrl+O, Enter
  • exit: Ctrl+X

Then run:

#
openclaw doctor --fix
openclaw gateway restart
openclaw gateway status

If you want, paste just the channels.bluebubbles block here and I’ll mark the exact lines to delete.

wintry fiber
#

I want to remove all bluebubbles functionality

rugged roostBOT
#

Perfect — if you want BlueBubbles gone entirely, do this:

cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak
nano ~/.openclaw/openclaw.json

Inside the file, delete all BlueBubbles config blocks, especially:

  • channels.bluebubbles: { ... } ← remove whole block
  • any plugins.entries.bluebubbles: { ... } block (if present)

Quick way to find them in nano: Ctrl+W, type bluebubbles.

Save/exit (Ctrl+O, Enter, Ctrl+X), then run: