Release notes workflow
Turn a raw commit log or merged PR list into a categorised changelog, user-facing release notes and migration steps for breaking changes.
Fill in your details
Values are inserted into every prompt below. Nothing you type leaves your browser.
3 field(s) left — unfilled variables stay as {{placeholders}}.
1Categorise the changes
Merged PR titles and descriptions give better notes than raw commits. A coding agent can collect them for you from git or your hosting platform.
Here are the changes since the last release: {{commits}} Categorise every item into: Breaking changes, Added, Changed, Deprecated, Removed, Fixed, Security, Internal (not user-visible). Merge duplicates and fix-ups into one entry. If you can't tell whether something is user-visible or breaking, put it under "Needs confirmation" with your reason.2Write the changelog and release notes
The changelog is for developers (complete); release notes are for users (selective and benefit-led).
Write two outputs for version {{version}}: 1. CHANGELOG.md entry in Keep a Changelog style: "## [{{version}}] - YYYY-MM-DD" with the categories that have items, each entry one line, linking PR numbers where they appear in the input. Omit Internal. 2. Release notes for {{audience}}: a two-sentence summary of what's new, then the 3-5 most important changes, each with a bold title and one or two sentences on what users can now do. Then a short "Fixes" list. Plain language, no internal jargon or ticket IDs. 3. If there are breaking changes: a "Migration" section with numbered steps, before/after code snippets where relevant, and who is affected.3Verify
Check every 'Breaking' and 'Security' entry with the author of the change. Make sure nothing listed as fixed is still open, and that release notes don't promise features that are behind a flag.
Example input
38 commits since v1.9.3 including cursor pagination on /orders and removal of offset pagination.
Example output
## [2.0.0] - 2026-11-03 ### Breaking changes - /orders no longer accepts offset and page parameters; use cursor pagination (#412) ### Added - Cursor pagination on /orders and /customers (#412, #420) ### Fixed - Orders with no shipping address no longer return a 500 error (#415) Migration 1. Replace ?page=N&offset=M with ?limit=M. 2. Read next_cursor from the response and pass it as ?cursor= for the next page.
Troubleshooting
- Commit messages are too terse to categorise: use PR titles and descriptions instead, or let an agent read the diffs.
Known limitations
- The model can't know which changes are actually shipped to users (feature flags, staged rollouts); confirm before publishing.