Agent skill

Release

by vitorbaptista in vitorbaptista/shellshare

Cut a new shellshare release: pick the right semver version, run make release, watch CI, and write the narrative GitHub release notes.

Apache-2.0Auto-check passedDevelopment

Install Release

skills CLI
$ npx skills add vitorbaptista/shellshare --skill release -a claude-code

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

GitHub CLI
$ gh skill install vitorbaptista/shellshare 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/vitorbaptista/shellshare.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
227
Token cost
~2k tokens
SKILL.md length
959 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
Apache-2.0

At a glance

Cut a new shellshare release: pick the right semver version, run make release, watch CI, and write the narrative GitHub release notes.

  • Works in 5 steps: Confirm the ground is solid → Choose the version (this is the real work) → Cut it → …
  • Wants to release
  • SKILL.md covers How a release works here, Step 1 — Confirm the ground is…, Step 2 — Choose the version… and Step 3 — Cut it, plus 3 more sections
  • Calls make, git and gh

What it does

Release is an agent skill from vitorbaptista/shellshare. Cut a new shellshare release: pick the right semver version, run make release, watch CI, and write the narrative GitHub release notes. Use this whenever the user wants to release, ship a new version, cut a release, tag a release, bump the version, or publish — even if they just say "release this" or "ship it". The hard part is choosing major/minor/patch under shellshare's project-specific rule (major only when old CLI binaries break), so reach for this skill instead of guessing a version or running make release…

Its SKILL.md is about 2k 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: Live terminal broadcasts. The licence is Apache-2.0.

When your agent uses it

  • Wants to release
  • Ship a new version
  • Bump the version
  • Publish — even if they just say release this

Example prompts

  • “release this”
  • “ship it”
  • “/release”

Requirements

  • Docker

Workflow steps

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

  1. Confirm the ground is solid
  2. Choose the version (this is the real work)
  3. Cut it
  4. Watch CI
  5. Write the narrative release notes

What it can do on your machine

Read from SKILL.md and the folder at commit 1e94975. 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:

    • make
    • git
    • 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

Release loads about 2k tokens when it runs. Until then it costs about 134 tokens; SKILL.md has 959 words of instructions outside code blocks.

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

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 vitorbaptista/shellshare at commit 1e94975, republished under its Apache-2.0 licence (© vitorbaptista). 959 words, ~2,036 tokens.

