{"id":"f8e0fd47-2836-40da-9717-dfb87b1d00bf","shortId":"UzkaUR","kind":"skill","title":"release-notes-generator","tagline":"Generate user-facing release notes from a plain-language sprint summary file — no git required. Produces 4 ready-to-use formats: changelog, email, in-app push, and social post. Triggers: 'generate release notes', 'write release notes', 'create release notes from', 'turn sprint re","description":"# Release Notes Generator\n\nThis skill transforms a plain-language sprint summary or product update file into polished, user-facing release notes for 4 communication channels — without git, CLI, or developer tooling. Designed for non-technical PMs, product owners, and team leads who write sprint results in plain text and need to distribute them across multiple channels.\n\n**Input:**\n- One local file (`.md` or `.txt`) with sprint results or product update notes\n- Optional: product name, version / sprint number, audience type (`users` | `customers` | `internal`)\n\n**Output:**\n- **Changelog entry** — markdown-formatted, ready to paste into CHANGELOG.md\n- **Email announcement** — subject line + body (2–4 paragraphs)\n- **In-app / push notification** — 1–2 sentences, max 160 characters\n- **Social post** — LinkedIn / X version, conversational tone\n\n---\n\n## Language Detection\n\nDetect the language of the **input file**:\n- If the file content is in Russian: generate all 4 output formats in Russian\n- If the file content is in English: generate all 4 formats in English\n- If mixed-language content: default to English; add note \"Mixed-language input detected — generated in English. Say 'по-русски' to switch.\"\n- If the user's trigger phrase is in Russian but the file is in English: use English for outputs (follow the file)\n\n---\n\n## Instructions\n\n### Step 1: Find and Read the Input File\n\n1. Look for the file the user mentioned by name\n   - If no filename given: scan the Cowork workspace for `.md` and `.txt` files; if exactly one such file exists, use it; if multiple exist, list them and ask which one to use\n2. Read the file\n3. Validate:\n   - If no file found: stop — \"No input file found. Please place your sprint summary or product update notes (.md or .txt) in the Cowork workspace and try again.\"\n   - If the file is empty or contains fewer than 3 meaningful lines: stop — \"The file is too short to generate release notes from. Add at least a few bullet points describing what was released.\"\n   - If file is `.docx` or `.pdf`: stop — \"release-notes-generator works with .md and .txt files. Please export your document to text format and try again.\"\n\n### Step 2: Extract Context\n\n1. Scan the first 5–10 lines for:\n   - Product name\n   - Version number or sprint number (e.g., `v1.4.2`, `Sprint 23`, `Release 2026-05`)\n   - Date (release date or sprint end date)\n   - Audience type (look for signals: \"for customers\", \"internal only\", \"user-facing\")\n\n2. If product name, version, or date cannot be inferred:\n   - Ask in **one consolidated question**: \"A few quick details: What's the product name? What version or sprint number is this? What's the release date? (Feel free to skip any you don't need.)\"\n   - Do not ask multiple separate questions\n\n3. Set audience type:\n   - Default: `users`\n   - Override if the file explicitly states `internal` or `customers`\n\n### Step 3: Filter for User-Facing Content\n\n1. Read all update items in the file\n2. Classify each item:\n   - **Include — New:** new features or capabilities (user-visible)\n   - **Include — Improved:** enhancements to existing features, performance gains users notice, UI/UX changes\n   - **Include — Fixed:** bug fixes that affected users\n   - **Exclude:** internal refactors, technical debt cleanup, infrastructure changes, developer tooling updates, CI/CD changes, database migrations, dependency upgrades with no user impact\n\n3. Do NOT silently drop excluded items — collect them for the \"Internal Changes\" note at the end of output\n\n4. If **all items** are technical/internal:\n   - Stop and ask: \"All items appear to be internal technical changes (refactors, infrastructure). These are typically not suitable for user-facing release notes. Should I write internal-team notes instead, or do you have user-facing changes to add?\"\n\n5. Group user-facing items into 3 categories: **New**, **Improved**, **Fixed**\n   - Omit any category with zero items (do not print empty sections)\n\n### Step 4: Generate All 4 Formats\n\nGenerate formats in this order. Use clearly delimited sections with emoji labels.\n\n**Format 1 — Changelog Entry**\n- Markdown code block, valid CHANGELOG.md format\n- Version header with date: `## [version] — YYYY-MM-DD`\n- Grouped by: `### New`, `### Improved`, `### Fixed`\n- Each item: `- [Feature/fix name]: [one-line plain-language description of the user benefit]`\n- No technical jargon; no commit hashes; no dev abbreviations\n\n**Format 2 — Email Announcement**\n- Subject line: specific, benefit-first (e.g., \"Sprint 23 updates: new report filters, faster exports\")\n  - Do NOT use: \"Newsletter\", \"Update\", \"Announcement\", \"We are pleased to announce\"\n- Body structure:\n  - Opening sentence: lead with the biggest user benefit (\"Starting today, you can...\")\n  - Paragraph 1: highlight 2–3 top improvements in plain language\n  - Paragraph 2: list remaining changes briefly\n  - Closing: 1 sentence CTA or \"thank you\" — keep it short\n- Tone: professional but direct; no corporate fluff\n\n**Format 3 — In-App / Push Notification**\n- Exactly 1–2 sentences\n- Maximum 160 characters (count carefully)\n- Structure: verb-first + specific benefit + optional CTA\n- Example shape: \"[Feature] is now live — [what users can do]. [CTA]\"\n- If character limit is hard to hit with multiple items: pick the single most impactful update\n\n**Format 4 — Social Post (LinkedIn / X)**\n- 3–5 sentences\n- Conversational tone — not a press release\n- Opens with a hook (a question, a surprising stat, or a direct statement of value)\n- Names 2–3 highlights by name\n- Ends with one CTA or question\n- No emojis unless user specifically requested them\n\n**After generating all 4 formats:**\n- List excluded technical items under `### Internal Changes (not in user-facing notes)`\n- If list is empty: omit this section\n\n### Step 5: Offer Blog Intro\n\nAfter the 4 formats, add a single line:\n> \"Want me to add a blog intro paragraph? Just say so.\"\n\nDo not generate it unless requested.\n\n---\n\n## Negative Cases\n\n- **File not found:** Stop — \"No input file found. Please place your sprint summary (.md or .txt) in the Cowork workspace and try again.\"\n- **File too short:** Stop — \"The file is too short to generate release notes from. Add at least a few bullet points describing what was released.\"\n- **All items are internal/technical:** Stop and ask — \"All items appear to be internal technical changes. Should I write internal-team notes instead, or do you have user-facing changes to add?\"\n- **No version or sprint number found:** Ask once (consolidated with other missing fields in Step 2).\n- **Hotfix / patch release:** Detected from keywords (`hotfix`, `patch`, `urgent fix`) in the **filename or the first 3 lines of the file** — adjust email tone to reassurance-first: \"We've just pushed a fix for [issue]. Everything is back to normal.\"\n- **File is .docx or .pdf:** Stop — \"release-notes-generator works with .md and .txt files. Please export your document to text format and try again.\"\n- **User asks for a format not in the list (e.g., Slack message):** After generating the 4 standard formats, offer: \"I can also write a Slack announcement — want me to add it?\"\n\n---\n\n## Output Format\n\n```\n## Release Notes — [Product Name] [Version] · [Date]\n\n---\n\n### 📋 Changelog Entry\n\n[markdown code block]\n\n---\n\n### 📧 Email Announcement\n\n**Subject:** [Subject line]\n\n[Email body]\n\n---\n\n### 📱 In-App / Push Notification\n\n[1–2 sentences, ≤ 160 characters]\n\n---\n\n### 🔗 Social Post (LinkedIn / X)\n\n[3–5 sentences]\n\n---\n\n### Internal Changes (not in user-facing notes)\n- [List of excluded technical items — omit section if empty]\n```\n\n---\n\n## Edge Cases\n\n- **Single-item release:** Generate all 4 formats even for one feature — scale length proportionally\n- **Hotfix release:** Detected from keywords (`hotfix`, `patch`, `urgent fix`) in the filename or the first 3 lines of the file — reassurance-first tone; email opens with \"We've resolved [issue]\"; push says \"Fixed: [issue] — all systems normal\"\n- **Major release (many items, \"major\" keyword):** Add a note after outputs: \"This looks like a major release — a dedicated blog post might be worth the effort. Want me to draft an intro?\"\n- **Mixed EN/RU file:** Default to English; note \"Mixed-language input detected — generated in English. Say 'по-русски' to switch.\"","tags":["release","notes","generator","claude","skills","kit","kirkruglov","agent-skills","agentic-skills","ai-agents","ai-skills","awesome-list"],"capabilities":["skill","source-kirkruglov","skill-release-notes-generator","topic-agent-skills","topic-agentic-skills","topic-ai-agents","topic-ai-skills","topic-awesome-list","topic-claude","topic-claude-ai","topic-claude-ai-skills","topic-claude-code","topic-claude-cowork","topic-claude-memory","topic-claude-skills"],"categories":["claude-skills-kit"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/KirKruglov/claude-skills-kit/release-notes-generator","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add KirKruglov/claude-skills-kit","source_repo":"https://github.com/KirKruglov/claude-skills-kit","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 7 github stars · SKILL.md body (8,270 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:38.544Z","embedding":null,"createdAt":"2026-05-18T13:21:16.195Z","updatedAt":"2026-05-18T19:13:38.544Z","lastSeenAt":"2026-05-18T19:13:38.544Z","tsv":"'-05':426 '1':160,257,264,405,520,690,782,798,822,1191 '10':410 '160':164,826,1194 '2':152,161,306,402,446,528,738,784,792,823,896,1067,1192 '2026':425 '23':423,749 '3':310,349,497,513,581,655,785,815,871,897,1084,1200,1252 '4':23,76,153,191,205,600,672,675,866,917,946,1150,1228 '5':409,648,872,940,1201 'abbrevi':736 'across':108 'add':217,363,647,948,955,1008,1051,1164,1281 'adjust':1089 'affect':558 'also':1156 'announc':148,740,761,766,1160,1180 'app':33,157,818,1188 'appear':611,1028 'ask':301,456,493,608,1025,1058,1136 'audienc':131,434,499 'back':1106 'benefit':727,745,776,835 'benefit-first':744 'biggest':774 'block':695,1178 'blog':942,957,1294 'bodi':151,767,1185 'briefli':796 'bug':555 'bullet':368,1013 'cannot':453 'capabl':537 'care':829 'case':970,1221 'categori':656,662 'chang':552,567,572,593,616,645,795,925,1033,1049,1204 'changelog':29,137,691,1174 'changelog.md':146,697 'channel':78,110 'charact':165,827,850,1195 'ci/cd':571 'classifi':529 'cleanup':565 'clear':683 'cli':81 'close':797 'code':694,1177 'collect':588 'commit':732 'communic':77 'consolid':459,1060 'contain':346 'content':185,199,213,519 'context':404 'convers':171,874 'corpor':812 'count':828 'cowork':280,335,989 'creat':45 'cta':800,837,848,904 'custom':134,440,511 'databas':573 'date':427,429,433,452,481,702,1173 'dd':707 'debt':564 'dedic':1293 'default':214,501,1310 'delimit':684 'depend':575 'describ':370,1015 'descript':723 'design':85 'detail':464 'detect':174,175,223,1071,1239,1318 'dev':735 'develop':83,568 'direct':810,891 'distribut':106 'document':394,1128 'docx':377,1111 'draft':1304 'drop':585 'e.g':420,747,1144 'edg':1220 'effort':1300 'email':30,147,739,1090,1179,1184,1261 'emoji':687,908 'empti':344,669,935,1219 'en/ru':1308 'end':432,597,901 'english':202,208,216,226,247,249,1312,1321 'enhanc':543 'entri':138,692,1175 'even':1230 'everyth':1104 'exact':288,821 'exampl':838 'exclud':560,586,920,1213 'exist':292,297,545 'explicit':507 'export':392,755,1126 'extract':403 'face':8,72,445,518,627,644,652,930,1048,1209 'faster':754 'featur':535,546,840,1233 'feature/fix':715 'feel':482 'fewer':347 'field':1064 'file':18,67,114,181,184,198,244,254,263,268,286,291,309,314,319,342,354,375,390,506,527,971,977,994,999,1088,1109,1124,1256,1309 'filenam':276,1080,1248 'filter':514,753 'find':258 'first':408,746,833,1083,1095,1251,1259 'fix':554,556,659,712,1077,1101,1245,1270 'fluff':813 'follow':252 'format':28,141,193,206,397,676,678,689,698,737,814,865,918,947,1131,1139,1152,1167,1229 'found':315,320,973,978,1057 'free':483 'gain':548 'generat':4,5,39,54,189,203,224,359,384,673,677,915,965,1004,1118,1148,1226,1319 'git':20,80 'given':277 'group':649,708 'hard':853 'hash':733 'header':700 'highlight':783,898 'hit':855 'hook':883 'hotfix':1068,1074,1237,1242 'impact':580,863 'improv':542,658,711,787 'in-app':31,155,816,1186 'includ':532,541,553 'infer':455 'infrastructur':566,618 'input':111,180,222,262,318,976,1317 'instead':637,1041 'instruct':255 'intern':135,441,509,561,592,614,634,924,1031,1038,1203 'internal-team':633,1037 'internal/technical':1022 'intro':943,958,1306 'issu':1103,1267,1271 'item':524,531,587,603,610,653,665,714,858,922,1020,1027,1215,1224,1278 'jargon':730 'keep':804 'keyword':1073,1241,1280 'label':688 'languag':15,61,173,177,212,221,722,790,1316 'lead':95,771 'least':365,1010 'length':1235 'like':1288 'limit':851 'line':150,351,411,719,742,951,1085,1183,1253 'linkedin':168,869,1198 'list':298,793,919,933,1143,1211 'live':843 'local':113 'look':265,436,1287 'major':1275,1279,1290 'mani':1277 'markdown':140,693,1176 'markdown-format':139 'max':163 'maximum':825 'md':115,283,330,387,984,1121 'meaning':350 'mention':271 'messag':1146 'might':1296 'migrat':574 'miss':1063 'mix':211,220,1307,1315 'mixed-languag':210,219,1314 'mm':706 'multipl':109,296,494,857 'name':127,273,414,449,469,716,895,900,1171 'need':104,490 'negat':969 'new':533,534,657,710,751 'newslett':759 'non':88 'non-techn':87 'normal':1108,1274 'note':3,10,41,44,47,53,74,124,218,329,361,383,594,629,636,931,1006,1040,1117,1169,1210,1283,1313 'notic':550 'notif':159,820,1190 'number':130,416,419,474,1056 'offer':941,1153 'omit':660,936,1216 'one':112,289,303,458,718,903,1232 'one-lin':717 'open':769,880,1262 'option':125,836 'order':681 'output':136,192,251,599,1166,1285 'overrid':503 'owner':92 'paragraph':154,781,791,959 'past':144 'patch':1069,1075,1243 'pdf':379,1113 'perform':547 'phrase':238 'pick':859 'place':322,980 'plain':14,60,101,721,789 'plain-languag':13,59,720 'pleas':321,391,764,979,1125 'pms':90 'point':369,1014 'polish':69 'post':37,167,868,1197,1295 'press':878 'print':668 'produc':22 'product':65,91,122,126,327,413,448,468,1170 'profession':808 'proport':1236 'push':34,158,819,1099,1189,1268 'question':460,496,885,906 'quick':463 're':51 'read':260,307,521 'readi':25,142 'ready-to-us':24 'reassur':1094,1258 'reassurance-first':1093,1257 'refactor':562,617 'releas':2,9,40,43,46,52,73,360,373,382,424,428,480,628,879,1005,1018,1070,1116,1168,1225,1238,1276,1291 'release-notes-gener':1,381,1115 'remain':794 'report':752 'request':912,968 'requir':21 'resolv':1266 'result':99,120 'russian':188,195,241 'say':227,961,1269,1322 'scale':1234 'scan':278,406 'section':670,685,938,1217 'sentenc':162,770,799,824,873,1193,1202 'separ':495 'set':498 'shape':839 'short':357,806,996,1002 'signal':438 'silent':584 'singl':861,950,1223 'single-item':1222 'skill':56 'skill-release-notes-generator' 'skip':485 'slack':1145,1159 'social':36,166,867,1196 'source-kirkruglov' 'specif':743,834,911 'sprint':16,50,62,98,119,129,324,418,422,431,473,748,982,1055 'standard':1151 'start':777 'stat':888 'state':508 'statement':892 'step':256,401,512,671,939,1066 'stop':316,352,380,606,974,997,1023,1114 'structur':768,830 'subject':149,741,1181,1182 'suitabl':623 'summari':17,63,325,983 'surpris':887 'switch':232,1327 'system':1273 'team':94,635,1039 'technic':89,563,615,729,921,1032,1214 'technical/internal':605 'text':102,396,1130 'thank':802 'today':778 'tone':172,807,875,1091,1260 'tool':84,569 'top':786 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agents' 'topic-ai-skills' 'topic-awesome-list' 'topic-claude' 'topic-claude-ai' 'topic-claude-ai-skills' 'topic-claude-code' 'topic-claude-cowork' 'topic-claude-memory' 'topic-claude-skills' 'transform':57 'tri':338,399,992,1133 'trigger':38,237 'turn':49 'txt':117,285,332,389,986,1123 'type':132,435,500 'typic':621 'ui/ux':551 'unless':909,967 'updat':66,123,328,523,570,750,760,864 'upgrad':576 'urgent':1076,1244 'use':27,248,293,305,682,758 'user':7,71,133,235,270,444,502,517,539,549,559,579,626,643,651,726,775,845,910,929,1047,1135,1208 'user-fac':6,70,443,516,625,642,650,928,1046,1207 'user-vis':538 'v1.4.2':421 'valid':311,696 'valu':894 've':1097,1265 'verb':832 'verb-first':831 'version':128,170,415,450,471,699,703,1053,1172 'visibl':540 'want':952,1161,1301 'without':79 'work':385,1119 'workspac':281,336,990 'worth':1298 'write':42,97,632,1036,1157 'x':169,870,1199 'yyyi':705 'yyyy-mm-dd':704 'zero':664 'по':229,1324 'по-русски':228,1323 'русски':230,1325","prices":[{"id":"7a06d0ef-1cef-4dd3-9feb-6544e115163f","listingId":"f8e0fd47-2836-40da-9717-dfb87b1d00bf","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"KirKruglov","category":"claude-skills-kit","install_from":"skills.sh"},"createdAt":"2026-05-18T13:21:16.195Z"}],"sources":[{"listingId":"f8e0fd47-2836-40da-9717-dfb87b1d00bf","source":"github","sourceId":"KirKruglov/claude-skills-kit/release-notes-generator","sourceUrl":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/release-notes-generator","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:16.195Z","lastSeenAt":"2026-05-18T19:13:38.544Z"}],"details":{"listingId":"f8e0fd47-2836-40da-9717-dfb87b1d00bf","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"KirKruglov","slug":"release-notes-generator","github":{"repo":"KirKruglov/claude-skills-kit","stars":7,"topics":["agent-skills","agentic-skills","ai","ai-agents","ai-skills","awesome-list","claude","claude-ai","claude-ai-skills","claude-code","claude-cowork","claude-memory","claude-skills","memory-management","productivity","productivity-tools","project-management"],"license":"mit","html_url":"https://github.com/KirKruglov/claude-skills-kit","pushed_at":"2026-05-18T04:27:46Z","description":"40+ curated agent skills for Claude Cowork and Claude.ai — ready-to-use tools for non-technical users: project management, productivity, and AI workflow automation","skill_md_sha":"8a3a2aeca7f4610ddb6ae9665307faa8047c9db1","skill_md_path":"skills/release-notes-generator/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/release-notes-generator"},"layout":"multi","source":"github","category":"claude-skills-kit","frontmatter":{"name":"release-notes-generator","description":"Generate user-facing release notes from a plain-language sprint summary file — no git required. Produces 4 ready-to-use formats: changelog, email, in-app push, and social post. Triggers: 'generate release notes', 'write release notes', 'create release notes from', 'turn sprint results into release notes', 'сгенерируй release notes', 'напиши release notes', 'создай релизные заметки', 'оформи итоги спринта'."},"skills_sh_url":"https://skills.sh/KirKruglov/claude-skills-kit/release-notes-generator"},"updatedAt":"2026-05-18T19:13:38.544Z"}}