You'll finish with: Your whole setup installable in one command.
You've built a setup. Now make it portable β a second business, a second machine, or a staff member's laptop.
Everything, in one installable bundle
One command instead of an afternoon of copying folders.
If none of those are true, skip this. A folder you copy occasionally is fine.
A plugin is an ordinary folder with a name and a version number, laid out so Claude Code can install the whole thing in one command instead of you dragging files around. Your skills, agents, hooks and commands each sit in a folder of their own inside it.
This is the part people get wrong, so it is worth copying exactly.
Two things that catch everyone. The component folders sit at the top of the plugin folder β not inside a .claude folder. The only thing in .claude-plugin/ is plugin.json. And your hooks go in hooks/hooks.json, not in settings.json: copying your settings file across will not bring the hooks with it.
Rules donβt travel this way. A plugin does not carry CLAUDE.md or .claude/rules/ β those stay with the project they belong to. If a standard needs to go with the bundle, write it as a skill instead.
claude plugin init my-tool. It makes the folder and writes plugin.json for you, so you donβt have to hand-write the manifest.skills/, your agents into agents/, your commands into commands/..claude/settings.json and into hooks/hooks.json.claude --plugin-dir ./my-plugin# make the folder
claude plugin init my-tool
# try it without installing it
claude --plugin-dir ./my-plugin
# check the folder layout is valid
claude plugin validate ./my-plugin
# once it lives in a marketplace, this is the install
claude plugin install my-tool@my-marketplace
You can test the whole thing on the machine youβre already sitting at. From the folder above your plugin, run claude --plugin-dir ./my-plugin, then type /plugin list. Your plugin should be named in the list. Ask for one of its skills by name and it should run.
Plugin listed but the skills missing? That is nearly always the layout β skills/ has to be at the top of the plugin folder, not tucked under .claude/. Nothing listed at all? Run claude plugin validate ./my-plugin; usually plugin.json is in the wrong place or has a typo in it.
Claude Code installed, permission modes understood, skills and rules split properly, and the portable half of the setup packaged. This is the deepest course here β if you've finished it, you're past what most people selling workshops are teaching.
All courses Β· Start here Β· Privacy