Help us improve
Share bugs, ideas, or general feedback.
From claude-code-dev
Register a plugin in marketplace.json for plugin discovery and loading by the CrewChief framework
npx claudepluginhub manifoldlogic/claude-code-plugins --plugin claude-code-devHow this skill is triggered — by the user, by Claude, or both
Slash command
/claude-code-dev:plugin-marketplace-registrationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill documents how to register a plugin in the `.claude-plugin/marketplace.json` file, which is the plugin discovery mechanism for the CrewChief plugin framework. Without marketplace registration, a plugin will not be discoverable or loadable, even if fully implemented.
Guides creating, validating, and managing Claude Code plugin marketplaces including marketplace.json schema, plugin entries, and best practices for setup and distribution.
Guides creation of Claude Code plugin marketplaces with marketplace.json manifests, directory structures, schema, owner metadata, and distribution strategies for teams.
Guides creation, validation, and management of Claude Code plugin marketplaces and marketplace.json files.
Share bugs, ideas, or general feedback.
This skill documents how to register a plugin in the .claude-plugin/marketplace.json file, which is the plugin discovery mechanism for the CrewChief plugin framework. Without marketplace registration, a plugin will not be discoverable or loadable, even if fully implemented.
The marketplace.json file contains a plugins array where each entry defines a plugin's name, source location, and description. This skill covers the standard registration format and validation steps.
Use this skill when:
Each plugin entry in .claude-plugin/marketplace.json follows this JSON structure:
{
"name": "plugin-name",
"source": "./plugins/plugin-name",
"description": "Brief description of plugin capabilities"
}
Field requirements:
./plugins/{name})Open marketplace.json:
# Located at repo root
open .claude-plugin/marketplace.json
Locate the plugins array:
{
"name": "crewchief",
"plugins": [
// existing plugin entries
]
}
Add new entry at end of array:
{
"name": "crewchief",
"plugins": [
// ... existing plugins ...
{
"name": "your-plugin",
"source": "./plugins/your-plugin",
"description": "Your plugin description here"
}
]
}
Note: Array order is not significant for loading. Appending at the end minimizes diff noise.
Validate JSON syntax:
jq . .claude-plugin/marketplace.json > /dev/null && echo "Valid JSON" || echo "Invalid JSON"
Verify plugin.json exists at source location:
test -f "plugins/your-plugin/.claude-plugin/plugin.json" && echo "plugin.json exists" || echo "plugin.json missing"
Marketplace Version Bump (Required)
After modifying marketplace.json, bump the marketplace version:
Determine the bump type:
| Change Type | Bump | Example |
|---|---|---|
| Description update, metadata fix | PATCH (0.0.x) | 0.2.0 -> 0.2.1 |
| New plugin registered | MINOR (0.x.0) | 0.2.1 -> 0.3.0 |
| Breaking structural change | MAJOR (x.0.0) | 0.3.0 -> 1.0.0 |
Default to PATCH unless a new plugin is being added (MINOR) or the marketplace structure changes (MAJOR).
Edit the version field in .claude-plugin/marketplace.json:
{
"version": "0.2.1" // <-- bump this
}
Verify the bump:
jq -r '.version' .claude-plugin/marketplace.json
From ISKIM ticket (adding iTerm plugin):
Before (marketplace.json lines 8-48):
{
"name": "crewchief",
"plugins": [
{"name": "github-actions", "source": "./plugins/github-actions", "description": "..."},
{"name": "claude-code-dev", "source": "./plugins/claude-code-dev", "description": "..."},
{"name": "sdd", "source": "./plugins/sdd", "description": "..."},
{"name": "maproom", "source": "./plugins/maproom", "description": "..."},
{"name": "obsidian", "source": "./plugins/obsidian", "description": "..."},
{"name": "worktree", "source": "./plugins/worktree", "description": "..."},
{"name": "game-design", "source": "./plugins/game-design", "description": "..."},
{"name": "vscode", "source": "./plugins/vscode", "description": "..."}
]
}
After (iTerm added):
{
"name": "crewchief",
"plugins": [
{"name": "github-actions", "source": "./plugins/github-actions", "description": "..."},
{"name": "claude-code-dev", "source": "./plugins/claude-code-dev", "description": "..."},
{"name": "sdd", "source": "./plugins/sdd", "description": "..."},
{"name": "maproom", "source": "./plugins/maproom", "description": "..."},
{"name": "obsidian", "source": "./plugins/obsidian", "description": "..."},
{"name": "worktree", "source": "./plugins/worktree", "description": "..."},
{"name": "game-design", "source": "./plugins/game-design", "description": "..."},
{"name": "vscode", "source": "./plugins/vscode", "description": "..."},
{"name": "iterm", "source": "./plugins/iterm", "description": "iTerm2 tab and pane management for macOS host and Linux container environments"}
]
}
Before committing marketplace.json changes:
jq . to verify)plugins/{name}/.claude-plugin/plugin.json./plugins/{name}{source}/.claude-plugin/plugin.jsonTask: Register the iTerm plugin in marketplace.json
Entry added:
{
"name": "iterm",
"source": "./plugins/iterm",
"description": "iTerm2 tab and pane management for macOS host and Linux container environments"
}
Validation:
# Check JSON syntax
jq . .claude-plugin/marketplace.json
# Verify plugin.json exists
test -f plugins/iterm/.claude-plugin/plugin.json && echo "OK"
# Verify name matches
jq -r '.name' plugins/iterm/.claude-plugin/plugin.json
# Output: iterm
# List all registered plugins
jq -r '.plugins[].name' .claude-plugin/marketplace.json
# Count registered plugins
jq '.plugins | length' .claude-plugin/marketplace.json
# Find specific plugin
jq '.plugins[] | select(.name == "iterm")' .claude-plugin/marketplace.json
.claude-plugin/marketplace.json (marketplace configuration)plugins/{name}/.claude-plugin/plugin.json (plugin metadata)