React Router Release Notes Prep
remix-run/react-router
Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.
Cut a new Whistler release. An agent skill from atgreen/Whistler.
$ npx skills add atgreen/Whistler --skill make-release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install atgreen/Whistler make-release --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/atgreen/Whistler.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/make-release .claude/skills/make-release && 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 "make-release" agent skill from https://github.com/atgreen/Whistler/tree/main/.claude/skills/make-release into .claude/skills/make-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "make-release", 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/atgreen/Whistler/tree/main/.claude/skills/make-releaseType 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 atgreen/Whistler --skill make-release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install atgreen/Whistler make-release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/atgreen/Whistler.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/make-release .agents/skills/make-release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "make-release" agent skill from https://github.com/atgreen/Whistler/tree/main/.claude/skills/make-release into .agents/skills/make-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "make-release", 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 atgreen/Whistler --skill make-release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install atgreen/Whistler make-release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/atgreen/Whistler.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/make-release .cursor/skills/make-release && 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 "make-release" agent skill from https://github.com/atgreen/Whistler/tree/main/.claude/skills/make-release into .cursor/skills/make-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "make-release", 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/atgreen/Whistler.git --path .claude/skills/make-release--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 atgreen/Whistler --skill make-release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install atgreen/Whistler make-release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/atgreen/Whistler.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/make-release .gemini/skills/make-release && 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 "make-release" agent skill from https://github.com/atgreen/Whistler/tree/main/.claude/skills/make-release into .gemini/skills/make-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "make-release", 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 atgreen/Whistler make-releaseInstalls 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 atgreen/Whistler --skill make-release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/atgreen/Whistler.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/make-release .github/skills/make-release && 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 "make-release" agent skill from https://github.com/atgreen/Whistler/tree/main/.claude/skills/make-release into .github/skills/make-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "make-release", 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 atgreen/Whistler --skill make-release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install atgreen/Whistler make-release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/atgreen/Whistler.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/make-release .opencode/skills/make-release && 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 "make-release" agent skill from https://github.com/atgreen/Whistler/tree/main/.claude/skills/make-release into .opencode/skills/make-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "make-release", 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.
make-releaseCut a new Whistler release. An agent skill from atgreen/Whistler.
Make Release is an agent skill from atgreen/Whistler. Cut a new Whistler release. Bumps the version in whistler.asd, verifies all examples compile, generates release notes, commits, tags, and pushes. Use when asked to "release", "cut a release", "bump version", or "tag a new version".
Its SKILL.md is about 1.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 Git. The repository describes itself as: A lisp that compiles to eBPF. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit efb7cae. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadEditWriteGrepGlobFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitmakeghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.
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.
Make Release loads about 1.6k tokens when it runs. Until then it costs about 61 tokens; SKILL.md has 694 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 noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash, Read, Edit, Write, Grep, GlobAutomated 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 atgreen/Whistler at commit efb7cae, republished under its MIT licence (© atgreen). 694 words, ~1,650 tokens.
.claude/skills/make-release/SKILL.md (or your agent's skills folder).Follow these steps exactly, stopping on any failure.
Every subsequent shell command assumes the current directory is the
top of the Whistler checkout. If the slash command was invoked from
elsewhere, make and the examples/ lookups fail. Do this once at
the start:
cd "$(git -C "$CLAUDE_PROJECT_DIR" rev-parse --show-toplevel 2>/dev/null \
|| git rev-parse --show-toplevel)"If that fails (not inside a git repo at all), stop and ask the user to run the command from inside the Whistler checkout.
If the user provided a version ($ARGUMENTS), validate that it matches MAJOR.MINOR.PATCH where each component is a non-negative integer (e.g. 1.7.0). If it doesn't, stop and tell the user.
If no version was provided, suggest one:
:version in whistler.asd.git log $(git describe --tags --abbrev=0)..HEAD --onelineUse the confirmed version as VERSION for all subsequent steps.
Check the tag doesn't already exist:
git tag -l "vVERSION"If output is non-empty, stop — this version has already been released.
Ensure clean working tree:
git status --porcelainIf there are staged or unstaged changes to tracked files, stop and ask the user to commit or stash first.
Then check untracked files. If any look like they don't belong in the repo (log files, binaries, build artifacts, temp files, editor backups, etc.), list them and ask the user whether to clean up, add to .gitignore, or proceed anyway. Benign untracked files (e.g. .claude/, local config) are fine to ignore silently.
Verify git identity:
git config user.emailIf the result is not green@moxielogic.com, stop and tell the user their git email is misconfigured for this repository.
Ensure we're on main and synced with remote:
git branch --show-current
git fetch origin main
git rev-list HEAD..origin/main --countIf the branch is not main, or there are upstream commits not yet pulled, stop and tell the user.
Check CI is green on HEAD:
gh run list --branch main --limit 1 --json conclusion --jq '.[0].conclusion'If the result is not success, stop and warn the user that CI is failing on main. Ask whether to proceed anyway.
Edit whistler.asd and set every :version "…" line to VERSION.
There are five — one per defsystem (whistler, whistler/loader,
whistler/cli, whistler/symbolize, whistler/bpftrace). They must
stay aligned.
make clean && make 2>&1 | tail -3Run each example through the compiler:
Only the examples that define a program with defprog can be compiled
this way. The rest — cgroup-skb-session, ffi-call-tracker,
fork-tracker — are with-bpf-session programs that compile and load
BPF as they run, so compile-file* finds nothing in them to compile and
loading them would try to attach to the live kernel. Skip those.
Note the registry path must be absolute: a relative #P"." makes ASDF
fail to resolve any system at all, which looks like every example
failing at once.
ROOT=$(pwd)
for f in examples/*.lisp; do
grep -q '^(defprog' "$f" || { echo "skip $f (session-style, no defprog)"; continue; }
echo "Compiling $f ..."
sbcl --noinform --non-interactive \
--eval '(require :asdf)' \
--eval "(push #P\"$ROOT/\" asdf:*central-registry*)" \
--eval '(asdf:load-system "whistler")' \
--eval "(whistler::compile-file* \"$f\" \"/tmp/$(basename "$f" .lisp).bpf.o\")" \
2>&1
doneIf any example fails to compile, stop and report the failure. Do NOT continue.
XDG_CACHE_HOME=/tmp/.cache make testThen run it again against an SBCL carrying the BPF capabilities, since
the default sbcl on PATH may not have them and silently skips every
kernel-load assertion — precisely the ones that matter for a codegen
release:
XDG_CACHE_HOME=/tmp/.cache make test SBCL=/usr/bin/sbcl
XDG_CACHE_HOME=/tmp/.cache SBCL=/usr/bin/sbcl \
sbcl --noinform --non-interactive \
--eval '(require :asdf)' --eval "(push #P\"$(pwd)/\" asdf:*central-registry*)" \
--eval '(asdf:load-system "whistler/tests")' \
--eval '(unless (fiveam:run! (quote whistler/tests::torture-suite)) (uiop:quit 1))'The second run should report noticeably more checks than the first. If it reports the same number, the capabilities are missing and the kernel-load coverage did not actually run.
If any tests fail, stop and report the failure. Do NOT continue.
Prepend a new section to CHANGELOG.md directly under the top-level
heading. Format:
## VERSION — YYYY-MM-DD
### New Features
...
### Bug Fixes
...Use today's date. To decide what goes in the section, diff against the most recent tag:
git log $(git describe --tags --abbrev=0)..HEAD --onelineInclude ONLY user-facing changes:
Do NOT include internal changes (refactors, lint fixes, doc updates, CI changes, directory reorganization). Those are visible in the git log for anyone who needs them.
Match the voice and heading style of previous entries already in CHANGELOG.md.
git add whistler.asd CHANGELOG.md
git commit -m "Bump version to VERSION"Ask the user for confirmation before pushing, then:
git tag -s vVERSION -m "Release VERSION"
git push origin main
git push origin vVERSIONPushing the tag triggers GitHub Actions which automatically builds the binary, creates the GitHub release, and attaches the artifact.
© atgreen, 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/make-release of atgreen/Whistler.
Open the folder on GitHubat commit efb7cae
Make Release 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 |
|---|---|---|---|---|---|---|
| Make Release this skillatgreen/Whistler | 101 | — | ~1.6k | Automated safety check: Notes | MIT | |
| React Router Release Notes Prepremix-run/react-router | 57k | — | ~1.1k | Automated safety check: Pass | MIT | |
| 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 | |
| Git Workflow and Versioningaddyosmani/agent-skills | 103k | 2 repos | ~3.5k | Automated safety check: Notes | MIT |
remix-run/react-router
Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.
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.
addyosmani/agent-skills
Sets git habits for every change: short-lived branches, atomic commits with descriptive messages, clean pull requests, plus versioning, tagging and changelogs for releases.
verdaccio/verdaccio
Takes a change through a verdaccio pull request: branch, local checks, changeset, title and body, labels, CI and review rounds, and ports to other release lines.
atgreen/Whistler
Whistler-local autonomous work loop. An agent skill from atgreen/Whistler.
Works with
Categories
Cut a new Whistler release. An agent skill from atgreen/Whistler. Make Release is an agent skill from atgreen/Whistler. Cut a new Whistler release.
Make Release fits situations like: asked to release; tag a new version.
Run `npx skills add atgreen/Whistler --skill make-release -a claude-code`. Or copy the skill folder (.claude/skills/make-release in atgreen/Whistler) into .claude/skills/make-release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add atgreen/Whistler --skill make-release -a codex`. Or copy the skill folder (.claude/skills/make-release in atgreen/Whistler) into .agents/skills/make-release 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 atgreen/Whistler --skill make-release -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/make-release, .gemini/skills/make-release, .github/skills/make-release and .opencode/skills/make-release in your project.
Going by SKILL.md and its folder, Make Release needs the command-line tools its instructions call (git, make and gh). Its frontmatter pre-approves these tools: Bash, Read, Edit, Write, Grep, Glob.
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Make Release is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.6k tokens (SKILL.md is roughly 6.6k 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 Make Release: React Router Release Notes Prep (remix-run/react-router, 57k stars), Draft Release Notes (jamiepine/voicebox, 57k stars), Mole Release Notes Publisher (tw93/Mole, 70k stars) and Release Bump (jamiepine/voicebox, 57k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
atgreen (a GitHub user) maintains it in atgreen/Whistler, which has 101 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on September 16, 2026.
Source: atgreen/Whistler on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.