Cutting A Release
TriliumNext/Trilium
A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.
A skill your agent uses when writing or curating the user-facing release copy for an Agent Sessions release — README "What's New", GitHub release notes, Sparkle release notes, or website/launch copy.
$ npx skills add jazzyalex/agent-sessions --skill release-notes -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jazzyalex/agent-sessions release-notes --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jazzyalex/agent-sessions.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release-notes .claude/skills/release-notes && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "release-notes" agent skill from https://github.com/jazzyalex/agent-sessions/tree/main/.claude/skills/release-notes into .claude/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jazzyalex/agent-sessions/tree/main/.claude/skills/release-notesType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jazzyalex/agent-sessions --skill release-notes -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jazzyalex/agent-sessions release-notes --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jazzyalex/agent-sessions.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/release-notes .agents/skills/release-notes && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "release-notes" agent skill from https://github.com/jazzyalex/agent-sessions/tree/main/.claude/skills/release-notes into .agents/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jazzyalex/agent-sessions --skill release-notes -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jazzyalex/agent-sessions release-notes --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jazzyalex/agent-sessions.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/release-notes .cursor/skills/release-notes && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "release-notes" agent skill from https://github.com/jazzyalex/agent-sessions/tree/main/.claude/skills/release-notes into .cursor/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jazzyalex/agent-sessions.git --path .claude/skills/release-notes--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jazzyalex/agent-sessions --skill release-notes -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jazzyalex/agent-sessions release-notes --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jazzyalex/agent-sessions.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/release-notes .gemini/skills/release-notes && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "release-notes" agent skill from https://github.com/jazzyalex/agent-sessions/tree/main/.claude/skills/release-notes into .gemini/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jazzyalex/agent-sessions release-notesInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jazzyalex/agent-sessions --skill release-notes -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jazzyalex/agent-sessions.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/release-notes .github/skills/release-notes && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "release-notes" agent skill from https://github.com/jazzyalex/agent-sessions/tree/main/.claude/skills/release-notes into .github/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jazzyalex/agent-sessions --skill release-notes -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jazzyalex/agent-sessions release-notes --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jazzyalex/agent-sessions.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/release-notes .opencode/skills/release-notes && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "release-notes" agent skill from https://github.com/jazzyalex/agent-sessions/tree/main/.claude/skills/release-notes into .opencode/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
release-notesA skill your agent uses when writing or curating the user-facing release copy for an Agent Sessions release — README "What's New", GitHub release notes, Sparkle release notes, or website/launch copy.
Release Notes is an agent skill from jazzyalex/agent-sessions. Use when writing or curating the user-facing release copy for an Agent Sessions release — README "What's New", GitHub release notes, Sparkle release notes, or website/launch copy. Not for the internal CHANGELOG, which stays a full development history.
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Changelog and release notes. It works with GitHub. The repository describes itself as: Local-first macOS app to browse, search, analyze, and resume supported AI coding-agent session history across Codex, Claude Code, OpenCode, Cursor Agent, Antigravity, Hermes… The licence is MIT.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 7711291. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown and dot).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Release Notes loads about 2.6k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 1,190 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jazzyalex/agent-sessions at commit 7711291, republished under its MIT licence (© jazzyalex). 1,190 words, ~2,629 tokens.
.claude/skills/release-notes/SKILL.md (or your agent's skills folder).These are two different documents with opposite jobs. Do not apply this skill to the first one.
CHANGELOG (docs/CHANGELOG.md) | Release notes (README "What's New", GitHub release, Sparkle, website) | |
|---|---|---|
| Audience | Internal / maintainers (but the curated top feeds users) | Users |
| Job | Working development history + a curated release section | The net change a user sees on update |
| Granularity | Granular bullets while in [Unreleased]; curated headings at release | Curated, collapsed, headline-first |
| This skill | Governs its curated section (Highlights/Features/Bug Fixes); leaves the granular working bullets alone | Governs all of it |
The CHANGELOG is both the source history and the origin of the derived notes — because the deploy tool generates Sparkle/GitHub notes from it (see "How the derived notes are generated"). While developing, [Unreleased] may hold flat granular bullets; that's fine. At release, you curate that section into structured headings by applying the rule below. Don't delete real history — demote it to ### Improvements. Everything below is the curation rule.
Release notes describe the net change from the last shipped release to this one — the delta a user actually experiences when they update. They are not a replay of the CHANGELOG, and not a log of the work done during the cycle.
Core principle: ship the destination, not the journey. A user who updates from X to Y never saw any intermediate state. Everything that was built, refined, redesigned, and fixed between X and Y and never shipped to them is invisible — and must stay invisible in the notes.
This is the single rule most release notes get wrong, because the author lists what they worked on (commits, effort) instead of what changed for the user (the diff between two shipped versions).
A change earns a line only if it is observable as a difference between the previous shipped release and this one.
Two direct consequences:
A feature that did not exist in the previous release collapses to one description. Every refinement, "redesign," layout pass, polish commit, and bug fix made to that feature during this cycle folds into the feature's description. The user never had the rough version, so there is nothing to "fix" or "redesign" from their point of view. List the feature once, as it ships.
A bug fix earns a line only if the broken behavior shipped in the previous release. If the bug was introduced and fixed within this cycle, the user never received it — drop it. Pre-release stabilization, validation fixes, and "fixed the thing we just built" are not user-facing bug fixes.
Violating the letter of this rule violates the spirit of it. "But we worked really hard on the runway toolbar" is effort, not a user-visible delta. Effort does not earn a line.
digraph earns_line {
"Change from git log / dev notes" [shape=box];
"Did the affected feature exist in the previous shipped release?" [shape=diamond];
"Is it a bug FIX?" [shape=diamond];
"Did the BROKEN behavior ship in the previous release?" [shape=diamond];
"Fold into the feature's single description" [shape=box];
"List as a Bug Fix" [shape=box];
"Drop it (user never saw it)" [shape=box];
"List as a New Feature" [shape=box];
"Change from git log / dev notes" -> "Did the affected feature exist in the previous shipped release?";
"Did the affected feature exist in the previous shipped release?" -> "Is it a bug FIX?" [label="yes"];
"Did the affected feature exist in the previous shipped release?" -> "New?" [label="no"];
"New?" [shape=diamond, label="Is this the feature's first ship?"];
"New?" -> "List as a New Feature" [label="the feature itself"];
"New?" -> "Fold into the feature's single description" [label="a refinement/fix to it"];
"Is it a bug FIX?" -> "Did the BROKEN behavior ship in the previous release?" [label="yes"];
"Is it a bug FIX?" -> "List as a New Feature" [label="no, it's an enhancement"];
"Did the BROKEN behavior ship in the previous release?" -> "List as a Bug Fix" [label="yes"];
"Did the BROKEN behavior ship in the previous release?" -> "Drop it (user never saw it)" [label="no"];
}To answer "did it exist in the previous release," read the previous release's own notes (CHANGELOG entry for the last tag) — not the current branch.
Group by impact, then by kind. Drop everything trivial or internal.
## 🚀 New Features
### Major — headline; the reasons someone updates
### Moderate — visible, welcome, not headline
## 🐞 Bug Fixes (only behavior that shipped broken in the previous release)
### Major — crashes, hangs, data loss, wrong results
### Moderate — visible glitches, papercutsRules for the body:
Cycle shipped a brand-new Session Runway feature. The git log held ~15 commits: add per-agent Claude runway, move runway controls into toolbar pills, refine runway controls, runway bars scale relatively, stabilize runway row presence, prefer Claude Desktop titles, etc.
Wrong (journey): a "Session Runway" feature bullet plus a separate "Quota Meter toolbar redesign" feature plus bug-fix lines for "bars no longer render full-width," "rows appear before samples," "row presence stabilized."
Right (destination): one bullet —
Session Runway — live per-session burn-rate bars showing which active Codex and Claude sessions are eating your plan and how long until reset.
The toolbar, the bars, the row behavior were never separate user experiences; they are how Session Runway ships. Zero bug-fix lines, because no user ever had the broken intermediate versions.
| Excuse | Reality |
|---|---|
| "We put a lot of work into the toolbar redesign" | Effort isn't a delta. The user only sees the final feature once. |
| "It was genuinely broken and we fixed it" | If the break never shipped, the user never saw it. Drop it. |
| "The CHANGELOG already lists all 30 bullets" | Correct — that's its job. The CHANGELOG is the granular source; you derive curated notes from it. Don't paste it into README/GitHub/Sparkle. |
| "It's a separate component, so a separate line" | Same-release sub-parts of a new feature collapse into that feature. |
| "Listing more shows how much we did" | Padding buries the headline and reads as churn. Fewer, truer lines land harder. |
| "It's technically a different subsystem" | The user doesn't see subsystems. Group by what they experience. |
All of these mean: collapse to the shipped delta, or drop.
The deploy tool generates the Sparkle and GitHub release notes from docs/CHANGELOG.md — it does not read the README or this conversation. It leads with the release section's ### Highlights, then ### Features / ### Bug Fixes, and summarizes the rest as "Other changes." So the curated net-change view has to live inside the CHANGELOG release section, in the established heading structure:
## [X.Y] - YYYY-MM-DD
### Highlights ← 1–4 curated headliners; the reasons to update. Sparkle/GitHub LEAD with these.
### Features ← curated new features (Iron Rule applied — one line per feature)
### Bug Fixes ← ONLY behavior that shipped broken in the previous release
### Improvements ← secondary user-visible deltas that didn't earn a headlineThat is how the CHANGELOG stays the source and yields correct derived notes:
[Unreleased] may accumulate flat granular bullets. Leave them; that's the working history.[Unreleased] into the headings above by applying the Iron Rule: collapse each new feature's refinements/fixes into one ### Features line, keep only previously-shipped breakage in ### Bug Fixes, move secondary deltas to ### Improvements, and drop pure internal churn (tests, refactors, merges, pre-release fixes). Demote — don't delete — real history you want to keep.### Highlights + ### Features content. They must not diverge from what the generator emits.If the generated Sparkle preview leads with the wrong thing, lists pre-release fixes, or buries the headline — fix the CHANGELOG section's ### Highlights/### Bug Fixes, not the preview. The preview is a mirror of the section; edit the source.
The deploy skill owns the mechanics — the Sparkle approval gate, appcast, GitHub release, README/website copy locations. Its Sparkle gate enforces a subset of this rule ("don't list pre-release fixes users never received"); this skill is the full method for deciding what survives and for shaping the CHANGELOG section the generator consumes.
© jazzyalex, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/release-notes of jazzyalex/agent-sessions.
Open the folder on GitHubat commit 7711291
Release Notes next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Release Notes this skilljazzyalex/agent-sessions | 893 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Cutting A ReleaseTriliumNext/Trilium | 38k | — | ~3.2k | Automated safety check: Pass | AGPL-3.0 | |
| Mole CLI Release Flowtw93/Mole | 70k | — | ~2.5k | Automated safety check: Pass | GPL-3.0 | |
| Draft Release Notesjamiepine/voicebox | 57k | — | ~941 | Automated safety check: Pass | MIT | |
| Mole Release Notes Publishertw93/Mole | 70k | — | ~1.9k | Automated safety check: Pass | GPL-3.0 | |
| Release Bumpjamiepine/voicebox | 57k | — | ~1.1k | Automated safety check: Pass | MIT |
TriliumNext/Trilium
A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.
tw93/Mole
Runbook for assessing and executing a Mole CLI release: distribution channels, pre-flight checks, capital-V tags, build artifacts and the handoff to curated release notes.
jamiepine/voicebox
Writes or refreshes the Unreleased section of CHANGELOG.md as a themed narrative built from the commits, PRs and diff since the last version tag.
tw93/Mole
Publishes curated, bilingual release notes for an existing Mole version tag with gh release edit, including contributor thanks and reactions, after the release workflow finishes.
jamiepine/voicebox
Ends a release cycle by moving the Unreleased changelog notes under a dated version heading, bumping version files with bumpversion and tagging the commit.
jfernandez/bpftop
Cut a new versioned release of bpftop — pick the version, open a version-bump PR, sign-tag the merge commit on main, and draft GitHub release notes in the project's established format.
jazzyalex/agent-sessions
Capture deterministic macOS screenshots for testing, docs, release notes, and marketing assets.
jazzyalex/agent-sessions
Create and ship AgentSessions support for a new or changed local AI agent/provider.
jazzyalex/agent-sessions
A skill your agent uses when shipping a release of Agent Sessions — bumping version, updating CHANGELOG, building, signing, notarizing, publishing appcast, and creating a GitHub release.
jazzyalex/agent-sessions
Release/deploy workflow for Agent Sessions (Sparkle appcast + GitHub release).
jazzyalex/agent-sessions
Maintain Agent Sessions agent support matrix and JSON/JSONL parsing compatibility.
jazzyalex/agent-sessions
Verify agent session format compatibility for Agent Sessions.
Works with
Categories
A skill your agent uses when writing or curating the user-facing release copy for an Agent Sessions release — README "What's New", GitHub release notes, Sparkle release notes, or website/launch copy. Release Notes is an agent skill from jazzyalex/agent-sessions. Use when writing or curating the user-facing release copy for an Agent Sessions release — README "What's New", GitHub release notes, Sparkle release notes, or website/launch copy.
Release Notes fits situations like: curating the user-facing release copy for an Agent Sessions release — README Whats New; GitHub release notes; sparkle release notes; website/launch copy.
Run `npx skills add jazzyalex/agent-sessions --skill release-notes -a claude-code`. Or copy the skill folder (.claude/skills/release-notes in jazzyalex/agent-sessions) into .claude/skills/release-notes in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jazzyalex/agent-sessions --skill release-notes -a codex`. Or copy the skill folder (.claude/skills/release-notes in jazzyalex/agent-sessions) into .agents/skills/release-notes in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jazzyalex/agent-sessions --skill release-notes -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release-notes, .gemini/skills/release-notes, .github/skills/release-notes and .opencode/skills/release-notes in your project.
SKILL.md names no scripts, command-line tools or credentials: Release Notes is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Release Notes is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Release Notes: Cutting A Release (TriliumNext/Trilium, 38k stars), Mole CLI Release Flow (tw93/Mole, 70k stars), Draft Release Notes (jamiepine/voicebox, 57k stars) and Mole Release Notes Publisher (tw93/Mole, 70k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jazzyalex (a GitHub user) maintains it in jazzyalex/agent-sessions, which has 893 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 8, 2026.
Source: jazzyalex/agent-sessions on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.