/health:plugins Diagnose and fix issues with the Claude Code plugin registry. This command specifically addresses issue #14202 where project-scoped plugins incorrectly appear as globally installed. When to Use This Skill | Use this skill when... | Use another approach when... | |------------------------|------------------------------| | Fixing plugin registry corruption (issue #14202) | Comprehensive health check (use ) | | Diagnosing project-scope vs global plugin issues | Auditing plugins for relevance (use ) | | Cleaning up orphaned plugin entries | Settings validation only needed | | Reso…

\u003c\u003c\u003c\"$output\"; then\n fail \"expected STALE_ENABLED_COUNT=1\"\nfi\npass \"STALE_ENABLED_COUNT=1\"\n\n# Dry-run must not modify settings.json.\nif ! diff -q \u003c(jq -S . \"$settings_file\") \u003c(cat \u003c\u003c'JSON' | jq -S .\n{\n \"enabledPlugins\": {\n \"good-plugin@test-mp\": true,\n \"installable-plugin@test-mp\": true,\n \"stale-plugin@dead-mp\": true\n }\n}\nJSON\n) >/dev/null; then\n fail \"--dry-run modified settings.json\"\nfi\npass \"--dry-run preserved settings.json\"\n\n# RESTART_REQUIRED should be emitted on dry-run when stale keys would be removed.\nif ! grep -q '^RESTART_REQUIRED=true

/health:plugins Diagnose and fix issues with the Claude Code plugin registry. This command specifically addresses issue #14202 where project-scoped plugins incorrectly appear as globally installed. When to Use This Skill | Use this skill when... | Use another approach when... | |------------------------|------------------------------| | Fixing plugin registry corruption (issue #14202) | Comprehensive health check (use ) | | Diagnosing project-scope vs global plugin issues | Auditing plugins for relevance (use ) | | Cleaning up orphaned plugin entries | Settings validation only needed | | Reso…

\u003c\u003c\u003c\"$output\"; then\n fail \"expected RESTART_REQUIRED=true in dry-run output\"\nfi\npass \"RESTART_REQUIRED=true emitted in dry-run\"\n\n# -----------------------------------------------------------------------------\n# Guard 3: Windows CRLF regression for check-plugins.sh and check-registry.sh\n# (issue #1330) — simulate jq emitting CRLF line endings and verify the scripts\n# do NOT flag every-key-but-the-last as enabled_not_installed / stale.\n# -----------------------------------------------------------------------------\ncrlf_dir=\"${tmp_dir}/crlf\"\nmkdir -p \"$crlf_dir/.claude/plugins\"\n\ncat > \"${crlf_dir}/.claude/plugins/installed_plugins.json\" \u003c\u003c'JSON'\n{\n \"version\": 2,\n \"plugins\": {\n \"alpha-plugin@test-mp\": [{\"scope\": \"user\", \"version\": \"1.0.0\"}],\n \"beta-plugin@test-mp\": [{\"scope\": \"user\", \"version\": \"1.0.0\"}],\n \"gamma-plugin@test-mp\": [{\"scope\": \"user\", \"version\": \"1.0.0\"}]\n }\n}\nJSON\n\ncat > \"${crlf_dir}/.claude/settings.json\" \u003c\u003c'JSON'\n{\n \"enabledPlugins\": {\n \"alpha-plugin@test-mp\": true,\n \"beta-plugin@test-mp\": true,\n \"gamma-plugin@test-mp\": true\n }\n}\nJSON\n\n# Wrap jq with a stub that appends \\r to every output line, emulating Windows.\njq_stub_dir=\"${tmp_dir}/jq-crlf-stub\"\nmkdir -p \"$jq_stub_dir\"\nreal_jq=\"$(command -v jq)\"\ncat > \"${jq_stub_dir}/jq\" \u003c\u003cEOF\n#!/usr/bin/env bash\n# Test stub: forwards to real jq but rewrites LF -> CRLF on stdout\n# to reproduce Windows behaviour.\n\"${real_jq}\" \"\\$@\" | sed 's/\\$/\\r/'\nEOF\nchmod +x \"${jq_stub_dir}/jq\"\n\ncheck_plugins=\"${script_dir}/../../health-check/scripts/check-plugins.sh\"\n\ncrlf_output=$(PATH=\"${jq_stub_dir}:$PATH\" bash \"$check_plugins\" \\\n --home-dir \"$crlf_dir\" --project-dir \"$crlf_dir\")\n\n# With the fix, none of the three enabled plugins should be flagged.\nif grep -q 'TYPE=enabled_not_installed' \u003c\u003c\u003c\"$crlf_output\"; then\n echo \"--- check-plugins.sh CRLF output ---\" >&2\n echo \"$crlf_output\" >&2\n echo \"------------------------------------\" >&2\n fail \"check-plugins.sh produced enabled_not_installed false positives under CRLF jq output (issue #1330 regression)\"\nfi\nif ! grep -q '^STATUS=OK

