skillZs
★ LIVE SKILL TAGS ★
>>> LIVE SKILLS INDEX <<<
* OPEN SOURCE *
NO LOGIN, NO TRACKING
※ REAL INSTALL DATA ※
← back to all skills
jackin-project/jackin-dev164 installs

release-notes

Use when generating or updating the changelog, preparing release notes, or populating the Unreleased section of CHANGELOG.md for the jackin project

How do I install this agent skill?

npx skills add https://github.com/jackin-project/jackin-dev --skill release-notes
view source ↗

Is this agent skill safe to install?

  • Gen Agent Trust Hubpass

    This skill is a developer tool for automating changelog updates. It contains a minor indirect prompt injection risk due to its reliance on processing external PR titles and commit messages.

  • Socketpass

    No alerts

  • Snykwarn

    Risk: MEDIUM · 1 issue

What does this agent skill do?

Release Notes

Generates or updates the [Unreleased] section of CHANGELOG.md from merged PRs since the last release tag.

When to Use

  • Before a release, to populate the changelog
  • When you want to preview what would go into the next release
  • When asked to update or regenerate the changelog

Process

Step 1: Detect Last Tag

LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")

If no tags exist, this is the first release. Use the initial commit as the starting point:

FIRST_COMMIT=$(git rev-list --max-parents=0 HEAD)

Step 2: Get the Tag Date

TAG_DATE=$(git log -1 --format=%aI "$LAST_TAG" 2>/dev/null || echo "")

Step 3: Gather Merged PRs

gh pr list --state merged --base main --search "merged:>$TAG_DATE" --json number,title,labels,mergedAt --jq '.[] | {number, title, labels: [.labels[].name], mergedAt}'

Step 4: Classify Each PR

Classify PRs into Keep a Changelog categories based on title prefix and labels:

Title prefixLabelCategory
feat:, feature:feature, enhancementAdded
fix:bug, bugfixFixed
security:securitySecurity
refactor:, chore:, docs:, ci:, build:refactor, chore, docsChanged
deprecate:deprecatedDeprecated
remove:removedRemoved

If a PR doesn't match any prefix or label, place it in Changed as the default.

Strip the conventional commit prefix from the title when generating the entry. For example:

  • feat: add TUI launcher becomes Add TUI launcher
  • fix: symlink escape in mounts becomes Fix symlink escape in mounts

Capitalize the first letter of each entry.

Step 5: Find Ungrouped Commits

Find commits since the last tag that are not associated with any merged PR:

git log "$LAST_TAG"..HEAD --oneline --no-merges

For each commit, check if it was part of a PR:

gh pr list --state merged --search "<commit-sha>" --json number --jq '.[0].number'

Commits not associated with a PR go into the Ungrouped commits section.

Step 6: Format the Changelog Section

Format as Keep a Changelog with PR links:

## [Unreleased]

### Added
- Add TUI launcher for interactive agent selection ([#12](https://github.com/jackin-project/jackin/pull/12))

### Fixed
- Fix symlink escape in container mounts ([#15](https://github.com/jackin-project/jackin/pull/15))

### Changed
- Extract testing instructions into TESTING.md ([#18](https://github.com/jackin-project/jackin/pull/18))

Only include sections that have entries. Do not include empty sections.

If there are ungrouped commits, add:

### Ungrouped commits (not from PRs)
- `205875a` docs: fix resolve_agent_source references
- `efa41b8` docs: split TODO into individual files

Step 7: Check for Existing Unreleased Section

Read CHANGELOG.md and check if an [Unreleased] section already has content.

If it does, ask the user:

"CHANGELOG.md already has entries in the [Unreleased] section. Do you want to: A) Regenerate from scratch (replace existing entries) B) Keep existing entries and add any missing PRs"

Step 8: Write to CHANGELOG.md

If CHANGELOG.md does not exist, create it with the standard header:

# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/),
and this project adheres to [Semantic Versioning](https://semver.org/).

<!-- next-header -->

## [Unreleased]

[generated entries here]

If CHANGELOG.md exists, replace the ## [Unreleased] section content (everything between ## [Unreleased] and the next ## [ heading or end of file).

Step 9: Present for Review

Show the complete [Unreleased] section to the user. Allow them to:

  • Request edits ("move PR #42 to Added", "reword this entry", "remove this commit")
  • Approve as-is

Do not proceed until the user approves the changelog content.

Idempotency

This skill is safe to run multiple times:

  • It always checks the current state of CHANGELOG.md before writing
  • It asks before overwriting existing entries
  • PR data is fetched fresh from GitHub each time

Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.

<a href="https://skillzs.dev/skills/jackin-project/jackin-dev/release-notes">View release-notes on skillZs</a>