Generates a fresh plugin bundle under projects/apps/genesys-plugins/bundles/{bundle-name}/ following the canonical Claude Code plugin format. Symlinks skills from .claude/skills/ so the bundle stays in sync with canonical sources.
Claude Code triggers
Invoke when user says:
"scaffold a plugin for [agent/workflow]"
"create a new bundle"
"package [agent-name] as a plugin"
"bundle these skills together:..."
"new plugin bundle: [name]"
Do NOT invoke when:
User wants to edit a skill (canonical sources stay in .claude/skills/ — edit there)
User wants to publish a bundle to a public marketplace (that's a separate publish step)
User is asking about the Claude Code plugin format in general (answer from context, don't scaffold)
Inputs
The skill accepts a bundle spec in one of two forms:
Form 1 — Inline spec
bundle: linkedin-engine
description: "Personal LinkedIn content engine. Voice memo or thought → drafted post on brand in 60s."
agent: social-marketer # defaults to bundle name if omitted
author: genesys-growth
version: "0.1.0"
skills:
- content-skills/linkedin-skills/linkedin-hooks
- content-skills/linkedin-skills/linkedin-expert-posts
- content-skills/linkedin-skills/linkedin-personal-posts
# … add more paths relative to.claude/skills/
commands:
- name: draft-from-thought
description: "Turn a raw thought into a voice-checked LinkedIn post."
- name: weekly-batch
description: "Run the weekly content batch."
cowork_ready: true # false if any skill or MCP is local-only
resale_candidate: true # leave true so a future voice-scrub fork stays on the table
Form 2 — From an existing agent
If the user says "package the social-marketer agent as a plugin", read .claude/agents/{agent-name}.md. The frontmatter already has a skills: list — use it. Prompt the user for bundle name + description only.
Process
Validate inputs — bundle name kebab-case, all listed skill paths exist under .claude/skills/, target folder doesn't already exist (else ask to overwrite).
Render plugin.json from the premium reference using the spec.
Render settings.json with "agent": "{agent}" as the default.
Copy + adapt the agent definition from .claude/agents/{agent}.md. Keep the body. Strip the skills: frontmatter (Cowork doesn't read it the same way). Add a short "Bundle context" section referencing the plugin name.
Create symlinks for each skill: ln -s {absolute-path-to-.claude-skill} skills/{skill-name}. Use absolute paths so symlinks survive bundle moves.
Stub each command under commands/ with a frontmatter + description. Leave the body as a TODO marker for the user to fill with the opinionated chain.
Render README.md from the premium reference with the bundle name, description, skill list, and install command.
Update the top-level projects/apps/genesys-plugins/marketplace.json to include the new bundle.
Report the created paths and a 1-line install command the user can run to test the bundle locally.
All symlinks resolve (ls -la bundles/{bundle}/skills/ shows no broken links).
marketplace.json includes the new bundle entry.
README.md renders correctly (no unresolved template variables like {{bundle}}).
After completing work
Suggest the user:
Fill in the body of each stubbed command under commands/.
Seed examples/ with 2-3 real outputs for in-context reference.
Test locally: /plugin install file:///Users/matteotittarelli/Desktop/CORE/WORK/CLAUDE\ CODE/projects/apps/genesys-plugins {bundle-name}.
1---2name: plugin-scaffold3description: Plugin Scaffold4---56# /plugin-scaffold — Scaffold a plugin bundle78Generates a fresh plugin bundle under `projects/apps/genesys-plugins/bundles/{bundle-name}/` following the canonical Claude Code plugin format. Symlinks skills from `.claude/skills/` so the bundle stays in sync with canonical sources.910---1112## Claude Code triggers1314**Invoke when user says:**15- "scaffold a plugin for [agent/workflow]"16- "create a new bundle"17- "package [agent-name] as a plugin"18- "bundle these skills together:..."19- "new plugin bundle: [name]"2021**Do NOT invoke when:**22- User wants to edit a skill (canonical sources stay in `.claude/skills/` — edit there)23- User wants to publish a bundle to a public marketplace (that's a separate publish step)24- User is asking about the Claude Code plugin *format* in general (answer from context, don't scaffold)2526---2728## Inputs2930The skill accepts a bundle spec in one of two forms:3132### Form 1 — Inline spec3334```yaml35bundle: linkedin-engine36description: "Personal LinkedIn content engine. Voice memo or thought → drafted post on brand in 60s."37agent: social-marketer # defaults to bundle name if omitted38author: genesys-growth39version: "0.1.0"40skills:41 - content-skills/linkedin-skills/linkedin-hooks42 - content-skills/linkedin-skills/linkedin-expert-posts43 - content-skills/linkedin-skills/linkedin-personal-posts44 # … add more paths relative to.claude/skills/45commands:46 - name: draft-from-thought47 description: "Turn a raw thought into a voice-checked LinkedIn post."48 - name: weekly-batch49 description: "Run the weekly content batch."50cowork_ready: true # false if any skill or MCP is local-only51resale_candidate: true # leave true so a future voice-scrub fork stays on the table52```5354### Form 2 — From an existing agent5556If the user says "package the social-marketer agent as a plugin", read `.claude/agents/{agent-name}.md`. The frontmatter already has a `skills:` list — use it. Prompt the user for bundle name + description only.5758---5960## Process61621. **Validate inputs** — bundle name kebab-case, all listed skill paths exist under `.claude/skills/`, target folder doesn't already exist (else ask to overwrite).632. **Create folder structure**:64 ```65 projects/apps/genesys-plugins/bundles/{bundle}/66 ├──.claude-plugin/plugin.json67 ├── settings.json68 ├── README.md69 ├── agents/{agent}.md (copy + adapt from.claude/agents/{agent}.md)70 ├── commands/{each}.md71 ├── skills/ (symlinks to.claude/skills/...)72 └── examples/ (empty placeholder + README)73 ```743. **Render `plugin.json`** from the premium reference using the spec.754. **Render `settings.json`** with `"agent": "{agent}"` as the default.765. **Copy + adapt the agent definition** from `.claude/agents/{agent}.md`. Keep the body. Strip the `skills:` frontmatter (Cowork doesn't read it the same way). Add a short "Bundle context" section referencing the plugin name.776. **Create symlinks** for each skill: `ln -s {absolute-path-to-.claude-skill} skills/{skill-name}`. Use absolute paths so symlinks survive bundle moves.787. **Stub each command** under `commands/` with a frontmatter + description. Leave the body as a TODO marker for the user to fill with the opinionated chain.798. **Render `README.md`** from the premium reference with the bundle name, description, skill list, and install command.809. **Update the top-level `projects/apps/genesys-plugins/marketplace.json`** to include the new bundle.8110. **Report** the created paths and a 1-line install command the user can run to test the bundle locally.8283---8485## Verification8687- `plugin.json` parses as valid JSON (run `python3 -c "import json; json.load(open('path/to/plugin.json'))"`).88- All symlinks resolve (`ls -la bundles/{bundle}/skills/` shows no broken links).89- `marketplace.json` includes the new bundle entry.90- `README.md` renders correctly (no unresolved template variables like `{{bundle}}`).9192---9394## After completing work9596Suggest the user:971. Fill in the body of each stubbed command under `commands/`.982. Seed `examples/` with 2-3 real outputs for in-context reference.993. Test locally: `/plugin install file:///Users/matteotittarelli/Desktop/CORE/WORK/CLAUDE\ CODE/projects/apps/genesys-plugins {bundle-name}`.100
Run npx skillmds@latest add matteotitta/plugin-scaffold in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Plugin Scaffold It is listed under DevOps & Infra on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
matteotitta (@matteotitta) published this skill. Their other Agent Skills are listed on their SkillMD profile.