/health:plugins Diagnose and fix issues with the Claude Code plugin registry. This command specifically addresses issue #14202 where project-scoped plugins incorrectly appear as globally installed. When to Use This Skill | Use this skill when... | Use another approach when... | |------------------------|------------------------------| | Fixing plugin registry corruption (issue #14202) | Comprehensive health check (use ) | | Diagnosing project-scope vs global plugin issues | Auditing plugins for relevance (use ) | | Cleaning up orphaned plugin entries | Settings validation only needed | | Reso…

\u003c\u003c\u003c\"$crlf_output\"; then\n echo \"--- check-plugins.sh CRLF output ---\" >&2\n echo \"$crlf_output\" >&2\n echo \"------------------------------------\" >&2\n fail \"check-plugins.sh did not report STATUS=OK under CRLF jq output (issue #1330 regression)\"\nfi\npass \"check-plugins.sh survives CRLF jq output\"\n\ncheck_registry=\"${script_dir}/check-registry.sh\"\ncrlf_reg_output=$(PATH=\"${jq_stub_dir}:$PATH\" bash \"$check_registry\" \\\n --home-dir \"$crlf_dir\" --project-dir \"$crlf_dir\")\n\nif grep -qE 'TYPE=(enabled_not_installed|stale_enabled)' \u003c\u003c\u003c\"$crlf_reg_output\"; then\n echo \"--- check-registry.sh CRLF output ---\" >&2\n echo \"$crlf_reg_output\" >&2\n echo \"-------------------------------------\" >&2\n fail \"check-registry.sh produced stale/enabled-not-installed false positives under CRLF jq output (issue #1330 regression)\"\nfi\nif ! grep -q '^STATUS=OK

/health:plugins Diagnose and fix issues with the Claude Code plugin registry. This command specifically addresses issue #14202 where project-scoped plugins incorrectly appear as globally installed. When to Use This Skill | Use this skill when... | Use another approach when... | |------------------------|------------------------------| | Fixing plugin registry corruption (issue #14202) | Comprehensive health check (use ) | | Diagnosing project-scope vs global plugin issues | Auditing plugins for relevance (use ) | | Cleaning up orphaned plugin entries | Settings validation only needed | | Reso…

