Skip to content
Claudekit.ai

Release Notes: Draft a Changelog from Git with Claude Code

You get: A RELEASE_NOTES.md with your changes grouped into breaking changes, features, fixes and the rest, ready to paste into a CHANGELOG.

A free Claude Code kit that turns git log between two refs into release notes grouped by Conventional Commit type, breaking changes first. Nothing is published.

By Claudekit Team Editor Tran Quang Dong Published Checked 2 min read

Test level

Smoke tested Claude Code actually loaded the kit and ran one scripted task in a capped run, and the result passed our checks. How we test
Tested with
Claude Code 2.1.290
Tested on
Setup time
About 2 minutes
For
Developers

Latest lab run: · Smoke tested · Claude Code 2.1.290 · 20 of 20 checks passed

Show checks
  • Passed: files (7 files, 13040 bytes)
  • Passed: manifest (release-notes@0.1.0)
  • Passed: manifest-paths (no custom paths)
  • Passed: frontmatter (1 skills, agents and commands)
  • Passed: hooks (no hooks)
  • Passed: shell-syntax (3 scripts pass bash -n)
  • Passed: secrets (11 Kiln Guard rules, no findings)
  • Passed: network (every referenced host is allowlisted)
  • Passed: destructive (5 command surfaces pass Kiln Guard)
  • Passed: lab-spec (5 expectations, 2 scripts pass bash -n)
  • Passed: marketplace (listed as release-notes)
  • Passed: plugin-validate (1 files valid, 0 warnings)
  • Passed: kit-tests (lab/test.sh passed)
  • Passed: smoke-fixture (lab/fixture.sh ready)
  • Passed: smoke-run (5 turns, $0.0601)
  • Passed: expect:file-exists (RELEASE_NOTES.md exists)
  • Passed: expect:file-matches (RELEASE_NOTES.md matches (?i)breaking)
  • Passed: expect:file-matches (RELEASE_NOTES.md matches (?i)features)
  • Passed: expect:file-matches (RELEASE_NOTES.md matches /health)
  • Passed: expect:file-matches (RELEASE_NOTES.md matches Node 18)

Install

In a Claude Code session, add the Claudekit marketplace once, then install:

/plugin marketplace add claudekit-ai/kits
/plugin install release-notes@claudekit

Or download the kit and start Claude Code in your project with it loaded for one session. No unzipping needed:

claude --plugin-dir ./release-notes.zip

Or load it straight from our site:

claude --plugin-url https://claudekit.ai/kits/release-notes.zip

A kit can run hooks with your permissions. Read its files before you install it.

Steps

  1. Download release-notes.zip and start Claude Code in your repository with claude --plugin-dir ./release-notes.zip
  2. Run /release-notes:draft for the latest tag to HEAD, or /release-notes:draft v1.2.0 v1.3.0 for a range
  3. Approve the git log command and the write to RELEASE_NOTES.md
  4. Check the breaking changes section and add upgrade steps the commits do not explain
  5. Paste the block into CHANGELOG.md or your release page yourself

Release Notes is a free Claude Code kit that drafts release notes from your git history. Run /release-notes:draft and Claude groups the commits since your last tag by Conventional Commits type, puts breaking changes first, rewrites each subject as a readable line with its short hash, and saves RELEASE_NOTES.md.

Grouping is done by a bundled script, not by the model, so every commit lands in the same section every time. Claude only does the rewriting. Nothing is tagged or published.

What you get

## Unreleased (2026-10-25)

### Breaking changes
- **core:** Split the parser. `parse()` now returns a Promise, so callers must await it (53019cf)
- Dropped Node 18 support. See commit ca660c4 for details (ca660c4)

### Features
- **api:** Added a `/health` endpoint (7216523)

### Bug fixes
- Handled an empty config file (3b8d9b8)

That is trimmed from our smoke run; the heading read “HEAD” in that run and now reads “Unreleased”. Sections follow this order: Breaking changes, Features, Bug fixes, Performance, Reverts, Documentation, Refactoring, Other changes. Build, CI, chore, style and test commits are dropped unless you ask for a full changelog. When a breaking commit gives no upgrade steps, Claude writes “See commit … for details” instead of guessing.

Setup, step by step

  1. Download release-notes.zip.

  2. Start Claude Code in your repository with the kit loaded:

    claude --plugin-dir ./release-notes.zip

    To load it in every session, unzip it and move the release-notes/ folder into ~/.claude/skills/.

  3. Run /release-notes:draft (latest tag to HEAD) or /release-notes:draft v1.2.0 v1.3.0.

Permissions it needs

  • Bash, to run the bundled script that calls read-only git log and git describe.
  • Write, for RELEASE_NOTES.md. Claude asks before overwriting an existing one.
  • No network access.

What we tested

  • Static: 20 checks on a fixture repository with a v1.0.0 tag and nine kinds of commit: grouping by type and scope, breaking changes from ! and from the footer (listed once), the default range from the latest tag, an explicit range, and clean errors for unknown refs, option-like refs and folders outside git.
  • Smoke: one real claude -p "/release-notes:draft v1.0.0 HEAD" run on Claude Code 2.1.290 with Sonnet, on 25 October 2026. RELEASE_NOTES.md had both breaking changes, the feature, the fix and the rest in the right sections. After the run we clarified one line in the skill so an untagged range is headed “Unreleased” rather than “HEAD”; that wording change has not had its own smoke run.
  • Not tested: repositories with thousands of commits, and Windows.

Uninstall

Start Claude Code without --plugin-dir, or delete ~/.claude/skills/release-notes/.

Frequently asked questions

Do my commits have to follow Conventional Commits?

No. Commits like feat:, fix: and perf: are grouped by type, and commits that do not follow the convention still appear under Other changes. Merge commits are left out.

How does it find breaking changes?

From an exclamation mark after the type, such as feat!:, or a BREAKING CHANGE: footer in the commit body, as defined by Conventional Commits 1.0.0. Breaking changes are listed first, once.

Does it tag, commit or publish a release?

No. It writes RELEASE_NOTES.md and stops. It does not edit CHANGELOG.md, create tags, commit, push or publish unless you ask for that separately.

What range does it use by default?

From the latest tag reachable from HEAD up to HEAD. If the repository has no tags, it starts from the first commit.

Get the weekly Claude digest

New skills, MCP servers, prompts and Claude updates — one short email a week. No spam, unsubscribe anytime.

The newsletter is launching soon. Follow the RSS feed in the meantime.