health-plugin/skills/plugin-registry/SKILL.md
Claude Code plugin registry structure, installation scopes, and common issues. Use when troubleshooting plugin installation problems or manually fixing registry entries.
npx skillsauth add laurigates/claude-plugins plugin-registryInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Expert knowledge for understanding and troubleshooting the Claude Code plugin registry.
| Use this skill when... | Use something else when... |
|------------------------|---------------------------|
| Plugin shows "installed" but isn't working | Setting up new plugins (use /configure:claude-plugins) |
| Need to understand plugin scopes | Configuring plugin permissions (use settings-configuration skill) |
| Fixing orphaned registry entries | Creating workflows with plugins (use github-actions-plugin) |
| Debugging installation failures | |
The plugin registry is stored at:
~/.claude/plugins/installed_plugins.json
This file tracks all installed plugins across all projects.
{
"version": 2,
"plugins": {
"plugin-name@marketplace-name": [
{
"scope": "project",
"projectPath": "/path/to/project",
"installPath": "~/.claude/plugins/cache/marketplace/plugin-name/1.0.0",
"version": "1.0.0",
"installedAt": "2024-01-15T10:30:00Z",
"lastUpdated": "2024-01-15T10:30:00Z",
"gitCommitSha": "abc123"
}
]
}
}
Each plugin key maps to an array of installations (supporting multiple scopes).
| Field | Required | Description |
|-------|----------|-------------|
| scope | Yes | "project" or "user" (global) |
| projectPath | project only | Directory where plugin is active |
| installPath | Yes | Cache path for installed plugin files |
| version | Yes | Installed version |
| installedAt | Yes | ISO timestamp of installation |
| lastUpdated | Yes | ISO timestamp of last update |
| gitCommitSha | Yes | Git commit of installed version |
/plugin install my-plugin@marketplace
"scope": "user" in registry entryprojectPath field/plugin install my-plugin@marketplace --scope project
"scope": "project" in registry entryprojectPath set to installation directoryProblem: Project-scoped plugins incorrectly appear as globally installed.
Root Cause: Inconsistent projectPath checking:
| Operation | Checks projectPath? | Result |
|-----------|---------------------|--------|
| Marketplaces "(installed)" | No | Shows installed everywhere |
| /plugin install | No | Refuses to install |
| Installed tab listing | Yes | Correctly filtered |
Symptoms:
/plugin install says "already installed"Workaround: Manually edit the registry to add an entry for the current project.
jq . ~/.claude/plugins/installed_plugins.json
jq -r '.plugins | keys[]' ~/.claude/plugins/installed_plugins.json
jq '.plugins | to_entries[] | .value[] | select(.scope == "project") | {projectPath, version}' ~/.claude/plugins/installed_plugins.json
Use the Read tool to read ~/.claude/plugins/installed_plugins.json, then check each projectPath with test -d.
cp ~/.claude/plugins/installed_plugins.json ~/.claude/plugins/installed_plugins.json.backup
~/.claude/plugins/installed_plugins.json with the Read toolcp ~/.claude/plugins/installed_plugins.json ~/.claude/plugins/installed_plugins.json.backupplugins objectscope: "project" and current projectPath"scope": "project" to "scope": "user" and remove projectPathProject-scoped plugins also need entries in .claude/settings.json:
{
"enabledPlugins": [
"plugin-name@marketplace"
]
}
Without this, even a correctly registered project-scoped plugin won't load.
Plugin shows installed but doesn't work
projectPath matches current directory.claude/settings.json for enabledPlugins/health:plugins for diagnosisCan't install plugin (already installed)
projectPath/health:plugins --fix or manual editPlugin works in one project but not another
Registry file is corrupted
~/.claude/plugins/installed_plugins.json| Context | Command |
|---------|---------|
| View registry | jq -c . ~/.claude/plugins/installed_plugins.json |
| List plugins | jq -r '.plugins \| keys[]' ~/.claude/plugins/installed_plugins.json |
| Check specific | jq '.plugins."name@market"' ~/.claude/plugins/installed_plugins.json |
| Project plugins | jq '.plugins \| to_entries[] \| .value[] \| select(.scope=="project")' ~/.claude/plugins/installed_plugins.json |
~/.claude/plugins/installed_plugins.json
{plugin-name}@{marketplace-name}
"scope": "project" + projectPath → Project-scoped"scope": "user" → Global (user-wide)Always restart Claude Code for registry changes to take effect.
tools
Scaffold a new ComfyUI custom-node repo (pyproject, CI, release-please, vitest+pytest, JS extension skeleton) in the picker/gesture vein. Use when bootstrapping or init-ing a comfyui node pack.
tools
Orchestrate a ComfyUI node pack from idea to registry: scaffold, create + seed the repo, open the gitops adoption PR. Use when releasing or spinning up a new comfyui node pack.
testing
macOS EndpointSecurity/EDR high CPU & battery drain. Use when Kandji ESF / XProtect pegs a core; trace the exec storm via powermetrics + eslogger.
development
odiff pixel-by-pixel image diffing. Use when comparing screenshots, detecting visual regressions, diffing before/after PNGs, asserting golden images.