changelog
Skill4 starsChanged 6 months agoApache-2.0View on GitHub
Compress development changes into a versioned CHANGES.md entry before cutting a release. Keeps only BREAKING changes, user-visible features, and fixes; drops internal noise.
160 other projects use a version of this.
Adopted by
Most recently taken up by
- morethanwords/twebtheir own version, first seen Nov 9, 2026
- 27Aaron/skillstheir own version, first seen Nov 8, 2026
- computerlovetech/skillstheir own version, first seen Nov 8, 2026
- ainurdev/mystical-assistanttheir own version, first seen Nov 8, 2026
- RodrigoAnciaes/golem-sddtheir own version, first seen Nov 8, 2026
- itsryanarmani/skillstheir own version, first seen Nov 8, 2026
Used with
Projects with it also use playtest-report, soak-test and 10 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.
CoralGameSkillplaytest-report
Generates a structured playtest report template or analyzes existing playtest notes into a structured format. Use this to standardize playtest feedback collection and analysis.
Also in 12 projects that use this
lilangMaxSkillsoak-test
Generate a soak test protocol for extended play sessions. Defines what to observe, measure, and log during long play sessions to surface slow leaks, fatigue effects, and edge cases that only appear after sustained play. Primarily used in Polish and Release phases.
Also in 9 projects that use this
lilangMaxSkillteam-live-ops
Orchestrate the live-ops team for post-launch content planning: coordinates live-ops-designer, economy-designer, analytics-engineer, community-manager, writer, and narrative-director to design and plan a season, event, or live content update.
Also in 9 projects that use this
CoralGameSkillteam-polish
Orchestrate the polish team: coordinates performance-analyst, technical-artist, sound-designer, and qa-tester to optimize, polish, and harden a feature or area for release quality.
Also in 14 projects that use this
- +5 more from lilangMax
- +3 more from CoralGame
Other versions160 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 160
- meteor/meteor★ 45ksame name
- Donchitos/Claude-Code-Game-Studios★ 27ksame name
- MaaAssistantArknights/MaaAssistantArknights★ 24ksame name
- pipecat-ai/pipecat★ 17ksame name
- elie222/inbox-zero★ 13ksame name
- hashicorp/terraform-provider-aws★ 11ksame name
- JetBrains/ideavim★ 10ksame name
- BuilderIO/agent-native★ 7.6ksame name
- UnigramDev/Unigram★ 5.5ksame name
- entireio/cli★ 5.3ksame name
150 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 repository8 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .claude/CLAUDE.mdCLAUDE.md
- CLAUDE.mdCLAUDE.md
- .cursor/rules/codegraph.mdcCursor rule
- check-licensesSkill
- release-prepSkill
- verificationSkill
- version-bumpSkill
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 4 are distinctive, and 7 are very specific to this project.
0
Common
Most of the 149 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 10
Read CHANGES.md and collect every bullet under ## Development into a list entries.
- Very specific: line 40
One bullet per change: Do NOT merge two BREAKING: bullets in any pass.
- Very specific: line 45
Verbatim across compressions: When folding ## Development into ## Version vX.Y.Z, every BREAKING: bullet is carried forward as written.
- Very specific: line 75
Never apply these to BREAKING: entries (see rule 1 above).
- Distinctive: line 98
When in doubt, lean towards drop.
- Very specific: line 123
If a feature is complex enough to need explanation, the bullet reads like: add foo (see docs/configuration.md#foo).
- Distinctive: line 126
Use plain English, present tense, imperative voice ("add", "fix", not "added", "fixes").
- Very specific: line 134
Ask the user for the version number (e.g.
- Very specific: line 170
If edit, ask what to change and apply before writing.
- Distinctive: line 188
Never include AI-tool names in any bullet.
- Distinctive: line 189
If the user disputes a triage decision after the preview, re-classify and reshow the preview.
“Common” is measured: kept by at least 6 in 10 of the 149 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
Instructions
Announce at start: "I'm using the changelog skill."
Read CHANGES.md and collect every bullet under ## Development
into a list entries. Record original_count = len(entries). If
entries is empty, skip to "Ask for version".
The output of this skill is a ## Version vX.Y.Z section with three
optional subsections, in this fixed order:
## Version vX.Y.Z - YYYY-MM-DD
### BREAKING CHANGES
- BREAKING: <verbatim>
### Features
- <one-line user-visible feature>
### Fixes
- <one-line fix>The goal is signal, not exhaustiveness. A reader scanning the release entry should see what they need to migrate (BREAKING), what they can now do (Features), and what stopped misbehaving (Fixes) - nothing else.
BREAKING entries (immutable contract)
Bullets that begin with BREAKING: (uppercase, colon, then space)
are treated specially in every pass below and in the final write:
- One bullet per change. Do NOT merge two
BREAKING:bullets in any pass. Each remains independently addressable. - Grouped at the top. All
BREAKING:bullets land under the### BREAKING CHANGESheading, in their original chronological order. They appear above### Featuresand### Fixes. - Verbatim across compressions. When folding
## Developmentinto## Version vX.Y.Z, everyBREAKING:bullet is carried forward as written. Non-BREAKING bullets MAY be merged, rephrased, or dropped per the rules below. - Immutable after release. Once a
## Version vX.Y.Zheading is tagged and pushed, itsBREAKING:bullets must not be reworded or removed (typo fixes that do not change meaning are allowed). - Pre-release deletion only with logic revert. A
BREAKING:bullet under## Developmentmay be removed only if the same change reverts the breaking logic. "Decided not to mention" is not a valid reason.
Step 1 - Auto-merge pass (silent)
Scan entries for these patterns. Apply matches silently; track
pass1_count (groups merged) and dropped_count (entries removed
in net-zero pairs).
Pattern 1 - Rename + subsequent change: entry A renames X to
Y, entry B describes a change to Y. Merge into one entry
describing the final state.
Pattern 2 - Add + Remove (net-zero): entry A adds feature X,
entry B explicitly removes or reverts X. Drop both.
Pattern 3 - Add + Extend: entry A introduces feature X,
entry B extends or refines X (same component, high overlap in key
terms). Merge into one entry describing the final state.
Never apply these to BREAKING: entries (see rule 1 above).
Step 2 - Triage into buckets
Classify every surviving entry into exactly one bucket:
| Bucket | What goes there | Examples |
| drop | Internal-only changes invisible to users. Refactors that do not change behaviour. Test-only changes. CI-only changes. Doc-only changes that do not announce new capabilities. Code-style fixes. Comment polish. Dependency bumps without user impact. | "refactor: extract helper", "test: add table cases", "ci: bump golangci-lint", "chore: tidy go.mod", "docs: fix typo" |
| break | Already-tagged BREAKING: bullets. | "BREAKING: rename --vault to --vault-name" |
| feat | New user-visible capability: new command, new flag, new config field, new behaviour, new platform support. One-liner per feature; if the feature is complex, the bullet points at docs/ rather than describing it in full. | "add locksmith mcp run with proxy + local modes (see docs/configuration.md)" |
| fix | Behavioural change that corrects a bug, regression, security issue, or visibly wrong output. | "fix(keychain): handle errSecUserCanceled from Touch ID prompt" |
Rules for triage:
- A
fix:Conventional-Commits type is a strong signal for fix, but classify by user impact, not by the commit verb. A "fix" that is actually an internal cleanup is drop. - A
feat:commit that is wholly internal (e.g. "feat(internal): add helper") is drop. - Doc-only entries are drop unless they announce a new capability that did not exist before (rare; usually paired with code).
- When in doubt, lean towards drop. The git log is the exhaustive record; the changelog is the highlight reel.
For each entry that is ambiguous (e.g. could be either drop or fix depending on user impact), ask the user before deciding. Show:
Entry: <original bullet>
Suggested: <bucket>
Choose: [drop / feat / fix]Accept drop, feat, fix, or their single-letter prefixes
(d, feat, fix). Track pass2_count = number of ambiguous
entries the user resolved.
Step 3 - Compress within buckets
Within feat and fix:
- One bullet per logical change. If multiple bullets describe pieces of the same feature, merge into one bullet pointing at the final state.
- One line per bullet. No wrapped paragraphs.
- If a feature is complex enough to need explanation, the bullet
reads like:
add foo (see docs/configuration.md#foo). Do not inline the explanation - the changelog is not the docs. - Use plain English, present tense, imperative voice ("add", "fix", not "added", "fixes").
Within break: no compression. Each BREAKING: bullet stays as
authored.
Step 4 - Ask for version
Ask the user for the version number (e.g. v0.3.0) and release
date (default: today, YYYY-MM-DD).
Step 5 - Preview
Show a final preview with two parts: what's being written, and what's being dropped.
Final entry for vX.Y.Z - YYYY-MM-DD:
## Version vX.Y.Z - YYYY-MM-DD
### BREAKING CHANGES
- BREAKING: ...
### Features
- ...
### Fixes
- ...
Dropped from changelog (still in git log):
- <original bullet>
- <original bullet>
Counts:
Auto-merged: <pass1_count> groups
Resolved: <pass2_count> ambiguous entries
Net-zero: <dropped_count> bullets
Triaged: <drop_count> drops, <feat_count> feats, <fix_count> fixes, <break_count> breaks
Entries: <original_count> -> <final_count>
Write CHANGES.md? [yes / edit]If edit, ask what to change and apply before writing.
Step 6 - Write
Replace the ## Development section with:
- A new empty
## Developmentsection at the top. - A new
## Version vX.Y.Z - YYYY-MM-DDsection below it containing the three subsections (omit any subsection that has no entries).
Write CHANGES.md.
Notes
- Subsections are omitted if empty. A release with only fixes
prints only
### Fixes. A release with no BREAKING changes does not print### BREAKING CHANGES. - Never include AI-tool names in any bullet.
- If the user disputes a triage decision after the preview, re-classify and reshow the preview. After three dispute rounds, ask the user to authoritatively pick a bucket per entry to prevent loops.
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.

