Memstack memstack-development-changelog-generator
Use when the user says 'generate changelog', 'update changelog', 'what changed', 'release notes', 'write changelog', or needs a formatted CHANGELOG.md from git commit history. Do NOT use for diary entries, git log viewing, or commit message writing.
install
source · Clone the upstream repo
git clone https://github.com/cwinvestments/memstack
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/cwinvestments/memstack "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/development/changelog-generator" ~/.claude/skills/cwinvestments-memstack-memstack-development-changelog-generator && rm -rf "$T"
manifest:
skills/development/changelog-generator/SKILL.mdsource content
Changelog Generator — Generating changelog...
Produces a formatted CHANGELOG.md from git commit history, grouped by type and ready for release.
Activation
| Trigger | Status |
|---|---|
| User says "generate changelog" or "update changelog" | ACTIVE |
| User says "what changed" or "release notes" | ACTIVE |
| User says "write changelog" or "changelog since" | ACTIVE |
| User wants to view git log only | NOT this skill — use git commands directly |
| User wants a diary entry | NOT this skill — use Diary |
Context Guard
- Do NOT use for session logging (that's Diary)
- Do NOT use for commit message writing (that's a git workflow)
- Do NOT use for PR descriptions (that's a git workflow)
- This skill ONLY produces CHANGELOG.md content from existing commits
Steps
Step 1: Determine the range
Ask the user or infer from context:
| Parameter | Default | Example |
|---|---|---|
| Since tag/date | Last tag or last 7 days | , |
| Until | HEAD | , |
| Format | Keep a Changelog | Conventional, custom |
# Find the last tag git describe --tags --abbrev=0 2>/dev/null || echo "No tags found" # Get commits since last tag (or date) git log --oneline --no-merges $(git describe --tags --abbrev=0 2>/dev/null || echo "HEAD~50")..HEAD
Step 2: Categorize commits
Parse each commit message and classify by prefix:
| Prefix | Category | Changelog Section |
|---|---|---|
/ | Features | ### Added |
/ | Bug Fixes | ### Fixed |
| Documentation | ### Changed |
| Refactoring | ### Changed |
| Performance | ### Changed |
| Tests | (omit unless user requests) |
/ / | Maintenance | (omit unless user requests) |
or | Breaking | ### Breaking Changes |
| No prefix | Uncategorized | ### Other |
Step 3: Generate the changelog entry
Follow Keep a Changelog format:
## [version] - YYYY-MM-DD ### Breaking Changes - Description of breaking change ([commit-hash]) ### Added - New feature description ([commit-hash]) ### Fixed - Bug fix description ([commit-hash]) ### Changed - Refactor/improvement description ([commit-hash])
Writing rules:
- Rewrite technical commit messages into user-facing language
- Group related commits into single entries where sensible
- Lead with the impact, not the implementation ("Users can now..." not "Added handler for...")
- Include short commit hash as reference
- Skip merge commits, version bumps, and trivial chores unless requested
- Order: Breaking Changes > Added > Fixed > Changed > Removed > Other
Step 4: Handle existing CHANGELOG.md
# Check if CHANGELOG.md exists ls CHANGELOG.md 2>/dev/null
- If exists: prepend the new entry after the title line, before existing entries
- If not exists: create with header:
# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/). ## [version] - YYYY-MM-DD ...
Step 5: Present for review
Changelog entry for [version] ([date]): - [N] features added - [N] bugs fixed - [N] changes - [N] breaking changes Ready to write to CHANGELOG.md? (prepend / overwrite / clipboard only)
Disambiguation
- "generate changelog" / "update changelog" / "release notes" = Changelog Generator
- "save diary" / "log session" = Diary (not Changelog Generator)
- "what did we do" / "last session" = Echo (not Changelog Generator)
- "git log" / "show commits" = Direct git commands (not Changelog Generator)
Level History
- Lv.1 — Base: Git-to-changelog with Keep a Changelog format, commit categorization by conventional commits prefix, user-facing rewriting, existing file handling. (Origin: MemStack v3.5, Apr 2026)