jackin-release-notes — скилл для Claude Code: установка
Собирает PR после последнего тега, раскладывает их по категориям Keep a Changelog и обновляет [Unreleased] в CHANGELOG.md.
npx skills add jackin-project/jackin-dev --skill jackin-release-notes -a claude-codeЧто делает jackin-release-notes
Скилл находит последний тег через Git, определяет границу изменений и получает слитые PR командой gh pr list. Каждый PR попадает в одну категорию: Added, Fixed, Security, Changed, Deprecated или Removed. Записи без подходящего префикса или метки переходят в Changed.
Затем скилл проверяет коммиты без merge и ищет для них PR. Коммиты без PR добавляются в Ungrouped commits. В CHANGELOG.md он заменяет блок [Unreleased], сохраняет маркер <!-- next-header --> и добавляет ссылки на PR.
Перед заменой уже отредактированных записей скилл спрашивает подтверждение, а после показывает секцию для проверки. Он запускается только по явному запросу; без доступа к данным GitHub команда gh pr list не соберёт список PR.
Какие задачи решает
- собрать PR после последнего тега
- разнести изменения по категориям Keep a Changelog
- найти коммиты без связанных PR
- обновить блок
[Unreleased]со ссылками на PR - показать changelog для проверки перед релизом
Примеры запросов агенту
- Собери черновик следующего changelog по всем PR после последнего тега.
- Проверь коммиты после последнего релиза и добавь несвязанные с PR в
Ungrouped commits. - Обнови
[Unreleased]вCHANGELOG.md, но сначала покажи секцию для проверки.
Как установить jackin-release-notes
1Через Skills CLI (Vercel)
npx skills add jackin-project/jackin-dev --skill jackin-release-notes -a claude-code2Вручную: положить файлы
~/.claude/skills/jackin-release-notes/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/jackin-release-notes/
1Через Skills CLI (Vercel)
npx skills add jackin-project/jackin-dev --skill jackin-release-notes -a codex2Вручную: положить файлы
.agents/skills/jackin-release-notes/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add jackin-project/jackin-dev --skill jackin-release-notes -a cursor2Вручную: положить файлы
.cursor/skills/jackin-release-notes/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install jackin-project/jackin-dev jackin-release-notes2Вручную: положить файлы
.github/skills/jackin-release-notes/SKILL.md1Через Skills CLI (Vercel)
npx skills add jackin-project/jackin-dev --skill jackin-release-notes -a gemini-cli2Командой платформы
gemini skills install https://github.com/jackin-project/jackin-dev --path skills/jackin-release-notesВручную: положить файлы
.devin/skills/jackin-release-notes/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add jackin-project/jackin-dev --skill jackin-release-notes -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о jackin-release-notes
Как установить jackin-release-notes в Claude Code?
Выполните npx skills add jackin-project/jackin-dev --skill jackin-release-notes -a claude-code, затем проверьте файл ~/.claude/skills/jackin-release-notes/SKILL.md.
Что делает jackin-release-notes?
Скилл классифицирует каждый слитый после последнего тега PR и записывает секцию [Unreleased] в CHANGELOG.md. После этого он показывает результат для проверки.
Что произойдёт с PR без Conventional Commits-префикса?
Такой PR попадёт в категорию Changed. Скилл не исключает его из changelog.
Исходный текст
SKILL.md · Apache-2.0
---
name: jackin-release-notes
description: Use only when the user explicitly requests this skill. 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
license: Apache-2.0
user-invocable: true
---
# jackin-release-notes
**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.
## When to use
- Before a release, to populate the changelog.
- When the operator asks to preview what the next release would contain.
## When NOT to use
- Cutting the release itself → `jackin-release` (it runs this skill as its notes step).
## Process
1. **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.
2. **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.
3. **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.
4. **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.
5. **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.
6. **Present for review.** Show the section; let the operator re-classify or reword. Do not proceed to a release until approved.
## Idempotency
Safe to re-run: reads `CHANGELOG.md` fresh each time, asks before overwriting existing entries, fetches PR data live from GitHub.
## Common mistakes
- Dropping a PR that has no conventional-commit prefix — it defaults to **Changed**, never omitted.
- Listing an empty bucket ("no **Removed** entries" is noise — drop the section).
- Forgetting the PR link in each entry.
- Overwriting an operator-edited `[Unreleased]` without asking.
© jackin-project · Apache-2.0 · jackin-project/jackin-dev