Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate release notes and changelogs from git commits, feature lists, or project updates. Use when a user asks to generate a changelog, create release notes, summarize recent changes, draft a CHANGELOG entry, or prepare release documentation from git history.
.claude/skills/terminalskills-changelog-generator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 94% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 150% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 188% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 37% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 80% | 0% |
Generate structured changelogs and release notes from git commit history, merge commits, or manually provided feature lists. Produces well-organized, categorized output following the Keep a Changelog convention. Handles both technical changelogs for developers and user-facing release notes.
When a user asks you to generate a changelog or release notes, follow this process:
Identify what range of changes to include:
bash# List recent tags to find version boundaries git tag --sort=-creatordate | head -10 # Get commits since the last tag LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null) echo "Last tag: $LAST_TAG" # If no tags exist, ask the user for a date range or commit range
Get the raw commit data:
bash# Commits since last tag git log "$LAST_TAG"..HEAD --oneline --no-merges # Commits between two tags git log v1.1.0..v1.2.0 --oneline --no-merges # Commits in the last 2 weeks git log --since="2 weeks ago" --oneline --no-merges # With more detail (author, date, body) git log "$LAST_TAG"..HEAD --format="%h %s (%an, %ad)" --date=short --no-merges
Sort each commit into one of these categories based on the commit message and changed files:
Use commit message prefixes as hints:
feat:, feature: -> Addedfix:, bugfix: -> Fixedrefactor:, perf: -> Changeddocs: -> Changed (if user-facing) or skipchore:, ci:, build: -> Skip unless significantsecurity:, vuln: -> Securitydeprecate: -> Deprecatedremove:, breaking: -> RemovedIf commits lack conventional prefixes, read the diff to classify:
bash# See what files changed in a commit git show --stat <commit-hash> # See the actual diff for ambiguous commits git show <commit-hash>
Format following Keep a Changelog:
markdown## [X.Y.Z] - YYYY-MM-DD ### Added - Feature description in user-understandable language (#PR) ### Changed - What changed and why it matters (#PR) ### Fixed - Bug description and what was corrected (#PR)
Rules for writing entries:
CHANGELOG.md exists, prepend the new entry below the headerUser request: "Generate a changelog for the v2.3.0 release"
Actions:
bashgit log v2.2.0..v2.3.0 --oneline --no-merges
Output:
markdown## [2.3.0] - 2025-04-15 ### Added - Add dark mode support across all pages (#234) - Add CSV export for dashboard reports (#241) - Add keyboard shortcuts for navigation (#238) ### Changed - Improve search performance by 3x with debounced queries (#236) - Update authentication flow to support SSO providers (#240) ### Fixed - Fix pagination losing filters on page change (#235) - Fix timezone display in event scheduler (#237) - Fix memory leak in WebSocket connection handler (#242)
User request: "Write release notes for our users about this update"
Output:
markdown# What's New in v2.3.0 We're excited to ship dark mode, faster search, and SSO support! ## Highlights **Dark Mode** - The app now supports dark mode across all pages. Toggle it from Settings > Appearance or let it follow your system preference. **3x Faster Search** - Search results now appear instantly as you type, thanks to a complete rewrite of the search engine. **SSO Login** - You can now sign in with your company's identity provider (Okta, Azure AD, Google Workspace). ## Bug Fixes - Filters now persist correctly when navigating between pages - Event times display in your local timezone - Resolved a connectivity issue with real-time updates ## Full Changelog See the [complete changelog](./CHANGELOG.md) for all details.
User request: "What changed on the feature branch compared to main?"
Actions:
bashgit log main..feature/payments --oneline --no-merges git diff main..feature/payments --stat
Output: A summary of all changes on the branch, categorized and formatted, suitable for including in a PR description or release planning document.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 4,413 | 3,421 | -22% | 1 | 1 | 0% | 792 | 1,938 | +145% | 0 | 0 | — |
case-02 | fail→fail | 9,345 | 10,470 | +12% | 1 | 1 | 0% | 1,666 | 3,072 | +84% | 0 | 0 | — |
case-03 | fail→fail | 7,179 | 2,857 | -60% | 1 | 1 | 0% | 1,530 | 1,827 | +19% | 0 | 0 | — |
case-04 | fail→pass | 6,141 | 4,599 | -25% | 1 | 1 | 0% | 1,210 | 2,343 | +94% | 0 | 0 | — |
case-05 | fail→pass | 4,746 | 3,773 | -21% | 1 | 1 | 0% | 898 | 2,246 | +150% | 0 | 0 | — |
case-06 | fail→pass | 4,158 | 5,248 | +26% | 1 | 1 | 0% | 841 | 2,418 | +188% | 0 | 0 | — |
case-07 | fail→pass | 7,631 | 3,260 | -57% | 1 | 1 | 0% | 1,579 | 2,158 | +37% | 0 | 0 | — |
case-08 | pass→pass | 7,337 | 3,389 | -54% | 1 | 1 | 0% | 1,358 | 2,107 | +55% | 0 | 0 | — |
case-09 | fail→pass | 9,106 | 5,885 | -35% | 1 | 1 | 0% | 1,366 | 2,459 | +80% | 0 | 0 | — |
case-10 | pass→pass | 4,744 | 2,651 | -44% | 1 | 1 | 0% | 941 | 2,033 | +116% | 0 | 0 | — |
case-11 | pass→fail | 3,840 | 3,084 | -20% | 1 | 1 | 0% | 683 | 2,096 | +207% | 0 | 0 | — |
case-12 | pass→pass | 3,169 | 2,615 | -17% | 1 | 1 | 0% | 573 | 2,075 | +262% | 0 | 0 | — |
case-13 | pass→pass | 5,047 | 2,905 | -42% | 1 | 1 | 0% | 976 | 1,883 | +93% | 0 | 0 | — |
case-14 | pass→pass | 7,726 | 6,952 | -10% | 1 | 1 | 0% | 1,614 | 2,792 | +73% | 0 | 0 | — |
case-15 | pass→pass | 10,795 | 8,233 | -24% | 1 | 1 | 0% | 2,211 | 3,138 | +42% | 0 | 0 | — |
case-16 | pass→pass | 4,900 | 4,050 | -17% | 1 | 1 | 0% | 959 | 2,241 | +134% | 0 | 0 | — |
case-17 | pass→pass | 5,001 | 3,837 | -23% | 1 | 1 | 0% | 811 | 2,089 | +158% | 0 | 0 | — |
case-18 | pass→pass | 9,258 | 5,668 | -39% | 1 | 1 | 0% | 1,911 | 2,490 | +30% | 0 | 0 | — |
case-19 | fail→fail | 8,163 | 3,666 | -55% | 1 | 1 | 0% | 1,368 | 2,127 | +55% | 0 | 0 | — |
case-20 | fail→pass | 3,413 | 2,099 | -38% | 1 | 1 | 0% | 625 | 1,838 | +194% | 0 | 0 | — |
case-21 | fail→fail | 5,793 | 3,967 | -32% | 1 | 1 | 0% | 1,082 | 2,155 | +99% | 0 | 0 | — |
case-22 | pass→pass | 4,442 | 4,260 | -4% | 1 | 1 | 0% | 823 | 2,223 | +170% | 0 | 0 | — |
case-23 | pass→pass | 10,229 | 6,724 | -34% | 1 | 1 | 0% | 1,971 | 2,744 | +39% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +22 percentage points is the difference between those two pass rates over the 23 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.