This skill should be used when the user asks to "create a marketplace", "set up marketplace.json", "organize multiple plugins", "distribute plugins", "host plugins", "marketplace schema", "plugin marketplace structure", "multi-plugin organization", or needs guidance on plugin marketplace creation, marketplace manifest configuration, or plugin distribution strategies.
/plugin marketplace add sjnims/plugin-dev/plugin install plugin-dev@plugin-dev-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
examples/community-marketplace.mdexamples/minimal-marketplace.mdexamples/team-marketplace.mdreferences/distribution-patterns.mdreferences/schema-reference.mdA plugin marketplace is a catalog of available plugins that enables centralized discovery, version management, and distribution. This skill covers creating and maintaining marketplaces for team or community plugin distribution.
Marketplaces provide:
| Create a Plugin | Create a Marketplace |
|---|---|
| Single-purpose extension | Collection of related plugins |
| Used directly by end users | Distributes multiple plugins |
| One team or individual maintains it | Curates plugins from various sources |
Installed via /plugin install | Added via /plugin marketplace add |
Place marketplace.json in the .claude-plugin/ directory at the repository root:
marketplace-repo/
├── .claude-plugin/
│ └── marketplace.json # Required: Marketplace manifest
├── plugins/ # Optional: Local plugin directories
│ ├── plugin-one/
│ │ └── .claude-plugin/
│ │ └── plugin.json
│ └── plugin-two/
│ └── .claude-plugin/
│ └── plugin.json
└── README.md # Recommended: Marketplace documentation
The marketplace.json manifest defines the marketplace and its available plugins.
| Field | Type | Description |
|---|---|---|
name | string | Marketplace identifier (kebab-case, no spaces) |
owner | object | Marketplace maintainer information |
plugins | array | List of available plugin entries |
{
"owner": {
"name": "Team Name",
"email": "team@example.com",
"url": "https://github.com/team"
}
}
{
"metadata": {
"description": "Brief marketplace description",
"version": "1.0.0",
"pluginRoot": "./plugins"
}
}
The pluginRoot field sets the base path for relative plugin sources.
Each plugin in the plugins array requires:
| Field | Type | Description |
|---|---|---|
name | string | Plugin identifier (kebab-case, unique within marketplace) |
source | string or object | Where to fetch the plugin |
Standard metadata fields:
description - Brief plugin descriptionversion - Plugin version (semver)author - Author information objecthomepage - Documentation URLrepository - Source code URLlicense - SPDX license identifierkeywords - Tags for discoverycategory - Plugin categorytags - Additional searchability tagsComponent configuration fields:
commands - Custom paths to command files or directoriesagents - Custom paths to agent fileshooks - Hooks configuration or path to hooks filemcpServers - MCP server configurationsFor complete field reference, see references/schema-reference.md.
For plugins within the same repository:
{
"name": "my-plugin",
"source": "./plugins/my-plugin"
}
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo"
}
}
For GitLab, Bitbucket, or self-hosted git:
{
"name": "git-plugin",
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git"
}
}
The strict field controls whether plugins must have their own plugin.json:
| Mode | Behavior |
|---|---|
strict: true (default) | Plugin must include plugin.json; marketplace entry supplements it |
strict: false | plugin.json optional; marketplace entry serves as complete manifest |
Use strict: false when:
{
"name": "external-plugin",
"source": {
"source": "github",
"repo": "external/plugin"
},
"description": "Complete metadata here",
"version": "2.0.0",
"strict": false
}
version for every plugin entrydescription for discoverabilitymetadata.version/plugin marketplace add owner/repoextraKnownMarketplaces in .claude/settings.json/plugin marketplace add ./path during developmentFor detailed distribution patterns, see references/distribution-patterns.md.
Validate marketplace structure before publishing:
# Check JSON syntax
jq . .claude-plugin/marketplace.json
# Verify required fields
jq 'has("name") and has("owner") and has("plugins")' .claude-plugin/marketplace.json
Use the plugin-validator agent with marketplace support for comprehensive validation.
{
"name": "team-tools",
"owner": {
"name": "DevTools Team",
"email": "devtools@company.com",
"url": "https://github.com/company"
},
"metadata": {
"description": "Internal development tools for the engineering team",
"version": "1.0.0"
},
"plugins": [
{
"name": "code-formatter",
"source": "./plugins/formatter",
"description": "Automatic code formatting on save",
"version": "2.1.0"
},
{
"name": "security-scanner",
"source": {
"source": "github",
"repo": "company/security-plugin"
},
"description": "Security vulnerability detection",
"version": "1.5.0",
"category": "security"
}
]
}
references/schema-reference.md - Complete field reference for marketplace.jsonreferences/distribution-patterns.md - Hosting and team distribution strategiesexamples/minimal-marketplace.md - Single plugin marketplace templateexamples/team-marketplace.md - Internal company marketplace templateexamples/community-marketplace.md - Public multi-plugin marketplace templateplugin.json details/plugin-dev:create-marketplace - Guided marketplace creation workflowThis repository (plugin-dev) is itself a marketplace. Examine .claude-plugin/marketplace.json at the repository root for a real-world example of marketplace structure and plugin organization.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.