Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generates structured changelogs from git history using conventional commit parsing. Reads commits since the last git tag, categorizes them into Added, Fixed, Changed, Breaking Changes, and Internal sections, then prepends a formatted entry to CHANGELOG.md. Falls back to AI-based categorization when commits do not follow conventional format. Triggered when the user asks to generate a changelog, update CHANGELOG, prepare release notes, or review what changed since the last release.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 137% | 0% |
| case-19 | ✗→✓ | ▲ Improved | -35% | 0% |
| case-18 | ✓→✗ | ▼ Worse | 6% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 54% | 0% |
Generate a structured CHANGELOG entry from git commit history using conventional commit conventions.
Activate this skill when the user:
npm-publish skill during the release pipelinebashLAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null)
If a tag exists:
bashgit log ${LAST_TAG}..HEAD --oneline --no-merges
If no tags exist (first release), use all commits:
bashgit log --oneline --no-merges
| Prefix | Changelog Section | |--------|-------------------| | feat: / feat(scope): | Added | | fix: / fix(scope): | Fixed | | refactor: / perf: | Changed | | docs: | Documentation | | BREAKING CHANGE: or !: in subject | Breaking Changes | | chore: / ci: / build: / test: | Internal |
Rules:
feat(auth): add OAuth flow becomes Add OAuth flow)(a1b2c3d)BREAKING CHANGE:, promote it to the Breaking Changes section regardless of prefixIf fewer than 50% of commits follow conventional format, switch to AI categorization:
git show --stat <hash>src/ -> Addedmarkdown## [X.Y.Z] --- YYYY-MM-DD ### Breaking Changes - Description of breaking change and migration steps (hash) ### Added - New feature description (hash) ### Fixed - Bug fix description (hash) ### Changed - Refactor or performance improvement description (hash) ### Documentation - Documentation update description (hash) ### Internal - Chore, CI, build, or test change description (hash)
Rules:
package.json if available, otherwise prompt the userYYYY-MM-DD format--- as the date separator (em dash style)Build the changelog entry following the output format above. Display it to the user for review before writing.
If CHANGELOG.md exists, insert the new entry immediately after the # Changelog header line (preserving any preamble text between the header and the first version entry).
If CHANGELOG.md does not exist, create it:
markdown# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [X.Y.Z] --- YYYY-MM-DD ...
Write just the current version's entry (without the ## [version] header) to /tmp/CHANGELOG_ENTRY.md for use by the npm-publish skill or gh release create.
| Scenario | Behavior | |----------|----------| | No git tags exist | Use all commits from repo inception | | No commits since last tag | Report "No changes since vX.Y.Z" and exit | | No conventional commits | Use AI categorization with a warning | | Merge commits | Skip by default (--no-merges) | | Single commit since last tag | Still generate a full entry | | Monorepo with multiple packages | Filter commits by path if user specifies a package directory |
This skill is designed to be invoked standalone or as part of the npm-publish pipeline. When called from npm-publish, the version number is already determined and should be passed in rather than read from package.json.
Other measured skills in the registry, with their headline benchmark lift.