Generate changelog entries from commits for any project type
View on GitHubjayteealao/agent-skills
release-automation
plugins/release-automation/skills/changelog-update/SKILL.md
February 1, 2026
Select agents to install to:
npx add-skill https://github.com/jayteealao/agent-skills/blob/main/plugins/release-automation/skills/changelog-update/SKILL.md -a claude-code --skill changelog-updateInstallation paths:
.claude/skills/changelog-update/# Changelog Update
## Purpose
Generates changelog entries from git commits, categorizes changes into Added/Changed/Fixed/Breaking sections following configurable changelog format (default: keep-a-changelog), and updates or creates the changelog file for any project type.
## Input Context
Requires:
- **Project Configuration**: Output from `detect-project-type` skill
- **Version**: New version number (e.g., "1.2.0")
- **Custom Message** (optional): User-provided commit message overrides auto-generation
- **Last Tag**: Git tag of previous release (optional)
## Workflow
### 1. Load Changelog Configuration
Use configuration from `detect-project-type`:
- `changelog_file` - Path to changelog file (default: `CHANGELOG.md`)
- `changelog_format` - Format to use (default: `keep-a-changelog`)
- `tag_pattern` - For finding commits since last tag
### 2. Determine Changelog File Path
Use `changelog_file` from configuration:
```bash
changelog_file="CHANGELOG.md" # from config, can be:
# - CHANGELOG.md (standard)
# - HISTORY.md (alternative)
# - CHANGES.rst (Python projects)
# - NEWS.md (GNU projects)
# - {package}/CHANGELOG.md (monorepos)
```
Check if file exists. If not, create with initial structure based on format:
```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/).
```
### 3. Gather Commits
Get commits since last release tag:
```bash
if [ -n "$last_tag" ]; then
git log ${last_tag}..HEAD --oneline --no-merges
else
# First release - get all commits
git log --oneline --no-merges
fi
```
For monorepo projects, optionally filter commits by package directory:
```bash
# Filter commits that touched this package only
git log ${last_tag}..HEAD --oneline --no-merges -- packages/my-lib/
```
### 3. Categorize Commits
Parse each commit message and categorize:
**Added (new features):**
- `feat:` or `feat(scope):`
- Commit messages starting with "add", "crea