validate-plugin — Claude Code skill: what it does, how to install
Checks a Claude Code plugin’s structure, frontmatter, and MCP tool references before publishing or after changes.
npx skills add ruvnet/ruflo --skill validate-plugin -a claude-codeWhat validate-plugin does
This skill checks for .claude-plugin/plugin.json, required manifest fields, semantic version format, and whether the plugin name matches its directory. It also flags skills, commands, and agents arrays in plugin.json, because Claude Code rejects plugins that contain those legacy arrays.
It scans skills/*/SKILL.md, commands/*.md, and agents/*.md to validate auto-discovered files. The checks cover required frontmatter fields, wildcard-free allowed-tools, and files placed outside .claude-plugin/.
MCP tool names are compared with the output of npx @claude-flow/cli@latest mcp tools to catch typos. Inside the ruflo repository, it also runs audit scripts; fix reported failures before publishing the plugin.
What it helps with
- check a plugin directory structure
- find legacy arrays in
plugin.json - validate
SKILL.mdfrontmatter - compare MCP tool names with installed tools
- detect files placed in the wrong directories
Example prompts for the agent
- Use
validate-pluginto check the plugin in./my-plugin. - Run
validate-pluginforplugins/exampleand report frontmatter errors. - Check
./my-pluginfor invalid MCP tool references withvalidate-plugin.
How to install validate-plugin
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill validate-plugin -a claude-code2Manually: put the files in place
~/.claude/skills/validate-plugin/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/validate-plugin/
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill validate-plugin -a codex2Manually: put the files in place
.agents/skills/validate-plugin/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill validate-plugin -a cursor2Manually: put the files in place
.cursor/skills/validate-plugin/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install ruvnet/ruflo validate-plugin2Manually: put the files in place
.github/skills/validate-plugin/SKILL.md1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill validate-plugin -a gemini-cli2Platform CLI
gemini skills install https://github.com/ruvnet/ruflo --path plugins/ruflo-plugin-creator/skills/validate-pluginManually: put the files in place
.devin/skills/validate-plugin/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill validate-plugin -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about validate-plugin
How do I install validate-plugin in Claude Code?
Run npx skills add ruvnet/ruflo --skill validate-plugin -a claude-code. The skill file is placed at ~/.claude/skills/validate-plugin/SKILL.md.
What does validate-plugin do?
It validates a Claude Code plugin manifest, auto-discovered skills, commands, agents, and file frontmatter. It reports pass or fail for each check and suggests fixes.
How does validate-plugin check MCP tools?
It compares names in allowed-tools against the tool list from npx @claude-flow/cli@latest mcp tools. MCP references must use the mcp__plugin_ruflo-core_ruflo__* prefix.
Source text
SKILL.md · MIT
--- name: validate-plugin description: Validate a Claude Code plugin structure, frontmatter, and MCP tool references argument-hint: "[plugin-path]" allowed-tools: mcp__plugin_ruflo-core_ruflo__transfer_plugin-info Bash Read Glob Grep --- # Validate Plugin Validate that a plugin follows the correct Claude Code plugin format. ## When to use After creating or modifying a plugin, run validation to catch structural issues before publishing. ## Checks performed 1. **Directory structure** — `.claude-plugin/plugin.json` exists at plugin root 2. **plugin.json schema** — required fields present (name, description, version, non-empty keywords array); `name` equals the directory name; version is semver 3. **Skills auto-discovery** — every `skills/<name>/SKILL.md` is a valid skill (Claude Code auto-discovers from directory; `plugin.json` MUST NOT list a `skills` array) 4. **Commands auto-discovery** — every `commands/<name>.md` is a valid command (auto-discovered; no `commands` array in `plugin.json`) 5. **Agents auto-discovery** — every `agents/<name>.md` is a valid agent (auto-discovered; no `agents` array in `plugin.json`) 6. **No legacy arrays in plugin.json** — presence of `skills`, `commands`, or `agents` arrays in `plugin.json` is a validation error (they cause Claude Code to reject the plugin) 7. **SKILL.md frontmatter** — each skill has `name`, `description`, and `allowed-tools` (no wildcards) 8. **Agent frontmatter** — each agent has `name`, `description`, and `model` 9. **No files in wrong locations** — skills/commands/agents not inside `.claude-plugin/` 10. **MCP tool references** — tools in `allowed-tools` use the `mcp__plugin_ruflo-core_ruflo__*` prefix AND exist: list the real tools with `npx @claude-flow/cli@latest mcp tools` and flag any name not in it (typos such as `hooks_post_task` for `hooks_post-task`, or `agentdb_pattern_search` for `agentdb_pattern-search`, are format-valid but do not exist). Also run the repo gates when inside the ruflo repo: `node scripts/audit-skill-frontmatter.mjs`, `audit-plugin-manifest.mjs`, `audit-plugin-mcp-prefix.mjs` ## Steps 1. Read the plugin's `plugin.json` and assert no `skills` / `commands` / `agents` arrays present 2. Glob `skills/*/SKILL.md`, `commands/*.md`, `agents/*.md` and validate each frontmatter 3. For each SKILL.md, verify frontmatter has required fields and `allowed-tools` has no wildcards 4. For each agent .md, verify frontmatter has required fields 5. Report pass/fail for each check with actionable fix suggestions
© ruvnet · MIT · ruvnet/ruflo