Generate Changelog
Analyzes git history for a specified time period and generates a human-readable changelog for non-technical teams. Perfect for product managers, marketing, support teams, and external release notes.
When to use
Use this skill when the user needs to:
- Create release notes for stakeholders
- Summarize development progress for product/marketing teams
- Generate sprint or iteration summaries
- Prepare changelog for external communication
Instructions
Step 1: Parse Arguments
The $ARGUMENTS ($0) should specify the time period. Supported formats:
last week, last month, last 2 weeks
since 2024-01-01, since v1.2.0
from 2024-01-01 to 2024-01-31
v1.0.0..v1.1.0 (between tags)
If no period specified, default to "last week" and confirm with the user.
Step 2: Gather Git History
- Run
git log for the specified period with full commit messages
- Include merge commits to capture feature branches
- Gather commit metadata (author, date, files changed)
Example commands:
# Last week
git log --since="1 week ago" --pretty=format:"%h|%s|%b|%an|%ad" --date=short
# Between dates
git log --after="2024-01-01" --before="2024-01-31" --pretty=format:"%h|%s|%b|%an|%ad" --date=short
# Between tags
git log v1.0.0..v1.1.0 --pretty=format:"%h|%s|%b|%an|%ad" --date=short
Step 3: Analyze and Categorize Changes
Group commits into business-friendly categories:
| Category |
Keywords to detect |
| New Features |
feat, add, implement, introduce |
| Improvements |
improve, enhance, update, optimize |
| Bug Fixes |
fix, resolve, repair, correct |
| Security |
security, vulnerability, CVE |
| Performance |
perf, performance, speed, optimize |
| Breaking Changes |
breaking, BREAKING CHANGE |
| Deprecations |
deprecate, deprecated |
Transformation rules:
- Remove technical jargon (PR numbers, file paths, function names)
- Convert developer language to user-facing benefits
- Combine related commits into single entries
- Focus on WHAT changed for users, not HOW it was implemented
Step 4: Generate the Changelog
Create output in this format:
# Changelog
**Period:** [Start Date] - [End Date]
---
## Highlights
> [2-3 sentence summary of the most important changes]
---
## New Features
- **[Feature Name]** — [Brief description of what users can now do]
- **[Feature Name]** — [Brief description of what users can now do]
## Improvements
- **[Area]** — [What got better and why it matters]
- **[Area]** — [What got better and why it matters]
## Bug Fixes
- Fixed an issue where [user-facing problem description]
- Resolved a problem with [user-facing problem description]
## Security
- [Description without exposing vulnerability details]
## Performance
- [Description of what is now faster/more efficient]
---
**Stats:** [X] changes by [Y] contributors
**Contributors:** @name1, @name2, @name3
Tone Guidelines
Make the changelog feel alive and engaging:
- Use active voice: "You can now..." instead of "Added ability to..."
- Celebrate wins: "Finally! Dark mode is here"
- Be human: "No more frustrating login errors"
- Add context when helpful: "Based on your feedback, we..."
Step 5: Handle Edge Cases
No commits found:
- Inform user that no changes were found for the period
- Suggest alternative time ranges
Too many commits (>100):
- Warn user about large volume
- Offer to summarize by category or split into multiple sections
Technical-only changes:
- If all changes are internal (refactoring, dependencies, CI/CD):
- Create a brief "Technical Improvements" section
- Note that no user-facing changes were made
Step 6: Output Options
Ask user their preferred output:
- Display - Show the changelog in the conversation
- File - Save to a file (default:
CHANGELOG-[date].md)
- Clipboard - Copy to clipboard for pasting elsewhere
Writing Guidelines
User perspective - Write from the user's point of view
- Bad:"Refactored auth module to use JWT tokens"
- Good:"Your login is now more secure"
Benefit-focused - Emphasize the benefit, not the implementation
- Bad:"Added Redis caching layer"
- Good:"Pages load up to 3x faster"
Plain language - Avoid technical terms
- Bad:"Fixed race condition in async handler"
- Good:"Fixed a rare issue where data could appear incorrect"
Concise - Keep entries to 1-2 sentences max
Positive framing - Frame fixes as improvements
- Bad:"Fixed broken search"
- Good:"Search now works reliably"
Celebrate big wins - Make important features feel special
- Bad:"Added dark mode"
- "Dark mode is finally here! Easy on the eyes, day or night"
Acknowledge feedback - Show users they're heard
- Good:"You asked, we listened — bulk export is now available"
Arguments
$ARGUMENTS ($0) - Time period specification
- Relative:
last week, last 2 weeks, last month
- Since:
since 2024-01-01, since v1.0.0
- Range:
from 2024-01-01 to 2024-01-31
- Tags:
v1.0.0..v1.1.0
Examples:
git:changelog last week - Changes from the past 7 days
git:changelog since 2024-01-01 - All changes since January 1st
git:changelog v2.0.0..v2.1.0 - Changes between two releases
1---2name: git-changelog3description: Generate Changelog - analyzes git history and creates a human-readable changelog for non-technical teams4---56# Generate Changelog78Analyzes git history for a specified time period and generates a human-readable changelog for non-technical teams. Perfect for product managers, marketing, support teams, and external release notes.910## When to use1112Use this skill when the user needs to:13- Create release notes for stakeholders14- Summarize development progress for product/marketing teams15- Generate sprint or iteration summaries16- Prepare changelog for external communication1718## Instructions1920### Step 1: Parse Arguments2122The `$ARGUMENTS` (`$0`) should specify the time period. Supported formats:23- `last week`, `last month`, `last 2 weeks`24- `since 2024-01-01`, `since v1.2.0`25- `from 2024-01-01 to 2024-01-31`26- `v1.0.0..v1.1.0` (between tags)2728If no period specified, default to "last week" and confirm with the user.2930### Step 2: Gather Git History31321. Run `git log` for the specified period with full commit messages332. Include merge commits to capture feature branches343. Gather commit metadata (author, date, files changed)3536Example commands:37```bash38# Last week39git log --since="1 week ago" --pretty=format:"%h|%s|%b|%an|%ad" --date=short4041# Between dates42git log --after="2024-01-01" --before="2024-01-31" --pretty=format:"%h|%s|%b|%an|%ad" --date=short4344# Between tags45git log v1.0.0..v1.1.0 --pretty=format:"%h|%s|%b|%an|%ad" --date=short46```4748### Step 3: Analyze and Categorize Changes4950Group commits into business-friendly categories:5152| Category | Keywords to detect |53|----------|-------------------|54| New Features | feat, add, implement, introduce |55| Improvements | improve, enhance, update, optimize |56| Bug Fixes | fix, resolve, repair, correct |57| Security | security, vulnerability, CVE |58| Performance | perf, performance, speed, optimize |59| Breaking Changes | breaking, BREAKING CHANGE |60| Deprecations | deprecate, deprecated |6162**Transformation rules:**631. Remove technical jargon (PR numbers, file paths, function names)642. Convert developer language to user-facing benefits653. Combine related commits into single entries664. Focus on WHAT changed for users, not HOW it was implemented6768### Step 4: Generate the Changelog6970Create output in this format:7172```markdown73# Changelog7475**Period:** [Start Date] - [End Date]7677---7879## Highlights8081> [2-3 sentence summary of the most important changes]8283---8485## New Features8687- **[Feature Name]** — [Brief description of what users can now do]88- **[Feature Name]** — [Brief description of what users can now do]8990## Improvements9192- **[Area]** — [What got better and why it matters]93- **[Area]** — [What got better and why it matters]9495## Bug Fixes9697- Fixed an issue where [user-facing problem description]98- Resolved a problem with [user-facing problem description]99100## Security101102- [Description without exposing vulnerability details]103104## Performance105106- [Description of what is now faster/more efficient]107108---109110**Stats:** [X] changes by [Y] contributors111112**Contributors:** @name1, @name2, @name3113```114115### Tone Guidelines116117Make the changelog feel alive and engaging:118- Use active voice: "You can now..." instead of "Added ability to..."119- Celebrate wins: "Finally! Dark mode is here"120- Be human: "No more frustrating login errors"121- Add context when helpful: "Based on your feedback, we..."122123### Step 5: Handle Edge Cases124125**No commits found:**126- Inform user that no changes were found for the period127- Suggest alternative time ranges128129**Too many commits (>100):**130- Warn user about large volume131- Offer to summarize by category or split into multiple sections132133**Technical-only changes:**134- If all changes are internal (refactoring, dependencies, CI/CD):135 - Create a brief "Technical Improvements" section136 - Note that no user-facing changes were made137138### Step 6: Output Options139140Ask user their preferred output:1411. **Display** - Show the changelog in the conversation1422. **File** - Save to a file (default: `CHANGELOG-[date].md`)1433. **Clipboard** - Copy to clipboard for pasting elsewhere144145## Writing Guidelines1461471. **User perspective** - Write from the user's point of view148 - Bad:"Refactored auth module to use JWT tokens"149 - Good:"Your login is now more secure"1501512. **Benefit-focused** - Emphasize the benefit, not the implementation152 - Bad:"Added Redis caching layer"153 - Good:"Pages load up to 3x faster"1541553. **Plain language** - Avoid technical terms156 - Bad:"Fixed race condition in async handler"157 - Good:"Fixed a rare issue where data could appear incorrect"1581594. **Concise** - Keep entries to 1-2 sentences max1601615. **Positive framing** - Frame fixes as improvements162 - Bad:"Fixed broken search"163 - Good:"Search now works reliably"1641656. **Celebrate big wins** - Make important features feel special166 - Bad:"Added dark mode"167 - "Dark mode is finally here! Easy on the eyes, day or night"1681697. **Acknowledge feedback** - Show users they're heard170 - Good:"You asked, we listened — bulk export is now available"171172## Arguments173174- `$ARGUMENTS` (`$0`) - Time period specification175 - Relative: `last week`, `last 2 weeks`, `last month`176 - Since: `since 2024-01-01`, `since v1.0.0`177 - Range: `from 2024-01-01 to 2024-01-31`178 - Tags: `v1.0.0..v1.1.0`179180Examples:181- `git:changelog last week` - Changes from the past 7 days182- `git:changelog since 2024-01-01` - All changes since January 1st183- `git:changelog v2.0.0..v2.1.0` - Changes between two releases