openclaw - 💡(How to fix) Fix plugin-skills stale generated symlink is not replaced when target disappears

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…

Error Message

[skills] failed to create plugin skill symlink ".../.openclaw/plugin-skills/browser-automation" → ".../openclaw/dist/extensions/browser/skills/browser-automation": Error: EEXIST: file already exists, symlink '.../openclaw/dist/extensions/browser/skills/browser-automation' -> '.../.openclaw/plugin-skills/browser-automation'

Root Cause

The publish step fails with EEXIST because the stale generated symlink still exists.

Code Example

[skills] failed to create plugin skill symlink ".../.openclaw/plugin-skills/browser-automation"".../openclaw/dist/extensions/browser/skills/browser-automation": Error: EEXIST: file already exists, symlink '.../openclaw/dist/extensions/browser/skills/browser-automation' -> '.../.openclaw/plugin-skills/browser-automation'

---

.openclaw/plugin-skills/browser-automation
-> /old/install/path/openclaw/dist/extensions/browser/skills/browser-automation

---

.openclaw/plugin-skills/browser-automation
-> /new/install/path/openclaw/dist/extensions/browser/skills/browser-automation

---

OpenClaw 2026.5.22 (a374c3a)

---

1df2ac442a fix #77296: Plugin manifest skills field not published to agent skill discovery paths
30cfcf21b7 fix(skills): replace generated plugin skill directories
RAW_BUFFERClick to expand / collapse

OpenClaw can repeatedly warn while publishing plugin skills if an existing generated plugin skill symlink points to a target that no longer exists:

[skills] failed to create plugin skill symlink ".../.openclaw/plugin-skills/browser-automation" → ".../openclaw/dist/extensions/browser/skills/browser-automation": Error: EEXIST: file already exists, symlink '.../openclaw/dist/extensions/browser/skills/browser-automation' -> '.../.openclaw/plugin-skills/browser-automation'

Reproduced state:

.openclaw/plugin-skills/browser-automation
-> /old/install/path/openclaw/dist/extensions/browser/skills/browser-automation

Then the old install path is removed, and OpenClaw later tries to publish the current plugin skill:

.openclaw/plugin-skills/browser-automation
-> /new/install/path/openclaw/dist/extensions/browser/skills/browser-automation

The publish step fails with EEXIST because the stale generated symlink still exists.

Expected behavior:

  • Generated plugin skill links should be idempotent.
  • If an existing generated plugin skill symlink points to a different target, OpenClaw should replace it.
  • If the existing generated symlink is broken because the old target disappeared, OpenClaw should still remove it and create the current link.
  • Users should not need to manually clean ~/.openclaw/plugin-skills.

Observed on:

OpenClaw 2026.5.22 (a374c3a)

Relevant history:

1df2ac442a fix #77296: Plugin manifest skills field not published to agent skill discovery paths
30cfcf21b7 fix(skills): replace generated plugin skill directories

Likely fix:

Use symlink-aware cleanup for generated plugin skill entries: lstatSync to classify the entry, unlinkSync for symlinks, and directory removal only for generated directory/junction cases. Add regression coverage for a generated plugin skill symlink whose target no longer exists.

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

openclaw - 💡(How to fix) Fix plugin-skills stale generated symlink is not replaced when target disappears