Changelog
Use when writing, updating, or generating a CHANGELOG.md — for a new release, an unreleased section update, or drafting from git history or diff. Triggers: "update the changelog", "write release notes", "what changed since X", "generate changelog for v1.2.0", "add this to the changelog", "draft unreleased section". Not for commit messages (use commit-message skill) or internal deployment runbooks.From its SKILL.md
npx -y skills add ahgraber/skills --skill changelogAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 1 command, including `git log <range> --oneline --no-merges`.
SKILL.md
4.9 KB, ~1.0k tokens by cl100k_base, as published. Nobody here has run it
Changelog
Draft or update a CHANGELOG.md following Keep a Changelog conventions.
Invocation Notice
Inform the user when this skill is being invoked by name: changelog.
When to Use
- Writing or updating
CHANGELOG.mdfor an upcoming or recent release - Drafting or appending to an
[Unreleased]section from recent merged work - Generating a changelog from git history, a commit range, or a diff
- Editing or cleaning up an auto-generated changelog draft
When Not to Use
- Writing a git commit message — use
commit-messageskill - Writing internal release notes or deployment runbooks (audience is operators, not users)
- Full code review — use
code-reviewskill
Workflow
1. Determine scope
Infer target version, release date, and commit range from context. Ask only if neither the version nor the range can be determined.
- Default range:
git log <previous-tag>..HEAD --oneline --no-merges - If no prior tag exists:
git log --oneline --no-merges - If updating
[Unreleased]only: use commits since last tagged release
Check for an existing [Unreleased] section in CHANGELOG.md — do not duplicate entries already there.
2. Collect commits
git log <range> --oneline --no-merges
Also read the existing CHANGELOG.md to understand document structure and last version.
3. Filter noise
Exclude commits with no user-visible effect.
Retain only what matters to users.
See references/entry-guidelines.md for the full include/exclude list.
Quick exclusion rule: if a user reading the changelog would not care, cut it.
4. Categorize
Map surviving entries to Keep a Changelog categories (in display order):
| Category | When to use |
|---|---|
| Breaking Changes | Any change requiring user action — config, API, CLI, behavior |
| Added | New features, commands, endpoints, options |
| Changed | Modified behavior, performance improvements, visible refactors |
| Deprecated | Things that still work but will be removed |
| Removed | Deleted features, commands, options |
| Fixed | Bug fixes |
| Security | Vulnerability patches |
Breaking changes get their own subsection at the top of the version block.
See references/entry-guidelines.md for the Conventional Commits → category mapping.
5. Write entries
- One entry per logical user-visible outcome — consolidate multi-commit features into one line
- Imperative present tense:
Add X,Fix Y,Remove Z - For breaking changes: state what broke AND the migration path (e.g.,
Remove X — replace with Y; see docs/migration.md) - One reference link per entry; prefer PR over commit hash over issue number
- Do not include implementation details, commit hashes in entry text, or "WIP" notes
6. Insert into CHANGELOG.md
See references/changelog-format.md for the exact block structure and version comparison link format.
New release (no [Unreleased] section): insert ## [x.y.z] - YYYY-MM-DD block at the top of the file.
New release (existing [Unreleased] section):
- If
[Unreleased]IS the release being cut: replace## [Unreleased]with## [x.y.z] - YYYY-MM-DD; add a fresh empty## [Unreleased]above it. - If
[Unreleased]contains unrelated upcoming work: insert the new versioned block between[Unreleased]and the previous version.
Updating [Unreleased] only: append entries under the matching category subsection; create the subsection if absent.
Add or update the version comparison link at the bottom of the file.
7. Verify before delivering
- Version bump is semantically correct: breaking → major, new feature → minor, fix → patch
- No CI/CD, formatting, test-only, or dev-tooling entries present
- Breaking changes include a migration path
- Date is ISO 8601 (
YYYY-MM-DD) - No duplicate entries from the existing
[Unreleased]section
Output
An updated CHANGELOG.md with the new version block inserted (or [Unreleased] section updated), ready for user review before commit.
References
references/entry-guidelines.md— include/exclude heuristics and Conventional Commits mappingreferences/changelog-format.md— full Keep a Changelog format rules and examples
What ships with it: 2 files
7.3 KB alongside SKILL.md
references/
- changelog-format.md3.5 KB
- entry-guidelines.md3.7 KB