| name | changelog-generator |
| description | Generate a CHANGELOG.md from Conventional Commit history with grouped sections and version headers. Use when the user asks to create or update a changelog. |
Skill: Changelog Generator
Parse git commit history and produce a structured CHANGELOG following Keep a Changelog format and Conventional Commits.
Trigger
When the user asks to generate, update, or create a changelog — or before a release.
Prerequisites
Quick Usage
For a quick changelog from recent commits, run the bundled script:
scripts/generate-changelog.sh [output-file] [since-tag]
Examples:
scripts/generate-changelog.sh
scripts/generate-changelog.sh CHANGELOG.md v1.0
For a fully structured Keep a Changelog output, follow the detailed steps below.
Steps
Step 1: Determine Version Range
Step 2: Collect Commits
Step 3: Categorize Changes
| Section | Commit Types | Emoji (optional) |
|---|
| Added | feat | |
| Fixed | fix | |
| Changed | refactor, perf | |
| Deprecated | Commits mentioning deprecation | |
| Removed | Commits removing features | |
| Security | fix with security scope | |
| Documentation | docs | |
| Internal | chore, ci, test, style, build | |
Step 4: Generate Changelog Entry
## [X.Y.Z] - YYYY-MM-DD
### Added
- **scope:** description ([hash](commit-url)) — @author
### Fixed
- **scope:** description ([hash](commit-url)) — @author
### Changed
- **scope:** description ([hash](commit-url)) — @author
### Breaking Changes
- **scope:** description of what broke and migration path
Step 5: Handle Edge Cases
Step 6: Assemble Full Changelog
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/),
and this project adheres to [Semantic Versioning](https://semver.org/).
Step 7: Validate & Output
Rules
- ALWAYS follow Keep a Changelog format
- ALWAYS group by change type, not by date or author
- NEVER include merge commits or version bump commits
- NEVER include secrets, internal URLs, or PII
- Skip
chore/ci/style commits by default (include if user requests)
- Most recent version goes at the top
Completion
CHANGELOG.md entry ready to paste or written to file. Includes version header, grouped changes, and comparison links.
If a Step Fails
- No tags exist: Treat all commits as the first release (v0.1.0 or v1.0.0)
- Non-conventional commits: Group under "Other" with the raw message
- Too many commits: Summarize by scope, list top 20, note "and N more"
- No new commits since last tag: Report "No changes since vX.Y.Z"