
Automates changelog generation from your git commit history, with smart detection for versioning styles (SemVer, CalVer, two-component) and formatting conventions. It reads your existing CHANGELOG.md to match your preferred style, whether that's Keep a Changelog or pf4j format, and maps conventional commits to the right sections. The reference-style links and version comparison URLs are a nice touch for readability. Works best when you use conventional commits, but handles messy commit messages too. Saves you from manually combing through git log before each release, and the version bump suggestions based on commit types are actually helpful.
$ npx -y skills add decebals/claude-code-java --skill changelog-generator --agent claude-codeInstalls into .claude/skills of the current project.
Generate changelogs from conventional commits for Java projects.
Detect versioning style using this priority order:
grep -A5 "## Versioning" CLAUDE.md 2>/dev/null
Look for explicit convention:
## Versioning
This project uses Semantic Versioning (x.y.z).
Tag format: `release-x.y.z`
git tag --sort=-version:refname | head -10
| Pattern detected | Versioning style |
|---|---|
v3.15.0, 3.15.0 | SemVer (x.y.z) |
release-3.15.0 | SemVer with prefix |
v2.1, 2.1 | Two-component (x.y) |
2026.01, 26.1 | CalVer |
| No pattern | Ask user |
grep -E "^\#+ \[.*\]" CHANGELOG.md | head -5
Extract version format from existing entries.
No versioning convention detected. Which format does this project use?
- Semantic Versioning (x.y.z) - e.g., 3.15.0
- Two-component (x.y) - e.g., 2.1
- Calendar Versioning - e.g., 2026.01
| Style | Format | Tag examples | Version bump |
|---|---|---|---|
| SemVer | x.y.z | v3.15.0, release-3.15.0 | major.minor.patch |
| Two-component | x.y | v2.1, 2.1 | major.minor |
| CalVer | YYYY.MM[.patch] | 2026.01, 2026.01.1 | year.month[.patch] |
If CLAUDE.md exists but has no versioning info:
Detected versioning: SemVer (x.y.z) with tag prefix 'release-'
Want me to add this to CLAUDE.md for future reference?
Supports two formats - detect from existing CHANGELOG.md or ask user preference.
# Changelog
## [Unreleased]
## [1.2.0] - 2026-01-29
### Added
- [#123]: New feature for plugin dependencies
### Changed
- [#456]: Improved performance of plugin loading
### Fixed
- [#234]: Resolved NPE when directory missing
## Change Log
### [Unreleased][unreleased]
### [3.15.0] - 2026-01-29
#### Added
- [#123]: New feature for plugin dependencies
#### Changed
- [#456]: Improved performance of plugin loading
#### Fixed
- [#234]: Resolved NPE when directory missing
Use reference-style links for cleaner, more readable entries:
#### Fixed
- [#648]: Restore missing `module-info.class` in multi-release JAR
- [#625]: Fix exception handling inconsistency in `startPlugin()`
#### Added
- [#629]: Validate dependency state on plugin start
- [#633]: Allow customization of `PluginClassLoader` parent delegation
<!-- At the bottom of the file -->
[#648]: https://github.com/user/repo/issues/648
[#633]: https://github.com/user/repo/pull/633
[#629]: https://github.com/user/repo/pull/629
[#625]: https://github.com/user/repo/pull/625
Benefits:
Add comparison links at the bottom for easy diff viewing:
[unreleased]: https://github.com/user/repo/compare/release-3.15.0...HEAD
[3.15.0]: https://github.com/user/repo/compare/release-3.14.1...release-3.15.0
[3.14.1]: https://github.com/user/repo/compare/release-3.14.0...release-3.14.1
Pattern: [version]: https://github.com/{owner}/{repo}/compare/{previous-tag}...{current-tag}
Adapt to existing file, or use this default order:
| Section | When to use |
|---|---|
| Fixed | Bug fixes |
| Changed | Changes to existing functionality |
| Added | New features |
| Deprecated | Soon-to-be removed features |
| Removed | Removed features |
| Security | Vulnerability fixes (CVEs) |
Note: pf4j uses Fixed → Changed → Added → Removed. Keep a Changelog uses Added → Changed → Deprecated → Removed → Fixed → Security.
Rule: Follow existing file's order if present.
| Commit Type | Changelog Section |
|---|---|
| feat | Added |
| fix | Fixed |
| perf | Changed |
| refactor | Changed |
| build(deps) | Changed or Security (if CVE) |
| BREAKING CHANGE | Changed (with bold note) |
| deprecate | Deprecated |
Check for existing CHANGELOG.md
cat CHANGELOG.md | head -20
Detect format (h2 vs h3 versions, section order, link style).
Determine version range
# Find last tag
git describe --tags --abbrev=0
# List recent tags
git tag --sort=-version:refname | head -5
Get commits since last release
git log v3.14.1..HEAD --oneline
Extract issue/PR references
Look for patterns: #123, fixes #123, closes #123, (#123)
Generate changelog entry
Suggest version bump (based on detected versioning style)
SemVer (x.y.z):
Two-component (x.y):
CalVer (YYYY.MM):
git log --oneline for initial scanInput: User says "generate changelog for next release"
Step 1: Check existing format
head -30 CHANGELOG.md
→ Detects pf4j style (h3 versions, Fixed first)
Step 2: Find version range
git describe --tags --abbrev=0
→ release-3.15.0
Step 3: Get commits
git log release-3.15.0..HEAD --oneline
→ 5 commits found
Step 4: Generate entry
### [Unreleased][unreleased]
#### Fixed
- [#650]: Fix memory leak in extension factory
#### Changed
- [#651]: Rename `LegacyExtension*` to `IndexedExtension*`
#### Added
- [#652]: Add support for plugin priority ordering
Step 5: Generate link definitions
[#652]: https://github.com/pf4j/pf4j/pull/652
[#651]: https://github.com/pf4j/pf4j/pull/651
[#650]: https://github.com/pf4j/pf4j/issues/650
Step 6: Update version comparison links
[unreleased]: https://github.com/pf4j/pf4j/compare/release-3.15.0...HEAD
Step 7: Suggest version
Suggested: 3.16.0 (minor - has new feature)
List under "Changed" with original message:
#### Changed
- Updated plugin loading mechanism
- Refactored test utilities
#### Security
- [#618], [#623]: Fix path traversal vulnerabilities in ZIP extraction
#### Changed
- **BREAKING**: [#645] Renamed `LegacyExtension*` classes to `IndexedExtension*`
- [#630], [#631]: Set `failedException` when plugin validation fails
Read existing file to detect:
Insert new version after [Unreleased] section
Merge link definitions - add new ones, keep existing
Update [unreleased] comparison link to point to new version
| User says | Action |
|---|---|
| "generate changelog" | Full changelog since last tag |
| "changelog since v3.14" | From specific version |
| "what's unreleased" | Preview unreleased changes |
| "update changelog for 3.16" | Generate and insert for version |
| "add changelog entry for #123" | Single issue entry |
Sponsors