Register a finished skill in this library and produce the complete release package: the bundle wiring and marketplace entry, the regenerated catalogue and exports, the headline count in every living document, the CHANGELOG entry, the gates to run, and the exact git and release commands. Use when asked to publish this skill, release the new skill, add it to the marketplace, ship the promoted skill, or as the last step of the promote loop. Produces the full release package, never a partial one,...
Installs into .claude/skills of the current project.
Are you the author of Promoter Publish?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/mohitagw15856-promoter-publish-pm-claude-skills)
---
name: promoter-publish
description: "Register a finished skill in this library and produce the complete release package: the bundle wiring and marketplace entry, the regenerated catalogue and exports, the headline count in every living document, the CHANGELOG entry, the gates to run, and the exact git and release commands. Use when asked to publish this skill, release the new skill, add it to the marketplace, ship the promoted skill, or as the last step of the promote loop. Produces the full release package, never a partial one, with a confirmation step before anything is pushed."
version: 1.0.0
---
# Promoter Publish
Publishing a skill here is more than copying a file: the bundle manifest, the marketplace entry, the catalogue, twelve platform exports and the headline count in a dozen documents all have to agree, and CI fails on the first one that does not. This skill produces the whole package in the order the repository expects, runs the gates, and hands the user the release commands with a confirmation before anything leaves the machine.
Last step of the promote loop. Follows `promoter-test`.
## What This Skill Produces
- **Wiring**: the bundle's `plugin.json` and the `.claude-plugin/marketplace.json` entry (generated by `scripts/new-bundle.mjs`, never hand-edited)
- **Regenerated artefacts**: `web/skills.json`, `SKILLS.md`, `DISAMBIGUATION.md`, the exports, the conformance badge, the risk tiers
- **The headline count** updated in every living document the drift check reads
- **A CHANGELOG entry** under a new version heading in Keep-a-Changelog form
- **The release commands**: commit, tag, push, GitHub release, with the version bumped in every manifest
- **A release note** ready to paste
## Required Inputs
Ask for these if not provided:
- **The skill name** and the bundle it joins (new or existing)
- **The version**: a new skill wave bumps the major; a fix bumps the patch
- **Confirmation** before the push and the release; everything up to that point is local and reversible
## Framework: The Package, in Order
1. **Wire**: `node scripts/new-bundle.mjs --name <bundle> --desc "..." --skills <skill>`; it copies the skill into the bundle and adds the marketplace entry.
2. **Generate**: catalogue, exports, workflows, samples, SKILLS.md, disambiguation, conformance badge, risk tiers. Outputs are committed; they are never edited by hand.
3. **Count**: the new live-skill count goes into `package.json` and `server.json` descriptions and every living document the drift check lists. Deprecated skills stay on disk but are not counted.
4. **Gate**: skillcheck, duplicate check, vendor neutrality, eval coverage, drift. All green or stop.
5. **Version**: `package.json`, `server.json` (two places), `.claude-plugin/marketplace.json`, `python/pyproject.toml`.
6. **CHANGELOG**: new heading, Added and Changed lists, the count line.
7. **Commit, tag, push, release**: the release triggers npm, PyPI, the MCP registry and the newsletter automatically. A deleted tag can never be reused; fix forward with a patch bump.
## Programmatic Helper
```bash
python3 skills/promoter-publish/scripts/promoter_publish.py <skill> --bundle <bundle> --version 80.0.0
```
It checks the skill has the required sections and no em dashes, then prints the package above with the exact commands. It runs nothing; the user runs each block after reading it.
## Output Format
### Release package: `<skill>` in `<bundle>`, v<version>
1. Files added and changed (list)
2. `marketplace.json` diff (the new stanza)
3. Living documents touched for the count (list, old to new number)
4. CHANGELOG entry (verbatim)
5. Gate results (each named, pass or fail)
6. Git and release commands (verbatim, in order)
7. Release note (three lines a reader can paste)
**Confirm to push?** [the question, asked once, before step 6 runs]
## Quality Checks
- [ ] Wiring came from the scaffolder, not a hand-typed manifest
- [ ] Every generator was run and its output committed
- [ ] The drift check passes with the new count everywhere
- [ ] All manifests carry the same new version
- [ ] The CHANGELOG entry names the bundle and the skill
- [ ] The user confirmed before anything was pushed
## Anti-Patterns
- **A partial package.** A skill in `skills/` without the bundle, or a bundle without the count bump, breaks CI on the next push.
- **Editing generated files.** They are overwritten on the next run and the diff is noise.
- **Pushing before the gates.** The gates exist because the counts drift silently.
- **Reusing a tag after a failed release.** Tags are immutable; bump the patch instead.
## Example Trigger Phrases
- "Publish the new skill."
- "Release v80 with the promoted skill."
- "Add release-notes-from-git-log to the marketplace and ship it."
- "Run the last step of the promote loop."