plugin-builder
Skill0 starsChanged 4 months agoMITView on GitHub
Use when someone asks to build, create, package, bundle, optimize, or audit a Claude Code plugin or marketplace — a distributable bundle of skills + agents + commands + hooks + MCP servers installed via `/plugin`. Triggers — "build a plugin", "package this as a plugin", "bundle my skills into a plugin", "make a marketplace", "ship Servy's capabilities", "turn these skills into something shareable", "audit my plugin", or `/plugin-builder`. The packaging + distribution sibling of `/skill-builder`, `/agent-builder`, `/agents-team-builder`, `/routines-builder`. Runs a decision gate and Discovery Interview before writing files.
5 other projects use a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- beCyborg/jadlis-plugin-creatortheir own version, first seen Nov 8, 2026
- vi0let-dev/plugin-buildertheir own version, first seen Oct 25, 2026
- pobsteta/aigoratheir own version, first seen Oct 2, 2026
- vellum-ai/vellum-assistanttheir own version, first seen Jul 8, 2026
- GerardoRdz96/aios-starter-kitedited, first seen Jul 1, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 1
- GerardoRdz96/aios-starter-kit★ 329% same
Wrote their own version · 4
- vellum-ai/vellum-assistant★ 1.5ksame name
- beCyborg/jadlis-plugin-creator★ 0same name
- pobsteta/aigora★ 0same name
- vi0let-dev/plugin-builder★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository50 other files it gives its agents.
- aegisSkill
- agent-builderSkill
- agents-team-builderSkill
- ai-applySkill
- auditSkill
- bottleneckSkill
- buildSkill
- capability-radarSkill
- clay-leadsSkill
- cowatchSkill
- deepforkSkill
- design-blueprintSkill
- evalSkill
- fable-modeSkill
- financesSkill
- forgeSkill
- framework-builderSkill
- grill-meSkill
- hooks-builderSkill
- level-upSkill
- loops-builderSkill
- meeting-hudSkill
- multi-brainSkill
- nate-watchSkill
- onboardSkill
- ponytailSkill
- presentSkill
- prompt-evalSkill
- radar-harvestSkill
- rag-forgeSkill
- rlsgateSkill
- rnd-loopSkill
- rndSkill
- roastSkill
- routines-builderSkill
- servy-routineSkill
- session-handoffSkill
- skill-builderSkill
- skill-harvestSkill
- sparkSkill
- storm-researchSkill
- studySkill
- talkSkill
- taste-skillSkill
- verify-loopSkill
- verify-specificsSkill
- wheel-of-lifeSkill
- workanaSkill
- workaround-builderSkill
- workflow-builderSkill
The file
We split this skill into the rules it gives an agent
6 rules. 0 are common, 5 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
5
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 53
MCP check: If the plugin's value is wrapping an external tool, prefer bundling a CLI-backed skill/command over an MCP server (CLI > API > …
- Distinctive: line 55
If 1–2 don't justify a plugin, recommend the right primitive builder and stop.
- Distinctive: line 59
Ask with AskUserQuestion, one round at a time.
- Distinctive: line 101
Only build after confirmation.
- Very specific: line 142
Read the plugin's plugin.json + tree first — never optimize what you haven't read.
- Distinctive: line 158
Read the files, run the checklist, fix issues before marking complete.
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
What This Skill Does
Guides the creation, optimization, and auditing of Claude Code plugins and marketplaces using verified format facts and Servy's conventions. A plugin is a single installable package that bundles any mix of commands, agents, skills, hooks, and MCP servers, distributed through a marketplace and installed with claude plugin install.
Use this whenever:
- Packaging existing Servy capabilities to share or ship (the headline path — bundle a set of skills/agents/routines you already have into one installable plugin).
- Authoring a brand-new plugin from scratch.
- Deciding whether something should even be a plugin (vs leaving it as a loose skill/agent/routine).
- Standing up a marketplace so plugins are actually installable.
- Optimizing or auditing an existing plugin/marketplace.
This is the packaging + distribution sibling of the four primitive builders. They each make one loose capability that lives in .claude/. This one bundles capabilities and makes them shippable. It sits a layer above the others — build primitives with their builders, then use this to ship them. Full verified schema (plugin.json, marketplace.json, MCP, hooks, CLI) lives in reference.md.
Quick Start: What Is a Plugin?
A plugin is a directory with one required file — .claude-plugin/plugin.json — and components (commands/, agents/, skills/, hooks/, MCP) at its root. A marketplace (.claude-plugin/marketplace.json) lists plugins and is what makes them installable via /plugin install name@marketplace.
Why a plugin and not just loose files? The other four builders drop a capability into .claude/ where this one project uses it. A plugin is the unit of distribution: it versions a bundle, names it, and ships it — to teammates, to the public, or across your own machines — with one install command. If you'll never distribute it, you probably don't need a plugin.
Plugin vs the four primitive builders
| You want… | Use | Why |
| One reusable workflow/SOP in this project | Skill (/skill-builder) | Lives loose in .claude/skills/, no packaging needed |
| One isolated-context delegate job | Agent (/agent-builder) | Lives loose in .claude/agents/ |
| A small crew that talks peer-to-peer | Agent team (/agents-team-builder) | Lives loose in .claude/teams/ |
| Something that runs unattended on a schedule | Routine (/servy-routine) | Runs in the cloud as Gera |
| To bundle + version + ship any mix of the above as ONE installable thing | Plugin (this skill) | Distribution is the whole point |
The relationship: a plugin is a container, not a competitor. Build the skills/agents/hooks first (with their builders), then plugin-builder packages them. If the request is "make a capability," triage with the front door in CLAUDE.md first; reach for plugin-builder when the request is "ship / share / distribute a capability."
Mode 1: Build / Package a Plugin
Step 0 — The Decision Gate (do this FIRST, before any interview)
Pressure-test whether a plugin is the right tool:
- Is there a real distribution need? Will this leave the project — go to a teammate, the public, or another machine? No → don't build a plugin. Leave it as a loose skill/agent/routine. A plugin you never distribute is just overhead.
- Is it more than a single trivial primitive? One tiny skill used only here doesn't need a package. Bundle when there's a set, or when versioned/installable distribution genuinely helps.
- SoftServe boundary (hard gate). A plugin is built to leave the machine. If the bundle would contain SoftServe Internal+ content, customer IP, or client code and is destined for any non-SoftServe-managed target → stop. Public/shared plugins are personal- or public-data only (
references/softserve-ai-usage-policy.md). - MCP check. If the plugin's value is wrapping an external tool, prefer bundling a CLI-backed skill/command over an MCP server (CLI > API > MCP — MCP costs ~35× the tokens). If you keep MCP, justify it.
If 1–2 don't justify a plugin, recommend the right primitive builder and stop. If the SoftServe gate trips, stop and say so. Otherwise state one sentence on what's being shipped and to whom, then proceed.
Step 1 — Discovery Interview
Ask with AskUserQuestion, one round at a time. Skip any round already answered upfront. Keep going until you're 95% confident you can build without guessing.
Round 1: Purpose & Name Why: the name is the plugin id and the install target; purpose scopes the bundle.
- What does this plugin deliver, and who installs it (you across machines / SoftServe teammates / the public)?
- Name it: lowercase-hyphens, unique, evokes the capability. It becomes
plugin install <name>and namespaces every component (<name>:skill,/<name>:command). Suggest 2–3.
Round 2: What goes in the bundle Why: this is the component manifest — the heart of a packaging job.
- Which existing Servy capabilities get packaged? (Name the specific skills/agents/teams/hooks/scripts. I'll copy them into the plugin and namespace them.)
- Any new components to author fresh for this plugin?
- Does it need an MCP server? (Re-check the CLI>API>MCP gate.) Hooks?
Round 3: Marketplace & Distribution Why: a plugin that can't be installed is half-built (Gera chose "include marketplace").
- Distribution target: local test only → Servy-as-marketplace (
.claude-plugin/marketplace.json) → standalone public repo → Anthropic official? - New marketplace, or add an entry to Servy's root
marketplace.json? - Version to start at (default
0.1.0).
Round 4: Manifest & Guardrails Why: minimal correct metadata + boundaries.
- author (
name+ optional url), license (default MIT for public), keywords. - Anything the plugin must not do or contain? (Re-confirm the SoftServe boundary for anything public.) Any secrets it reads — confirm they come from env at runtime, never committed.
Round 5: Confirmation Summarize back, then ask "Does this capture it?":
## Plugin Summary: <name>
**Delivers:** <one sentence> **Installed by:** <you | teammates | public>
**Location:** plugins/<name>/ **Version:** <x.y.z>
**Bundles:**
- commands: … agents: … skills: … hooks: … mcp: …
(existing → copied+namespaced; new → authored fresh)
**Distribution:** <local | Servy marketplace | standalone repo | official>
**Manifest:** author=… license=… keywords=…
**Guardrails:** SoftServe boundary check = <pass/why>; secrets via env; CLI-over-MCP = <ok/why>Only build after confirmation.
Step 2 — Build Phase
Scaffold under plugins/<name>/ at the Servy repo root (the agreed convention — sits beside projects/, routines/; a clean staging area, kept out of .claude/ because that's for Servy's live primitives).
- Manifest — write
plugins/<name>/.claude-plugin/plugin.json. Keep it minimal:name,version,description,author,keywords. Add path-override /mcpServersfields only if needed. (Schema + real examples: reference.md §2.) - Components at the ROOT (not inside
.claude-plugin/):- Packaging existing → copy the source skill/agent/command into
plugins/<name>/{skills,agents,commands}/and adjust any internal paths. - New → author them in place (you may invoke
/skill-builderor/agent-builderunderneath to write a component correctly).
- Packaging existing → copy the source skill/agent/command into
- Wire paths with
${CLAUDE_PLUGIN_ROOT}— every hook script command, MCP launch command, and helper-script reference. Never hardcode an absolute path. (reference.md §1, §3, §4.) - MCP — declare inline in
plugin.json(mcpServersobject) or as a.mcp.jsonat the plugin root. (reference.md §3.) - Marketplace — create/append the entry in
.claude-plugin/marketplace.json(at the Servy repo root for Servy-as-marketplace, orplugins/<name>/.claude-plugin/marketplace.jsonwith"source": "./"for a standalone single-plugin repo). (reference.md §5.) - README.md — what it does, install line, component list, quick start, config, troubleshooting.
Step 3 — Validate (don't skip)
# validate the plugin manifest AND the marketplace manifest
claude plugin validate ./plugins/<name>/.claude-plugin/plugin.json
claude plugin validate ./.claude-plugin/marketplace.json
# install takes a NAME, not a path: add the marketplace root, then install
claude plugin marketplace add ./ --scope local # "./" not "." (bare "." is rejected)
claude plugin install <name>@<marketplace> --scope local
claude plugin details <name> # component inventory + token cost
# exercise each command/skill/agent/hook, then tear down (uninstall with the SAME scope):
claude plugin uninstall <name> --scope local && claude plugin marketplace remove <marketplace>Report exactly what you ran and what passed. Don't claim it works without the validate + a local install.
Step 4 — Document & Register
- CLAUDE.md — one line under a plugins area (same session — Servy's standing rule).
- projects/REGISTRY.md — only if the plugin ships to users as a public product (give it a maintenance block, like
aegis). - Wiki — note durable facts in
references/claude-code-plugins.md; append a line toreferences/log.md.
Mode 2: Optimize an Existing Plugin
Read the plugin's plugin.json + tree first — never optimize what you haven't read. Then look for:
- Components in the wrong place → must be at the plugin root, not inside
.claude-plugin/(the #1 mistake). Fix the layout. - Hardcoded paths → replace with
${CLAUDE_PLUGIN_ROOT}. - MCP that should be a CLI → if it wraps a tool with a CLI, repackage as a skill/command that shells out (token + reliability win).
- Bloated manifest → strip unused fields; keep it minimal.
- Stale version → bump semver; re-tag; update the marketplace entry's
ref/sha. - Marketplace drift → entry name/version must match
plugin.json(claude plugin tagenforces this). - Missing README / secrets in the package → add docs; move secrets to runtime env.
Show the diff and the why per change before applying.
Mode 3: Audit an Existing Plugin
Read the files, run the checklist, fix issues before marking complete.
Manifest
.claude-plugin/plugin.jsonpresent;name/version/descriptionset; name lowercase-hyphens and matches the marketplace entryversionis semver; agrees with the marketplace entry (claude plugin tagwould pass)- Manifest is minimal — no unused fields
Structure
- Components live at the plugin root (
commands/,agents/,skills/,hooks/), not inside.claude-plugin/ - Skills are
skills/<name>/SKILL.md(a lone rootSKILL.mdis also valid for a single-skill plugin); commands/agents are single.mdfiles - No hardcoded paths —
${CLAUDE_PLUGIN_ROOT}used in every hook/MCP/script reference - MCP declared inline or via
.mcp.json(no fictionalmcpServers/manifest.json+launcherlayout)
Marketplace & distribution
marketplace.jsonlists the plugin with a validsource(string path /git-subdir/url)claude plugin validatepasses on both the plugin and the marketplace manifest
Boundaries & quality (Servy)
- SoftServe boundary: nothing Internal+/customer-IP in a plugin destined to leave the managed environment
- No secrets committed; tokens read from env at runtime
- CLI-over-MCP respected (any MCP justified in the README)
- README present and useful; documented in CLAUDE.md
- If a review of this build is requested → routed to Codex (No-Self-Review Law)
Complete Example
A minimal single-plugin repo that bundles two existing skills.
plugins/servy-jumpstart/
├── .claude-plugin/
│ ├── plugin.json
│ └── marketplace.json
├── skills/
│ ├── jumpstart/SKILL.md
│ └── present/SKILL.md
└── README.mdplugin.json:
{
"name": "servy-jumpstart",
"version": "0.1.0",
"description": "Jumpstart engagement copilot + speaker-prep, bundled for SoftServe R&D teammates.",
"author": { "name": "Gera (GerardoRdz96)" },
"license": "MIT",
"keywords": ["jumpstart", "softserve", "enablement"]
}marketplace.json (single-plugin → "source": "./"):
{
"name": "servy-jumpstart",
"owner": { "name": "Gera", "email": "" },
"metadata": { "description": "Servy capabilities packaged for sharing", "version": "0.1.0" },
"plugins": [
{ "name": "servy-jumpstart", "source": "./", "version": "0.1.0",
"description": "Jumpstart copilot + speaker-prep", "category": "productivity" }
]
}Install line for a teammate: claude plugin marketplace add GerardoRdz96/servy-jumpstart && claude plugin install servy-jumpstart@servy-jumpstart.
(Boundary note: only ship this publicly if the bundled skills carry no SoftServe Internal+ content.)
Servy Conventions
- Author in
plugins/<name>/at the repo root. A.claude-plugin/marketplace.jsonat the Servy root turns Servy into a multi-plugin marketplace whose sources are those dirs. Publish by pushing a plugin dir to its own public repo (same flow asaegis/build-2026-brief). - A plugin is the ship layer. Build primitives with their builders first; package here. It composes with the front-door triage, it doesn't replace it.
- SoftServe boundary is a hard gate — plugins are distribution artifacts; keep Internal+/customer IP out of anything that leaves the managed environment.
- CLI > API > MCP inside plugins too.
- Update CLAUDE.md the same session you build a plugin.
- For review of a plugin you just built, prefer a Codex route over self-review.
Important Notes
- Decision gate is not optional. Most "make a plugin" asks are really "make a skill/agent" — only package when there's a real distribution need.
- Always read an existing plugin before optimizing or auditing it.
- Components at the root, manifest in
.claude-plugin/— the single most common structural error. - Validation (
claude plugin validate+ a local install) is the proof a plugin works — run it, report it. - Full verified schema, CLI surface, MCP/hook patterns, and distribution paths: reference.md.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

