From all-skills
Guides creating and managing Claude Code plugin marketplaces. Validates marketplace.json schema, configures plugin entries, and troubleshoots repository setups.
npx claudepluginhub vinnie357/claude-skills --plugin alliumThis skill uses the workspace's default tool permissions.
Guide for creating, validating, and managing plugin marketplaces for Claude Code. Includes schema validation, best practices, and automated tools.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
Guide for creating, validating, and managing plugin marketplaces for Claude Code. Includes schema validation, best practices, and automated tools.
Activate this skill when:
.claude-plugin/marketplace.json filesAll marketplaces must be located at .claude-plugin/marketplace.json in the repository root.
Required Fields:
name: Marketplace identifier (kebab-case, lowercase alphanumeric and hyphens only)owner: Object with maintainer details (name required, email optional)plugins: Array of plugin definitions (can be empty)Optional Metadata:
metadata.description: Summary of marketplace purposemetadata.version: Marketplace version tracking (semantic versioning recommended)metadata.pluginRoot: Base directory for relative plugin source pathsIMPORTANT: Schema Relationship
Plugin entries use the plugin manifest schema with all fields made optional, plus marketplace-specific fields (source, strict, category, tags). This means any field valid in a plugin.json file can also be used in a marketplace entry.
strict: false, the marketplace entry serves as the complete plugin manifest if no plugin.json existsstrict: true (default), marketplace fields supplement the plugin's own manifest fileEach plugin entry in the plugins array requires:
Mandatory:
name: Plugin identifier (kebab-case)source: Location specification (string path or object)Standard Metadata:
description: Brief explanation of plugin functionalityversion: Semantic version numberauthor: Creator information (object with name, optional email)homepage: Documentation or project URLrepository: Source control URLlicense: SPDX license identifier (e.g., MIT, Apache-2.0)keywords: Array of discovery and categorization tagscategory: Organizational groupingtags: Additional searchability termsComponent Configuration:
commands: Custom paths to command files or directoriesagents: Custom paths to agent fileshooks: Custom hooks configuration or path to hooks filemcpServers: MCP server configurations or path to MCP configskills: Array of skill directory pathsStrict Mode Control:
strict: Boolean (default: true)
true: Plugin must include plugin.json; marketplace fields supplement itfalse: Marketplace entry serves as complete manifest (no plugin.json needed)Dependencies:
dependencies: Array of plugin names this plugin depends on (format: "namespace:plugin-name")"source": "./plugins/my-plugin"
// In marketplace metadata
"metadata": {
"pluginRoot": "./plugins"
}
// In plugin entry
"source": "my-plugin" // Resolves to ./plugins/my-plugin
"source": {
"source": "github",
"repo": "owner/plugin-repo",
"path": "optional/subdirectory",
"branch": "main"
}
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git",
"branch": "main"
}
Use ${CLAUDE_PLUGIN_ROOT} in paths to reference the plugin's installation directory:
{
"skills": [
"${CLAUDE_PLUGIN_ROOT}/skills/my-skill"
],
"commands": [
"${CLAUDE_PLUGIN_ROOT}/commands"
]
}
This ensures paths work correctly regardless of installation location.
Use strict: false to define complete plugin manifests inline without requiring plugin.json:
{
"name": "my-plugin",
"source": "./plugins/my-plugin",
"strict": false,
"description": "Complete plugin definition inline",
"version": "1.0.0",
"author": {
"name": "Developer Name"
},
"skills": [
"${CLAUDE_PLUGIN_ROOT}/skills/skill-one",
"${CLAUDE_PLUGIN_ROOT}/skills/skill-two"
]
}
Customize component locations:
{
"name": "custom-paths",
"source": "./plugins/custom",
"strict": false,
"commands": ["${CLAUDE_PLUGIN_ROOT}/custom-commands"],
"agents": ["${CLAUDE_PLUGIN_ROOT}/custom-agents"],
"hooks": {
"onInstall": "${CLAUDE_PLUGIN_ROOT}/hooks/install.sh"
},
"mcpServers": "${CLAUDE_PLUGIN_ROOT}/mcp-config.json"
}
With strict: true, marketplace entries can add metadata not in plugin.json:
{
"name": "existing-plugin",
"source": "./plugins/existing",
"strict": true,
"category": "development",
"keywords": ["added", "from", "marketplace"],
"homepage": "https://docs.example.com"
}
Use the provided Nushell script to validate marketplace.json:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-marketplace.nu .claude-plugin/marketplace.json
This validates:
Validate individual plugin entries:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-plugin-entry.nu .claude-plugin/marketplace.json "plugin-name"
Checks:
Check for circular dependencies and missing dependencies:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-dependencies.nu .claude-plugin/marketplace.json
vinnie357)elixir-phoenix, rust-tools, core-skills)development, language, tools, frontend, backend, metadependencies for plugins that require other pluginsall-skills) that bundles related pluginsall-skills:core)Use strict: false when:
Use strict: true when:
{
"metadata": {
"pluginRoot": "./plugins"
},
"plugins": [
{
"name": "core",
"source": "core" // Resolves to ./plugins/core
},
{
"name": "external",
"source": {
"source": "github",
"repo": "org/repo"
}
}
]
}
// ❌ Invalid
"name": "myPlugin"
"name": "my_plugin"
"name": "My-Plugin"
// ✅ Valid
"name": "my-plugin"
"name": "core-skills"
// ❌ Invalid
{
"name": "marketplace"
}
// ✅ Valid
{
"name": "marketplace",
"owner": {
"name": "Developer Name"
}
}
// ❌ Invalid (path doesn't exist)
"source": "./plugins/nonexistent"
// ✅ Valid (path exists)
"source": "./plugins/core"
// ❌ Invalid
{
"plugins": [
{
"name": "plugin-a",
"dependencies": ["namespace:plugin-b"]
},
{
"name": "plugin-b",
"dependencies": ["namespace:plugin-a"]
}
]
}
mkdir -p .claude-plugin
Use the validation script to generate a template:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/init-marketplace.nu
This creates .claude-plugin/marketplace.json with required fields.
For each plugin, decide on strict mode and add entry:
{
"name": "marketplace-name",
"owner": {
"name": "Your Name",
"email": "you@example.com"
},
"metadata": {
"description": "Your marketplace description",
"version": "1.0.0",
"pluginRoot": "./plugins"
},
"plugins": [
{
"name": "plugin-name",
"source": "plugin-name",
"strict": false,
"description": "Plugin description",
"version": "1.0.0",
"author": {
"name": "Your Name"
},
"license": "MIT",
"category": "development",
"skills": [
"${CLAUDE_PLUGIN_ROOT}/skills/skill-one"
]
}
]
}
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-marketplace.nu .claude-plugin/marketplace.json
claude-code install ./
Use the provided script to analyze existing structure:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/analyze-plugins.nu .
This scans for plugin.json files and suggests marketplace.json structure.
source path is correctpluginRoot in metadata if using relative paths${CLAUDE_PLUGIN_ROOT} if neededRun validation script with verbose mode:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-marketplace.nu .claude-plugin/marketplace.json --verbose
For detailed schema specifications and examples, see:
references/schema-specification.md: Complete JSON schemareferences/examples.md: Real-world marketplace examplesreferences/migration-guide.md: Step-by-step migration instructionsAll validation and utility scripts are located in scripts/:
validate-marketplace.nu: Full marketplace validationvalidate-plugin-entry.nu: Individual plugin entry validationvalidate-dependencies.nu: Dependency graph validationinit-marketplace.nu: Generate marketplace templateanalyze-plugins.nu: Analyze existing plugin structureformat-marketplace.nu: Format and sort marketplace.jsonExecute scripts with:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/[script-name].nu [args]