Release Notes Generator
This 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.
Input:
- One local file (
.md or .txt) with sprint results or product update notes
- Optional: product name, version / sprint number, audience type (
users | customers | internal)
Output:
- Changelog entry — markdown-formatted, ready to paste into CHANGELOG.md
- Email announcement — subject line + body (2–4 paragraphs)
- In-app / push notification — 1–2 sentences, max 160 characters
- Social post — LinkedIn / X version, conversational tone
Language Detection
Detect the language of the input file:
- If the file content is in Russian: generate all 4 output formats in Russian
- If the file content is in English: generate all 4 formats in English
- If mixed-language content: default to English; add note "Mixed-language input detected — generated in English. Say 'по-русски' to switch."
- If the user's trigger phrase is in Russian but the file is in English: use English for outputs (follow the file)
Instructions
Step 1: Find and Read the Input File
- Look for the file the user mentioned by name
- 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
- Read the file
- Validate:
- 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."
- 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."
- 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."
Step 2: Extract Context
Scan the first 5–10 lines for:
- Product name
- Version number or sprint number (e.g.,
v1.4.2, Sprint 23, Release 2026-05)
- Date (release date or sprint end date)
- Audience type (look for signals: "for customers", "internal only", "user-facing")
If product name, version, or date cannot be inferred:
- 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.)"
- Do not ask multiple separate questions
Set audience type:
- Default:
users
- Override if the file explicitly states
internal or customers
Step 3: Filter for User-Facing Content
Read all update items in the file
Classify each item:
- Include — New: new features or capabilities (user-visible)
- Include — Improved: enhancements to existing features, performance gains users notice, UI/UX changes
- Include — Fixed: bug fixes that affected users
- Exclude: internal refactors, technical debt cleanup, infrastructure changes, developer tooling updates, CI/CD changes, database migrations, dependency upgrades with no user impact
Do NOT silently drop excluded items — collect them for the "Internal Changes" note at the end of output
If all items are technical/internal:
- 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?"
Group user-facing items into 3 categories: New, Improved, Fixed
- Omit any category with zero items (do not print empty sections)
Step 4: Generate All 4 Formats
Generate formats in this order. Use clearly delimited sections with emoji labels.
Format 1 — Changelog Entry
- Markdown code block, valid CHANGELOG.md format
- Version header with date:
## [version] — YYYY-MM-DD
- Grouped by:
### New, ### Improved, ### Fixed
- Each item:
- [Feature/fix name]: [one-line plain-language description of the user benefit]
- No technical jargon; no commit hashes; no dev abbreviations
Format 2 — Email Announcement
- Subject line: specific, benefit-first (e.g., "Sprint 23 updates: new report filters, faster exports")
- Do NOT use: "Newsletter", "Update", "Announcement", "We are pleased to announce"
- Body structure:
- Opening sentence: lead with the biggest user benefit ("Starting today, you can...")
- Paragraph 1: highlight 2–3 top improvements in plain language
- Paragraph 2: list remaining changes briefly
- Closing: 1 sentence CTA or "thank you" — keep it short
- Tone: professional but direct; no corporate fluff
Format 3 — In-App / Push Notification
- Exactly 1–2 sentences
- Maximum 160 characters (count carefully)
- Structure: verb-first + specific benefit + optional CTA
- Example shape: "[Feature] is now live — [what users can do]. [CTA]"
- If character limit is hard to hit with multiple items: pick the single most impactful update
Format 4 — Social Post (LinkedIn / X)
- 3–5 sentences
- Conversational tone — not a press release
- Opens with a hook (a question, a surprising stat, or a direct statement of value)
- Names 2–3 highlights by name
- Ends with one CTA or question
- No emojis unless user specifically requested them
After generating all 4 formats:
- List excluded technical items under
### Internal Changes (not in user-facing notes)
- If list is empty: omit this section
Step 5: Offer Blog Intro
After the 4 formats, add a single line:
"Want me to add a blog intro paragraph? Just say so."
Do not generate it unless requested.
Negative Cases
- File not found: Stop — "No input file found. Please place your sprint summary (.md or .txt) in the Cowork workspace and try again."
- 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."
- 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?"
- No version or sprint number found: Ask once (consolidated with other missing fields in Step 2).
- 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."
- 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."
- 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?"
Output Format
## Release Notes — [Product Name] [Version] · [Date]
---
### 📋 Changelog Entry
[markdown code block]
---
### 📧 Email Announcement
**Subject:** [Subject line]
[Email body]
---
### 📱 In-App / Push Notification
[1–2 sentences, ≤ 160 characters]
---
### 🔗 Social Post (LinkedIn / X)
[3–5 sentences]
---
### Internal Changes (not in user-facing notes)
- [List of excluded technical items — omit section if empty]
Edge Cases
- Single-item release: Generate all 4 formats even for one feature — scale length proportionally
- 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"
- 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?"
- Mixed EN/RU file: Default to English; note "Mixed-language input detected — generated in English. Say 'по-русски' to switch."
1---2name: release-notes-generator3description: 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', 'создай релизные заметки', 'оформи итоги спринта'.4---56# Release Notes Generator78This 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.910**Input:**11- One local file (`.md` or `.txt`) with sprint results or product update notes12- Optional: product name, version / sprint number, audience type (`users` | `customers` | `internal`)1314**Output:**15- **Changelog entry** — markdown-formatted, ready to paste into CHANGELOG.md16- **Email announcement** — subject line + body (2–4 paragraphs)17- **In-app / push notification** — 1–2 sentences, max 160 characters18- **Social post** — LinkedIn / X version, conversational tone1920---2122## Language Detection2324Detect the language of the **input file**:25- If the file content is in Russian: generate all 4 output formats in Russian26- If the file content is in English: generate all 4 formats in English27- If mixed-language content: default to English; add note "Mixed-language input detected — generated in English. Say 'по-русски' to switch."28- If the user's trigger phrase is in Russian but the file is in English: use English for outputs (follow the file)2930---3132## Instructions3334### Step 1: Find and Read the Input File35361. Look for the file the user mentioned by name37 - 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 use382. Read the file393. Validate:40 - 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."41 - 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."42 - 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."4344### Step 2: Extract Context45461. Scan the first 5–10 lines for:47 - Product name48 - Version number or sprint number (e.g., `v1.4.2`, `Sprint 23`, `Release 2026-05`)49 - Date (release date or sprint end date)50 - Audience type (look for signals: "for customers", "internal only", "user-facing")51522. If product name, version, or date cannot be inferred:53 - 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.)"54 - Do not ask multiple separate questions55563. Set audience type:57 - Default: `users`58 - Override if the file explicitly states `internal` or `customers`5960### Step 3: Filter for User-Facing Content61621. Read all update items in the file632. Classify each item:64 - **Include — New:** new features or capabilities (user-visible)65 - **Include — Improved:** enhancements to existing features, performance gains users notice, UI/UX changes66 - **Include — Fixed:** bug fixes that affected users67 - **Exclude:** internal refactors, technical debt cleanup, infrastructure changes, developer tooling updates, CI/CD changes, database migrations, dependency upgrades with no user impact68693. Do NOT silently drop excluded items — collect them for the "Internal Changes" note at the end of output70714. If **all items** are technical/internal:72 - 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?"73745. Group user-facing items into 3 categories: **New**, **Improved**, **Fixed**75 - Omit any category with zero items (do not print empty sections)7677### Step 4: Generate All 4 Formats7879Generate formats in this order. Use clearly delimited sections with emoji labels.8081**Format 1 — Changelog Entry**82- Markdown code block, valid CHANGELOG.md format83- Version header with date: `## [version] — YYYY-MM-DD`84- Grouped by: `### New`, `### Improved`, `### Fixed`85- Each item: `- [Feature/fix name]: [one-line plain-language description of the user benefit]`86- No technical jargon; no commit hashes; no dev abbreviations8788**Format 2 — Email Announcement**89- Subject line: specific, benefit-first (e.g., "Sprint 23 updates: new report filters, faster exports")90 - Do NOT use: "Newsletter", "Update", "Announcement", "We are pleased to announce"91- Body structure:92 - Opening sentence: lead with the biggest user benefit ("Starting today, you can...")93 - Paragraph 1: highlight 2–3 top improvements in plain language94 - Paragraph 2: list remaining changes briefly95 - Closing: 1 sentence CTA or "thank you" — keep it short96- Tone: professional but direct; no corporate fluff9798**Format 3 — In-App / Push Notification**99- Exactly 1–2 sentences100- Maximum 160 characters (count carefully)101- Structure: verb-first + specific benefit + optional CTA102- Example shape: "[Feature] is now live — [what users can do]. [CTA]"103- If character limit is hard to hit with multiple items: pick the single most impactful update104105**Format 4 — Social Post (LinkedIn / X)**106- 3–5 sentences107- Conversational tone — not a press release108- Opens with a hook (a question, a surprising stat, or a direct statement of value)109- Names 2–3 highlights by name110- Ends with one CTA or question111- No emojis unless user specifically requested them112113**After generating all 4 formats:**114- List excluded technical items under `### Internal Changes (not in user-facing notes)`115- If list is empty: omit this section116117### Step 5: Offer Blog Intro118119After the 4 formats, add a single line:120> "Want me to add a blog intro paragraph? Just say so."121122Do not generate it unless requested.123124---125126## Negative Cases127128- **File not found:** Stop — "No input file found. Please place your sprint summary (.md or .txt) in the Cowork workspace and try again."129- **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."130- **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?"131- **No version or sprint number found:** Ask once (consolidated with other missing fields in Step 2).132- **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."133- **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."134- **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?"135136---137138## Output Format139140```141## Release Notes — [Product Name] [Version] · [Date]142143---144145### 📋 Changelog Entry146147[markdown code block]148149---150151### 📧 Email Announcement152153**Subject:** [Subject line]154155[Email body]156157---158159### 📱 In-App / Push Notification160161[1–2 sentences, ≤ 160 characters]162163---164165### 🔗 Social Post (LinkedIn / X)166167[3–5 sentences]168169---170171### Internal Changes (not in user-facing notes)172- [List of excluded technical items — omit section if empty]173```174175---176177## Edge Cases178179- **Single-item release:** Generate all 4 formats even for one feature — scale length proportionally180- **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"181- **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?"182- **Mixed EN/RU file:** Default to English; note "Mixed-language input detected — generated in English. Say 'по-русски' to switch."