Skip to content

Swipe right for a newer agent. Swipe left for an older agent, Session Handoff.

Issue 42 · 16 Oct 2026 · Easy · Free

Release Notes from Commits

You shipped. Now someone has to write the changelog. The commits are a mess of fix typo, wip, and three real features buried in the noise.

Paste your commit subjects. Get clean release notes: user-facing changes, internals separated, breaking changes called out.

Category
Dev Tools
Runs in
ChatGPT
Claude
Gemini
Cursor

What you put in and what you get out

Sample you can paste

Commits since v2.3.0 (main, last 9 days):

- feat(settings): add dark mode toggle and persist preference
- fix(billing): retry Stripe webhook on 429 with backoff
- chore: bump eslint to 9.12
- BREAKING: remove legacy /api/v1 endpoints (use /api/v2)
- docs: update README install steps for pnpm
- wip: billing page layout sketch
- fix: typo in error banner ("occured" → "occurred")
- feat(export): CSV download for invoice history
- refactor: extract date helpers (no behavior change)
- test: add webhook retry unit tests

Audience: customers on the SaaS dashboard + a short note for API integrators.
Tone: plain, no marketing.

Share this agent

Release Notes from Commits — You put in Commits since v2.3.0 (main, last 9 days):. You get out Paste-ready notes. Free from One Agent a Day.

Share on XShare on LinkedIn

30-second demo

0:00

The pile

Nine days of commits: dark mode, Stripe retry, eslint bump, BREAKING /v1 removal, WIP billing sketch, typo fix, CSV export.

How it works

You merged the PR. The tag is ready. Then someone asks for release notes and you stare at wip, fix typo, and three real features scattered across forty commits.

This agent turns a raw commit list into honest notes. It does not invent features you did not ship. User-facing changes come first. Chores and refactors stay in Internal. Breaking changes get called out with a migration hint when the commits say one.

What to paste

Commit subjects since the last release (git log <tag>..HEAD --oneline works). Short bodies help when the subject is vague. Say who will read the notes (customers, API integrators, both). Skip marketing goals—the prompt forbids fluff.

What you get back

Four blocks. What's new (user-facing). Fixes. Breaking changes, or "None." Internal (chores, refactors, tests, docs that are not user-facing). If a commit is too thin to classify, it lands under Needs a human with a one-line question.

Use it

  1. Step 1

    Grab the commits

    Copy commit subjects (and short bodies if useful) since the last tag or release. `git log v2.3.0..HEAD --oneline` is enough. Drop pure WIP noise if you want; the agent will flag thin ones anyway.

  2. Step 2

    Paste the prompt

    New chat in ChatGPT, Claude, Gemini, or Cursor. Paste the prompt, then your commit list plus who the notes are for. If it invents a feature you did not commit, reply: only use facts from the pasted commits.

  3. Step 3

    Check the split

    User-facing notes should read like something a customer cares about. Internals/chores stay in their own section. Breaking changes get their own callout with what to do instead.

  4. Step 4

    Ship the notes

    Paste into GitHub Releases, a CHANGELOG.md entry, or the status page. Keep the commit list nearby so you can spot-check one more time before publish.

Prompt

release-notes-from-commits.prompt.txt

You write release notes from git commits. You are precise and allergic to marketing fluff. You only describe what the commits actually show.

INPUT
A list of commits (subjects, optional bodies) since the last release, plus who will read the notes (customers, API integrators, internal, or a mix). Treat WIP and vague subjects as incomplete, not as features.

RULES
- Only use facts from the pasted commits. Never invent features, product names, metrics, or "users will love X."
- Separate user-facing notes from internal/chore/refactor/test/docs-only work.
- Call out breaking changes clearly. If the commits name a replacement or migration path, include it; if not, say what is removed and that a migration path was not in the commits.
- Merge duplicate or overlapping commits into one note when they are clearly the same change.
- Drop pure noise (empty WIP with no outcome) into Needs a human instead of pretending it shipped.
- No hype adjectives, no emoji spam, no "We're excited to announce."
- If the list is too thin for real notes, say so in two sentences and list the three questions that would unblock useful notes. Then stop.

OUTPUT
## What's new
Bullets. User-facing features and improvements only.

## Fixes
Bullets. User-visible bugfixes. If none, write "None."

## Breaking changes
Bullets. Each: what broke, who it affects, and migration hint if present in the commits. If none, write "None."

## Internal
Bullets. Chores, refactors, tests, tooling, non-user docs. If none, write "None."

## Needs a human
Bullets. Commits too vague to classify, with one clarifying question each. If none, write "None."
Was this useful?

A yes or no is enough. The note stays on this server's log.

Swipe sideways

  1. Dev Tools14 Sep 2026 · #10README DoctorPaste a README. Get a rewrite a new contributor can follow: install, run, test, and the command that proves it worked.In# LedgerOutThe proofEasy
    Preview this drop
    1. 0:00 The old READMEA welcome, a Slack shrug, and scripts named dev, test, and check. No .env.example in the paste.
    2. 0:08 The rewriteInstall, copy env, run dev, run test. DATABASE_URL is named because the paste named it.
    3. 0:16 The holeNot in the README: which database, and the contents of .env.example. The doctor does not invent Postgres.
    4. 0:24 The proofThe command to prove it is npm test, because that script exists. Slack is not a setup step.

    No daily video for this drop yet. The in and out lines above are the preview.

  2. Fun & Weird13 Sep 2026 · #09Commit Message FortunePaste what the diff did. Get a Conventional Commit a teammate can trust, and a fortune you will not push.InRepo: billing API.OutThe cutEasy
    Preview this drop
    1. 0:00 The changeCheckout sums the cart on the server again and ignores a client total of 1.
    2. 0:08 The real messagefix: compute order totals from the cart, not from the request body.
    3. 0:16 The fortuneA cookie that says the cart was the adult in the room. It does not go in the commit.
    4. 0:24 The cutNo customer name, no ticket you do not have, subject short enough to read in git log.

    No daily video for this drop yet. The in and out lines above are the preview.

  3. Dev Tools7 Oct 2026 · #33API Error ExplainerPaste a status code and the response body. Get what broke, what to change in the request, and whether a retry will help.InRequest I sent: POST /api/refundsOutRetryMedium
    Preview this drop
    1. 0:00 The callPOST /api/refunds returned 401 bad signature twice. The body says the prefix should be sha256=. They may have signed with the example placeholder.
    2. 0:08 What brokeThe server rejected the signature. The status is not a transient outage. The prefix note is a hint about the header format.
    3. 0:16 The changeSign the raw body with the real secret, prefix the header with sha256=, and keep the same idempotency key so a later success does not double-apply.
    4. 0:24 RetryDo not retry the same bytes. Retry once after the header changes. Forging a signature for someone else's API is out of scope.

    No daily video for this drop yet. The in and out lines above are the preview.

Tomorrow's drop

Get tomorrow's agent in your inbox

One email when the drop goes up. No digest, no course. Unsubscribe whenever the provider lets you.

Pro and custom

€9/month when Pro opens

Early look at the next drop, a better archive, and the occasional agent that does not fit the public mix. The daily agent stays free. A custom build is €49–199. Nothing is charged from this form.

Join the Pro waitlist

Tomorrow's drop

Get the daily agent

One email when the drop goes up. The same list as the signup on the page.