Agent skill

Release

by shaharia-lab in shaharia-lab/slackcli

Cut a new SlackCLI release end to end — survey commits since the last tag, recommend a SemVer bump, open the release issue, prepare the version bump and CHANGELOG promotion on a branch, open the…

MITAuto-check passedDevelopment

Install Release

skills CLI
$ npx skills add shaharia-lab/slackcli --skill release -a claude-code

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

GitHub CLI
$ gh skill install shaharia-lab/slackcli 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/shaharia-lab/slackcli.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release .claude/skills/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
release
GitHub stars
231
Token cost
~1.9k tokens
SKILL.md length
889 words
Files
1
Skills in repo
2
Repo updated
First seen
Licence
MIT

At a glance

Cut a new SlackCLI release end to end — survey commits since the last tag, recommend a SemVer bump, open the release issue, prepare the version bump and CHANGELOG promotion on a branch, open the…

  • Works in 8 steps: Survey what is being released → Recommend a version → Reconcile the CHANGELOG → …
  • Asked to create/cut/prepare a release
  • SKILL.md covers Hard constraints and Procedure
  • Calls git, gh and bun

What it does

Release is an agent skill from shaharia-lab/slackcli. Cut a new SlackCLI release end to end — survey commits since the last tag, recommend a SemVer bump, open the release issue, prepare the version bump and CHANGELOG promotion on a branch, open the linked PR, and after merge push the annotated tag that publishes binaries and updates the Homebrew tap. Use when asked to create/cut/prepare a release, bump the version, or ship what is on main.

Its SKILL.md is about 1.9k 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 Homebrew, Slack and TypeScript. The repository describes itself as: Slack CLI for humans and AI agents. Read, send, search and reply across one or many Slack workspaces from the terminal. No Slack app needed. The licence is MIT.

When your agent uses it

  • Asked to create/cut/prepare a release
  • Bump the version
  • Ship what is on main

Example prompts

  • “/release”

Workflow steps

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

  1. Survey what is being released
  2. Recommend a version
  3. Reconcile the CHANGELOG
  4. Open the release issue
  5. Prepare the branch
  6. Open the PR
  7. Gate before tagging
  8. Verify the release landed

What it can do on your machine

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

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • gh
    • bun

    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

Release loads about 1.9k tokens when it runs. Until then it costs about 99 tokens; SKILL.md has 889 words of instructions outside code blocks.

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

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 passed

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.

SKILL.md

The full file from shaharia-lab/slackcli at commit 0cf656d, republished under its MIT licence (© shaharia-lab). 889 words, ~1,866 tokens.

