Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generates structured changelogs from git history using conventional commit parsing. Reads commits since the last git tag, categorizes them into Added, Fixed, Changed, Breaking Changes, and Internal sections, then prepends a formatted entry to CHANGELOG.md. Falls back to AI-based categorization when commits do not follow conventional format. Triggered when the user asks to generate a changelog, update CHANGELOG, prepare release notes, or review what changed since the last release.
.claude/skills/0xjitsu-changelog-gen/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 137% | 0% |
| case-19 | ✗→✓ | ▲ Improved | -35% | 0% |
| case-18 | ✓→✗ | ▼ Worse | 6% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 54% | 0% |
Generate a structured CHANGELOG entry from git commit history using conventional commit conventions.
Activate this skill when the user:
npm-publish skill during the release pipelinebashLAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null)
If a tag exists:
bashgit log ${LAST_TAG}..HEAD --oneline --no-merges
If no tags exist (first release), use all commits:
bashgit log --oneline --no-merges
| Prefix | Changelog Section | |--------|-------------------| | feat: / feat(scope): | Added | | fix: / fix(scope): | Fixed | | refactor: / perf: | Changed | | docs: | Documentation | | BREAKING CHANGE: or !: in subject | Breaking Changes | | chore: / ci: / build: / test: | Internal |
Rules:
feat(auth): add OAuth flow becomes Add OAuth flow)(a1b2c3d)BREAKING CHANGE:, promote it to the Breaking Changes section regardless of prefixIf fewer than 50% of commits follow conventional format, switch to AI categorization:
git show --stat <hash>src/ -> Addedmarkdown## [X.Y.Z] --- YYYY-MM-DD ### Breaking Changes - Description of breaking change and migration steps (hash) ### Added - New feature description (hash) ### Fixed - Bug fix description (hash) ### Changed - Refactor or performance improvement description (hash) ### Documentation - Documentation update description (hash) ### Internal - Chore, CI, build, or test change description (hash)
Rules:
package.json if available, otherwise prompt the userYYYY-MM-DD format--- as the date separator (em dash style)Build the changelog entry following the output format above. Display it to the user for review before writing.
If CHANGELOG.md exists, insert the new entry immediately after the # Changelog header line (preserving any preamble text between the header and the first version entry).
If CHANGELOG.md does not exist, create it:
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.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [X.Y.Z] --- YYYY-MM-DD ...
Write just the current version's entry (without the ## [version] header) to /tmp/CHANGELOG_ENTRY.md for use by the npm-publish skill or gh release create.
| Scenario | Behavior | |----------|----------| | No git tags exist | Use all commits from repo inception | | No commits since last tag | Report "No changes since vX.Y.Z" and exit | | No conventional commits | Use AI categorization with a warning | | Merge commits | Skip by default (--no-merges) | | Single commit since last tag | Still generate a full entry | | Monorepo with multiple packages | Filter commits by path if user specifies a package directory |
This skill is designed to be invoked standalone or as part of the npm-publish pipeline. When called from npm-publish, the version number is already determined and should be passed in rather than read from package.json.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 9,581 | 3,834 | -60% | 1 | 1 | 0% | 1,898 | 1,561 | -18% | 0 | 0 | — |
case-02 | fail→fail | 3,899 | 3,019 | -23% | 1 | 1 | 0% | 547 | 1,517 | +177% | 0 | 0 | — |
case-03 | fail→fail | 2,852 | 7,488 | +163% | 1 | 1 | 0% | 310 | 1,472 | +375% | 0 | 0 | — |
case-04 | fail→pass | 11,428 | 15,571 | +36% | 1 | 1 | 0% | 2,018 | 2,162 | +7% | 0 | 0 | — |
case-05 | pass→pass | 5,723 | 2,141 | -63% | 1 | 1 | 0% | 962 | 1,478 | +54% | 0 | 0 | — |
case-10 | pass→pass | 9,197 | 2,565 | -72% | 1 | 1 | 0% | 1,465 | 1,487 | +2% | 0 | 0 | — |
case-06 | pass→pass | 7,354 | 2,242 | -70% | 1 | 1 | 0% | 1,373 | 1,532 | +12% | 0 | 0 | — |
case-07 | pass→pass | 6,582 | 2,880 | -56% | 1 | 1 | 0% | 1,293 | 1,433 | +11% | 0 | 0 | — |
case-08 | pass→pass | 8,302 | 2,377 | -71% | 1 | 1 | 0% | 1,464 | 1,568 | +7% | 0 | 0 | — |
case-09 | pass→pass | 9,389 | 22,478 | +139% | 1 | 1 | 0% | 1,706 | 1,627 | -5% | 0 | 0 | — |
case-15 | pass→pass | 8,443 | 2,161 | -74% | 1 | 1 | 0% | 1,609 | 1,504 | -7% | 0 | 0 | — |
case-11 | pass→pass | 9,882 | 42,373 | +329% | 1 | 1 | 0% | 1,766 | 2,084 | +18% | 0 | 0 | — |
case-12 | pass→pass | 9,316 | 3,988 | -57% | 1 | 1 | 0% | 1,928 | 1,989 | +3% | 0 | 0 | — |
case-13 | pass→pass | 23,014 | 3,133 | -86% | 1 | 1 | 0% | 1,675 | 1,728 | +3% | 0 | 0 | — |
case-14 | fail→pass | 3,701 | 2,171 | -41% | 1 | 1 | 0% | 642 | 1,519 | +137% | 0 | 0 | — |
case-16 | pass→pass | 4,982 | 1,492 | -70% | 1 | 1 | 0% | 806 | 1,333 | +65% | 0 | 0 | — |
case-17 | pass→pass | 4,327 | 3,124 | -28% | 1 | 1 | 0% | 711 | 1,626 | +129% | 0 | 0 | — |
case-18 | pass→fail | 8,195 | 1,957 | -76% | 1 | 1 | 0% | 1,328 | 1,409 | +6% | 0 | 0 | — |
case-19 | fail→pass | 11,819 | 1,593 | -87% | 1 | 1 | 0% | 2,103 | 1,361 | -35% | 0 | 0 | — |
case-20 | fail→fail | 17,522 | 7,285 | -58% | 1 | 1 | 0% | 856 | 2,496 | +192% | 0 | 0 | — |
case-21 | fail→fail | 32,041 | 6,152 | -81% | 1 | 1 | 0% | 625 | 1,519 | +143% | 0 | 0 | — |
case-22 | fail→fail | 1,784 | 5,903 | +231% | 1 | 1 | 0% | 264 | 2,187 | +728% | 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. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 21 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.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/3/2026 | +32% |
Other measured skills in the registry, with their headline benchmark lift.