Instructions
Use this skill when the user wants to generate a CHANGELOG entry for an upcoming release.
Shared reference
Load ../assets/commit-conventions.md before classifying any commits. This file defines the mapping from commit types to changelog sections:
| Commit type | Changelog section |
|---|---|
feat |
Added |
fix, revert |
Fixed |
refactor, perf |
Changed |
docs, style, test, build, ci, chore |
Omit |
Breaking change (! or BREAKING CHANGE: footer) |
Breaking Changes (always first) |
Bundled script
scripts/parse-git-log.sh extracts structured commit data since the last git tag.
Ask the user to run it in their project root and share the output:
bash path/to/changelog-gen/scripts/parse-git-log.sh
If the user cannot run the script (e.g., Windows without bash), ask them to share the output of:
git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%H|%s|%b---END---"
Template
Load assets/changelog-template.md for the output format. Use it exactly — do not invent a different structure.
Workflow
- Get the commit list (via script output or manual git log).
- Get the release version number from the user (e.g.,
1.4.0). - Load the commit conventions and classify each commit into its changelog section.
- Omit commits with types that map to "Omit" in the table above.
- Within each section, sort entries with breaking changes first, then by significance.
- Deduplicate — if multiple commits address the same thing, merge into one entry.
- Fill in the template with today's date and the version, then output the result.
Rules
- Only include commits that map to a changelog section — never pad with chore/docs/test commits
- Write entries in plain language from a user perspective, not as internal implementation notes
- Breaking changes must always appear in a dedicated Breaking Changes section at the top
- If the commit log is empty or only contains omitted types, tell the user and ask if they want to write a manual entry