nvidia/aicr-release-notes
| Use when drafting the human-readable GitHub release notes summary for an upcoming AICR release. Triggers on "release notes", "draft release notes", "/aicr-release-notes", or any request to summarize commits since the last tag into a polished release announcement. Runs tools/changelog, groups commits into thematic highlights, mirrors the style of the previous release, and writes a Markdown draft to a temp file for hand-editing before publishing.
npx skills add https://github.com/NVIDIA/aicr --skill aicr-release-notes
Generates the user-facing release notes summary that goes into the GitHub
Releases body (e.g. <https://github.com/NVIDIA/aicr/releases/tag/v0.13.0>),
NOT the raw tools/changelog commit list that already appears below the
summary. Output is a draft — the author hand-edits before publishing.
/aicr-release-notesDo NOT use this skill to publish a release, push a tag, or edit
CHANGELOG.md. It only writes a Markdown draft to a temp file.
tools/changelog is the single source of truth for:
and prints [MSG] Changes since vX.Y.Z to stderr).
by @handle at the end of each line).
Do NOT re-derive any of this with separate git log, gh api, or
gh pr list calls. If tools/changelog doesn't surface it, it
doesn't belong in the summary.
No optional input is needed. Do not ask for or guess the target tag —
the filename is fixed (see Step 5) and the body never names the new
tag (GitHub renders the tag in the release header).
Run in parallel:
# Commit list since last stable tag — single source of truth
tools/changelog
# Previous release body for style mirroring (use the tag from
# tools/changelog's "[MSG] Changes since vX.Y.Z" stderr line)
gh release view <previous-tag> --json body --jq '.body'
If tools/changelog errors ("No release tags found", empty output),
stop and ask the user how to proceed — do not invent a range.
Read every line of tools/changelog output. Group by **user-visible
impact**, NOT by conventional-commit scope. The goal is a release-notes
narrative, not a mirror of git log. Useful theme buckets, in rough
priority order:
(often a new command, a new deployer, a new contract). Open paragraph
should name 3–4 of these inline as bolded phrases.
new mixins. Use a bulleted sub-list when there are 3+.
trust: BOM, SBOM, signing, evidence verification, conformance.
unification.
Exclude from the narrative (they still appear in the raw changelog
below the summary on the GitHub release page):
deps: bumps and Renovate/Dependabot linesis a public API surface change worth flagging (e.g. "Per-Builder
DataProvider isolation" got a mention because it's a contract change
for embedders of pkg/client/v1 / pkg/aicr)
Match the exact structure of the previous release. Required sections, in
order:
…, …, …, and …." Each major theme is bolded inline. No
heading above it.
### Highlights — heading exactly as written.Theme Name blocks — each starts with bolded title, em dash( — , with spaces), then 1–3 sentences OR a bulleted sub-list.
Use sub-lists when enumerating 3+ concrete items (e.g. recipes added).
@mchmarny.` Alphabetical (case-insensitive) by handle, with
@mchmarny moved to the final position preceded by and .
Style rules drawn from prior releases:
NVIDIA/aicr#NNNform, NOT a bare #NNN.
aicr validate , aicr evidence verify . — ) not hyphens for the inline definition pattern.(GitHub adds those automatically).
in the summary, not counting the auto-appended changelog).
The thanks line comes entirely from the by @handle
annotations already present in tools/changelog output. Extract every
unique @handle with a simple grep/awk over the changelog text:
tools/changelog 2>/dev/null \
| grep -oE 'by \[@[^]]+\]' \
| sed -E 's/by \[@//; s/\]$//' \
| sort -uf \
| grep -viE '\[bot$'
Note the [^]]+ capture stops at the FIRST ], so handles like
dependabot[bot] come out as dependabot[bot (no trailing ]). The
final grep -viE '\[bot$' accounts for this — do NOT change it to
'\[bot\]$' or bots will leak into the thanks line.
Then:
[bot after extraction (bot accounts:dependabot[bot], github-actions[bot], renovate[bot],
copy-pr-bot, etc.).
mchmarny to the final slot preceded by and .Write to $TMPDIR/aicr-release-notes.md — fixed filename, no version
suffix. Do NOT write under the repo tree — this is a hand-edit draft,
not a checked-in artifact. Overwrite any prior draft at that path.
**Append an "Unresolved questions for hand-edit" section at the bottom
of the file**, separated from the credits line by a horizontal rule
(---). The author edits the file directly, so questions belong in
the file, not in chat. Typical content:
bump be promoted to a highlight?")
completeness, prior-release framing)
Format the section as:
---
## Unresolved questions for hand-edit
1. **<topic>** — <one-or-two sentence note explaining the call to make>
2. **<topic>** — <…>
This section is for the author's eyes only and gets deleted before
publishing.
After writing, print to chat:
bash block: pbcopy < <absolute-path>. The user copies that line,
runs it, and pastes into the GitHub release form. Do not print the
bare path on a separate line — the pbcopy form is the path.
can quickly tell if you missed something).
Do NOT cat the full draft back into chat — the user will open the file
directly. Do NOT print the unresolved questions separately — they are
already in the file.
The structure to mirror, with placeholders:
This release focuses on <theme-1-bolded>, <theme-2-bolded>, <theme-3-bolded>, and <theme-4-bolded>.
### Highlights
**<Theme 1 Title>** — <1–3 sentence narrative explaining what shipped and
why it matters to a user. Reference commands in backticks. Link issues as
[NVIDIA/aicr#NNN](https://github.com/NVIDIA/aicr/issues/NNN).>
**<Theme 2 Title>** — <narrative>
**<Theme with enumerated items>**
* <Concrete item 1>
* <Concrete item 2>
* <Concrete item 3>
**Other Improvements**
* <Leftover user-visible win 1>
* <Leftover user-visible win 2>
**<Supply Chain or Trust Theme>** — <narrative>
***Thanks to*** @alice, @bob, @carol, and @mchmarny.
tools/changelog is empty — likely the tag already exists orLAST_TAG..HEAD is empty. Ask the user which range to summarize.
gh release view fails — the previous tag may not have a releaseyet. Fall back to reading the README's recent-releases section or
ask the user to point at a reference release for style.
tools/changelog onlyreads git history. No need to stash.
git tag or push tagsCHANGELOG.md or any in-repo fileoutside of tools/changelog output
Take nvidia/aicr-release-notes from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.