Download SKILL.mdSave it as .claude/skills/release/SKILL.md (or your agent's skills folder).
name
release
description
Cut a new shellshare release: pick the right semver version, run `make release`, watch CI, and write the narrative GitHub release notes. Use this whenever the user wants to release, ship a new version, cut a release, tag a release, bump the version, or publish — even if they just say "release this" or "ship it". The hard part is choosing major/minor/patch under shellshare's project-specific rule (major only when old CLI binaries break), so reach for this skill instead of guessing a version or running `make release` blind.

Releasing shellshare

A release is one command — make release — but the command is the easy part. The two things that actually need judgment, and the reason this skill exists, are picking the right version number and writing the release notes. Get those right and everything else is automation.

How a release works here

make release runs scripts/release.sh, which bumps the version in Cargo.toml, refreshes Cargo.lock, commits chore: release vX.Y.Z, tags vX.Y.Z, and pushes both atomically. The tag push triggers .github/workflows/release.yml, which runs the full e2e suite, builds binaries for all four platforms, builds the Docker image, publishes to npm, and creates the GitHub release. You do not build or upload anything by hand.

The script refuses to run unless you're on main with a clean working tree, and it pulls --ff-only first. So the release itself is safe by construction — the risk isn't a broken command, it's shipping the wrong version number or thin release notes, both of which are hard to walk back once npm and the GitHub release are public.

Step 1 — Confirm the ground is solid

Run these and read them before anything else:

bash
git rev-parse --abbrev-ref HEAD        # must be main
git status --porcelain                 # must be empty
git fetch --tags origin && git log --oneline @{u}..HEAD   # must be empty (you're not ahead)
git describe --tags --abbrev=0         # the last released tag

If the branch isn't main or the tree is dirty, stop and surface that — don't try to work around release.sh's guards, they exist for good reason.

Step 2 — Choose the version (this is the real work)

Look at everything since the last tag:

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

shellshare does not follow textbook semver. The rule is specific and you must apply this one, not the generic one:

  • MAJOR (e.g. 3.3.0 → 4.0.0) — reserved for changes that break old shellshare CLI binaries talking to the ingest endpoint /ws/r/:room. That means a breaking change to src/cli/, the ingest handshake, the ack semantics, or the wire frame format in src/protocol.rs. Verify with:

    bash
    git diff "$LAST"..HEAD -- src/cli/ src/protocol.rs

    Breaking the viewer WebSocket protocol (/ws/v/r/:room), templates, or any server internals does NOT justify a major bump. Browsers always load the viewer page from the same server, so page and protocol ship in lockstep — there is no "old viewer" in the wild to break. A commit literally labeled BREAKING can still be a minor release if old CLIs keep working (this is exactly why the Socket.IO→raw-WebSocket viewer rework shipped as 3.3.0, not 4.0.0).

  • MINOR (e.g. 3.2.0 → 3.3.0) — any new user-facing capability that doesn't break old CLIs: a feat: commit, a new flag, a new subcommand, a new endpoint. Additive changes to the CLI count here too, even substantial ones (e2e encryption shipped as a minor because old binaries still broadcast fine with --disable-encryption semantics intact).

  • PATCH (e.g. 3.3.0 → 3.3.1) — the release contains only fixes, perf work, refactors, style, tests, docs, or chores. No new capability. This is what bare make release produces by default.

When in doubt between minor and patch, ask: "could a user do something new after upgrading?" Yes → minor. No → patch. When in doubt between major and minor, ask: "would someone's already-installed shellshare binary stop broadcasting against the new server?" Only a clear yes → major.

Worked examples from real history:

Since tagWhat landedChosenWhy
v3.2.0feat: ENV analytics label, feat: link analytics to rooms, viewer fan-out perf rework (Socket.IO removed)3.3.0 minorNew features; viewer rework breaks no CLI
v3.1.0feat: e2e encryption, feat: exec + --json, xterm.js viewer3.2.0 minorBig additive CLI features, old binaries still work
v2.0.6npm distribution, serve, WebSocket pipeline rebuild, master→main3.0.0 majorIngest protocol rebuilt on WebSockets — old CLIs broke

Decide the bump, then state your reasoning to the user in one or two sentences and name the proposed version. Because a release is public and effectively irreversible (npm + GitHub release + git tag), wait for the user to confirm the number before running anything. This is the one place to be sure rather than fast.

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

Step 3 — Cut it

For a patch (the default), bare make release is enough:

bash
make release

For a minor or major, pass the version explicitly:

bash
make release VERSION=3.4.0

The script prints a link to the running workflow when it's done pushing.

Step 4 — Watch CI

The tag triggers the full pipeline; e2e tests run before any binary is built, so a red suite stops the release cleanly. Follow it:

bash
gh run watch $(gh run list --workflow=release.yml --limit=1 --json databaseId -q '.[0].databaseId')

If e2e fails, the release doesn't publish — fix forward on main and cut a new patch; you can't reuse a tag. Tell the user if it goes red.

Step 5 — Write the narrative release notes

This is the second half of the job and easy to forget. CI creates the GitHub release with generate_release_notes: true, which produces only the mechanical ## What's Changed PR list and a Full Changelog link. Every good shellshare release has a hand-written narrative on top of that, and you add it after CI publishes.

The voice is for users, not contributors. Open with a single sentence naming the theme of the release, then 2–4 highlights, each led by an emoji and a bold phrase, each explaining the user-facing value — and folding any migration note inline rather than in a separate "breaking changes" section.

The shape (from v3.3.0 and v3.2.0):

markdown
<One sentence naming what this release is fundamentally about.>

⚡ **<Punchy lead>.** <What changed, in plain language, and why a user cares.
If there's a migration, say it right here: "point it at `/ws/v/r/:room`.">

🔒 **<Next highlight>.** <Same again. Keep it concrete — name the flag, the
command, the number ("6,000 viewers at 30fps").>

✨ **<A smaller third highlight>.** <Polish, rendering, UX wins go last.>

Match the emoji to the substance (⚡ perf/scale, 🔒 privacy/security, 🤖 scripting/agents, 📱 mobile, 📊 analytics, ✨ general polish). Don't pad to a fixed count — a focused two-highlight release reads better than a padded four.

Publish it by prepending your narrative above the auto-generated section, without clobbering the ## What's Changed list CI made:

bash
V=v3.4.0
BODY=$(gh release view "$V" --json body -q .body)
printf '%s\n\n%s' "$NARRATIVE" "$BODY" | gh release edit "$V" --notes-file -

Then show the user the final notes (gh release view $V --web) so they can tweak wording. The release is the public face of the version — it's worth the extra minute.

Quick reference

SituationVersionCommand
Only fixes/perf/chore since last tagpatchmake release
New flag / subcommand / feature, old CLIs fineminormake release VERSION=X.Y+1.0
Old CLI binaries break against new ingest protocolmajormake release VERSION=X+1.0.0

Pre-flight: on main, clean tree, not ahead of origin. Post-flight: watch release.yml, then write the narrative notes on the published release.

© vitorbaptista, Apache-2.0. 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 vitorbaptista/shellshare.

Open the folder on GitHubat commit 1e94975

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 skillvitorbaptista/shellshare227—~2kAutomated safety check: PassApache-2.0
Cutting A ReleaseTriliumNext/Trilium38k—~3.2kAutomated safety check: PassAGPL-3.0
Mole CLI Release Flowtw93/Mole70k—~2.6kAutomated safety check: PassGPL-3.0
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

Similar skills

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

    38k GitHub stars~3.2k tokensUpdated today
    DevelopmentAuto-check passed
  • 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
  • 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 3 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 today
    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 3 days ago
    DevelopmentAuto-check passed
  • Cut Release

    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.

    2.7k GitHub stars~2k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed

Works with

Categories

Questions about Release

What does Release do?

Cut a new shellshare release: pick the right semver version, run make release, watch CI, and write the narrative GitHub release notes. Release is an agent skill from vitorbaptista/shellshare. Cut a new shellshare release: pick the right semver version, run make release, watch CI, and write the narrative GitHub release notes.

When should I use Release?

Release fits situations like: wants to release; ship a new version; bump the version; publish — even if they just say release this.

How do I install Release in Claude Code?

Run `npx skills add vitorbaptista/shellshare --skill release -a claude-code`. Or copy the skill folder (.claude/skills/release in vitorbaptista/shellshare) 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 vitorbaptista/shellshare --skill release -a codex`. Or copy the skill folder (.claude/skills/release in vitorbaptista/shellshare) 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 vitorbaptista/shellshare --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 (make, git and gh). Our summary lists: Docker.

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 Apache-2.0 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 2k tokens (SKILL.md is roughly 8.1k 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: 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.

Who maintains Release?

vitorbaptista (a GitHub user) maintains it in vitorbaptista/shellshare, which has 227 GitHub stars. The repository was last updated on August 25, 2026.

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