release-cli
Skill7 starsChanged 15 days agoMITView on GitHub
Use when cutting a release of a CLI — SemVer over the CLI surface, changelog-driven release notes, tag-triggered CI, per-language distribution (npm, GoReleaser, PyPI, cargo-dist), signed or provenance-bearing artifacts, and install plus verify instructions in the README.
- Reads credentials
5 other projects use a version of this.
Adopted by
Most recently taken up by
- VelimirMueller/ai-development-skillsword for word, first seen Oct 25, 2026
- kubetail-org/kubetailtheir own version, first seen Oct 8, 2026
- fastrepl/anarlogtheir own version, first seen Oct 8, 2026
- fastrepl/hyprnotetheir own version, first seen Oct 8, 2026
- 851-labs/tokenmaxxingtheir own version, first seen Sep 30, 2026
Other versions5 projects use a version of this.
Word for word · 1
- VelimirMueller/ai-development-skills★ 7100% same
Edited · 0
None found.
Wrote their own version · 4
- fastrepl/anarlog★ 9.8ksame name
- fastrepl/hyprnote★ 9.8ksame name
- kubetail-org/kubetail★ 1.8ksame name
- 851-labs/tokenmaxxing★ 88same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository156 other files it gives its agents.
- skills/swift/swiftui-design-principles/AGENTS.mdAGENTS.md
- skills/swift/ios-code-audit/CLAUDE.mdCLAUDE.md
- skills/swift/swift-focusengine-pro/llms.txtllms.txt
- build-llm-seamSkill
- build-mcp-serverSkill
- build-rag-pipelineSkill
- secure-llm-featuresSkill
- set-up-llm-evalsSkill
- build-nextjs-backendSkill
- build-supabase-edge-functionSkill
- configure-backend-testsSkill
- design-http-apiSkill
- harden-backendSkill
- scaffold-fastapi-serviceSkill
- scaffold-go-serviceSkill
- scaffold-hono-serviceSkill
- secure-supabase-rlsSkill
- set-up-backend-authSkill
- set-up-background-jobsSkill
- set-up-databaseSkill
- set-up-nextjs-supabase-authSkill
- set-up-observabilitySkill
- set-up-supabaseSkill
- build-cliSkill
- set-up-dev-toolchainSkill
- audit-securitySkill
- audit-toolchainSkill
- extend-skillsetSkill
- promote-releaseSkill
- set-up-stack-profileSkill
- write-commit-messagesSkill
- write-pull-requestsSkill
- analyze-complexitySkill
- apply-algorithmsSkill
- apply-design-patternsSkill
- apply-design-principlesSkill
- apply-solidSkill
- choose-data-structureSkill
- debug-systematicallySkill
- enforce-dependency-ruleSkill
- refactor-safelySkill
- slice-and-estimateSkill
- write-clean-testsSkill
- write-readable-codeSkill
- clean-frontend-scaffoldingSkill
- configure-accessibilitySkill
- configure-analyticsSkill
- configure-ciSkill
- configure-error-trackingSkill
- configure-lintingSkill
- configure-test-stackSkill
- configure-typescriptSkill
- create-moduleSkill
- optimize-performanceSkill
- scaffold-frontend-projectSkill
- set-up-authSkill
- set-up-design-systemSkill
- set-up-document-headSkill
- set-up-error-boundariesSkill
- set-up-feature-flagsSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
2 rules. 0 are common, 2 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 10
All rules with reasons, and the full per-language workflow/config files: release-patterns.md.
- Distinctive: line 30
No release machinery → full setup (steps 3-7).
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Release CLI
A release is a pushed vX.Y.Z tag; CI builds, publishes and signs from it. This skill puts the version discipline, the changelog, the workflow and the registry wiring in place so the tag is the only human action left.
All rules with reasons, and the full per-language workflow/config files: release-patterns.md. Versions: stack-versions.md (verify live first, per version-protocol).
1. Audit current state
Change nothing yet. Read .claude/stack-profile.md (then ~/.claude/stack-profile.md); if absent, detect.
cat .claude/stack-profile.md 2>/dev/null | sed -n '1,30p'
ls .github/workflows 2>/dev/null
ls .goreleaser.y* dist-workspace.toml CHANGELOG.md scripts/release-notes.sh 2>/dev/null # release machinery
grep -n '"version"' package.json 2>/dev/null
grep -n '^version' pyproject.toml Cargo.toml 2>/dev/null
git tag -l 'v*' | tail -5 # tags so far and their naming
grep -rn 'homebrew' .goreleaser.y* dist-workspace.toml 2>/dev/null | head -3 # tap wired?Record: language(s), the current version and whether a tag matches it, which release files exist, and which distribution channels are already wired (npm/PyPI trusted publishing, Homebrew tap, GitHub environments, tag protection).
2. Decide what to do
- No release machinery → full setup (steps 3-7).
- Some pieces exist → apply only the missing ones (steps 5-6). Name each gap you will close.
- Tag-triggered workflow, changelog gate, signing, registry wiring and README verify table all present → say "already in place" and stop.
3. Detect the track
Pick from languages in the profile or from step 1:
| Language | Pipeline | Signing / provenance |
| TypeScript | npm trusted publishing; tsdown build, pnpm pack + npm publish | npm provenance (automatic with trusted publishing) |
| Go | GoReleaser; homebrew_casks with a binary stanza into the tap (brews is deprecated since GoReleaser v2.10; see release-patterns.md) | cosign keyless signature on checksums.txt, syft SBOM |
| Python | uv build --no-sources + uv publish --trusted-publishing always; PyPI pending publisher | PyPI attestations (automatic with uv publish) |
| Rust | cargo-dist: dist init / generate / plan | github-attestations = true; github-action-commits SHA pins |
A profile with several languages gets one pipeline per package and tags namespaced per package (pkg-v1.2.0).
4. Install only what is missing
Live-version check first (version-protocol); then:
mise use goreleaser # Go
mise use aqua:axodotdev/cargo-dist # Rust; provides the `dist` binary
uvx twine --version # Python metadata check; no install
mise use actionlint zizmor # workflow linting5. Generate the files
Copy from release-patterns.md; do not retype:
CHANGELOG.md— Keep a Changelog format,## [Unreleased]on top.scripts/release-notes.sh— prints the tag's section, exits 1 when it is empty.- The language's workflow/config —
release.yml,.goreleaser.yaml, thepyproject.tomlpublishing fields ordist-workspace.toml(the per-language sections). After changingdist-workspace.toml, re-rundist generate; never hand-edit the generated workflow. - README — the install table plus the "Verify a download" table.
6. Wire it
Registry and repository side, once per repo:
- npm: trusted-publisher entry (owner, repository, workflow
release.yml, environmentnpm);repositorywith the exact GitHub URL,files,engines,bininpackage.json. - PyPI: pending publisher before the first release (same fields, environment
pypi); it does not reserve the name. - Homebrew tap: repository
homebrew-<name>; fine-grained PAT (contents: writeon the tap repo only) asTAP_GITHUB_TOKEN(Go) orHOMEBREW_TAP_TOKEN(Rust). - GitHub environments (
npm,pypi) on the publish jobs; required reviewers when more than one person can tag. - Tag protection rule for
v*: maintainers only. - Workflows:
permissions: {}at the top level, per-job permissions,persist-credentials: false,cache: false, actions pinned to full SHAs (security-baseline).
7. Verify
goreleaser check && goreleaser release --snapshot --clean --skip=sign,sbom,publish # archives + checksums built, nothing uploaded
dist plan # targets, installers, tap formula listed
npm pack --dry-run # tarball holds dist/, bin, README
uv build --no-sources && uvx twine check dist/* # both files PASSED
actionlint && zizmor --offline .github/workflows # no findings; cargo-dist's generated file: the known ones in release-patterns.md
scripts/release-notes.sh v<current> # prints the section, exit 0v<current> is the version the changelog entry was written for (package.json, uv version --short, Cargo.toml; Go has no version file). The first real tag is v0.1.0-rc.1, never v1.0.0: it proves every credential and permission on a non-latest channel, and a mistake can be deleted and re-tagged.
References
- release-patterns.md: SemVer over the CLI surface, changelog and tag rules, the full per-language pipelines, signing, README tables.
- ../_shared/stack-versions.md: verified versions.
- ../build-cli/cli-ux.md: the CLI contract a version number promises.
- ../set-up-dev-toolchain/SKILL.md: actionlint/zizmor hooks.
- ../../core/_shared/security-baseline.md, ../../core/_shared/version-protocol.md: least permissions, SHA pins, live version checks.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

