claude-code - 💡(How to fix) Fix [BUG] `/plugin marketplace add <local-path>` registers but plugin installs with 0 skills (workaround: pre-create symlink) [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
anthropics/claude-code#54967Fetched 2026-05-01 05:49:45
View on GitHub
Comments
1
Participants
2
Timeline
6
Reactions
1
Timeline (top)
labeled ×4commented ×1subscribed ×1

Error Message

  1. Print a non-zero exit code or a [WARN] line when marketplace add succeeds but the loader cannot discover any skills — current "Successfully added" + "0 skills" is silent failure.

Fix Action

Fix / Workaround

[BUG] `/plugin marketplace add <local-path>` registers but plugin installs with 0 skills (workaround: pre-create symlink)

The workaround is to pre-create the entry under ~/.claude/plugins/marketplaces/ as a symlink to the local path before running /plugin marketplace add. With the symlink in place, the same add + install + /reload-plugins flow loads all skills correctly.

Workaround (works reliably)

Code Example

[BUG] `/plugin marketplace add <local-path>` registers but plugin installs with 0 skills (workaround: pre-create symlink)

---

/plugin marketplace add /Users/me/my-skills-marketplace

---

# 1. Clone a private marketplace repo locally
gh repo clone betterme-sandbox/pm-sm-ai-skills-marketplace ~/pm-sm-ai-skills-marketplace

# 2. Start Claude Code
claude

# 3. In the Claude Code REPL:
/plugin marketplace add ~/pm-sm-ai-skills-marketplace
# → "Successfully added marketplace: shared-skills"
# Files appear under ~/.claude/plugins/marketplaces/pm-sm-ai-skills-marketplace/

/plugin
# → Discover → shared-skills → "Install for you" → confirm
/reload-plugins
# → "Reloaded: 1 plugin · 0 skills · 0 agents"
# Skills do NOT appear when invoked: @shared-skills:<skill-name> → not found

---

# After cloning, BEFORE /plugin marketplace add:
mkdir -p ~/.claude/plugins/marketplaces
ln -sfn ~/pm-sm-ai-skills-marketplace ~/.claude/plugins/marketplaces/pm-sm-ai-skills-marketplace
# Then in Claude Code:
/plugin marketplace add ~/pm-sm-ai-skills-marketplace
/plugin install shared-skills@pm-sm-ai-skills-marketplace
/reload-plugins
# → "Reloaded: 1 plugin · 0 skills · 5 agents" — all 5 skills now available
RAW_BUFFERClick to expand / collapse

Title

[BUG] `/plugin marketplace add <local-path>` registers but plugin installs with 0 skills (workaround: pre-create symlink)

Body

Bug

When registering a marketplace from a local directory via the slash command:

/plugin marketplace add /Users/me/my-skills-marketplace

Claude Code reports Successfully added marketplace: <name> and creates ~/.claude/plugins/marketplaces/<name>/.... However, after /plugin install <plugin>@<name> and /reload-plugins, the plugin loads with 0 skills (reported as Reloaded: 1 plugin · 0 skills · N agents due to lazy-loaded skills being categorized as agents, but the user-visible result is "the skills do not appear").

The workaround is to pre-create the entry under ~/.claude/plugins/marketplaces/ as a symlink to the local path before running /plugin marketplace add. With the symlink in place, the same add + install + /reload-plugins flow loads all skills correctly.

This breaks the documented onboarding flow for any team that distributes a marketplace as a local directory (cloned via gh repo clone for private repos, for example), which is exactly the use case the CLI is designed to support.

Steps to reproduce

# 1. Clone a private marketplace repo locally
gh repo clone betterme-sandbox/pm-sm-ai-skills-marketplace ~/pm-sm-ai-skills-marketplace

# 2. Start Claude Code
claude

# 3. In the Claude Code REPL:
/plugin marketplace add ~/pm-sm-ai-skills-marketplace
# → "Successfully added marketplace: shared-skills"
# Files appear under ~/.claude/plugins/marketplaces/pm-sm-ai-skills-marketplace/

/plugin
# → Discover → shared-skills → "Install for you" → confirm
/reload-plugins
# → "Reloaded: 1 plugin · 0 skills · 0 agents"
# Skills do NOT appear when invoked: @shared-skills:<skill-name> → not found

Expected

The five skills declared in .claude-plugin/marketplace.json (shared/skills/*/SKILL.md) should be loaded and available for invocation, e.g. @shared-skills:jira-researcher.

Actual

Reloaded: 1 plugin · 0 skills · 0 agents — neither lazy-loaded skills nor anything else is registered. The marketplace files are physically present under ~/.claude/plugins/marketplaces/<name>/, but the loader does not discover them.

Workaround (works reliably)

Replace the auto-created marketplace directory with a symlink to the original local path before running /plugin marketplace add:

# After cloning, BEFORE /plugin marketplace add:
mkdir -p ~/.claude/plugins/marketplaces
ln -sfn ~/pm-sm-ai-skills-marketplace ~/.claude/plugins/marketplaces/pm-sm-ai-skills-marketplace
# Then in Claude Code:
/plugin marketplace add ~/pm-sm-ai-skills-marketplace
/plugin install shared-skills@pm-sm-ai-skills-marketplace
/reload-plugins
# → "Reloaded: 1 plugin · 0 skills · 5 agents" — all 5 skills now available

We've shipped this workaround in our team installer (install.sh creates the symlink before the user runs /plugin marketplace add). See INSTALL.md, step 2.

Hypothesis

The copy step from a local path likely produces a directory whose internal marketplace.json references plugin files via paths that do not resolve in the cache location (e.g., relative paths anchored to the original cwd). A symlink keeps every internal path resolvable to the original tree, which is why the workaround succeeds. Could not confirm without source access.

Why it matters

Distributing a Claude Code marketplace as a local directory is the canonical path for:

  • private/internal team marketplaces (cloned via gh repo clone, since curl raw... returns 404 for private repos)
  • on-premise / air-gapped setups
  • offline development

All of these silently fail with 0 skills unless every onboarding doc tells users to manually symlink — which most users will not do, so the result looks like "the marketplace doesn't work" rather than "there is a known workaround".

Environment

Claude Code version2.1.123
OSmacOS 14.4 (Sonoma, build 23E214)
Shellzsh
Marketplace size5 skills, ~600 KB
Repro frequency100% (every fresh install without the symlink workaround)

Suggested fixes (in order of preference)

  1. Best: make /plugin marketplace add <local-path> symlink the directory by default (or behind a --symlink flag), instead of copying. Local paths are inherently mutable; copy semantics surprise users who edit the source tree and expect changes to reflect.
  2. If symlink-by-default is too aggressive, at minimum fix the copy so the resulting cache structure resolves the same way the source does.
  3. Print a non-zero exit code or a [WARN] line when marketplace add succeeds but the loader cannot discover any skills — current "Successfully added" + "0 skills" is silent failure.

Related

  • #36655 — marketplace add not registered in known_marketplaces.json (different surface, same family of "registered but not usable")
  • #52147 — local plugin installation in desktop app (feature request, related)
  • #41392 — symlinks inside plugin dirs not dereferenced (related but distinct: that is inside a plugin, this is the marketplace-level path)

Happy to provide more diagnostics (a ~/.claude/plugins/marketplaces/<name>/ listing before/after, debug logs) if helpful.

extent analysis

TL;DR

The issue can be fixed by modifying the /plugin marketplace add command to symlink the directory by default or fixing the copy process to resolve paths correctly.

Guidance

  • Verify that the issue is indeed caused by the copy process not resolving paths correctly by checking the marketplace.json file in the copied directory.
  • Consider implementing a symlink approach as a workaround, as described in the issue, to ensure that internal paths are resolvable.
  • To fix the issue, modify the /plugin marketplace add command to either symlink the directory by default or fix the copy process to resolve paths correctly.
  • Test the fix by running the /plugin marketplace add command with the modified implementation and verifying that the skills are loaded correctly.

Example

No code example is provided as the issue does not contain sufficient information about the implementation details of the /plugin marketplace add command.

Notes

The issue highlights the importance of handling paths correctly when copying directories, especially when dealing with relative paths. The proposed fixes aim to address this issue and ensure that the skills are loaded correctly.

Recommendation

Apply the workaround of symlinking the directory before running /plugin marketplace add until a permanent fix is implemented, as it has been shown to work reliably.

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

claude-code - 💡(How to fix) Fix [BUG] `/plugin marketplace add <local-path>` registers but plugin installs with 0 skills (workaround: pre-create symlink) [1 comments, 2 participants]