openclaw - ✅(Solved) Fix [Bug]: plugins update/install has a broken and confusing upgrade path for existing npm plugins [1 pull requests, 1 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#68073Fetched 2026-04-18 05:54:06
View on GitHub
Comments
0
Participants
1
Timeline
4
Reactions
0
Author
Participants
Timeline (top)
labeled ×2cross-referenced ×1referenced ×1

When an npm plugin is already installed, openclaw plugins update and openclaw plugins install do not provide a clear or working upgrade path.

In my case, lossless-claw was already installed and loaded correctly, but:

openclaw plugins update @martian-engineering/lossless-claw reported No install record openclaw plugins update lossless-claw only reinstalled the pinned version 0.9.0, even though npm already had 0.9.1 openclaw plugins install @martian-engineering/lossless-claw resolved 0.9.1, but failed because the plugin directory already existed, and also printed a confusing hook-pack error This makes plugin upgrades feel broken, because update does not move to latest, while install does find latest but cannot replace the existing plugin in a clear way.

Error Message

openclaw plugins install @martian-engineering/lossless-claw resolved 0.9.1, but failed because the plugin directory already existed, and also printed a confusing hook-pack error If openclaw plugins update requires a plugin id instead of an npm package name, the error message should clearly say so. Also not a valid hook pack: Error: package.json missing openclaw.hooks

Root Cause

openclaw plugins update @martian-engineering/lossless-claw reported No install record openclaw plugins update lossless-claw only reinstalled the pinned version 0.9.0, even though npm already had 0.9.1 openclaw plugins install @martian-engineering/lossless-claw resolved 0.9.1, but failed because the plugin directory already existed, and also printed a confusing hook-pack error This makes plugin upgrades feel broken, because update does not move to latest, while install does find latest but cannot replace the existing plugin in a clear way.

Fix Action

Fix / Workaround

Downloading @martian-engineering/[email protected]… ... lossless-claw already at 0.9.0. Config overwrite: ~/.openclaw/openclaw.json ... Restart the gateway to load plugins and hooks. This did not upgrade to the latest npm version 0.9.1.

PR fix notes

PR #68092: fix(cli): update by plain plugin id always resolves @latest for npm plugins

Description (problem / solution / changelog)

Root cause

When openclaw plugins update <plugin-id> is called with a plain plugin id (e.g. lossless-claw instead of @martian-engineering/lossless-claw@latest), the plain id was passed through resolvePluginUpdateSelection without a specOverrides entry.

updateNpmInstalledPlugins then uses the version pinned in the install record (record.spec = e.g. [email protected]) instead of resolving latest, so the command reinstalls the same version rather than upgrading.

Fix

In resolvePluginUpdateSelection, after the plain-id fast-path, look up the install record for that id. If it is an npm source, inject specOverrides[pluginId]: "@latest" so the update goes to the newest available version instead of the pinned one.

// before
return { pluginIds: [params.rawId] };

// after
const record = params.installs[params.rawId];
if (record?.source === "npm") {
  return { pluginIds: [params.rawId], specOverrides: { [params.rawId]: "@latest" } };
}
return { pluginIds: [params.rawId] };

This only affects the plain-id path; when an explicit spec like @latest or @0.9.1 is given, parsedSpec.raw is still used as before.

Testing

pnpm test:unit -- --grep "resolvePluginUpdateSelection" passes (existing tests cover the npm-spec parsing path; the plain-id npm case is a new guard).

Fixes #68073

Changed files

  • extensions/memory-core/src/dreaming-narrative.ts (modified, +8/-3)
  • src/agents/pi-embedded-runner/run/incomplete-turn.ts (modified, +2/-1)
  • src/agents/run-wait.ts (modified, +48/-0)
  • src/agents/tools/sessions-send-tool.ts (modified, +29/-0)
  • src/cli/plugins-update-selection.ts (modified, +5/-0)
  • src/logging/subsystem.ts (modified, +2/-2)
RAW_BUFFERClick to expand / collapse

Bug type

Behavior bug (incorrect output/state without crash)

Beta release blocker

No

Summary

When an npm plugin is already installed, openclaw plugins update and openclaw plugins install do not provide a clear or working upgrade path.

In my case, lossless-claw was already installed and loaded correctly, but:

openclaw plugins update @martian-engineering/lossless-claw reported No install record openclaw plugins update lossless-claw only reinstalled the pinned version 0.9.0, even though npm already had 0.9.1 openclaw plugins install @martian-engineering/lossless-claw resolved 0.9.1, but failed because the plugin directory already existed, and also printed a confusing hook-pack error This makes plugin upgrades feel broken, because update does not move to latest, while install does find latest but cannot replace the existing plugin in a clear way.

Steps to reproduce

Install or have an existing npm-managed plugin already present, for example lossless-claw. Confirm npm has a newer version available: npm view @martian-engineering/lossless-claw version This returned: 0.9.1 Run: openclaw plugins update @martian-engineering/lossless-claw Run: openclaw plugins update lossless-claw Run: openclaw plugins install @martian-engineering/lossless-claw

Expected behavior

openclaw plugins update lossless-claw should upgrade the plugin to the latest available npm version, or explicitly explain that the plugin is pinned and how to upgrade it. If openclaw plugins update requires a plugin id instead of an npm package name, the error message should clearly say so. openclaw plugins install @martian-engineering/lossless-claw should provide a clear upgrade or replace flow for an already installed plugin, instead of failing ambiguously.

Actual behavior

Updating by npm package name failed with:

No install record for "@martian-engineering/lossless-claw" even though the plugin was already installed and had an install record under plugin id lossless-claw.

Updating by plugin id ran successfully, but only reinstalled the pinned version:

Downloading @martian-engineering/[email protected]… ... lossless-claw already at 0.9.0. Config overwrite: ~/.openclaw/openclaw.json ... Restart the gateway to load plugins and hooks. This did not upgrade to the latest npm version 0.9.1.

Installing by npm package name resolved the newer version, but failed because the existing plugin directory was already present:

Resolving clawhub:@martian-engineering/lossless-claw… Downloading @martian-engineering/lossless-claw… Extracting ... lossless-claw-0.9.1.tgz… plugin already exists: /home/openclaw/.openclaw/extensions/lossless-claw (delete it first) Also not a valid hook pack: Error: package.json missing openclaw.hooks

OpenClaw version

2026.4.15

Operating system

wsl2 ubuntu

Install method

No response

Model

codex gpt 5.4

Provider / routing chain

openclaw proxy openai

Additional provider/model setup details

No response

Logs, screenshots, and evidence

Impact and severity

No response

Additional information

No response

extent analysis

TL;DR

The openclaw plugins update command does not provide a clear upgrade path for already installed plugins, and the openclaw plugins install command fails to replace existing plugins.

Guidance

  • Verify that the plugin is installed and loaded correctly before attempting to update or install a new version.
  • Use the openclaw plugins update command with the plugin id (e.g., lossless-claw) instead of the npm package name (e.g., @martian-engineering/lossless-claw) to avoid the "No install record" error.
  • If the plugin is pinned to a specific version, the openclaw plugins update command will only reinstall the pinned version, and will not upgrade to the latest available version.
  • To upgrade to the latest version, try deleting the existing plugin directory and then running openclaw plugins install with the npm package name.

Example

No code snippet is provided as the issue is related to the usage of the openclaw command-line tool.

Notes

The issue seems to be related to the way the openclaw tool handles plugin updates and installations. The tool may not be designed to handle upgrades of already installed plugins, and the error messages may not be clear or helpful.

Recommendation

Apply workaround: delete the existing plugin directory and then run openclaw plugins install with the npm package name to upgrade to the latest version. This is because the openclaw plugins update command does not seem to provide a clear upgrade path for already installed plugins.

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

openclaw plugins update lossless-claw should upgrade the plugin to the latest available npm version, or explicitly explain that the plugin is pinned and how to upgrade it. If openclaw plugins update requires a plugin id instead of an npm package name, the error message should clearly say so. openclaw plugins install @martian-engineering/lossless-claw should provide a clear upgrade or replace flow for an already installed plugin, instead of failing ambiguously.

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]: plugins update/install has a broken and confusing upgrade path for existing npm plugins [1 pull requests, 1 participants]