Use when writing or updating a CHANGELOG for a software project before a release
Scanned 9/8/2026
Install to Claude Code
npx -y skills add jeffreytse/grimoire-core --skill write-changelog --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Write Changelog?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/jeffreytse-write-changelog)More formats (shields.io, HTML) on the badges page.
---
name: write-changelog
description: Use when writing or updating a CHANGELOG for a software project before a release
source: Keep a Changelog (keepachangelog.com); Conventional Commits specification (conventionalcommits.org)
tags: [changelog, release, documentation, conventional-commits, versioning]
verified: true
---
# Write Changelog
Produce a human-readable changelog that communicates what changed, for whom, and why.
## Why This Is Best Practice
**Adopted by:** Most major open-source projects (Node.js, Vue, Angular, Rails); mandated by Conventional Commits adopters
**Impact:** Changelogs reduce support tickets at release time by giving users a clear upgrade path; Angular's adoption of Conventional Commits automated changelog generation and halved release preparation time.
**Why best:** A changelog is a contract with users. It separates "what the code did" (commit log) from "what users need to know" (changelog). The Keep a Changelog format provides a widely understood, machine-parseable structure.
## Steps
1. **Choose format** — Use Keep a Changelog structure: `## [version] - YYYY-MM-DD` with subsections Added, Changed, Deprecated, Removed, Fixed, Security.
2. **Collect commits since last release** — Run `git log v1.2.0..HEAD --oneline` or parse Conventional Commit messages with a tool (standard-version, release-please, semantic-release).
3. **Translate commits to user impact** — Reframe technical changes as user-facing outcomes. "refactor: extract auth module" → omit; "feat: OAuth login" → Added.
4. **Highlight breaking changes** — Mark with `BREAKING CHANGE:` or a visible banner; explain migration steps.
5. **Write the Unreleased section first** — Keep `## [Unreleased]` at the top during development; move it to a versioned section at release.
6. **Link versions** — Add diff links at the bottom: `[1.3.0]: https://github.com/org/repo/compare/v1.2.0...v1.3.0`.
## Rules
- Write for users, not developers — omit internal refactors unless they affect public APIs.
- Never omit security fixes — always include them under the Security subsection.
- One entry per logical change, not per commit — consolidate related commits.
- Keep entries concise: one sentence describing the change and its user impact.
## Examples
```markdown
## [2.4.0] - 2026-05-01
### Added
- OAuth 2.0 login via Google and GitHub providers.
### Fixed
- Password reset email not sending when username contained special characters.
### Security
- Updated dependency `axios` to patch CVE-2026-12345 (SSRF vulnerability).
```
## Common Mistakes
- **Copying commit messages verbatim** — developer jargon is not user-facing communication.
- **Skipping the Unreleased section** — teams scramble at release to reconstruct what changed.
- **Combining multiple releases in one entry** — makes it impossible to correlate a bug with a version.

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!