Create a new plugin scaffold with configurable components
Generate a new Claude Code plugin scaffold with configurable components (commands, MCP server, hooks, skills) and implementation type (Markdown or TypeScript). Validates plugin name format, checks for conflicts, and registers the plugin in marketplace.json.
/plugin marketplace add nathanvale/side-quest-marketplace/plugin install firecrawl@side-quest-marketplaceplugin-nameclaude-sonnet-4-5-20250929Generate a new plugin scaffold with configurable components following the SideQuest marketplace patterns.
You are a plugin scaffolding specialist. Create well-structured Claude Code plugins using the established patterns.
The plugin name is provided as $1 (or $ARGUMENTS).
Plugin name must be in kebab-case format:
my-plugin, code-analyzer, git-helperCheck for conflicts:
plugins/{name} directory doesn't already existUse AskUserQuestion to ask the user which components to include:
Question: "Which components should this plugin include?"
| Component | Description |
|---|---|
| commands | Slash commands (e.g., /plugin:action) |
| mcp-server | MCP server with tools for Claude to call |
| hooks | Event hooks (PostToolUse, PreToolUse, etc.) |
| skills | Autonomous capabilities Claude can invoke |
Enable multi-select. Default to all components if user doesn't specify.
Use AskUserQuestion to ask about implementation type:
Question: "What implementation type?"
| Type | Description |
|---|---|
| Markdown only | Commands/skills are just prompts, no code (stub scripts) |
| TypeScript | Includes CLI tools, utilities, or testable logic (full scripts + src/) |
Auto-select TypeScript if mcp-server component was chosen (MCP always needs code).
Based on selections, create:
MARKDOWN ONLY: TYPESCRIPT:
plugins/{name}/ plugins/{name}/
├── .claude-plugin/ ├── .claude-plugin/
│ └── plugin.json │ └── plugin.json
├── package.json ←(stubs) ├── package.json ←(full)
├── commands/ ├── tsconfig.json
│ └── sample.md ├── src/
└── skills/ │ ├── index.ts
└── {name}/ │ └── index.test.ts
└── SKILL.md ├── commands/
│ └── sample.md
└── skills/
└── {name}/
└── SKILL.md
Markdown only (stub scripts):
{
"scripts": {
"test": "echo 'No tests'",
"typecheck": "echo 'No typecheck'"
}
}
TypeScript (full scripts):
{
"scripts": {
"test": "bun test --recursive",
"typecheck": "tsc --noEmit",
"format": "biome format --write .",
"lint": "biome lint .",
"check": "biome check --write ."
},
"devDependencies": {
"@types/bun": "latest"
}
}
Default to git config:
git config user.namegit config user.emailUse templates from $PLUGIN_DIR/src/templates.ts:
packageJsonForType() based on implementation typemcpez library${CLAUDE_PLUGIN_ROOT}After generating files, update .claude-plugin/marketplace.json:
plugins array:
{
"name": "{name}",
"source": "./plugins/{name}",
"description": "{description}",
"version": "1.0.0",
"author": { "name": "{author}" },
"category": "development",
"keywords": ["{name}"]
}
After creating the plugin:
Run setup commands (TypeScript only):
cd plugins/{name} && bun install
Verify generation (TypeScript only):
bun test --recursive
Output summary:
/plugin-template:strip if they want to remove TypeScript later/plugin-template:upgrade if they want to add TypeScript laterUser: /plugin-template:create my-awesome-plugin
Expected flow:
${CLAUDE_PLUGIN_ROOT} for portabilityNow create the plugin scaffold based on the provided name and user preferences.