From dealdeploy
Scaffold a complete Claude Code plugin with marketplace, GitHub repo, and publish script. Use when the user wants to create a new plugin, set up a plugin marketplace, or scaffold a plugin for a customer.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dealdeploy:create-pluginThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Scaffold a Claude Code plugin end-to-end: directory structure, manifests, GitHub repo, and publish tooling.
Scaffold a Claude Code plugin end-to-end: directory structure, manifests, GitHub repo, and publish tooling.
Ask the user:
acme-tools)./<plugin-name>)<plugin-name>/
├── .claude-plugin/
│ ├── plugin.json
│ └── marketplace.json
├── skills/
│ └── hello/
│ └── SKILL.md
├── package.json
└── publish.ts
.claude-plugin/plugin.json{
"name": "<plugin-name>",
"description": "<description>",
"version": "1.0.0",
"author": {
"name": "<github-owner>"
}
}
.claude-plugin/marketplace.json{
"name": "<plugin-name>",
"owner": {
"name": "<github-owner>"
},
"metadata": {
"description": "<description>"
},
"plugins": [
{
"name": "<plugin-name>",
"source": "./",
"description": "<description>",
"version": "1.0.0"
}
]
}
Create skills/hello/SKILL.md:
---
description: Greet the user with a friendly message
disable-model-invocation: true
---
Greet the user warmly and ask how you can help them today.
Create publish.ts — bumps patch version in both plugin.json and marketplace.json, commits, tags, and pushes:
const pluginPath = new URL(".claude-plugin/plugin.json", import.meta.url).pathname;
const marketplacePath = new URL(".claude-plugin/marketplace.json", import.meta.url).pathname;
const plugin = await Bun.file(pluginPath).json();
const marketplace = await Bun.file(marketplacePath).json();
const [major, minor, patch] = plugin.version.split(".").map(Number);
plugin.version = `${major}.${minor}.${patch + 1}`;
for (const p of marketplace.plugins) {
if (p.name === plugin.name) {
p.version = plugin.version;
}
}
await Bun.write(pluginPath, JSON.stringify(plugin, null, 2) + "\n");
await Bun.write(marketplacePath, JSON.stringify(marketplace, null, 2) + "\n");
console.log(`Bumped version to ${plugin.version}`);
await Bun.$`git add -A`.quiet();
await Bun.$`git commit -m v${plugin.version}`.quiet();
await Bun.$`git tag v${plugin.version}`.quiet();
await Bun.$`git push`.quiet();
await Bun.$`git push origin v${plugin.version}`.quiet();
console.log(`Published v${plugin.version}`);
Create package.json:
{
"name": "<plugin-name>",
"private": true,
"scripts": {
"publish": "bun publish.ts"
}
}
git init
git add -A
git commit -m "Initial plugin scaffold"
gh repo create <github-owner>/<plugin-name> --private --description "<description>" --source . --push
Print this summary:
Plugin created: <github-owner>/<plugin-name> (private)
To install the plugin:
/plugin marketplace add <github-owner>/<plugin-name>
/plugin install <plugin-name>@<plugin-name>
To grant access: gh repo add-collaborator <github-owner>/<plugin-name> <their-username>
To add skills: create folders in skills/ with a SKILL.md file.
To publish updates: bun run publish
npx claudepluginhub dealdeploy/dd-plugin --plugin dealdeployCreates Claude Code plugin directory structure with .claude-plugin/plugin.json manifest and optional components like commands, agents, skills, hooks, MCP servers, scripts. Use when building a new plugin from scratch.
Guides developers in creating, scaffolding, validating, and publishing Claude Code plugins including directory structure, plugin.json schema, YAML frontmatter, agents, commands, skills, and marketplace deployment.