changelog-writer — Claude Code skill: changelog from git commits
Turns git commits, PR titles and issue references into a CHANGELOG and release notes. Useful right before a release, when changes need sorting and a version number.
npx skills add patricio0312rev/skills --skill changelog-writer -a claude-codeWhat changelog-writer does
The skill walks the git history since the last release and sorts commits into categories: feat lands in Added, fix in Fixed, docs in Documentation, perf in Performance, and anything marked BREAKING CHANGE gets its own block. Output follows the Keep a Changelog format, and the skill suggests the next semantic versioning bump — major, minor or patch.
A separate user-facing summary covers highlights, new features, fixes, changes, security and contributors. Breaking changes are detected from commit markers, a "breaking-change" PR label, config format changes and API endpoint edits. History is gathered with plain git commands, such as git log $(git describe --tags --abbrev=0)..HEAD --oneline.
Conventional commits give the cleanest result. Without a type prefix, a commit gets sorted more or less by guesswork, so on free-form messages you will want to review the categories yourself.
What it helps with
- build a CHANGELOG from commits since the last tag
- sort changes into Added, Fixed and Breaking Changes
- pick the next version bump under semantic versioning
- write release notes aimed at users, not developers
- spot breaking changes before a major release
Example prompts for the agent
- create a changelog from commits since the last release
- write release notes for version 2.1.0
- prepare the release: group changes by type and suggest a version number
How to install changelog-writer
1Skills CLI (Vercel)
npx skills add patricio0312rev/skills --skill changelog-writer -a claude-code2Manually: put the files in place
~/.claude/skills/changelog-writer/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/changelog-writer/
1Skills CLI (Vercel)
npx skills add patricio0312rev/skills --skill changelog-writer -a codex2Manually: put the files in place
.agents/skills/changelog-writer/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add patricio0312rev/skills --skill changelog-writer -a cursor2Manually: put the files in place
.cursor/skills/changelog-writer/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install patricio0312rev/skills changelog-writer2Manually: put the files in place
.github/skills/changelog-writer/SKILL.md1Skills CLI (Vercel)
npx skills add patricio0312rev/skills --skill changelog-writer -a gemini-cli2Platform CLI
gemini skills install https://github.com/patricio0312rev/skills --path foundation/changelog-writerManually: put the files in place
.devin/skills/changelog-writer/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add patricio0312rev/skills --skill changelog-writer -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about changelog-writer
How do I install changelog-writer in Claude?
Run npx skills add patricio0312rev/skills --skill changelog-writer -a claude-code. The skill file lands at ~/.claude/skills/changelog-writer/SKILL.md.
What does changelog-writer do?
It reads git history, PR titles and issue references, groups changes by type and formats them to the Keep a Changelog standard. It also recommends the next version number and drafts release notes.
Which commits does it handle best?
Conventional commits with prefixes like feat(auth): and fix:. The skill parses type, scope and description from that pattern, so free-form messages get categorised less accurately.
Source text
SKILL.md · MIT
--- name: changelog-writer description: Generates changelogs and release notes from git commits, PR titles, and issue references. Organizes changes by impact type (breaking, features, fixes, improvements), formats according to Keep a Changelog standard, and provides version tagging and semantic versioning suggestions. Use when users request "create changelog", "write release notes", "document version changes", or "prepare release". --- # Changelog & Release Notes Writer Generate professional changelogs and release notes from version control history. ## Core Workflow 1. **Analyze commits**: Parse git history since last release 2. **Categorize changes**: Group by type (feat, fix, docs, etc.) 3. **Identify breaking changes**: Flag incompatible changes 4. **Extract highlights**: Surface most important changes 5. **Format document**: Follow Keep a Changelog format 6. **Suggest version**: Recommend semantic version bump 7. **Generate release notes**: Create user-friendly summary ## Commit Analysis ### Extract Information From - Commit messages (preferably conventional commits) - PR titles and descriptions - Issue references (#123) - Merge commit messages - Commit authors ### Parse Patterns ``` feat(auth): add OAuth2 support ^ ^ ^ | | └─ Description | └─ Scope (optional) └─ Type ``` **Types to Categories:** - `feat` → Added - `fix` → Fixed - `docs` → Documentation - `style`, `refactor` → Changed - `perf` → Performance - `test` → Testing - `chore`, `ci` → Internal - `BREAKING CHANGE` → Breaking Changes ## Changelog Format (Keep a Changelog) ```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] ### Added - New feature X - Support for Y ### Changed - Updated Z behavior ### Fixed - Resolved issue #123 ## [2.1.0] - 2024-01-15 ### Added - OAuth2 authentication support - User profile management API - Dark mode toggle ### Changed - Improved error messages - Updated dependencies to latest versions ### Deprecated - Legacy authentication method (will be removed in 3.0.0) ### Fixed - Memory leak in WebSocket connection - Incorrect date formatting in reports - Race condition in concurrent requests ### Security - Patched XSS vulnerability in user input ## [2.0.0] - 2023-12-01 ### Breaking Changes - ⚠️ Removed support for Node.js 16 - ⚠️ Changed API response format for `/users` endpoint - ⚠️ Renamed `config.yaml` to `config.yml` ### Added - Complete API rewrite with improved performance - WebSocket support for real-time updates ### Migration Guide See [MIGRATION_v2.md](./docs/MIGRATION_v2.md) for upgrade instructions. [unreleased]: https://github.com/user/project/compare/v2.1.0...HEAD [2.1.0]: https://github.com/user/project/compare/v2.0.0...v2.1.0 [2.0.0]: https://github.com/user/project/releases/tag/v2.0.0 ``` ## Release Notes Format ````markdown # Release v2.1.0 - "Feature Release Name" Released: January 15, 2024 ## 🎉 Highlights This release brings major improvements to authentication and user experience: - **OAuth2 Support**: Users can now sign in with Google, GitHub, and Microsoft - **Dark Mode**: Toggle between light and dark themes - **Performance**: 40% faster API response times ## ✨ New Features - OAuth2 authentication with popular providers (#456) - User profile management API (#478) - Dark mode toggle in settings (#492) - Export data in CSV format (#501) ## 🐛 Bug Fixes - Fixed memory leak in WebSocket connections (#489) - Resolved incorrect date formatting in reports (#495) - Fixed race condition in concurrent API requests (#503) ## 🔄 Changes - Improved error messages across the application - Updated all dependencies to latest stable versions - Refined UI animations for smoother experience ## 🔒 Security - Patched XSS vulnerability in user input validation - Updated JWT library to address CVE-2024-1234 ## 📚 Documentation - Added OAuth2 setup guide - Updated API reference with new endpoints - Improved troubleshooting section ## 🙏 Contributors Thank you to all contributors who made this release possible: - @alice - OAuth2 implementation - @bob - Dark mode feature - @charlie - Bug fixes and testing ## 📦 Installation ```bash npm install [email protected] # or yarn add [email protected] ``` ```` ## 🔗 Links - [Full Changelog](https://github.com/user/project/compare/v2.0.0...v2.1.0) - [Documentation](https://docs.projectname.com) - [Migration Guide](./docs/MIGRATION_v2.md) --- **Note:** This is a minor release. No breaking changes. Safe to upgrade from 2.0.x. ```` ## Semantic Versioning Rules Given a version number MAJOR.MINOR.PATCH (e.g., 2.1.0): 1. **MAJOR** (2.x.x → 3.x.x) - Breaking changes - Incompatible API changes - Removed features 2. **MINOR** (2.1.x → 2.2.x) - New features - Backward-compatible functionality - Deprecated features 3. **PATCH** (2.1.0 → 2.1.1) - Bug fixes - Security patches - Performance improvements **Special versions:** - `0.x.x` - Initial development (breaking changes allowed in minor) - `x.y.0-alpha.1` - Pre-release - `x.y.0-beta.2` - Beta release - `x.y.0-rc.1` - Release candidate ## Git Commands for Changelog Generation ```bash # Get commits since last tag git log $(git describe --tags --abbrev=0)..HEAD --oneline # Get commits between two tags git log v2.0.0..v2.1.0 --oneline # Get commits with PR numbers git log --merges --pretty=format:"%s" v2.0.0..HEAD # Get contributors git log v2.0.0..HEAD --format='%aN' | sort -u # Get commit count by type git log v2.0.0..HEAD --oneline | grep -E '^[a-f0-9]+ (feat|fix|docs)' | cut -d' ' -f2 | sort | uniq -c ```` ## Breaking Changes Detection Look for these indicators: - Commit message contains `BREAKING CHANGE:` - Commit type has `!` (e.g., `feat!:`) - PR labeled with "breaking-change" - Major dependency updates - API endpoint changes - Config file format changes **Document clearly:** ````markdown ### Breaking Changes ⚠️ **API Response Format Changed** The `/api/users` endpoint now returns: ```json // Before { "data": [...] } // After { "users": [...], "total": 100 } ``` ```` **Migration:** Update your API client to access `users` instead of `data`. ```` ## Automation Tools ### Using conventional-changelog ```bash npm install -g conventional-changelog-cli # Generate changelog conventional-changelog -p angular -i CHANGELOG.md -s # Generate for specific version conventional-changelog -p angular -i CHANGELOG.md -s -r 0 ```` ### Using git-cliff ```bash # Install git-cliff cargo install git-cliff # Generate changelog git-cliff --tag v2.1.0 > CHANGELOG.md # Generate release notes git-cliff --tag v2.1.0 --unreleased ``` ### GitHub Release Script ```bash #!/bin/bash # scripts/release.sh VERSION=$1 PREVIOUS_TAG=$(git describe --tags --abbrev=0) # Generate release notes gh release create "$VERSION" \ --title "Release $VERSION" \ --notes "$(git log $PREVIOUS_TAG..HEAD --pretty=format:'- %s')" ``` ## User-Facing vs Developer-Facing ### User-Facing (Release Notes) - Focus on benefits and features - Less technical jargon - Include screenshots/demos - Highlight user experience improvements - Provide upgrade instructions ### Developer-Facing (Changelog) - Technical details - API changes - Breaking changes with migration guides - Dependencies updates - Internal refactorings ## Templates by Project Type ### Library/Package Focus on: API changes, breaking changes, new methods ### Application Focus on: New features, bug fixes, UI improvements ### CLI Tool Focus on: New commands, flag changes, behavior changes ### API Service Focus on: Endpoint changes, performance, security ## Best Practices 1. **Be specific**: "Fixed login bug" → "Fixed session timeout on mobile" 2. **Link issues**: Reference GitHub issues (#123) 3. **Credit contributors**: Acknowledge work 4. **Highlight impact**: Mark breaking changes clearly 5. **Group logically**: By type, not chronologically 6. **Update regularly**: With each release 7. **Follow conventions**: Keep a Changelog format 8. **Semantic versioning**: Use correctly ## Changelog Entry Examples ### Good Examples ```markdown ### Added - OAuth2 authentication support (#456) - @alice - Export data in CSV format with custom column selection (#501) ### Fixed - Resolved memory leak in WebSocket connections affecting long-running sessions (#489) - Fixed race condition in concurrent API requests that caused data inconsistency (#503) ``` ### Bad Examples ```markdown ### Added - Added stuff - New feature ### Fixed - Fixed bug - Updates ``` ## Version Suggestion Algorithm ``` If breaking changes detected: MAJOR++, MINOR=0, PATCH=0 Else if new features: MINOR++, PATCH=0 Else if only fixes: PATCH++ ``` ## Release Checklist Before publishing release: - [ ] Review all commits since last release - [ ] Identify breaking changes - [ ] Categorize changes properly - [ ] Update CHANGELOG.md - [ ] Write release notes - [ ] Update version in package.json/pyproject.toml - [ ] Create git tag - [ ] Push tag to trigger CI/CD - [ ] Publish to package registry (npm, PyPI, etc.) - [ ] Create GitHub release with notes - [ ] Announce on relevant channels ## Output Checklist Every changelog generation should provide: - [ ] Formatted CHANGELOG.md following Keep a Changelog - [ ] Release notes draft (user-friendly) - [ ] Semantic version suggestion (X.Y.Z) - [ ] Breaking changes clearly marked - [ ] Migration guide for breaking changes - [ ] Git tag command to run - [ ] Links to compare view
© patricio0312rev · MIT · patricio0312rev/skills