agentleFS
mDevsLabsmDevsLabs/Skills/skills/release-notes-generator/SKILL.md

release-notes-generator

Skill2 starsChanged 4 months agoMITView on GitHub

Turns a git history or a list of commits into categorized, reader-first release notes (Added, Changed, Fixed, Breaking, Security, Performance, Docs) with conventional-commit parsing, breaking-change detection and configurable scope grouping. Use when the user asks to write release notes, a changelog entry, an upgrade notice, a release announcement or a diff summary for a release, tag, sprint or deploy, or hands over a `git log` and wants it turned into prose for customers or internal teams.

5 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

6 rules. 0 are common, 5 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 5 edited versions we read keep these.

  • 5

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use when asked to draft release notes, update a CHANGELOG, prepare an upgrade notice or summarize what changed between two tags.

    line 22
  2. Distinctive:

    Do not use for: marketing copy that must sell a feature (this notes only what changed), a full changelog with every micro-commit, or …

    line 26
  3. Very specific:

    Ask the user which release the notes are for and whether they need customer- or internal-facing tone.

    line 49
  4. Distinctive:

    Run the parser, then apply your judgement:

    line 66
  5. Distinctive:

    Keep this order — most urgent to least:

    line 78
  6. Distinctive:

    Every breaking change is in the Breaking section and mentions a migration path.

    line 95

“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Release Notes Generator

Turn a raw commit list into notes a human can read in 30 seconds and act on.

When to use

Use when asked to draft release notes, update a CHANGELOG, prepare an upgrade notice or summarize what changed between two tags. Good for customer-facing announcements and internal release updates alike.

Do not use for: marketing copy that must sell a feature (this notes only what changed), a full changelog with every micro-commit, or rewriting prose the user already wrote. When a commit is ambiguous, ask rather than infer intent.

Core discipline

Group by user impact, not by how the work was structured. A commit typed chore can carry a visible behavior change; a commit typed feat can be pure plumbing. The parser is a first pass — your judgement decides the final grouping.

Separate breaking changes into their own section at the top. For every item, state the observable consequence, not the internal mechanism.

Workflow

1. Gather the commit set

InputHow to get itUse
Repo + tag rangegit log --oneline v1.2.0..v1.3.0The canonical input
Raw commit filePass a text file, one conventional commit per lineOffline / non-git input
Sprint/PR listFrom the trackerCross-check nothing is missed

Ask the user which release the notes are for and whether they need customer- or internal-facing tone. Missing a boundary tag? Ask, or use the last CHANGELOG entry as the anchor and say so.

2. Run the categorizer

python3 scripts/notes_builder.py . --from-ref v1.2.0 --to-ref v1.3.0 --format md

It parses conventional commits (feat, fix, perf, docs, refactor, test, build, ci, chore, revert), detects BREAKING CHANGE: footers and ! markers, groups by scope, and emits candidate notes. Its grouping is a draft: fix the wording and regroup by user impact yourself.

3. Regroup by user impact

Run the parser, then apply your judgement:

Parser saidBut the change isPut it in
feat(api)A new endpoint customers callAdded
feat(core)Internal caching with no user-visible effectInternal / not customer-facing
fix(ui)Retina display support for a new deviceFixed (it was broken before)
chore(ci)CI now also builds on ARMInternal, unless the artifact is distributed
refactor(auth)Session format changed, old tokens invalidBreaking, not Changed

4. Write reader-first sections

Keep this order — most urgent to least:

  1. Breaking (top, unmissable) — what breaks, who is affected, how to migrate.
  2. Added — new capabilities, each a sentence a reader can understand without the codebase.
  3. Fixed — the symptom and what it was fixed in.
  4. Changed / Deprecated / Removed — behavior changes, rename guidance.
  5. Security — the fix and the exposure, without publishing exploit detail.
  6. Performance — before/after figures when known.
  7. Docs / Internal — optional, compact.

Rules: verb-first bullets, no internals jargon, cite the PR/issue for each item, and never claim something was fixed unless a commit says so.

5. Verify

  • Reconcile against the raw commit list — no item in, none silently merged away.
  • Every breaking change is in the Breaking section and mentions a migration path.
  • Security entries do not leak exploit steps.
  • Date, version tag and scope of the release are stated once at the top.

Worked example

Input (git log --oneline v1.2.0..v1.3.0)

feat(api): add bulk export endpoint /v2/exports
fix(auth): session cookie now expires correctly across browsers
perf(db): cache hot reads, cut p95 from 240ms to 90ms
chore(ci): publish ARM builds of the CLI
refactor(config): rename env var DB_HOST to DATABASE_HOST (BREAKING CHANGE)
docs: add quickstart for the Python SDK

Output (regrouped)

# v1.3.0 — 2026-08-20

> Covers changes since v1.2.0. Customers upgrading from v1.2.x should read the
> breaking section first.

## Breaking
- Environment variable `DB_HOST` is renamed to `DATABASE_HOST`. Update any
  deployment that references the old name. (#82)

## Added
- Bulk export endpoint `POST /v2/exports` for pulling large datasets in one
  call. (#78)

## Fixed
- Session cookies now expire correctly across browsers; users are no longer
  logged out mid-session. (#79)

## Performance
- Hot database reads are cached: p95 latency dropped from 240 ms to 90 ms. (#80)

## Internal
- CLI publishes ARM builds. (#81)
- Added the Python SDK quickstart to the docs. (#83)

Why — the refactor that renames an env var is genuinely breaking, so it is promoted to the top despite its type; the chore that ships ARM builds stays internal because end users do not consume CI. Grouping follows user impact, not the commit type.

Quality checklist

  • notes_builder.py run; output reviewed item by item, not pasted through
  • Every commit in the range is accounted for (or explicitly excluded)
  • Breaking changes at the top, each with a migration path
  • Bullets are verb-first and readable without the codebase
  • Security items omit exploit detail
  • No internals jargon for customer-facing notes
  • PR/issue references attached to each item
  • Version, date and commit range stated at the top

Failure modes

SituationResponse
No commits in range / empty logConfirm the tag names; report an empty diff rather than inventing items
Non-conventional commitsAsk for intent or infer from the diff; flag each inference
Ambiguous breaking changeAsk the user; do not guess migration impact
Mixed customer + internal scopeSplit into two sections labelled accordingly
Very large range (100+ commits)Group by scope/area first, then deduplicate by user impact

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.