\u003c\u003c\u003c\"$crlf_reg_output\"; then\n echo \"--- check-registry.sh CRLF output ---\" >&2\n echo \"$crlf_reg_output\" >&2\n echo \"-------------------------------------\" >&2\n fail \"check-registry.sh did not report STATUS=OK under CRLF jq output (issue #1330 regression)\"\nfi\npass \"check-registry.sh survives CRLF jq output\"\n\necho \"ALL CHECKS PASSED\"\nexit 0\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":7093,"content_sha256":"c98dea6693e6b26af20d799c335487fc27d75a523165c513b4b966c56920538e"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"/health:plugins","type":"text"}]},{"type":"paragraph","content":[{"text":"Diagnose and fix issues with the Claude Code plugin registry. This command specifically addresses issue #14202 where project-scoped plugins incorrectly appear as globally installed.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"When to Use This Skill","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Use this skill when...","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Use another approach when...","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Fixing plugin registry corruption (issue #14202)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Comprehensive health check (use ","type":"text"},{"text":"/health:check","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Diagnosing project-scope vs global plugin issues","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Auditing plugins for relevance (use ","type":"text"},{"text":"/health:audit","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Cleaning up orphaned plugin entries","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Settings validation only needed","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Resolving \"plugin already installed\" errors","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Agentic optimization audit (use ","type":"text"},{"text":"/health:agentic-audit","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Manually inspecting registry JSON","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Just viewing installed plugins (read registry file)","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Context","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Current project: !","type":"text"},{"text":"pwd","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Current project has plugins: !","type":"text"},{"text":"find . -maxdepth 2 -path '*/.claude-plugin/plugin.json' -type f","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Project settings exists: !","type":"text"},{"text":"find . -maxdepth 1 -name '.claude/settings.json'","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Project plugins dir: !","type":"text"},{"text":"find . -maxdepth 1 -type d -name '.claude-plugin'","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Background: Issue #14202","type":"text"}]},{"type":"paragraph","content":[{"text":"When a plugin is installed with ","type":"text"},{"text":"--scope project","type":"text","marks":[{"type":"code_inline"}]},{"text":" in one project, other projects incorrectly show the plugin as \"(installed)\" in the Marketplaces view. This happens because:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"The plugin registry at ","type":"text"},{"text":"~/.claude/plugins/installed_plugins.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" stores ","type":"text"},{"text":"projectPath","type":"text","marks":[{"type":"code_inline"}]},{"text":" for project-scoped installs","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"The Marketplaces view only checks if a plugin key exists, not whether it's installed for the ","type":"text"},{"text":"current","type":"text","marks":[{"type":"em"}]},{"text":" project","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"The install command refuses to install because it thinks the plugin already exists","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Impact","type":"text","marks":[{"type":"strong"}]},{"text":": Users cannot install the same plugin across multiple projects with project-scope isolation.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Parameters","type":"text"}]},{"type":"paragraph","content":[{"text":"Parse these from ","type":"text"},{"text":"$ARGUMENTS","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Parameter","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Description","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"--fix","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Apply fixes to the plugin registry","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"--dry-run","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Show what would be fixed without making changes","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"--plugin \u003cname>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Check/fix a specific plugin only","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Execution","type":"text"}]},{"type":"paragraph","content":[{"text":"Execute this plugin registry diagnostic by running the scripts below. Pass ","type":"text"},{"text":"--plugin \u003cname>","type":"text","marks":[{"type":"code_inline"}]},{"text":" through from ","type":"text"},{"text":"$ARGUMENTS","type":"text","marks":[{"type":"code_inline"}]},{"text":" when specified.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 1: Diagnose the registry","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"bash \"${CLAUDE_SKILL_DIR}/scripts/check-registry.sh\" --home-dir \"$HOME\" --project-dir \"$(pwd)\" [--plugin \u003cname>] [--verbose]","type":"text"}]},{"type":"paragraph","content":[{"text":"Parse the ","type":"text"},{"text":"STATUS=","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"PLUGIN_COUNT=","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"ORPHANED_ENTRIES=","type":"text","marks":[{"type":"code_inline"}]},{"text":", and ","type":"text"},{"text":"ISSUES:","type":"text","marks":[{"type":"code_inline"}]},{"text":" lines from output. The ","type":"text"},{"text":"=== PLUGINS ===","type":"text","marks":[{"type":"code_inline"}]},{"text":" section lists each installed plugin with scope, version, source, and projectPath.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 2: Report findings","type":"text"}]},{"type":"paragraph","content":[{"text":"Print a structured diagnostic report summarising:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Registry location, validity, and plugin counts (total / global / project-scoped)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Orphaned entries (projectPath directory missing) with severity and suggested fix","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Plugins enabled in settings but not in the registry","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Plugins from other projects (INFO only, shown with ","type":"text"},{"text":"--verbose","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Use the ","type":"text"},{"text":"ISSUES:","type":"text","marks":[{"type":"code_inline"}]},{"text":" lines as the authoritative list of problems.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 3: Apply fixes (if --fix)","type":"text"}]},{"type":"paragraph","content":[{"text":"If ","type":"text"},{"text":"$ARGUMENTS","type":"text","marks":[{"type":"code_inline"}]},{"text":" contains ","type":"text"},{"text":"--fix","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Confirm with the user (via ","type":"text"},{"text":"AskUserQuestion","type":"text","marks":[{"type":"code_inline"}]},{"text":") which orphaned plugins to remove, unless ","type":"text"},{"text":"--dry-run","type":"text","marks":[{"type":"code_inline"}]},{"text":" is also set.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Run the fix script:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"bash \"${CLAUDE_SKILL_DIR}/scripts/fix-registry.sh\" --home-dir \"$HOME\" --project-dir \"$(pwd)\" [--plugin \u003cname>] [--dry-run]","type":"text"}]},{"type":"paragraph","content":[{"text":"The script creates a timestamped backup at ","type":"text"},{"text":"~/.claude/plugins/installed_plugins.json.backup.\u003cUTC-timestamp>","type":"text","marks":[{"type":"code_inline"}]},{"text":" before modifying the registry, validates the resulting JSON, and aborts safely on any error.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Parse ","type":"text"},{"text":"STATUS=","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"REMOVED=","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"REMOVED_COUNT=","type":"text","marks":[{"type":"code_inline"}]},{"text":", and ","type":"text"},{"text":"BACKUP_PATH=","type":"text","marks":[{"type":"code_inline"}]},{"text":" lines to report what changed.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 4: Handle \"plugin needed in current project\"","type":"text"}]},{"type":"paragraph","content":[{"text":"When a plugin exists in the registry under a different ","type":"text"},{"text":"projectPath","type":"text","marks":[{"type":"code_inline"}]},{"text":" and the user wants it available in the current project, use ","type":"text"},{"text":"AskUserQuestion","type":"text","marks":[{"type":"code_inline"}]},{"text":" to confirm, then:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Add a new entry to ","type":"text"},{"text":".claude/settings.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" under ","type":"text"},{"text":"enabledPlugins","type":"text","marks":[{"type":"code_inline"}]},{"text":" using the ","type":"text"},{"text":"Edit","type":"text","marks":[{"type":"code_inline"}]},{"text":" tool.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Remind the user to run ","type":"text"},{"text":"/plugin install","type":"text","marks":[{"type":"code_inline"}]},{"text":" via the Claude Code UI for proper registry registration.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Step 5: Verify the fix","type":"text"}]},{"type":"paragraph","content":[{"text":"After applying fixes, re-run Step 1 and confirm the issue count has dropped. Remind the user to restart Claude Code for changes to take effect.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Registry Structure Reference","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"json"},"content":[{"text":"{\n \"version\": 2,\n \"plugins\": {\n \"plugin-name@marketplace-name\": [\n {\n \"scope\": \"project\",\n \"projectPath\": \"/path/to/project\",\n \"installPath\": \"~/.claude/plugins/cache/marketplace/plugin-name/1.0.0\",\n \"version\": \"1.0.0\",\n \"installedAt\": \"2024-01-15T10:30:00Z\",\n \"lastUpdated\": \"2024-01-15T10:30:00Z\",\n \"gitCommitSha\": \"abc123\"\n }\n ]\n }\n}","type":"text"}]},{"type":"paragraph","content":[{"text":"Scope types:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"scope\": \"project\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" — has ","type":"text"},{"text":"projectPath","type":"text","marks":[{"type":"code_inline"}]},{"text":", only active in that project","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"scope\": \"user\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" — no ","type":"text"},{"text":"projectPath","type":"text","marks":[{"type":"code_inline"}]},{"text":", active globally","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Manual Workaround","type":"text"}]},{"type":"paragraph","content":[{"text":"If automatic fix fails, users can manually edit ","type":"text"},{"text":"~/.claude/plugins/installed_plugins.json","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Open the file in an editor","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Find the plugin entry","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Either:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Remove ","type":"text"},{"text":"projectPath","type":"text","marks":[{"type":"code_inline"}]},{"text":" to make it global","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Change ","type":"text"},{"text":"projectPath","type":"text","marks":[{"type":"code_inline"}]},{"text":" to current project path","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Add a new entry with different key for current project","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Save and restart Claude Code","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Agentic Optimizations","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Context","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Command","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Plugin registry diagnostics","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/health:plugins","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Fix registry issues","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/health:plugins --fix","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Dry-run mode","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"/health:plugins --dry-run","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Diagnose only (script)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"bash \"${CLAUDE_SKILL_DIR}/scripts/check-registry.sh\" --home-dir \"$HOME\" --project-dir \"$(pwd)\"","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Fix only (script)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"bash \"${CLAUDE_SKILL_DIR}/scripts/fix-registry.sh\" --home-dir \"$HOME\" --project-dir \"$(pwd)\"","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Flags","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Flag","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Description","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"--fix","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Apply fixes (with confirmation prompts)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"--dry-run","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Show what would be fixed without changes","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"--plugin \u003cname>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Target a specific plugin","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"See Also","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"/health:check","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Full diagnostic scan","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"/health:settings","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Settings file validation","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Issue #14202","type":"text","marks":[{"type":"link","attrs":{"href":"https://github.com/anthropics/claude-code/issues/14202","title":null}}]},{"text":" - Upstream bug report","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"args":"[--fix] [--dry-run] [--plugin \u003cname>]","date":"2026-06-05","name":"health-plugins","author":"@skillopedia","source":{"stars":35,"repo_name":"claude-plugins","origin_url":"https://github.com/laurigates/claude-plugins/blob/HEAD/health-plugin/skills/health-plugins/SKILL.md","repo_owner":"laurigates","body_sha256":"d6307b5aef65e053fa2f8b839d935203241c309d3725fcfdf00d25df711ba4e4","cluster_key":"1cf529aa2200c7d1944c66bea0382870f5884c567c871c347996684e74b1b00a","clean_bundle":{"format":"clean-skill-bundle-v1","source":"laurigates/claude-plugins/health-plugin/skills/health-plugins/SKILL.md","attachments":[{"id":"aaa8ee5d-1468-5f5e-961f-2f011e8a059b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/aaa8ee5d-1468-5f5e-961f-2f011e8a059b/attachment.sh","path":"scripts/check-registry.sh","size":6557,"sha256":"ee5ea12def899e6a3df7ef3816a5edb66a0f44138058ba55b048b6a9ed4ecf8c","contentType":"application/x-sh; charset=utf-8"},{"id":"556c7ba0-677c-5ae8-992f-f18047a0b321","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/556c7ba0-677c-5ae8-992f-f18047a0b321/attachment.sh","path":"scripts/fix-registry.sh","size":7450,"sha256":"ce226a3a23de7f1adbe7d3c9a3a6841d725e12132240a62e30f46118c1b0d891","contentType":"application/x-sh; charset=utf-8"},{"id":"0ce39dc3-f490-5210-bbb6-d72f47ee867d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0ce39dc3-f490-5210-bbb6-d72f47ee867d/attachment.sh","path":"scripts/test-fix-registry.sh","size":7093,"sha256":"c98dea6693e6b26af20d799c335487fc27d75a523165c513b4b966c56920538e","contentType":"application/x-sh; charset=utf-8"}],"bundle_sha256":"056948c3831acc75fe19b6cef009c98b2007c8666385ee28b4ae27defc8b6eae","attachment_count":3,"text_attachments":3,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"health-plugin/skills/health-plugins/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"software-engineering","category_label":"Engineering"},"exact_dupes_collapsed_into_this":0},"created":"2026-02-04T00:00:00.000Z","version":"v1","category":"software-engineering","modified":"2026-05-09T00:00:00.000Z","reviewed":"2026-04-15T00:00:00.000Z","import_tag":"clean-skills-v1","description":"Diagnose and fix Claude Code plugin registry corruption — orphaned entries, stale keys, scope conflicts. Use when seeing plugin-already-installed errors or registry drift.","allowed-tools":"Bash(bash *), Read, Write, Edit, Glob, Grep, TodoWrite, AskUserQuestion","argument-hint":"[--fix] [--dry-run] [--plugin \u003cname>]","user-invocable":false}},"renderedAt":1782980942033}

/health:plugins Diagnose and fix issues with the Claude Code plugin registry. This command specifically addresses issue #14202 where project-scoped plugins incorrectly appear as globally installed. When to Use This Skill | Use this skill when... | Use another approach when... | |------------------------|------------------------------| | Fixing plugin registry corruption (issue #14202) | Comprehensive health check (use ) | | Diagnosing project-scope vs global plugin issues | Auditing plugins for relevance (use ) | | Cleaning up orphaned plugin entries | Settings validation only needed | | Reso…