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-devThis skill uses the workspace's default tool permissions.
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.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
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)