Skill Publishing
Decision Tree
- What are you doing?
- Publishing a skill to the marketplace -> follow "Publishing" below
- Updating a published skill -> what changed?
- Bug fix or wording tweak -> bump patch version in
plugin-groups.jsonmetadata.version - New skills, new tools, or backwards-compatible additions -> bump minor version in
plugin-groups.jsonmetadata.version - Breaking changes (removed skills, renamed categories, restructured) -> bump major version in
plugin-groups.jsonmetadata.version
- Bug fix or wording tweak -> bump patch version in
- Removing a skill from the marketplace -> follow "Removing" below
- Moving a skill to a different plugin -> move
plugins/<old>/skills/<skill>toplugins/<new>/skills/<skill>, updateplugin-groups.json, then runbun run marketplace:write - Packaging a skill for distribution -> run
scripts/package-skill.ts <path/to/skill-folder> - Validating marketplace.json -> run
bun run marketplace, fix any errors perreferences/marketplace-errors.md - Regenerating marketplace.json from disk -> follow "Regenerating manifests" below
Publishing
- Ensure the skill directory exists at
plugins/<plugin>/skills/<skill-name>/SKILL.md - Run the validator:
bun run plugins/workflow/skills/publishing/scripts/quick-validate.ts plugins/<plugin>/skills/<skill-name> - Add the skill name to exactly one plugin entry in
plugin-groups.json - Run
bun run marketplace:writeto regenerate:plugins/<name>/.claude-plugin/plugin.jsonplugins/<name>/.codex-plugin/plugin.jsonplugins/<name>/.cursor-plugin/plugin.jsonplugins/<name>/README.md.claude-plugin/marketplace.json.cursor-plugin/marketplace.json.agents/plugins/marketplace.json
- Run
bun run marketplaceagain; it must report everything up to date
For bulk additions, update plugin-groups.json first, then regenerate once.
Removing
- Remove the skill name from its plugin in
plugin-groups.json - Delete
plugins/<plugin>/skills/<skill-name>/ - Bump
plugin-groups.jsonmetadata.version— minor if backwards-compatible, major if consumers depended on it - Run
bun run marketplace:write, thenbun run marketplace
Regenerating manifests
To rebuild plugin manifests and marketplaces from the plugin-owned source tree:
- Edit skills under
plugins/<plugin>/skills/ - Edit plugin metadata or skill ownership in
plugin-groups.json - Run
bun run marketplace:write - Review the generated diff under plugin manifests, plugin READMEs,
.claude-plugin/,.cursor-plugin/, and.agents/plugins/ - Run
bun run marketplaceto confirm no generated files are stale
Marketplace conventions
See references/marketplace-schema.md for the full schema. Key conventions:
- Skill source:
plugins/<name>/skills/<skill-name>/directories are authored directly - Generated files: plugin manifests, plugin READMEs, and marketplace files are overwritten by
bun run marketplace:write - Naming: lowercase alphanumeric + hyphens, 1-64 characters
- Versioning:
plugin-groups.jsonmetadata.versionis the source for generated marketplace and plugin manifest versions. Do not hand-edit generated marketplace JSON to bump a version. - Codex marketplace: generated at
.agents/plugins/marketplace.json - Claude marketplace: generated at
.claude-plugin/marketplace.json - Cursor marketplace: generated at
.cursor-plugin/marketplace.json(team-template layout withmetadata.pluginRoot) - Cursor validation:
bun run validate:cursorafter regenerating Cursor artifacts - Commands: command shims may be used for explicit Codex, Claude, and Cursor slash-command entrypoints; portable workflows should still be skills
Key references
| File | What it covers |
|---|---|
references/marketplace-schema.md |
Codex, Claude, and Cursor marketplace schemas, plugin manifests, and source types |
references/marketplace-errors.md |
Validation error codes and fixes |
plugin-groups.json |
Source of truth for plugin grouping and metadata |
scripts/marketplace.ts |
Regenerates both marketplaces and plugin manifests |
scripts/quick-validate.ts |
Quick SKILL.md frontmatter validation |
scripts/package-skill.ts |
Packages a skill folder into a distributable .skill zip file |