Creates and maintains CHANGELOG.md in Keep a Changelog format, including adding entries and cutting releases. Use when the user asks to update the changelog, add a changelog entry, or record a release.
Scanned 9/3/2026
Install to Claude Code
npx -y skills add rikdc/ai-skills --skill changelog --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Changelog?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/rikdc-changelog)More formats (shields.io, HTML) on the badges page.
---
name: changelog
description: Creates and maintains CHANGELOG.md in Keep a Changelog format, including adding entries and cutting releases. Use when the user asks to update the changelog, add a changelog entry, or record a release.
user-invocable: true
argument-hint: "[--create] [--add-entry \"description\" --type TYPE] [--release X.Y.Z]"
allowed-tools: Read, Write(CHANGELOG.md), Edit(CHANGELOG.md), Bash(date:*), Bash(git add:*), Bash(git status:*), Bash(git commit:*), Bash(git log:*)
---
# Changelog - Keep a Changelog Maintenance
Maintains CHANGELOG.md in [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
format with [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Usage
- `/git-workflow:changelog --create` - Create CHANGELOG.md
- `/git-workflow:changelog --add-entry "description" --type TYPE` - Add an entry
- `/git-workflow:changelog --release X.Y.Z` - Cut a release
With no flags, infer the operation from the request. Categories: `added`,
`changed`, `deprecated`, `removed`, `fixed`, `security`.
## Skeleton
```markdown
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [1.2.3] - 2024-01-15
### Added
- User authentication
```
Category headings exist only where they have entries. Never write a heading
with a placeholder bullet under it.
## Operation: --create
1. Read CHANGELOG.md. If it exists, stop and report it — do not overwrite.
2. Write the skeleton above with an empty `## [Unreleased]` and no version
sections.
3. Offer to seed it from `git log`, but do not do so unasked.
## Operation: --add-entry
1. Read CHANGELOG.md; run `--create` first if it is missing.
2. Reject a `--type` outside the six categories.
3. Append the entry as a bullet under `## [Unreleased]` and its `### <Type>`
heading, adding that heading if absent.
4. Preserve the existing order of categories and the file's surrounding
formatting.
## Operation: --release X.Y.Z
Check before writing, and stop with the reason if any fails:
- `## [Unreleased]` has at least one entry — nothing to release otherwise.
- `X.Y.Z` does not already appear in the file.
- `X.Y.Z` is higher than the most recent version present.
Then:
1. Get today's date with `date +%F`. Do not guess it.
2. Rename `## [Unreleased]` to `## [X.Y.Z] - YYYY-MM-DD`, keeping its entries.
3. Insert a fresh empty `## [Unreleased]` above it.
4. If the file uses link references at the bottom, add one for `X.Y.Z` and
repoint `[Unreleased]` to compare against the new tag.
Do not tag, commit, or push unless asked.
## Entry Style
- One line per entry, describing a user-facing change.
- Lead with a verb: "Add session refresh endpoint", not "Added a new endpoint
that lets users refresh sessions".
- No commit hashes, file paths, or internal refactors that users cannot observe.
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!