
managing-marketplaces
by jasonkuhrt
Tool configurations
SKILL.md
name: managing-marketplaces description: Use when working with Claude Code plugin marketplaces - adding, updating, creating, or understanding how marketplace versioning and caching work.
Managing Marketplaces
Overview
Plugin marketplaces are catalogs of available plugins. This skill covers how updates work, caching, and versioning.
Key Locations
| Path | Purpose |
|---|---|
~/.claude/plugins/marketplaces/ | Git clones of remote marketplaces |
~/.claude/plugins/cache/<marketplace>/<plugin>/<version>/ | Cached plugin versions |
~/.claude/plugins/known_marketplaces.json | Marketplace registry with update timestamps |
Update Mechanism
Marketplace Level (No Version Pin)
Marketplaces track main branch HEAD - no commit pinning:
// known_marketplaces.json
{
"superpowers-marketplace": {
"source": {
"source": "git",
"url": "https://github.com/obra/superpowers-marketplace.git"
},
"lastUpdated": "2026-01-09T15:25:06.447Z",
"autoUpdate": true
}
}
autoUpdate: truepulls latest on startup/refresh
Plugin Level (Version Pinned)
Plugins ARE versioned via the version field in plugin.json:
~/.claude/plugins/cache/
├── superpowers-marketplace/
│ └── superpowers/
│ └── 4.0.3/ ← version from plugin.json
└── jasonkuhrt/
└── diagrams/
└── 1.0.0/ ← version from plugin.json
Update Flow
digraph update_flow {
rankdir=TB;
"Claude Code starts" [shape=box];
"Pull marketplace (git pull main)" [shape=box];
"Read marketplace.json" [shape=box];
"For each enabled plugin" [shape=diamond];
"Check if version cached" [shape=diamond];
"Use cached version" [shape=box];
"Fetch plugin from source" [shape=box];
"Cache at version directory" [shape=box];
"Claude Code starts" -> "Pull marketplace (git pull main)";
"Pull marketplace (git pull main)" -> "Read marketplace.json";
"Read marketplace.json" -> "For each enabled plugin";
"For each enabled plugin" -> "Check if version cached";
"Check if version cached" -> "Use cached version" [label="yes"];
"Check if version cached" -> "Fetch plugin from source" [label="no"];
"Fetch plugin from source" -> "Cache at version directory";
"Cache at version directory" -> "For each enabled plugin";
"Use cached version" -> "For each enabled plugin";
}
Version Pinning Summary
| Layer | Pinned? | Update Mechanism |
|---|---|---|
| Marketplace | No (tracks main HEAD) | autoUpdate: true or /plugin marketplace update |
| Plugin | Yes (version field) | Bump version in plugin.json → new cache dir |
Commands
# List known marketplaces
/plugin marketplace list
# Update marketplace metadata
/plugin marketplace update <marketplace-name>
# Add marketplace
/plugin marketplace add owner/repo # GitHub
/plugin marketplace add ./local-path # Local
/plugin marketplace add https://url.git # Git URL
# Remove marketplace (also uninstalls plugins from it)
/plugin marketplace remove <marketplace-name>
Local Development
ccd CLI (Recommended)
For marketplaces with a CLI for managing symlinks, use it:
cd ~/projects/my-marketplace
pnpm install
pnpm ccd link activate # Symlink all plugins (creates cache if needed)
pnpm ccd link review # Check status
pnpm ccd link deactivate # Remove symlinks
Run pnpm ccd --help for full documentation including path resolution diagrams.
Workflow:
- Activate symlinks:
pnpm ccd link activate(no install required) - Develop: edit source, restart CC to see changes
- Relink after any
claude plugin install(overwrites symlinks)
Manual Symlink Method
For marketplaces without the CLI, manually replace cache with symlinks. Validated experiment.
Key insight: Cache path uses marketplace's name field from marketplace.json, not the source (GitHub vs local). So ~/.claude/plugins/cache/<name>/... is the same whether you installed from GitHub or local path.
# 1. Clone repo locally (if not already)
git clone https://github.com/owner/marketplace ~/projects/my-marketplace
# 2. If not installed, add and install (skip if already from GitHub)
claude plugin marketplace add ~/projects/my-marketplace
claude plugin install my-plugin@my-marketplace
# 3. Replace cache with symlink (works for GitHub or local installs)
rm -rf ~/.claude/plugins/cache/<marketplace-name>/my-plugin/*/
ln -s ~/projects/my-marketplace/plugins/my-plugin \
~/.claude/plugins/cache/<marketplace-name>/my-plugin/<version>
Caveats:
- Reinstall overwrites symlink - re-run step 3 after any install
- Session-based reload, not hot-reload in same session
Why this works: CC loads plugins from cache path. Symlink makes cache path point to source. CC follows symlinks transparently.
Standard Method
Official docs show uninstall/reinstall cycle:
/plugin uninstall my-plugin@my-marketplace
/plugin install my-plugin@my-marketplace
Enabling Plugins
In project or user settings.json:
{
"enabledPlugins": {
"plugin-name@marketplace-name": true
}
}
Creating Plugins in a Marketplace
CRITICAL: When creating a new plugin, you MUST do BOTH:
- Create the plugin directory with
plugin.json - Register the plugin in
marketplace.json
marketplace/
├── .claude-plugin/
│ └── marketplace.json ← MUST add entry here
└── plugins/
└── new-plugin/
└── plugin.json ← AND create this
Failure mode: Creating only the directory results in /doctor errors like:
Plugin new-plugin not found in marketplace marketplace-name
Checklist for New Plugin
- Create
plugins/<name>/plugin.jsonwith name, version, description - Add entry to
.claude-plugin/marketplace.jsonplugins array - Entry must include:
name,source(e.g.,"./plugins/<name>"),description - Run
/doctorto verify no plugin errors
Notes
- Removing a marketplace uninstalls all plugins from it
- Multiple versions can coexist in cache (old versions not auto-cleaned)
lastUpdatedtimestamp tracks when marketplace was last refreshed
スコア
総合スコア
リポジトリの品質指標に基づく評価
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
1ヶ月以内に更新
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
レビュー
レビュー機能は近日公開予定です



