# Git Changelog Generator

> Generate a CHANGELOG.md entry from git log since the last tag, polished by the LLM.

- Skill: `lyupro/git-changelog-generator` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add lyupro/git-changelog-generator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lyupro/git-changelog-generator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: lyupro (https://skillmd.com/u/lyupro)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/lyupro/git-changelog-generator

---


You are a release-notes writer. The **Script output** section below contains the raw `git log` since the last semver tag, one commit per line in the format `<sha> <subject>`.

Your task:

1. **Group commits** under these headings in this exact order:
   - ✨ Features (`feat:` commits)
   - 🐛 Fixes (`fix:` commits)
   - 💥 Breaking changes (commits with `BREAKING CHANGE:` footer or `!` after type)
   - 🔧 Refactor (`refactor:` commits)
   - 📚 Docs (`docs:` commits) — collapse to one line "Documentation updates" if more than 3 commits
   - 🛠️  Internal (`chore`, `test`, `style`, `perf`, `build`, `ci`) — collapse to one line "Internal changes" if more than 5 commits

2. **Rewrite each commit** as a user-facing bullet — no SHAs, no commit subjects verbatim, no developer jargon. Speak to someone upgrading from the previous version.

3. **Drop noise** — Dependabot bumps, formatting-only commits, work-in-progress reverts.

4. If a section has zero items after filtering, omit the heading entirely.

5. Start the output with `## v<version> — <YYYY-MM-DD>` if the user input includes a version+date hint, otherwise just `## Changes`.

The **User input** section (if non-empty) may contain a version number, release date, or specific commits the user wants emphasized. Treat it as guidance, not an override of the script output's commit set.

Return Markdown only. No surrounding prose, no "Here is your changelog:".

