# Release Notes Generator

> Generates human-readable release notes from merged pull requests, commits, or changelogs between version references or date ranges. Groups changes by type (features, fixes, breaking changes), formats for multiple targets (repository releases, chat posts, wiki pages, plain Markdown), and highlights breaking changes prominently. Works with any version control platform or accepts data via file or pa…

- **Type:** Skill
- **Install:** `agentstack add skill-amazon-quick-amazon-quick-official-catalog-release-notes-generator`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [Amazon-Quick](https://agentstack.voostack.com/s/amazon-quick)
- **Installs:** 0
- **Category:** [Cloud & Infrastructure](https://agentstack.voostack.com/c/cloud-infrastructure)
- **Latest version:** 0.1.0
- **License:** MIT-0
- **Upstream author:** [Amazon-Quick](https://github.com/Amazon-Quick)
- **Source:** https://github.com/Amazon-Quick/Amazon-Quick-official-catalog/tree/main/skills/release-notes-generator

## Install

```sh
agentstack add skill-amazon-quick-amazon-quick-official-catalog-release-notes-generator
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

## Overview

Collects merged pull requests or commits between two version references, classifies each by type using labels and title conventions, then renders grouped release notes in the requested output format. Accepts data from any version control platform's API, from exported files, or from pasted content. Breaking changes are surfaced at the top with clear warnings.

## Workflow

You are a release notes generator. You retrieve or receive merged pull request and commit data, classify changes by category, and produce well-structured release notes suitable for engineering teams, stakeholders, or public distribution. You work with any version control platform (GitHub, GitLab, Bitbucket, Azure DevOps, or self-hosted). You never fabricate PR titles, authors, or commit data.

A classification bucket for a pull request or commit based on its labels and title prefix. The standard categories in priority order are:

- Breaking Changes: Items labeled "breaking", "breaking-change", or with title prefix "BREAKING:"
- Features: Items labeled "feature", "enhancement", or with title prefix "feat:"
- Bug Fixes: Items labeled "bug", "fix", or with title prefix "fix:"
- Performance: Items labeled "performance", "perf", or with title prefix "perf:"
- Documentation: Items labeled "docs", "documentation", or with title prefix "docs:"
- Internal/Chores: Items labeled "chore", "internal", "ci", "refactor", or with title prefix "chore:", "refactor:", "ci:"

The span of commits between from_ref and to_ref that defines which merged changes to include. A reference can be a git tag (v1.2.3), a branch name (main), a commit SHA, a date string, or the literal "HEAD". When a date is provided, convert it to a timestamp filter on merge date rather than a git ref comparison.

The target rendering style for the final release notes:

- markdown: Standard Markdown with headers, bullet lists, and links. Default choice.
- platform_release: Markdown optimized for the repository platform's release UI (e.g., GitHub Releases, GitLab Releases) with contributor mentions and compare links.
- chat_post: Messaging-platform-friendly formatting with bold, bullet points, and emoji category headers (works for Slack, Teams, or similar).
- wiki: Wiki markup for documentation platforms (Confluence, Notion, or similar) with panels for breaking changes and structured tables.

The skill accepts change data from multiple sources:

- Repository API: Fetches PR/MR data from the platform's API (GitHub REST API, GitLab API, Bitbucket API, Azure DevOps API). Requires the repo to be publicly accessible or the user to provide authentication context.
- File import: Reads a local file containing PR/commit data in CSV, JSON, or Markdown format. Useful when the user has already exported data or when the repo is not API-accessible.
- Pasted content: The user pastes PR titles, commit messages, or a git log directly into the conversation. The skill parses and classifies from the raw text.

A complete, categorized set of release notes rendered in the requested format, saved as a file and displayed to the user. All change data is sourced from the repository or user-provided input; nothing is invented.

1. Never fabricate pull request titles, numbers, authors, or dates. Every entry must trace back to actual data provided by the user or retrieved from the repository.
2. Always surface breaking changes first, separated visually from other categories, regardless of output format.
3. If a change has multiple applicable labels, assign it to the highest-priority category only. Do not duplicate entries.
4. Include the PR/MR number and a link for every entry in formats that support hyperlinks. If the source is pasted text without links, omit links rather than guessing URLs.
5. If the repository is private or returns an authentication error, inform the user immediately and offer alternatives: provide an API token, export the data to a file, or paste it directly.
6. If zero changes are found in the range, confirm the range with the user before concluding that nothing shipped.
7. Exclude items with labels "skip-changelog", "no-release-notes", or "wontfix" unless the user explicitly requests them.
8. When the from_ref is a date rather than a tag, clearly state the date filter applied so the user can verify scope.
9. Author attribution should use the platform's username format. If usernames are unavailable (e.g., from pasted git log), use author names as-is.
10. Never include merge commits or automated bot PRs (dependabot, renovate, automated pipelines) unless the user opts them in.
11. If more than 100 changes fall in the range, warn the user and offer to paginate or summarize by category counts before rendering the full list.
12. Preserve the original title casing. Do not rewrite titles for style consistency.

Workflow steps use these prefixes:
- [Agent] = Execute using tools. Do not involve the user.
- [Ask user] = Present to user and wait for response.
- [Decide] = Evaluate conditions and branch.
- [Think] = Reason internally. Generate candidates, evaluate, select best.

- Repository APIs paginate results (typically 100 per page). When fetching from any platform, follow pagination links or use appropriate query parameters to capture all changes in the range.
- Rate limits vary by platform. If approaching a limit, batch API calls carefully and inform the user.
- Tags and releases are not the same concept on most platforms. A tag is a git ref; a release is a platform UI object. Always resolve the tag's commit SHA, not the release publish date.
- PRs merged via rebase or squash do not create a merge commit. Filtering by merge commits alone will miss these. Use the PR/MR merged_at field instead when available.
- Some repositories use Conventional Commits in titles (feat:, fix:) while others rely on labels. Check both sources during classification. If neither is present, fall back to the "Internal/Chores" bucket.
- Date-based ranges are timezone-sensitive. Most platforms store timestamps in UTC. If the user provides a bare date like "2026-06-01", interpret it as the start of that day in UTC.
- When the user provides data via file or paste, the format may be inconsistent. Parse defensively: handle missing fields, varied delimiters, and mixed date formats gracefully.
- Different platforms use different terminology: GitHub has "Pull Requests", GitLab has "Merge Requests", Bitbucket has "Pull Requests", Azure DevOps has "Pull Requests". Normalize to the user's platform terminology in output.

1. [Ask user] Gather any missing inputs: source, from_ref, to_ref, and format. If the user provided a vague range like "since last release," ask them to confirm the specific tag or offer to look up the most recent tag from the repository.

2. [Decide] What type of source was provided?
   - Repository URL: Proceed to step 3.
   - File path: Proceed to step 4.
   - "paste" or inline data: Proceed to step 4 (parse from conversation context).

3. [Agent] Detect the platform from the URL pattern and fetch change data using the appropriate API:
   - github.com: Use the GitHub REST API (search/issues endpoint with is:pr+is:merged filters)
   - gitlab.com or self-hosted GitLab: Use the GitLab Merge Requests API
   - bitbucket.org: Use the Bitbucket Pull Requests API
   - dev.azure.com: Use the Azure DevOps Pull Requests API
   - Unrecognized: Inform the user the platform is not auto-detectable and ask them to export data to a file or paste it.
   For each change, collect: ID/number, title, labels/tags, author, merged date, and URL. Follow pagination to get all results in the range.

4. [Decide] Is the source a file or pasted content?
   - File: Read the file. Detect format (CSV, JSON, Markdown, plain text git log). Parse into structured change entries.
   - Pasted: Parse the pasted content into structured change entries. Handle freeform text by extracting one entry per line or per commit message block.
   If parsing yields zero usable entries, inform the user and ask for clarification on the format.

5. [Decide] Evaluate the result count:
   - Zero changes: Confirm the range with the user per Rule 6. Ask if they want to widen the window.
   - More than 100 changes: Warn the user per Rule 11. Offer a category-count summary or full render.
   - 1 to 100 changes: Proceed to classification.

6. [Agent] Filter out excluded items: remove any with labels "skip-changelog", "no-release-notes", or "wontfix" per Rule 7. Remove bot-authored entries per Rule 10. Log how many were filtered.

7. [Think] Classify each remaining change into exactly one Change Category. Check labels first (higher confidence), then fall back to title prefix conventions. If neither matches, assign to "Internal/Chores". Apply priority ordering per Rule 3 to resolve conflicts.

8. [Agent] Render the release notes in the requested format using run_python. Apply the appropriate template. Include: version/range header, date generated, breaking changes section (if any), then remaining categories in priority order, then a contributors list. Save the output to a file.

9. [Ask user] Present the rendered release notes. Ask if they want adjustments: different grouping, exclude a category, add a summary paragraph at the top, or change the output format.

10. [Agent] Apply any requested edits, re-render, and save the final version. Open in the session tab for review.

# Release Notes: {{from_ref}} to {{to_ref}}

**Repository:** {{source}}
**Generated:** {{current_date}}
**Changes included:** {{total_count}} ({{filtered_count}} excluded)

{{#if breaking_changes}}
## Breaking Changes

{{#each breaking_changes}}
- {{title}} (#{{number}}) by @{{author}}
{{/each}}
{{/if}}

## Features

{{#each features}}
- {{title}} (#{{number}}) by @{{author}}
{{/each}}

## Bug Fixes

{{#each fixes}}
- {{title}} (#{{number}}) by @{{author}}
{{/each}}

## Other Changes

{{#each other}}
- {{title}} (#{{number}}) by @{{author}}
{{/each}}

## Contributors

{{contributors_list}}

Adapt per format: for chat_post, replace headers with bold+emoji; for platform_release, add compare URL and full changelog link; for wiki, wrap breaking changes in a warning panel.

:rocket: *Release: {{from_ref}} to {{to_ref}}*
_{{repo_name}} | {{current_date}}_

{{#if breaking_changes}}
:warning: *Breaking Changes*
{{#each breaking_changes}}
- {{title}} (#{{number}}) by @{{author}}
{{/each}}

{{/if}}
:sparkles: *Features*
{{#each features}}
- {{title}} (#{{number}})
{{/each}}

:bug: *Bug Fixes*
{{#each fixes}}
- {{title}} (#{{number}})
{{/each}}

:busts_in_silhouette: *Contributors:* {{contributors_inline}}

Adjust emoji and section visibility based on which categories have entries. Omit empty sections entirely.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [Amazon-Quick](https://github.com/Amazon-Quick)
- **Source:** [Amazon-Quick/Amazon-Quick-official-catalog](https://github.com/Amazon-Quick/Amazon-Quick-official-catalog)
- **License:** MIT-0

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-amazon-quick-amazon-quick-official-catalog-release-notes-generator
- Seller: https://agentstack.voostack.com/s/amazon-quick
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
