Package it as a plugin

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

πŸ“‹SkillsYour procedures
πŸ‘₯AgentsYour team
πŸ”’HooksYour locks
⌨️CommandsYour shortcuts

One command instead of an afternoon of copying folders.

When it's worth it

If none of those are true, skip this. A folder you copy occasionally is fine.

Plain English

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.

What the folder has to look like

This is the part people get wrong, so it is worth copying exactly.

my-plugin/
β”œβ”€β”€ .claude-plugin/plugin.json
β”œβ”€β”€ skills/invoicing/SKILL.md
β”œβ”€β”€ agents/bookkeeper.md
β”œβ”€β”€ hooks/hooks.json
└── commands/weekly-report.md

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.

Do this now
  1. Run 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.
  2. Copy your skills into skills/, your agents into agents/, your commands into commands/.
  3. Move your hook settings out of .claude/settings.json and into hooks/hooks.json.
  4. Put the folder in version control so you can roll back a bad change.
  5. Try it before you share it: 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
How to know it worked

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.

That's the course

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