changelog-writer
Skill21 starsChanged 17 days agoMITView on GitHub
Write external-facing changelog and release note entries in a pithy, tastefully sassy, occasionally clever voice that makes software updates fun to read without burying what actually shipped. Use this skill whenever someone asks to write, draft, or review a changelog entry, release notes, "what's new" post, or product update announcement for end users. Also trigger when someone pastes a list of shipped features/fixes and wants them turned into public-facing copy, or asks to make a changelog "less boring," "more fun," or "not sound like corporate speak."
21 other projects use a version of this.
Adopted by
Most recently taken up by
- Sagargupta16/agent-recipestheir own version, first seen Nov 1, 2026
- maximhq/bifrosttheir own version, first seen Oct 20, 2026
- WST2002/claude-code-skillstheir own version, first seen Oct 17, 2026
- anchildress1/awesome-aitheir own version, first seen Oct 13, 2026
- mukundzha/clwstheir own version, first seen Oct 13, 2026
- jihe520/mindpockettheir own version, first seen Oct 8, 2026
Used with
Projects with it also use regex-builder, test-writer and 1 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
jMertaSkillregex-builder
Use when the user asks to create, debug, explain, validate, or optimize a regular expression or replacement for a specific engine. Verifies representative matches, non-matches, captures, escaping, portability limits, and backtracking risk in the target runtime.
Also in 3 projects that use this
leonardomsoSkilltest-writer
Generate comprehensive Vitest tests for code examples in JavaScript concept documentation pages, following project conventions and referencing source lines
Also in 5 projects that use this
glinckerSkillreadme-generator
Generates comprehensive README.md files for software projects by analyzing codebase structure
Also in 6 projects that use this
Other versions21 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 21
- maximhq/bifrost★ 9.4ksame name
- jihe520/mindpocket★ 349same name
- hamzafarooq/claude-code-starter★ 145same name
- anchildress1/awesome-ai★ 67same name
- anchildress1/awesome-github-copilot★ 67same name
- zbruhnke/claude-code-starter★ 16same name
- jaredpalmer/skills★ 8same name
- carlkibler/agent-skills★ 6same name
- kevinaimonster/skill-hub★ 4same name
- Sagargupta16/agent-recipes★ 4same name
11 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository15 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- case-studySkill
- conversion-patternsSkill
- design-askSkill
- designer-ic-assessmentSkill
- design-rationaleSkill
- gtm-positioningSkill
- longformSkill
- metrics-taggingSkill
- onboarding-flowSkill
- righterSkill
- vois-componentsSkill
- vois-datavizSkill
- vois-patternsSkill
- vois-tokensSkill
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 3 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 19 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 21
This skill is for external/end-user changelogs: If the audience is internal engineering or the changelog needs to double as a searchable …
- Distinctive: line 47
Write the whole draft this way first — plain field-by-field — before making it pretty.
- Distinctive: line 60
Every rule below has a stable ID.
“Common” is measured: kept by at least 6 in 10 of the 19 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.
Files
Changelog Writer
Writes external, end-user-facing changelog entries with personality — modeled on what Slack, Basecamp, Linear, Raycast, and Tumblr do well: voice and confidence first, jokes used sparingly and only in service of the fact, never replacing it.
This skill is for external/end-user changelogs. If the audience is internal engineering or the changelog needs to double as a searchable technical record (breaking changes, API versioning, migration notes), this tone is the wrong trade — use a precise, Stripe-style format instead and skip this skill.
Reference files:
references/voice-examples.md— annotated examples of the tone done well (Slack, Basecamp, Tumblr, Raycast, Linear) and done badly, for calibrationreferences/draft-format.md— the full spec for the intermediate draft format the scripts parse
Scripts (in scripts/) — run these against every draft before presenting a final version:
check-all.mjs— runs everything below and gives one pass/fail reportcheck-structure.mjs,check-sass-budget.mjs,check-voice.mjs,check-length.mjs,check-cadence.mjs
Workflow
- Gather the raw material. Get the list of what actually shipped — feature names, what changed, any tickets/PRs. If it's vague ("we improved search"), ask what specifically changed before writing anything. A joke can't rescue an entry with no real content behind it.
- Group by theme, not by ticket. Five related tweaks become one entry. Assign each entry
a
category(New,Improved, orFixed) and a stableid(a slug from the feature name, not a sequence number — this is what makes the rule IDs and scripts useful over time, since entries can be tracked and diffed release over release). - Draft every entry in the structured format described in
references/draft-format.md. Write the whole draft this way first — plain field-by-field — before making it pretty. This is what makes the entry checkable by script instead of just vibes. - Run
node scripts/check-all.mjs <draft-file>. Fix every FAIL. Read every WARN and use judgment — WARNs are things worth a second look, not always things to change. - Re-run until clean, then convert the structured draft into the final published prose (see "Rendering the final version" below).
- Present the finished changelog, not the structured intermediate format — the field labels are a drafting tool, not something an end user should ever see.
The building blocks (rule reference)
Every rule below has a stable ID. The scripts check the ones marked [scripted]; the rest are judgment calls a script can't reliably make — apply them yourself when drafting.
Entry skeleton — STRUCT-*
- STRUCT-01 (scripted) — Headline is mandatory. Plain statement of what shipped, no pun required. Whoever's skimming has to get this in one glance.
- STRUCT-02 (scripted) — So-what is mandatory for
New/Improvedentries (optional, can collapse into the headline forFixed). One sentence on why this matters to the reader, written like you're telling a friend, not pitching a feature. - STRUCT-03 (scripted) — Receipt is mandatory for
New/Improvedentries. The actual detail: what changed, what to click, what's different. Always plain English, never vague ("various improvements" fails this check). - STRUCT-04 — Hook is optional and the only piece allowed to be cut. Better no joke than a forced one.
Sass budget — SASS-*
- SASS-01 (scripted) — One bit per entry, max. If the headline already lands a joke, the hook stays quiet.
- SASS-02 (scripted) — Zero jokes near security, billing, data loss, outages, or anything users would be upset about. Straight talk only. This is a hard rule, not a style preference.
- SASS-03 (scripted, batch-level, warn only) — Not every entry needs a bit. If most entries in one release have a hook, personality has stopped being special.
Voice — VOICE-*
- VOICE-01 (scripted) — No corporate buzzwords or press-release phrasing ("we are pleased to announce," "leverage," "seamless experience," "blazing fast" — say the actual number instead).
- VOICE-02 (scripted, warn only) — Use contractions. Formal constructions read stiff.
- VOICE-03 (scripted) — No clichéd pun templates (egg-cellent, purr-fect, fin-tastic, and the like — swap-a-word-for-a-similar-sounding-word puns that are worn out regardless of the feature) and no lampshading ("get it?", "pun intended", a winking emoji). If a joke has to announce itself, it already failed.
- VOICE-04 (judgment only, not scripted) — The "two truths, one phrase" test: a pun is
only good if its second meaning is also literally true of what shipped, not just wordplay
that happened to be available. A script can't know what's true about the feature, so this
one's on you. See
references/voice-examples.mdfor the full breakdown.
Length — LEN-*
- LEN-01 (scripted) —
Fixedentries: ~30 words total across all filled fields. Should read in one breath. - LEN-02 (scripted) —
New/Improvedentries: 4 sentences max combined across all fields. - LEN-03 (scripted) — No single field over 40 words. If it needs a paragraph, the feature is confusing, not the changelog.
Cadence / metadata — CAD-*
- CAD-01 (scripted) — Category must be
New,Improved, orFixed. Nothing fancier — the categories aren't where the personality goes. - CAD-02 (scripted, warn only) — Every entry needs a unique, stable id (a slug, not a sequence number), so entries can be tracked release over release.
- CAD-03 (judgment only) — Ship an entry every release, even a boring one. Consistency is what earns the reader's trust that the funny ones are worth reading.
Rendering the final version
Once a draft passes check-all.mjs clean, convert each entry from the structured fields into
one flowing changelog entry:
## [Headline, possibly rewritten as a title]
[Hook, if present — one line, woven in naturally] [So-what, one line] [Receipt, the actual detail]
[CTA, if present]Group entries under New, Improved, Fixed headers, in that order. Don't show the reader
headline: / hook: / etc. labels — those are scaffolding for the check, not part of the
output.
Example — structured draft:
### ENTRY id=bulk-actions category=New sass=hook
headline: Bulk actions have entered the chat.
hook: You can now select every unread thread at once.
sowhat: Stop clicking the same checkbox forty times.
receipt: Select multiple conversations from the inbox and archive, tag, or reassign them in one action.
cta: none
### ENDRendered as:
Bulk actions have entered the chat. Select every unread thread at once instead of clicking the same checkbox forty times — archive, tag, or reassign a whole batch in one go.
Common failure mode to watch for
The most common way this goes wrong isn't "not funny enough" — it's overwritten. Every entry trying too hard, reader fatigue setting in by the third one. When in doubt, cut the hook before you cut the receipt. The fact always survives; the bit is expendable.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
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.

