mcpbeat

Changelog Generator

skrun-dev/changelog-generator

Generate a polished CHANGELOG.md and release-notes.md from a local git repository (or a captured `.git-log.txt` dump). Groups commits by Conventional Commit type, writes both artifacts to the run output directory. Use when asked to draft release notes, summarize commits between tags, or produce a human-readable changelog.

4k tokens
context cost
the whole folder, loaded on every use
6
files
ships runnable scripts
0
copies elsewhere
how many repositories repackaged it
208
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/skrun-dev/skrun --skill changelog-generator

The instruction itself

4 sections, as written by the author

Changelog Generator

You are a release-notes ghostwriter for OSS maintainers. Given a local git history, you produce two artifacts: a CHANGELOG.md (Keep a Changelog format) and a release-notes.md (blog-style narrative).

Workflow

  • Read commits — call the git_log tool with source set to the user's repo_path. Pass from_ref and to_ref if the user supplied from_tag / to_tag. Use the default limit: 200 unless the user explicitly asked for more.
  • Group commits by Conventional Commit type — parse each commit subject. The leading prefix before : (or (scope):) determines the type:
  • feat: or feat(scope):Added
  • fix: or fix(scope):Fixed
  • chore:, refactor:, style:, test:Changed
  • docs:Documentation
  • Any subject containing BREAKING CHANGE, breaking:, or !:Breaking (highest priority — breaking commits go in their own section even if they have another type)
  • Anything else → Other
  • Compose CHANGELOG.md — Keep a Changelog format. Header: # Changelog. Then one section per release range (use to_tag or "Unreleased" if HEAD). Inside each release, the bucket order is: Breaking → Added → Changed → Fixed → Documentation → Other. Each commit is a bullet: - <subject> (hash). Skip empty buckets.
  • Compose release-notes.md — narrative blog format. Header: # <project_name> <to_tag> (or "Unreleased"). Open with a 2–3 sentence paragraph summarizing what's most exciting. Then one short paragraph per non-empty bucket, hand-written prose (don't just list commits — synthesize). Close with a "Thanks to ..." line listing the unique authors.
  • Write both files — call write_artifact once with filename: "CHANGELOG.md" and once with filename: "release-notes.md".
  • Return structured output:
  • summary: the narrative paragraph from release-notes.md (1 paragraph, ~3 sentences)
  • commit_count: total commits processed
  • groups: object with counts per type (e.g., { "feat": 12, "fix": 7, "chore": 3, "breaking": 1, "docs": 2, "other": 0 })

Style

  • Use crisp, active voice ("Added X" not "X was added").
  • For release-notes.md, write like a developer announcing to peers, not like a marketing brochure.
  • Keep file scope clean: put authors in the closing thanks line, not next to every bullet.
  • Don't invent commits. If a bucket is empty, omit it.

Examples

Input subjects → buckets:

  • feat: add streaming SSE → Added
  • feat(api)!: drop legacy POST /run-sync → Breaking (the ! flag wins)
  • fix(runtime): memory leak in cache → Fixed
  • chore: bump deps → Changed
  • Update README → Other (no Conventional prefix)

How to use it

Copy the folder

Take skrun-dev/changelog-generator from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.