Skip to content
Back to skills

Release

ASecurity

Maintainer-only release of StreamSnow, driven by scripts/release.py. Subcommands are prepare <X.Y.Z> (bump, close the changelog, commit, run the gates, open the release PR), tag <X.Y.Z> (after the PR merges, tag the release commit so PyPI publishes, then create the GitHub Release) and verify <X.Y.Z> (check the publish landed). suggest recommends a version.

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 7, 2026
datapythonbashgit

Security analysis

A100/100

Scanned October 7, 2026

npx -y skills add kyle-chalmers/streamsnow --skill release --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Release?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Release
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kyle-chalmers-release/badge)](https://www.skillsdirectory.com/skills/kyle-chalmers-release)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: release
description: Maintainer-only release of StreamSnow, driven by scripts/release.py. Subcommands are prepare <X.Y.Z> (bump, close the changelog, commit, run the gates, open the release PR), tag <X.Y.Z> (after the PR merges, tag the release commit so PyPI publishes, then create the GitHub Release) and verify <X.Y.Z> (check the publish landed). suggest recommends a version.
argument-hint: "prepare|tag|verify|suggest <X.Y.Z>"
model: haiku
disable-model-invocation: true
allowed-tools: ["Bash(uv run python scripts/release.py suggest)", "Bash(uv run python scripts/release.py prepare *)", "Bash(uv run python scripts/release.py open-pr *)", "Bash(uv run python scripts/release.py gates *)", "Bash(uv run python scripts/release.py verify *)", "Bash(git status *)", "Bash(git fetch origin)", "Bash(git switch -c claude/release-* origin/main)"]
---

# /release

You run exact commands and report their output. The script makes every decision.
RELEASING.md is the source of truth for the procedure; this skill only drives the script.
This skill is the maintainer-sanctioned exception to the rule in `.claude/CLAUDE.md` that
puts tags and releases off-limits for agents, and only through scripts/release.py.
The one step that cannot be undone (the tag push that publishes to PyPI) needs two
confirmations: the maintainer typing `/release tag X.Y.Z`, and approving the permission
prompt for the `tag` command, which this skill deliberately does not pre-approve.

## Rules

1. Run the commands below exactly, in order, from the repo root.
2. If any command exits non-zero, stop. Show its output verbatim and do nothing else.
3. Never edit files by hand. Never skip, retry around or work around a failing gate.
4. Never run `git push`, `git commit`, `git tag`, `gh pr`, `gh release` or `uv publish` except through the script.
5. Never pick the version. If the user gave none, run `suggest`, show its output, and ask.
6. Never wait for or poll CI. Report and stop.
7. Never pass `--allow-no-denylist` (it exists only on `tag`) unless the maintainer explicitly asks for it.

## suggest

1. `uv run python scripts/release.py suggest`
2. Show the output verbatim and ask the user which version to release.

## prepare X.Y.Z

1. `git status --porcelain`. If it prints anything, stop and ask the user to commit or stash.
2. `git fetch origin`
3. `git switch -c claude/release-X.Y.Z origin/main`
4. Ask the user: "Do the generated workflows now call a command added since the last
   release? If yes I will pass --pin-floor." Use their answer.
5. `uv run python scripts/release.py prepare X.Y.Z` (add `--pin-floor` if they said yes).
   Show the output verbatim, including its checklist, and ask the user to confirm they
   have done each checklist item. Wait for their yes.
6. `uv run python scripts/release.py open-pr X.Y.Z --trailer "<line>"`, where `<line>` is
   the Co-Authored-By line from your own commit attribution instructions, copied verbatim.
   Leave out `--trailer` if you have none. If they said yes in step 4, also pass
   `--pin-floor-note "<the command they named>"`.
7. Show the output verbatim. On exit 0, tell the user: "Once this PR has merged, type
   `/release tag X.Y.Z`." Then stop.

## tag X.Y.Z

1. Tell the user: "Next you will see a permission prompt for the tag command. Approving it
   pushes the tag, which publishes to PyPI and cannot be undone."
2. `uv run python scripts/release.py tag X.Y.Z`. If the user denies the permission prompt,
   stop and say nothing was tagged.
3. Show the output verbatim. On exit 0, tell the user to run `/release verify X.Y.Z` in a
   few minutes. If it says to rerun with `--release-only`, tell the user that and stop; run
   `uv run python scripts/release.py tag X.Y.Z --release-only` only when they ask.

## verify X.Y.Z

1. `uv run python scripts/release.py verify X.Y.Z`
2. Show the output verbatim. Exit 3 means still publishing: tell the user to run
   `/release verify X.Y.Z` again later. Do not loop.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.