Changelog
Generate or update CHANGELOG.md from git history. Parses conventional commits, groups by version tags, categorizes into Added/Fixed/Changed/Breaking sections using keep-a-changelog format, and creates comparison links. Use when you need to create a changelog, update release notes, document version history, or prepare release documentation.From its SKILL.md
npx -y skills add tinh2/skills-hub-registry --skill changelogAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 12 stars12 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.1 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it
You are in AUTONOMOUS MODE. Do NOT ask questions. Parse the git history and produce a well-structured CHANGELOG.md.
INPUT: $ARGUMENTS
Accepted arguments:
- No arguments: generate full changelog from all git history.
since vX.Y.Zorsince <tag>: generate only entries since that tag/version.unreleased: generate only the Unreleased section since the last tag.update: read existing CHANGELOG.md, append only new entries since last documented version.
============================================================ PHASE 1: GIT HISTORY EXTRACTION
Step 1.1 -- Identify Version Boundaries
Run:
git tag --sort=-version:refnameto list all tags (newest first)git log --format="%H|%ai|%s|%b|%D" --reverseto get all commits with refs
For each tag, record:
- Tag name (vX.Y.Z or X.Y.Z)
- Tagged commit hash
- Tag date
If no tags exist, group commits by time periods (monthly or weekly).
Step 1.2 -- Parse Commits
For each commit between version boundaries, parse the message:
| Prefix | Category |
|---|---|
feat: feat(scope): | Features |
fix: fix(scope): | Bug Fixes |
docs: docs(scope): | Documentation |
refactor: refactor(scope): | Refactoring |
perf: perf(scope): | Performance |
test: test(scope): | Tests |
chore: chore(scope): | Chores |
ci: ci(scope): | CI/CD |
style: style(scope): | Style |
build: build(scope): | Build |
revert: | Reverts |
BREAKING CHANGE: in body | Breaking Changes |
! after type (e.g., feat!:) | Breaking Changes |
For non-conventional commits (no prefix), classify by content:
- Messages containing "fix", "bug", "patch", "resolve" -> Bug Fixes
- Messages containing "add", "new", "feature", "implement" -> Features
- Messages containing "update", "upgrade", "bump" -> Chores
- Messages containing "remove", "delete", "deprecate" -> Removed
- All others -> Other Changes
Step 1.3 -- Extract Metadata
For each commit, also extract:
- PR/MR number from message (e.g.,
(#123),Merge pull request #123) - Issue references (e.g.,
fixes #45,closes #78) - Scope from conventional commit (the part in parentheses)
- Author name
============================================================ PHASE 2: CHANGELOG GENERATION
Step 2.1 -- Read Existing Changelog
If CHANGELOG.md exists:
- Read its full contents
- Identify the most recent documented version
- Only generate entries for commits AFTER that version
- Preserve the existing file header and formatting style
Step 2.2 -- Format Entries
Use keep-a-changelog format (https://keepachangelog.com):
# 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).
## [Unreleased]
## [X.Y.Z] - YYYY-MM-DD
### Breaking Changes
- Description of breaking change ([#PR](url))
### Added
- New feature description ([#PR](url))
### Fixed
- Bug fix description ([#PR](url))
### Changed
- Change description ([#PR](url))
### Deprecated
- Deprecation notice ([#PR](url))
### Removed
- Removal description ([#PR](url))
### Security
- Security fix description ([#PR](url))
Category mapping from conventional commits to changelog sections:
- feat -> Added
- fix -> Fixed
- perf -> Changed
- refactor -> Changed
- BREAKING CHANGE -> Breaking Changes
- revert -> Removed
- security-related fixes -> Security
- deprecation notices -> Deprecated
Step 2.3 -- Group and Deduplicate
- Group entries by version/tag boundary
- Within each version, group by category (Breaking Changes first, then Added, Fixed, etc.)
- Deduplicate: if a fix commit directly references a feat commit in the same version, mention only the feature (the fix was part of getting it right)
- Collapse "fix: fix typo" chains into a single entry
- Omit low-value entries: merge commits, version bumps, pure chore/ci commits (unless they are the only changes in a version)
Step 2.4 -- Link Generation
If the project has a git remote, generate comparison links:
[Unreleased]: https://github.com/owner/repo/compare/v1.2.0...HEAD
[1.2.0]: https://github.com/owner/repo/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/owner/repo/releases/tag/v1.1.0
Detect the remote URL from git remote get-url origin.
============================================================ PHASE 3: WRITE AND VERIFY
Step 3.1 -- Write CHANGELOG.md
- If updating: prepend new version sections after the header, before existing entries
- If creating: write the complete file
- Ensure consistent formatting throughout
Step 3.2 -- Verify
- Count commits parsed vs entries generated
- Confirm version ordering is correct (newest first)
- Confirm dates match tag dates
- Confirm PR/issue links are properly formatted
============================================================ SELF-HEALING VALIDATION (max 2 iterations)
After producing documentation, validate completeness:
- Verify all required sections are present and non-empty.
- Verify internal cross-references and links resolve correctly.
- Verify no placeholder text remains ("{TODO}", "[TBD]", "...", "etc.").
- Verify code examples are syntactically valid.
IF VALIDATION FAILS:
- Identify which sections are incomplete or contain placeholders
- Re-generate only the deficient sections
- Repeat up to 2 iterations
============================================================ OUTPUT
Changelog Generated
- Versions documented: N
- Total entries: N
- New entries added: N (if updating)
- Commits parsed: N
- Commits skipped: N (merge commits, version bumps)
- File: CHANGELOG.md
Version Summary
| Version | Date | Added | Fixed | Changed | Breaking |
|---|---|---|---|---|---|
| Unreleased | -- | N | N | N | N |
| vX.Y.Z | YYYY-MM-DD | N | N | N | N |
| ... | ... | ... | ... | ... | ... |
============================================================ SELF-EVOLUTION TELEMETRY
After producing output, record execution metadata for the /evolve pipeline.
Check if a project memory directory exists:
- Look for the project path in
~/.claude/projects/ - If found, append to
skill-telemetry.mdin that memory directory
Entry format:
### /changelog — {{YYYY-MM-DD}}
- Outcome: {{SUCCESS | PARTIAL | FAILED}}
- Self-healed: {{yes — what was healed | no}}
- Iterations used: {{N}} / {{N max}}
- Bottleneck: {{phase that struggled or "none"}}
- Suggestion: {{one-line improvement idea for /evolve, or "none"}}
Only log if the memory directory exists. Skip silently if not found. Keep entries concise — /evolve will parse these for skill improvement signals.
============================================================ DO NOT
- Do NOT fabricate entries. Every changelog entry must correspond to an actual commit.
- Do NOT include commit hashes in the changelog (use PR/issue links instead).
- Do NOT include internal tooling changes that have no user-facing impact unless the project has no user-facing changes at all.
- Do NOT overwrite manually-written changelog entries. Preserve them and append new ones.
- Do NOT include "Co-Authored-By" or similar attribution lines in entries.
NEXT STEPS:
After generating the changelog:
- "Run
/documentto check overall documentation health." - "Run
/readmeto update the README with the latest version info."
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.