Download SKILL.mdSave it as .claude/skills/release/SKILL.md (or your agent's skills folder).
name
release
description
Cut a new SlackCLI release end to end — survey commits since the last tag, recommend a SemVer bump, open the release issue, prepare the version bump and CHANGELOG promotion on a branch, open the linked PR, and after merge push the annotated tag that publishes binaries and updates the Homebrew tap. Use when asked to create/cut/prepare a release, bump the version, or ship what is on main.

Cutting a SlackCLI release

A release is two separate things, in this order:

  1. A PR onto main that bumps package.json and promotes the CHANGELOG. Reversible.
  2. An annotated tag pushed to that merged commit. This is the irreversible, outward-facing step — release.yml builds and publishes public binaries, and force-updates the Homebrew tap at shaharia-lab/homebrew-tap.

Never do step 2 without explicit human confirmation. See Gate before tagging.

Hard constraints

These are the ways a release goes wrong. Check them, don't rediscover them.

  • release.yml fails when the tag disagrees with package.json (#82). The bump must be merged into main before the tag is pushed. Fixing it after the fact means bumping main and then deleting and re-pushing the tag.
  • main requires signed commits, with no bypass actors — an unsigned commit makes the PR unmergeable for anyone, including admins. Verify the release commit carries a signature.
  • The repository constitution in CLAUDE.md applies to the release PR too: it needs a linked GitHub issue carrying ready-for-pr before the PR is opened. pr-linked-issue.yml enforces the link as a required check.
  • main requires one approving review, and an agent cannot approve its own PR. So gh pr merge reports BLOCKED / REVIEW_REQUIRED even when every check is green. Unblocking it is the maintainer's decision, taken one of two ways — a review, or an explicit instruction to merge with --admin. Never pick --admin on your own initiative; surface the block and let the maintainer choose. dismiss_stale_reviews_on_push is on, so any push after an approval discards it — get the branch final before asking for review.
  • Pre-commit hooks block direct commits to main. Always work on a branch.
  • A merged PR does not guarantee a CHANGELOG entry. Reconcile commits against [Unreleased] yourself — the mrkdwn fix in #96 landed with no entry and had to be backfilled at v0.9.0.
  • bun may not be on PATH in a non-interactive shell. If bun is not found, use export PATH="$HOME/.bun/bin:$PATH".

Procedure

1. Survey what is being released
bash
git describe --tags --abbrev=0                     # last released tag
git log <last-tag>..HEAD --pretty=format:'%h %ad %s' --date=short
git diff <last-tag>..HEAD --stat

Separate user-facing commits (feat, fix, perf, anything changing CLI behaviour) from non-shipping ones (ci, chore, docs, dependency bumps). Only the first group justifies a release or drives the version.

Read the bodies of the user-facing commits — they carry the WHAT/WHY the changelog needs:

bash
git show <sha> --pretty=format:'%B' --stat
2. Recommend a version

Follow SemVer against the pre-1.0 convention this repo already uses:

  • New commands, new flags, newly accepted input formats → minor (0.8.0 → 0.9.0)
  • Bug fixes only → patch (0.8.0 → 0.8.1)

State the recommendation and the reasoning before acting on it. A behaviour change that only alters already-broken output is still a fix, not a breaking change.

3. Reconcile the CHANGELOG

Compare the user-facing commits from step 1 against the [Unreleased] section. Anything shipped but undocumented gets an entry written now, in the voice of the surrounding file: what changed, and why the user cares. Note deliberate behaviour changes explicitly.

4. Open the release issue

Required before the PR. Mirror the WHAT / WHY / HOW structure the repo uses (see #101, #111):

  • WHAT — cut release vX.Y.Z, bump package.json from A to B.
  • WHY — the user-facing changes on main that are not yet in a published build, each with its issue/PR number; the SemVer reasoning; the release.yml tag/version constraint (#82).
  • HOW — bump, promote the changelog, merge, push the annotated tag.
  • Optionally a Not included section naming open ready-for-pr issues deliberately deferred, so the omission reads as a decision.
bash
gh issue create --title "Release vX.Y.Z" --body-file <file> --label ready-for-pr
Show full SKILL.md (337 more words)Show less
5. Prepare the branch
bash
git checkout -b chore/release-vX.Y.Z
  • package.json: bump version.
  • CHANGELOG.md: insert a ## [X.Y.Z] - YYYY-MM-DD heading below ## [Unreleased], leaving [Unreleased] in place and empty, so the existing entries fall under the new version.

Verify before committing:

bash
bun run type-check
bun test

Both must be clean. Commit with Closes #<issue> in the body, then confirm the signature is present:

bash
git cat-file -p HEAD | grep -q gpgsig && echo signed

git log --show-signature may report the signature as unverified purely because gpg.ssh.allowedSignersFile is unset locally; that is a local verification gap, not an unsigned commit. GitHub is the authority — check-signatures on the PR reports the truth.

6. Open the PR
bash
gh pr create --base main --head chore/release-vX.Y.Z --title "chore: release vX.Y.Z" --body-file <file>

The body should carry: summary and the release.yml constraint, Included since <last-tag> listing the user-facing changes, Changes in this PR, the check results, the post-merge release steps, and Closes #<issue>.

Then wait for checks — gh pr checks <pr>. Check linked open issue, check-signatures, test, unit-tests and integration-tests must pass.

7. Gate before tagging

Stop here and ask the human to confirm the merge and tag. Everything up to this point is reversible; the tag is not — it publishes public binaries and rewrites the Homebrew formula.

The maintainer has to unblock the PR regardless — the branch ruleset requires a review the PR's own author cannot supply — so this gate costs nothing extra.

Once the maintainer has approved, or has explicitly asked for --admin:

bash
gh pr merge <pr> --squash        # add --admin only when explicitly instructed
git checkout main && git pull
git tag -a vX.Y.Z -m "Release vX.Y.Z"
git push origin vX.Y.Z

The tag must point at the merged bump commit. Tagging a commit where package.json still holds the old version fails verify-version immediately.

8. Verify the release landed
bash
gh run list --workflow=release.yml --limit 3
gh release view vX.Y.Z

Confirm all five binaries plus checksums.txt are attached (slackcli-linux, slackcli-linux-arm64, slackcli-macos, slackcli-macos-arm64, slackcli-windows.exe), and that update-homebrew succeeded. Then check the last job, announce-discord: it posts the release to the Shaharia Lab Discord and is non-blocking, so the run is green even when it failed — read the job's own result (gh run view <run-id> --json jobs --jq '.jobs[] | "\(.name): \(.conclusion) (\(.databaseId))"'). If it failed, re-run that job alone (gh run rerun --job <databaseId>, the id that query prints) or tell the maintainer the announcement is missing; it is skipped by design for a pre-release tag. Report the release URL.

© shaharia-lab, 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/release of shaharia-lab/slackcli.

Open the folder on GitHubat commit 0cf656d

Compare with similar skills

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.

Release compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Release this skillshaharia-lab/slackcli231—~1.9kAutomated safety check: PassMIT
Kanvibe Release Deployrookedsysc/kanvibe143—~12kAutomated safety check: NotesAGPL-3.0
Mole CLI Release Flowtw93/Mole70k—~2.6kAutomated safety check: PassGPL-3.0
Generate Release Notesteambit/bit18k—~2.2kAutomated safety check: PassCustom licence
Release Roundethereumjs/ethereumjs-monorepo2.8k—~2kAutomated safety check: PassNone
Releaseeugene1g/agent-safehouse2.1k—~3.5kAutomated safety check: PassApache-2.0

Similar skills

  • Kanvibe Release Deploy

    rookedsysc/kanvibe

    A skill your agent uses whenever releasing or deploying KanVibe desktop from a clean, up-to-date dev checkout: ask only for the target version and release-note approval, then let the AI update…

    143 GitHub stars~12k tokensUpdated today
    DevelopmentAuto-check: notes
  • 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.

    70k GitHub stars~2.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Generate comprehensive release notes for Bit from git commits and pull requests.

    18k GitHub stars~2.2k tokensUpdated today
    DevelopmentAuto-check passed
  • Release Round

    ethereumjs/ethereumjs-monorepo

    Runs a coordinated EthereumJS npm release round in six human-gated phases — intent and readiness, CHANGELOG, version bump, publish (human executes), post-publish verification, and announcements.

    2.8k GitHub stars~2k tokensUpdated 21 days ago
    DevelopmentAuto-check passed
  • Release

    eugene1g/agent-safehouse

    Run the local Agent Safehouse release flow: inspect commits since the last published release, propose the next SemVer version and changelog, present a dry-run for confirmation, then update…

    2.1k GitHub stars~3.5k tokensUpdated 9 days ago
    DevelopmentAuto-check passed
  • Release Digest

    Kiln-AI/Kiln

    Post a "what's changed since the last release" recap to the release Slack channel for final QA.

    5.2k GitHub stars~2.7k tokensUpdated today
    DevelopmentAuto-check passed

More from shaharia-lab/slackcli

  • Slackcli

    shaharia-lab/slackcli

    Read, send, search, and manage Slack workspaces with the slackcli binary.

    231 GitHub stars~1.6k tokensUpdated today
    Auto-check passed

Categories

Questions about Release

What does Release do?

Cut a new SlackCLI release end to end — survey commits since the last tag, recommend a SemVer bump, open the release issue, prepare the version bump and CHANGELOG promotion on a branch, open the…. Release is an agent skill from shaharia-lab/slackcli. Cut a new SlackCLI release end to end — survey commits since the last tag, recommend a SemVer bump, open the release issue, prepare the version bump and CHANGELOG promotion on a branch, open the linked PR, and after merge push the annotated tag that publishes binaries and updates the Homebrew tap.

When should I use Release?

Release fits situations like: asked to create/cut/prepare a release; bump the version; ship what is on main.

How do I install Release in Claude Code?

Run `npx skills add shaharia-lab/slackcli --skill release -a claude-code`. Or copy the skill folder (.claude/skills/release in shaharia-lab/slackcli) into .claude/skills/release in your project. Claude Code loads it when a task matches its description.

How do I install Release in Codex?

Run `npx skills add shaharia-lab/slackcli --skill release -a codex`. Or copy the skill folder (.claude/skills/release in shaharia-lab/slackcli) into .agents/skills/release in your project. Codex loads it when a task matches its description.

Can I use 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 shaharia-lab/slackcli --skill 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/release, .gemini/skills/release, .github/skills/release and .opencode/skills/release in your project.

What does Release need to run?

Going by SKILL.md and its folder, Release needs the command-line tools its instructions call (git, gh and bun).

Does 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 Release safe to install?

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.

What licence does Release use?

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 Release use?

About 1.9k tokens (SKILL.md is roughly 7.5k 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 Release?

Skills that share tags, products or a category with Release: Kanvibe Release Deploy (rookedsysc/kanvibe, 143 stars), Mole CLI Release Flow (tw93/Mole, 70k stars), Generate Release Notes (teambit/bit, 18k stars) and Release Round (ethereumjs/ethereumjs-monorepo, 2.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Release?

shaharia-lab (a GitHub organization) maintains it in shaharia-lab/slackcli, which has 231 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 9, 2026.

Source: shaharia-lab/slackcli on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.