{"id":"cc4ced58-5a57-49a0-91dc-7d4a39f6c8a4","shortId":"ZUsfaw","kind":"skill","title":"Changelog Curator","tagline":"Maintains and formats a CHANGELOG.md following Keep a Changelog conventions from git history or PR list.","description":"# Changelog Curator\n\n## What this skill does\n\nThis skill directs the agent to write or update a `CHANGELOG.md` that follows the [Keep a Changelog](https://keepachangelog.com) format. It takes a list of commits, PR titles, or a git log dump, groups changes into the correct categories (Added, Changed, Fixed, Removed, Deprecated, Security), writes them in clear human-readable language, and formats the file correctly with semantic versioning and dates.\n\nUse this before cutting a release, during sprint wrap-up, or when your changelog has fallen behind and you need to bring it up to date.\n\n## How to use\n\n### Claude Code / Cline\n\nCopy this file to `.agents/skills/changelog-curator/SKILL.md` in your project root.\n\nThen ask:\n- *\"Use the Changelog Curator skill to update CHANGELOG.md for the v2.3.0 release. Here's the git log: [paste log].\"*\n- *\"Use the Changelog Curator skill to create a CHANGELOG.md for these PRs: [list PRs].\"*\n\nProvide:\n- The git log (`git log --oneline vX.Y.Z..HEAD`) or a list of PR titles/descriptions\n- The new version number and release date (or \"Unreleased\")\n- The existing `CHANGELOG.md` if one exists (so the agent can append, not overwrite)\n\n### Cursor\n\nAdd the instructions below to your `.cursorrules` or paste them into the Cursor AI pane. Paste the git log or PR list along with the version number.\n\n### Codex\n\nPaste the git log or PR list, the current `CHANGELOG.md` if it exists, and the version number. Ask Codex to follow the instructions below.\n\n## The Prompt / Instructions for the Agent\n\nWhen asked to write or update a changelog, follow these steps:\n\n### Step 1 — Parse the input\n\nThe input may be:\n- A raw `git log --oneline` dump\n- A list of PR titles\n- A mix of both\n\nFor each item, extract:\n- The core change (ignore ticket numbers, PR numbers, merge commit boilerplate like \"Merge branch X\")\n- The type of change (what category does it belong to?)\n- The user-facing impact (what does a user or developer actually experience?)\n\n### Step 2 — Categorize each change\n\nUse exactly these Keep a Changelog categories:\n\n- **Added** — New features, new endpoints, new configuration options, new pages\n- **Changed** — Changes to existing functionality, updated behavior, updated dependencies (when behavior changes)\n- **Deprecated** — Features that still work but will be removed in a future version\n- **Removed** — Features, endpoints, or fields that are gone\n- **Fixed** — Bug fixes\n- **Security** — Fixes for security vulnerabilities (always list separately and first if present)\n\nIf a commit is unclear (e.g., \"misc cleanup\"), use your best judgment or place it under \"Changed.\"\n\n### Step 3 — Write each entry\n\nRules for writing changelog entries:\n- Write in the **past tense** (\"Added\", \"Fixed\", \"Removed\" — not \"Add\", \"Fix\", \"Remove\")\n- Write from the **user's perspective** — what changed for them, not what the developer did internally\n- Be **specific** — \"Fixed crash when uploading files larger than 10 MB\" not \"Fixed file upload bug\"\n- Do not include commit hashes, PR numbers, or developer names (unless the project convention includes them)\n- Remove redundant prefixes like \"feat:\", \"fix:\", \"chore:\" from conventional commits\n- If multiple commits address the same issue, combine them into one entry\n\n### Step 4 — Format the CHANGELOG.md section\n\n```markdown\n## [X.Y.Z] - YYYY-MM-DD\n\n### Security\n- [Security fixes first, if any]\n\n### Added\n- [New feature 1]\n- [New feature 2]\n\n### Changed\n- [Change 1]\n\n### Deprecated\n- [Deprecation 1]\n\n### Removed\n- [Removal 1]\n\n### Fixed\n- [Bug fix 1]\n- [Bug fix 2]\n```\n\nOnly include sections that have entries. Don't include empty sections.\n\n### Step 5 — Handle the full file\n\nIf an existing `CHANGELOG.md` is provided:\n- Insert the new version section **above** the previous most-recent version\n- Keep the `[Unreleased]` section at the top if it exists; convert it to the new version\n- Do not modify any existing version sections\n- Ensure the `[Unreleased]` section remains (empty or reset) at the top after inserting\n\nIf no `CHANGELOG.md` exists, create one with this header:\n```markdown\n# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [Unreleased]\n\n[new version section here]\n```\n\n## Example\n\n**Input to Agent:**\n> \"Use the Changelog Curator skill for v1.4.0 released today. Git log:\n> ```\n> a1b2c3d feat: add CSV export to reports page\n> d4e5f6g fix: crash when user has no profile picture\n> h7i8j9k fix: login redirect loop on mobile Safari\n> l0m1n2o chore: upgrade lodash to 4.17.21\n> p3q4r5s feat: add dark mode toggle\n> t6u7v8w security: patch XSS in comment renderer\n> x9y0z1a feat: new /api/v2/users endpoint with pagination\n> b2c3d4e fix: orders not showing for guest users\n> ```\"\n\n**Output from Agent:**\n\n> ## [1.4.0] - 2026-03-15\n>\n> ### Security\n> - Patched XSS vulnerability in the comment renderer\n>\n> ### Added\n> - Added CSV export to the reports page\n> - Added dark mode toggle\n> - Added new `/api/v2/users` endpoint with pagination support\n>\n> ### Changed\n> - Updated lodash dependency to 4.17.21\n>\n> ### Fixed\n> - Fixed crash when a user has no profile picture set\n> - Fixed login redirect loop on mobile Safari\n> - Fixed orders not displaying for guest users\n\n## Notes\n\n- Changelog entries are written for readers (users, developers consuming the API), not for the author. If a change only affects CI configuration or internal test setup, it's usually fine to omit it.\n- For breaking changes, add a `⚠ Breaking` prefix to the entry and consider adding a migration note.\n- Run `git log vX.Y.Z..HEAD --oneline` to get the commit list for a specific range.","tags":["changelog","curator","openagentskills","notysoty","agent-skills","claude","claude-code","claude-skills","cline","cursor","llm","llm-skills"],"capabilities":["skill","source-notysoty","skill-changelog-curator","topic-agent-skills","topic-claude","topic-claude-code","topic-claude-skills","topic-cline","topic-cursor","topic-llm","topic-llm-skills","topic-skills"],"categories":["openagentskills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Notysoty/openagentskills/changelog-curator","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Notysoty/openagentskills","source_repo":"https://github.com/Notysoty/openagentskills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (5,773 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:13:21.070Z","embedding":null,"createdAt":"2026-05-18T13:20:41.563Z","updatedAt":"2026-05-18T19:13:21.070Z","lastSeenAt":"2026-05-18T19:13:21.070Z","tsv":"'-03':756 '-15':757 '/api/v2/users':739,780 '/en/1.0.0/),':661 '/spec/v2.0.0.html).':671 '1':272,537,543,546,549,553 '1.4.0':754 '10':471 '2':338,540,556 '2026':755 '3':425 '4':517 '4.17.21':722,790 '5':569 'a1b2c3d':692 'actual':335 'ad':63,349,439,534,766,767,774,778,862 'add':202,443,694,725,853 'address':507 'adher':665 'affect':836 'agent':29,196,259,680,753 'agents/skills/changelog-curator/skill.md':124 'ai':215 'along':224 'alway':400 'api':827 'append':198 'ask':130,247,261 'author':831 'b2c3d4e':743 'base':654 'behavior':365,369 'behind':104 'belong':322 'best':417 'boilerpl':309 'branch':312 'break':851,855 'bring':109 'bug':393,477,551,554 'categor':339 'categori':62,319,348 'chang':58,64,301,317,341,359,360,370,423,453,541,542,641,785,834,852 'changelog':1,11,19,41,101,133,152,267,347,432,638,658,683,817 'changelog.md':7,35,138,158,190,239,520,577,630 'chore':500,718 'ci':837 'claud':117 'cleanup':414 'clear':72 'cline':119 'code':118 'codex':229,248 'combin':511 'comment':734,764 'commit':49,308,409,481,503,506,875 'configur':355,838 'consid':861 'consum':825 'convent':12,491,502 'convert':602 'copi':120 'core':300 'correct':61,81 'crash':465,702,793 'creat':156,632 'csv':695,768 'curat':2,20,134,153,684 'current':238 'cursor':201,214 'cursorrul':208 'cut':90 'd4e5f6g':700 'dark':726,775 'date':86,113,185 'dd':527 'depend':367,788 'deprec':67,371,544,545 'develop':334,459,486,824 'direct':27 'display':812 'document':647 'dump':56,285 'e.g':412 'empti':566,620 'endpoint':353,386,740,781 'ensur':615 'entri':428,433,515,562,818,859 'exact':343 'exampl':677 'exist':189,193,242,362,576,601,612,631 'experi':336 'export':696,769 'extract':298 'face':327 'fallen':103 'feat':498,693,724,737 'featur':351,372,385,536,539 'field':388 'file':80,122,468,475,573,650 'fine':846 'first':404,531 'fix':65,392,394,396,440,444,464,474,499,530,550,552,555,701,710,744,791,792,802,809 'follow':8,37,250,268 'format':5,43,78,518,652 'full':572 'function':363 'futur':382 'get':873 'git':14,54,146,166,168,219,232,282,690,867 'gone':391 'group':57 'guest':749,814 'h7i8j9k':709 'handl':570 'hash':482 'head':172,870 'header':636 'histori':15 'human':74 'human-read':73 'ignor':302 'impact':328 'includ':480,492,558,565 'input':275,277,678 'insert':580,627 'instruct':204,252,256 'intern':461,840 'issu':510 'item':297 'judgment':418 'keep':9,39,345,592,656 'keepachangelog.com':42,660 'keepachangelog.com/en/1.0.0/),':659 'l0m1n2o':717 'languag':76 'larger':469 'like':310,497 'list':18,47,162,175,223,236,287,401,876 'lodash':720,787 'log':55,147,149,167,169,220,233,283,691,868 'login':711,803 'loop':713,805 'maintain':3 'markdown':522,637 'may':278 'mb':472 'merg':307,311 'migrat':864 'misc':413 'mix':292 'mm':526 'mobil':715,807 'mode':727,776 'modifi':610 'most-rec':588 'multipl':505 'name':487 'need':107 'new':180,350,352,354,357,535,538,582,606,673,738,779 'notabl':640 'note':816,865 'number':182,228,246,304,306,484 'omit':848 'one':192,514,633 'onelin':170,284,871 'option':356 'order':745,810 'output':751 'overwrit':200 'p3q4r5s':723 'page':358,699,773 'pagin':742,783 'pane':216 'pars':273 'past':148,210,217,230,437 'patch':731,759 'perspect':451 'pictur':708,800 'place':420 'pr':17,50,177,222,235,289,305,483 'prefix':496,856 'present':406 'previous':587 'profil':707,799 'project':127,490,644,664 'prompt':255 'provid':164,579 'prs':161,163 'rang':880 'raw':281 'readabl':75 'reader':822 'recent':590 'redirect':712,804 'redund':495 'releas':92,142,184,688 'remain':619 'remov':66,379,384,441,445,494,547,548 'render':735,765 'report':698,772 'reset':622 'root':128 'rule':429 'run':866 'safari':716,808 'section':521,559,567,584,595,614,618,675 'secur':68,395,398,528,529,730,758 'semant':83,667 'semver.org':670 'semver.org/spec/v2.0.0.html).':669 'separ':402 'set':801 'setup':842 'show':747 'skill':23,26,135,154,685 'skill-changelog-curator' 'source-notysoty' 'specif':463,879 'sprint':94 'step':270,271,337,424,516,568 'still':374 'support':784 't6u7v8w':729 'take':45 'tens':438 'test':841 'ticket':303 'titl':51,290 'titles/descriptions':178 'today':689 'toggl':728,777 'top':598,625 'topic-agent-skills' 'topic-claude' 'topic-claude-code' 'topic-claude-skills' 'topic-cline' 'topic-cursor' 'topic-llm' 'topic-llm-skills' 'topic-skills' 'type':315 'unclear':411 'unless':488 'unreleas':187,594,617,672 'updat':33,137,265,364,366,786 'upgrad':719 'upload':467,476 'use':87,116,131,150,342,415,681 'user':326,332,449,704,750,796,815,823 'user-fac':325 'usual':845 'v1.4.0':687 'v2.3.0':141 'version':84,181,227,245,383,583,591,607,613,668,674 'vulner':399,761 'vx.y.z':171,869 'work':375 'wrap':96 'wrap-up':95 'write':31,69,263,426,431,434,446 'written':820 'x':313 'x.y.z':523 'x9y0z1a':736 'xss':732,760 'yyyi':525 'yyyy-mm-dd':524","prices":[{"id":"83e73211-b3d8-4089-b2ed-90253636d0ce","listingId":"cc4ced58-5a57-49a0-91dc-7d4a39f6c8a4","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Notysoty","category":"openagentskills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:20:41.563Z"}],"sources":[{"listingId":"cc4ced58-5a57-49a0-91dc-7d4a39f6c8a4","source":"github","sourceId":"Notysoty/openagentskills/changelog-curator","sourceUrl":"https://github.com/Notysoty/openagentskills/tree/main/skills/changelog-curator","isPrimary":false,"firstSeenAt":"2026-05-18T13:20:41.563Z","lastSeenAt":"2026-05-18T19:13:21.070Z"}],"details":{"listingId":"cc4ced58-5a57-49a0-91dc-7d4a39f6c8a4","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Notysoty","slug":"changelog-curator","github":{"repo":"Notysoty/openagentskills","stars":8,"topics":["agent-skills","claude","claude-code","claude-skills","cline","cursor","llm","llm-skills","skills"],"license":"mit","html_url":"https://github.com/Notysoty/openagentskills","pushed_at":"2026-03-28T06:50:19Z","description":"A  community-driven library of reusable AI agent skills for Claude Code, Cursor, Codex, Cline, and more.","skill_md_sha":"8a79e5782da7dec33992bb65ca115525656f5002","skill_md_path":"skills/changelog-curator/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Notysoty/openagentskills/tree/main/skills/changelog-curator"},"layout":"multi","source":"github","category":"openagentskills","frontmatter":{"name":"Changelog Curator","description":"Maintains and formats a CHANGELOG.md following Keep a Changelog conventions from git history or PR list."},"skills_sh_url":"https://skills.sh/Notysoty/openagentskills/changelog-curator"},"updatedAt":"2026-05-18T19:13:21.070Z"}}