Evaluate Plugin
Use this skill when the target is a plugin root with .claude-plugin/plugin.json. If the target is a single SKILL.md directory, hand off to ../evaluate-skill/SKILL.md instead.
The runnable commands below invoke the shipped script through the plugin root, which works in any checkout: node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" <command> <args>. Inline mentions of cc-plugin-eval <command> are shorthand for that same invocation; the bare cc-plugin-eval alias only exists if you ran npm link in the plugin directory.
When To Use
- The path passed by the user contains
.claude-plugin/plugin.json.
- The user's question is about the bundle as a whole, not a single skill.
- The user says "audit", "validate", "lint", "inspect", or "benchmark this plugin".
If the path is a SKILL.md or a directory holding one, route to ../evaluate-skill/SKILL.md. If the path contains neither, treat it as a generic directory and run cc-plugin-eval analyze <path> to surface the file-level signals.
Workflow
- Treat "Evaluate this plugin." as the default entrypoint.
- If the request comes in as natural chat language, run
cc-plugin-eval start <plugin-root> --request "<user request>" --format markdown first so the user sees the routed local path.
- Run
cc-plugin-eval analyze <plugin-root> --format markdown.
- Read
Fix First before drilling into manifest findings, hook findings, MCP/LSP findings, monitor/agent findings, marketplace findings, then nested skill findings.
- If the plugin contains multiple skills, summarize the strongest and weakest ones explicitly.
- If the user wants a CI-friendly pass/fail check, run
cc-plugin-eval validate <plugin-root> --strict. Exit code 2 means at least one warn or fail finding fired.
- If the user wants component-only output (only hooks, only mcp, etc.), run
cc-plugin-eval inspect <plugin-root> --component <name>.
- If the user wants measured usage, switch to "Help me benchmark this plugin." and use the starter benchmark flow.
- If the user wants trend data, compare two JSON outputs with
cc-plugin-eval compare before.json after.json.
Plugin-Specific Priorities
.claude-plugin/plugin.json validity: missing name (CC101), invalid name (CC102), invalid SemVer (CC103), env-var leak in metadata (CC110), files in .claude-plugin/ other than plugin.json (CC120), path-shape violations (CC130), missing path on disk (CC131).
- Hooks: invalid event name (CC302), case-wrong event (CC303), invalid hook type (CC304), missing referenced script (CC305),
${CLAUDE_PLUGIN_ROOT} not used and not a system bin (CC306), mcp_tool referencing an undeclared server (CC310).
- MCP servers: missing
command (CC402), missing referenced script (CC403), relative command without ${CLAUDE_PLUGIN_ROOT} (CC404), suspicious secret in env (CC409).
- LSP servers: missing
command (CC502), missing extensionToLanguage (CC503), extension without leading dot (CC504), restartOnCrash without maxRestarts (CC508).
- Monitors: duplicate
name (CC603), invalid when syntax (CC604), on-skill-invoke:<name> referencing missing skill (CC605), ${user_config.X} for missing X (CC608).
- Agents: forbidden
hooks/mcpServers/permissionMode in plugin-shipped agents (CC703), invalid effort (CC705), invalid isolation (CC707), tool/disallowedTools overlap (CC709).
- Marketplace alignment: plugin missing from
plugins[] (CC803), version drift (CC804), source mismatch (CC805).
- userConfig: invalid identifier (CC910), missing required fields (CC911), suspicious secret name without
sensitive: true (CC915), channel server not in mcpServers (CC916).
- Path traversal across all components (CC900).
- Skill aggregate quality: delegated to
../evaluate-skill/SKILL.md.
Chat Requests To Recognize
Evaluate this plugin.
Audit this plugin.
Why did this score that way?
What should I fix first?
Validate the manifest.
Lint this plugin.
Inspect the hooks.
Inspect the mcp servers.
Audit the components.
Help me benchmark this plugin.
What should I run next?
Commands
node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" start <plugin-root> --request "Evaluate this plugin." --format markdown
node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" analyze <plugin-root> --format markdown
node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" validate <plugin-root> --strict
node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" inspect <plugin-root> --component all --format markdown
node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" inspect <plugin-root> --component hooks --format markdown
node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" inspect <plugin-root> --component mcp --format markdown
node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" inspect <plugin-root> --component agents --format markdown
node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" start <plugin-root> --request "What should I run next?" --format markdown
node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" compare before.json after.json
node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" report result.json --format html --output ./cc-plugin-eval-report.html
node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" init-benchmark <plugin-root>
node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" benchmark <plugin-root>
Reference
../../references/chat-first-workflows.md
../../references/component-validators.md
1---2name: evaluate-plugin3description: Audit a local Claude Code bundle that has .claude-plugin/plugin.json: validate the manifest, lint hooks, check mcp/lsp servers, monitors, and agents, then rank fixes. Use when the user says "audit this", "validate the manifest", "lint the hooks", "why did it score that way", or "benchmark this".4---5# Evaluate Plugin67Use this skill when the target is a plugin root with `.claude-plugin/plugin.json`. If the target is a single `SKILL.md` directory, hand off to `../evaluate-skill/SKILL.md` instead.89The runnable commands below invoke the shipped script through the plugin root, which works in any checkout: `node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" <command> <args>`. Inline mentions of `cc-plugin-eval <command>` are shorthand for that same invocation; the bare `cc-plugin-eval` alias only exists if you ran `npm link` in the plugin directory.1011## When To Use1213- The path passed by the user contains `.claude-plugin/plugin.json`.14- The user's question is about the bundle as a whole, not a single skill.15- The user says "audit", "validate", "lint", "inspect", or "benchmark this plugin".1617If the path is a `SKILL.md` or a directory holding one, route to `../evaluate-skill/SKILL.md`. If the path contains neither, treat it as a generic directory and run `cc-plugin-eval analyze <path>` to surface the file-level signals.1819## Workflow20211. Treat "Evaluate this plugin." as the default entrypoint.222. If the request comes in as natural chat language, run `cc-plugin-eval start <plugin-root> --request "<user request>" --format markdown` first so the user sees the routed local path.233. Run `cc-plugin-eval analyze <plugin-root> --format markdown`.244. Read `Fix First` before drilling into manifest findings, hook findings, MCP/LSP findings, monitor/agent findings, marketplace findings, then nested skill findings.255. If the plugin contains multiple skills, summarize the strongest and weakest ones explicitly.266. If the user wants a CI-friendly pass/fail check, run `cc-plugin-eval validate <plugin-root> --strict`. Exit code 2 means at least one warn or fail finding fired.277. If the user wants component-only output (only hooks, only mcp, etc.), run `cc-plugin-eval inspect <plugin-root> --component <name>`.288. If the user wants measured usage, switch to "Help me benchmark this plugin." and use the starter benchmark flow.299. If the user wants trend data, compare two JSON outputs with `cc-plugin-eval compare before.json after.json`.3031## Plugin-Specific Priorities3233- `.claude-plugin/plugin.json` validity: missing `name` (CC101), invalid `name` (CC102), invalid SemVer (CC103), env-var leak in metadata (CC110), files in `.claude-plugin/` other than `plugin.json` (CC120), path-shape violations (CC130), missing path on disk (CC131).34- Hooks: invalid event name (CC302), case-wrong event (CC303), invalid hook type (CC304), missing referenced script (CC305), `${CLAUDE_PLUGIN_ROOT}` not used and not a system bin (CC306), `mcp_tool` referencing an undeclared server (CC310).35- MCP servers: missing `command` (CC402), missing referenced script (CC403), relative `command` without `${CLAUDE_PLUGIN_ROOT}` (CC404), suspicious secret in `env` (CC409).36- LSP servers: missing `command` (CC502), missing `extensionToLanguage` (CC503), extension without leading dot (CC504), `restartOnCrash` without `maxRestarts` (CC508).37- Monitors: duplicate `name` (CC603), invalid `when` syntax (CC604), `on-skill-invoke:<name>` referencing missing skill (CC605), `${user_config.X}` for missing X (CC608).38- Agents: forbidden `hooks`/`mcpServers`/`permissionMode` in plugin-shipped agents (CC703), invalid `effort` (CC705), invalid `isolation` (CC707), tool/disallowedTools overlap (CC709).39- Marketplace alignment: plugin missing from `plugins[]` (CC803), version drift (CC804), source mismatch (CC805).40- userConfig: invalid identifier (CC910), missing required fields (CC911), suspicious secret name without `sensitive: true` (CC915), channel `server` not in `mcpServers` (CC916).41- Path traversal across all components (CC900).42- Skill aggregate quality: delegated to `../evaluate-skill/SKILL.md`.4344## Chat Requests To Recognize4546- `Evaluate this plugin.`47- `Audit this plugin.`48- `Why did this score that way?`49- `What should I fix first?`50- `Validate the manifest.`51- `Lint this plugin.`52- `Inspect the hooks.`53- `Inspect the mcp servers.`54- `Audit the components.`55- `Help me benchmark this plugin.`56- `What should I run next?`5758## Commands5960```bash61node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" start <plugin-root> --request "Evaluate this plugin." --format markdown62node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" analyze <plugin-root> --format markdown63node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" validate <plugin-root> --strict64node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" inspect <plugin-root> --component all --format markdown65node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" inspect <plugin-root> --component hooks --format markdown66node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" inspect <plugin-root> --component mcp --format markdown67node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" inspect <plugin-root> --component agents --format markdown68node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" start <plugin-root> --request "What should I run next?" --format markdown69node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" compare before.json after.json70node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" report result.json --format html --output ./cc-plugin-eval-report.html71node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" init-benchmark <plugin-root>72node "${CLAUDE_PLUGIN_ROOT}/scripts/cc-plugin-eval.js" benchmark <plugin-root>73```7475## Reference7677- `../../references/chat-first-workflows.md`78- `../../references/component-validators.md`