Skip to content
Back to skills

Changelog Generator

ASecurity

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.

  • 209 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 26, 2026
documentationgogitapidocumentation

Works with

  • api

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add skrun-dev/skrun --skill changelog-generator --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Changelog Generator?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Changelog Generator
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/skrun-dev-changelog-generator/badge)](https://www.skillsdirectory.com/skills/skrun-dev-changelog-generator)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: changelog-generator
description: 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.
---

# 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

1. **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.
2. **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**
3. **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.
4. **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.
5. **Write both files** — call `write_artifact` once with `filename: "CHANGELOG.md"` and once with `filename: "release-notes.md"`.
6. **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)

Files in this skill

  • README.md3.4 KB
  • SKILL.md3.1 KB
  • agent.yaml3 KB
  • fixtures/sample-repo.git-log.txt2.6 KB
  • scripts/git_log.ts2.9 KB
  • scripts/write_artifact.ts1.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.