Creates, updates, and maintains CHANGELOG.md files following Common Changelog and Keep a Changelog standards. Use when creating changelogs, adding release entries, updating unreleased sections, validating changelog format, or user mentions 'changelog', 'release notes', 'version history', 'add to changelog', 'update changelog', 'create changelog', 'change log format', or needs to document version changes.
Creates and maintains CHANGELOG.md files following Common Changelog and Keep a Changelog standards. Use when creating changelogs, adding release entries, updating unreleased sections, validating format, or user mentions 'changelog', 'release notes', 'version history', 'add to changelog', 'update changelog', 'create changelog', 'change log format', or needs to document version changes.
/plugin marketplace add thoeltig/claude-code-toolkit/plugin install changelog@claude-code-toolkitThis skill is limited to using the following tools:
Create and maintain CHANGELOG.md files following standard formats (Common Changelog + Keep a Changelog).
Activate when:
| ID | Purpose | Trigger |
|---|---|---|
| WF1 | Create CHANGELOG.md | Initial setup |
| WF2 | Add Release Entry | New version |
| WF3 | Update Unreleased | Pre-release changes |
| WF4 | Validate Format | Quality check |
| WF5 | Promote Prerelease | Stabilize alpha/beta/rc |
Purpose: Initialize new changelog file
When: No CHANGELOG.md exists, explicit request
Steps:
Choose format
Write initial structure
# Changelog
All notable changes documented here.
Format: [Common Changelog](https://common-changelog.org) / [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
## [Unreleased]
[unreleased]: https://github.com/owner/repo/compare/vX.X.X...HEAD
Confirm creation
Purpose: Add new version entry
When: New release, version bump, explicit request
Execution:
Gather info
Process changes (improve quality)
Categorize changes
Common Changelog: Changed, Added, Removed, Fixed
Keep a Changelog: Changed, Added, Deprecated, Removed, Fixed, Security
Format entry (Common Changelog example)
## [1.2.3] - 2025-11-26
### Changed
- **Breaking:** refactor API to use async/await ([#45](url)) (Author)
- Improve performance of data processing ([abc123](url))
### Added
- Add support for JSON export ([#42](url), [#43](url))
### Fixed
- Fix memory leak in cache ([#44](url)) (Author)
[1.2.3]: https://github.com/owner/repo/releases/tag/v1.2.3
Add notice (if needed)
_First release.__This release was yanked due to [issue].__If upgrading: see UPGRADING.md._Insert entry
## [Unreleased] sectionMove unreleased content (if exists)
Purpose: Add changes to Unreleased section
When: Pre-release changes, ongoing work
Steps:
Read current CHANGELOG.md
Add to Unreleased (if section exists, else create)
## [Unreleased]
### Added
- New feature description ([#XX](url))
Use Edit tool to append changes
Purpose: Check changelog follows standards
When: Before release, quality check, explicit request
Checks:
Structure:
- [ ] File named CHANGELOG.md
- [ ] First-level heading: # Changelog
- [ ] Versions sorted latest-first
- [ ] Version format: ## [X.Y.Z] - YYYY-MM-DD
- [ ] Date format: YYYY-MM-DD (ISO 8601)
Categories (Common Changelog):
- [ ] Only: Changed, Added, Removed, Fixed
Categories (Keep a Changelog):
- [ ] Only: Changed, Added, Deprecated, Removed, Fixed, Security
Content:
- [ ] Changes use imperative mood (Add, Fix, Update not Added, Fixed, Updated)
- [ ] Breaking changes prefixed: **Breaking:**
- [ ] References included (commits, PRs, issues)
- [ ] Links at bottom: [X.Y.Z]: url
Common Issues:
- ⚠ Commit log dumps (verbatim copying)
- ⚠ Missing dates
- ⚠ Inconsistent categories
- ⚠ Vague descriptions
Report issues + suggestions
Purpose: Convert prerelease to stable release
When: Promoting alpha/beta/rc to stable
Approaches:
A. Copy content (default)
B. Skip entry (internal testing only)
C. Refer to prerelease (private projects, lengthy QA)
_Stable release based on [X.Y.Z-rc.N]._## [3.1.0] - 2021-07-05
_Stable release based on [3.1.0-rc.2]._
## [3.1.0-rc.2] - 2021-07-04
### Fixed
- Fix localization (a11eb73)
Decision: Use A unless B or C explicitly needed
Heading:
## [X.Y.Z] - YYYY-MM-DD
Categories (order):
Notice format (optional, after heading):
## [X.Y.Z] - YYYY-MM-DD
_Single-sentence notice with emphasis._
### Category...
_First release._, _Yanked due to security issue._, _See UPGRADING.md._Change format:
- [**Breaking:**|**Subsystem:**] <Imperative verb> <description> ([refs](url)) (Authors)
References (after change, same line):
([abc123](url)) or submodule: ([owner/name@abc123](url))([#123](url)) or external: ([owner/name#123](url))([JIRA-837](url))([#1](url), [#2](url)) not ([#1](url)) ([#2](url))Authors (after references):
(Name1, Name2) or (#refs; Name1, Name2) with semicolon separator- Fix loop ([#194](url)) (Alice) or - Fix loop ([#194](url), [#195](url); Alice, Bob)Prefixes (bold):
- **Breaking:** change description- **UI:** change description or - **Installer (breaking):** changeLinks (bottom):
[X.Y.Z]: https://github.com/owner/repo/releases/tag/vX.Y.Z
[unreleased]: https://github.com/owner/repo/compare/vX.Y.Z...HEAD
Heading: Same as Common Changelog
Categories (order):
Change format (simpler):
- <Description starting with capital>
Unreleased section:
## [Unreleased]
### Added
- Feature coming soon
From Common Changelog:
From Keep a Changelog:
Avoid:
Read: Load existing CHANGELOG.md or HISTORY.md Write: Create new CHANGELOG.md Edit: Update existing changelog (add entries, update sections)
GitHub Actions (auto-create GitHub releases from CHANGELOG.md):
name: Release
on: { push: { tags: ['*'] } }
permissions: { contents: write }
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: docker://antonyurchenko/git-release:latest
env: { GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' }
Workflow integration:
Common Changelog:
# Changelog
## [2.1.0] - 2025-11-26
### Changed
- **Breaking:** refactor config to use YAML ([#45](url)) (Alice)
### Added
- Add dark mode support ([#42](url), [#43](url))
### Fixed
- Fix memory leak in parser ([abc123](url))
[2.1.0]: https://github.com/owner/repo/releases/tag/v2.1.0
Keep a Changelog:
# Changelog
## [2.1.0] - 2025-11-26
### Added
- Dark mode support for UI
### Changed
- Config now uses YAML instead of JSON (breaking change)
### Fixed
- Memory leak in parser
[2.1.0]: https://github.com/owner/repo/releases/tag/v2.1.0
HISTORY.md → CHANGELOG.md:
Input (HISTORY.md):
## VERSION: 2.0.0
date: 2025-11-26
type: update
change_summary: Major refactoring
CHANGES:
- Refactored API to async/await
- Added JSON export
- Fixed memory leaks
Output (CHANGELOG.md):
## [2.0.0] - 2025-11-26
### Changed
- **Breaking:** refactor API to use async/await
### Added
- Add JSON export support
### Fixed
- Fix memory leaks in cache
[2.0.0]: https://github.com/owner/repo/releases/tag/v2.0.0
| Task | Workflow | Output |
|---|---|---|
| Create | WF1 | Initial CHANGELOG.md |
| Add release | WF2 | ## [X.Y.Z] - DATE |
| Update ongoing | WF3 | Append to Unreleased |
| Validate | WF4 | Format compliance check |
| Promote prerelease | WF5 | Alpha/beta/rc → stable |