Agent skill

Make Release

by atgreen in atgreen/Whistler

Cut a new Whistler release. An agent skill from atgreen/Whistler.

MITAuto-check: notesDevelopment

Install Make Release

skills CLI
$ npx skills add atgreen/Whistler --skill make-release -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install atgreen/Whistler make-release --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
make-release
GitHub stars
101
Token cost
~1.6k tokens
SKILL.md length
694 words
Files
1
Skills in repo
2
Repo updated
First seen
Licence
MIT

At a glance

Cut a new Whistler release. An agent skill from atgreen/Whistler.

  • Works in 8 steps: Anchor at the repo root → Determine version → Update version → …
  • Asked to release
  • SKILL.md covers 0. Anchor at the repo root, 1. Determine version, 2. Update version and 3. Verify all examples compile, plus 4 more sections
  • Calls git, make and gh

What it does

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.

When your agent uses it

  • Asked to release
  • Tag a new version

Example prompts

  • “release”
  • “cut a release”
  • “bump version”
  • “/make-release”

Requirements

  • Pre-approved tools (allowed-tools): Bash, Read, Edit, Write, Grep, Glob

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Anchor at the repo root
  2. Determine version
  3. Update version
  4. Verify all examples compile
  5. Run the test suite
  6. Add a CHANGELOG entry
  7. Commit
  8. Tag and push

What it can do on your machine

Read from SKILL.md and the folder at commit efb7cae. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • Read
    • Edit
    • Write
    • Grep
    • Glob

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • make
    • gh

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~61
When it runs · the whole SKILL.md, loaded when a task matches
~1.6k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, Read, Edit, Write, Grep, Glob

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.

SKILL.md

The full file from atgreen/Whistler at commit efb7cae, republished under its MIT licence (© atgreen). 694 words, ~1,650 tokens.

Download SKILL.mdSave it as .claude/skills/make-release/SKILL.md (or your agent's skills folder).
name
make-release
description
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".
allowed-tools
Bash, Read, Edit, Write, Grep, Glob
argument-hint
[version]
disable-model-invocation
true

Release Whistler

Follow these steps exactly, stopping on any failure.

0. Anchor at the repo root

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:

bash
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.

1. Determine version

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:

  1. Read the current version from :version in whistler.asd.
  2. Review commits since the last tag:
    bash
    git log $(git describe --tags --abbrev=0)..HEAD --oneline
  3. Apply semver rules:
    • MAJOR bump: commits contain breaking changes (removed features, changed APIs, incompatible behavior)
    • MINOR bump: commits add new features, new surface-language forms, new loader capabilities
    • PATCH bump: commits are only bug fixes, documentation, or internal improvements
  4. Present the suggested version with a one-line rationale and ask the user to confirm or override.

Use the confirmed version as VERSION for all subsequent steps.

Check the tag doesn't already exist:

bash
git tag -l "vVERSION"

If output is non-empty, stop — this version has already been released.

Ensure clean working tree:

bash
git status --porcelain

If 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:

bash
git config user.email

If 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:

bash
git branch --show-current
git fetch origin main
git rev-list HEAD..origin/main --count

If the branch is not main, or there are upstream commits not yet pulled, stop and tell the user.

Check CI is green on HEAD:

bash
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.

2. Update version

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.

Show full SKILL.md (301 more words)Show less

3. Verify all examples compile

make clean && make 2>&1 | tail -3

Run 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.

bash
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
done

If any example fails to compile, stop and report the failure. Do NOT continue.

4. Run the test suite

bash
XDG_CACHE_HOME=/tmp/.cache make test

Then 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:

bash
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.

5. Add a CHANGELOG entry

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:

bash
git log $(git describe --tags --abbrev=0)..HEAD --oneline

Include ONLY user-facing changes:

  • Bug fixes
  • New features
  • Breaking changes (if any)

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.

6. Commit

bash
git add whistler.asd CHANGELOG.md
git commit -m "Bump version to VERSION"

7. Tag and push

Ask the user for confirmation before pushing, then:

bash
git tag -s vVERSION -m "Release VERSION"
git push origin main
git push origin vVERSION

Pushing 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

Files

Just SKILL.md in .claude/skills/make-release of atgreen/Whistler.

Open the folder on GitHubat commit efb7cae

Compare with similar skills

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.

Make Release compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Make Release this skillatgreen/Whistler101—~1.6kAutomated safety check: NotesMIT
React Router Release Notes Prepremix-run/react-router57k—~1.1kAutomated safety check: PassMIT
Draft Release Notesjamiepine/voicebox57k—~941Automated safety check: PassMIT
Mole Release Notes Publishertw93/Mole70k—~1.9kAutomated safety check: PassGPL-3.0
Release Bumpjamiepine/voicebox57k—~1.1kAutomated safety check: PassMIT
Git Workflow and Versioningaddyosmani/agent-skills103k2 repos~3.5kAutomated safety check: NotesMIT

Similar skills

  • 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.

    57k GitHub stars~1.1k tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Draft 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.

    57k GitHub stars~941 tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • 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.

    70k GitHub stars~1.9k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Release Bump

    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.

    57k GitHub stars~1.1k tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Git Workflow and Versioning

    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.

    103k GitHub starsUsed in 2 repos~3.5k tokens
    DevelopmentAuto-check: notes
  • 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.

    18k GitHub stars~1.9k tokensUpdated 2 days ago
    DevelopmentAuto-check passed

More from atgreen/Whistler

  • Grind

    atgreen/Whistler

    Whistler-local autonomous work loop. An agent skill from atgreen/Whistler.

    101 GitHub stars~2.4k tokensUpdated 22 days ago
    Auto-check passed

Works with

Categories

Questions about Make Release

What does Make Release do?

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.

When should I use Make Release?

Make Release fits situations like: asked to release; tag a new version.

How do I install Make Release in Claude Code?

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.

How do I install Make Release in Codex?

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.

Can I use Make Release in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Make Release need to run?

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.

Does Make Release access the network?

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.

Is Make Release safe to install?

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.

What licence does Make Release use?

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.

How many tokens does Make Release use?

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.

What are the alternatives to Make Release?

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.

Who maintains Make Release?

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.