一键导入
jackin-release-notes
Classifies every PR merged since the last tag into Keep a Changelog categories and writes the [Unreleased] section of CHANGELOG.md.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Classifies every PR merged since the last tag into Keep a Changelog categories and writes the [Unreleased] section of CHANGELOG.md.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Turns a jackin❯ roadmap item's intent into concrete design decisions through freeform discussion, written into its
Switches the current jackin❯ repo onto a pull request's branch via gh pr checkout, guarding the working tree first.
Opens a pull request for a small jackin❯ change with the correct body shape and auto-selected verify-locally blocks.
Distills a jackin❯ roadmap item — plus optional plan files — into a self-contained /goal prompt capped at 4000 characters.
Runs the jackin❯ pre-merge gate, retires the roadmap item into docs, and squash-merges a pull request.
Opens a jackin❯ feature or idea as a roadmap item draft plus an early PR; never writes code.
| name | jackin-release-notes |
| description | Classifies every PR merged since the last tag into Keep a Changelog categories and writes the [Unreleased] section of CHANGELOG.md. |
| argument-hint | [context] |
| disable-model-invocation | true |
Classify every PR merged since the last release tag into a Keep a Changelog bucket, then write the [Unreleased] section of CHANGELOG.md. The bar is exhaustive — every merged PR accounted for, none dropped, none doubled.
jackin-release (it runs this skill as its notes step).Find the boundary. LAST_TAG=$(git describe --tags --abbrev=0); if none, start from the initial commit (git rev-list --max-parents=0 HEAD). TAG_DATE=$(git log -1 --format=%aI "$LAST_TAG").
Done when you hold the boundary commit and its date.
Gather merged PRs. gh pr list --state merged --base main --search "merged:>$TAG_DATE" --json number,title,labels,mergedAt.
Done when every PR merged after the tag is in the list.
Classify each. Sort by Conventional Commits prefix and label:
| Prefix / label | Bucket |
|---|---|
feat: / feature | Added |
fix: / bug | Fixed |
security: | Security |
refactor:, chore:, docs:, ci:, build: | Changed |
deprecate: | Deprecated |
remove: | Removed |
| no match | Changed (default) |
Strip the prefix from the title; capitalize the first word (feat: add TUI launcher → Add TUI launcher).
Done when every PR sits in exactly one bucket.
Catch ungrouped commits. git log <last-tag>..HEAD --oneline --no-merges; for each, gh pr list --state merged --search "<sha>". Commits with no PR land under Ungrouped commits.
Done when every non-merge commit since the tag is matched to a PR or listed.
Write [Unreleased]. Keep a Changelog format: one section per non-empty bucket, each entry linking its PR ([#N](…/pull/N)). Replace the existing [Unreleased] block (between ## [Unreleased] and the next ## [) — ask before overwriting entries an operator already edited. Keep the <!-- next-header --> marker intact.
Done when CHANGELOG.md carries every merged PR under the right bucket, empty buckets omitted, and the marker survives.
Present for review. Show the section; let the operator re-classify or reword. Do not proceed to a release until approved.
Safe to re-run: reads CHANGELOG.md fresh each time, asks before overwriting existing entries, fetches PR data live from GitHub.
[Unreleased] without asking.