agentleFS
dinsteindinstein/agent-hub/.agents/skills/release/SKILL.md

release

Skill3 starsChanged 3 months agoMITView on GitHub

Cut an AgentHub release using the repository's preflight, versioning, changelog, tagging, and post-release verification procedure. Use when preparing or publishing a release.

  • Pipes a download into a shell
  • Deletes or force-pushes
  • Installs packages
  • Commits and pushes

196 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use create-agent-adapter, changelog-style and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • MicrosoftSkill

    create-agent-adapter

    Technical guide for creating a new Paperclip agent adapter. Use when building a new adapter package, adding support for a new AI coding tool (e.g. a new CLI agent, API-based agent, or custom process), or when modifying the adapter system. Covers the required interfaces, module structure, registration points, and conventions derived from the existing claude-local and codex-local adapters.

    Also in 5 projects that use this

  • GrinvSkill

    changelog-style

    Turn a commit range into CHANGELOG.md entries following common-changelog style. Use when finishing a PR or cutting a release, to write/fix the [Unreleased] section's entries — moving [Unreleased] under a new dated version heading is a separate, automated step (see the release skill / scripts/sync-version.ts), not this skill's job.

    Also in 4 projects that use this

  • GrinvSkill

    docs-consistency-check

    Check README/manifest.json/server.json/CHANGELOG.md/AGENTS.md and docs/*.md for drift against the actual registered tools and source. Use after adding, renaming, or removing a tool, or as part of a live-audit pass.

    Also in 4 projects that use this

  • Microsoft AzureSkill

    component-release

    Prepares a verifiable Agent Landing Zone UI release. Use for release branches, VERSION, changelog entries, tags, release notes, and compatibility evidence; never publish without explicit human approval.

    Also in 4 projects that use this

  • Microsoft AzureSkill

    documentation-consistency

    Keeps AI Landing Zone contributor, user, and operator documentation aligned with shipped Bicep behavior. Use for parameters, defaults, outputs, topology, deployment flow, operations, or releases.

    Also in 8 projects that use this

  • rivet-devSkill

    launch-graphics

    Generate agentOS marketing/launch graphics (launch & social heroes, code-snippet cards) from the committed generators in docs-internal/graphics. Use when asked to make, update, or render an agentOS launch image, social image, "agentOS Apps" graphic, or technical code-snippet image.

    Also in 3 projects that use this

  • +3 more from Grinv

The file

Files
SKILL.md

Releasing

One tag push does the work. Everything before it is local and reversible; everything after it is public within seconds, so the cheap checks come first.


0. Preflight

git fetch origin
git status --short                      # must print nothing
git log --oneline -1 origin/main        # must equal local main
git worktree list                       # anything here is NOT being released

A release ships main exactly as it stands. Nothing is cherry-picked. If a worktree holds work that belongs in this version, land it first by the new-feature skill step 5 and start over at step 0. Otherwise say out loud which branches are being left out, so "I thought that was in" is caught now rather than by a user.

1. Choose the number

Against the user-visible surface, not the size of the diff. When two rows could apply, take the lower one.

What changedBump
Docs, comments, tests, internal refactors; help text correctionspatch — 0.13.0 → 0.13.1
A new command or flag, a new capability, a changed defaultminor — 0.13.1 → 0.14.0
A removed command or flag, or a moved frozen identifier (docs/conventions.md#frozen-identifiers)major

A pre-release carries a - (0.14.0-rc1) and the workflow marks the Release accordingly.

2. Bump VERSION

new=0.13.2
printf '%s\n' "$new" > VERSION
git diff --stat                         # exactly 1 file

VERSION reaches the binary, the .app's Info.plist and the Release title on its own. The README version badges query GitHub's latest release, so they follow the tag pushed in step 5 without an edit — and until that push they keep showing the previous version, which is the truth.

3. Write the changelog

The changelog is the release commit message. There is no CHANGELOG.md. The published notes come from three sources; only the first is yours — the commit list is GitHub's (generate_release_notes: true), and the install instructions already live in .github/workflows/release.yml.

git log --oneline "$(git describe --tags --abbrev=0)"..main

The message answers "does this version affect me?". Lead with the one thing a user would feel; if nothing is observable, say so in a line — that is useful, and "various fixes and improvements" is not. GitHub prints the commit list underneath you, so restating it is wasted.

release: 0.13.1

Documentation, comments and three new build-rule guards. No behaviour change
beyond two help strings that were shipping internal milestone names to users.

The one item a user actually feels is in the skill the tap ships: it named
two streaming commands where there are four, so an agent following it parsed
NDJSON as a single object and failed on the first progress line.

4. Verify, commit, push

make ci                                 # must be green BEFORE the tag exists
git add VERSION
git commit                              # message from step 3
git push origin main

5. Tag and push

The tag is the trigger and the claim about what is being released, so it must equal VERSION.

git tag -a "v${new}" -m "v${new}"
git push origin "v${new}"

6. Watch the workflow

gh run list --workflow=release.yml --limit 1
gh run watch <run-id> --exit-status

Six jobs, about four minutes: verify (checks tag against VERSION and the tap token; gates the rest), cli (darwin/linux/windows tarballs), gui-macos (universal DMG), gui-windows (amd64 and arm64 zips), publish (the Release with every artifact), homebrew (formula, cask and skill to the tap, one commit — skipped, and saying so, when the HOMEBREW_TAP_REPO variable is unset).

7. Check what shipped

A green workflow is a weaker claim than a correct release.

gh release view "v${new}" --json isDraft,isPrerelease -q '.isDraft, .isPrerelease'   # false false
gh release view "v${new}" --json assets -q '.assets[].name' | wc -l                  # 12

Twelve assets: four CLI tarballs (darwin/linux × amd64/arm64), the macOS DMG, a Windows amd64 tarball, two Windows zips, three checksums-*.txt, and manifest.json.

That last one carries the whole Homebrew-less install path, and its absence is the invisible failure: the Release publishes, the tap updates, and only curl … | sh breaks.

curl -fsSL https://raw.githubusercontent.com/dinstein/agent-hub/main/scripts/install.sh \
  | sh -s -- --prefix /tmp/agenthub-check --force
/tmp/agenthub-check/bin/agenthub --version          # ${new}, and must NOT say (dev)
rm -rf /tmp/agenthub-check

--force is not optional here, and it is not loosening anything. The machine cutting a release almost always has agenthub from the tap — the section at the bottom of this file assumes exactly that — and the installer refuses, correctly, to fight another package manager for the name. Without the flag it dies before downloading anything, so the check cannot run on the machine it is written for. The flag is read in one place and only there: it skips that refusal. The install still goes to --prefix, and Homebrew's copy is not touched.

test/installer runs that script end to end against a served release on every make ci; the two lines above are the half it cannot cover — that the real Release holds what the script goes looking for.

Then the tap, a different repository that fails on its own:

for f in Formula/agenthub.rb Casks/agenthub-gui.rb; do
  gh api "repos/dinstein/homebrew-agenthub/contents/${f}" -q .content \
    | base64 -d | grep -E 'version|url|depends_on formula' | head -4
done

The version must be the new one in both — the cask's carries the build hash after a comma — and every url must point at dinstein/agent-hub, not at the tap. Both files land in one commit, so one of them being stale is a bug in tap-sync.sh, not a re-run.

The cask is the only artifact whose install is not exercised by anything in CI. Once per release, on a machine that has not installed it before — a fresh user account is enough, the quarantine flag is per-download and this machine's copies are already cleared:

brew install --cask dinstein/agenthub/agenthub-gui   # pulls the formula with it
open -a AgentHub                                     # must launch with no Gatekeeper prompt
which agenthub && agenthub --version                 # from the formula, and must NOT say (dev)
brew uninstall --cask --zap dinstein/agenthub/agenthub-gui

brew audit --cask --strict --online dinstein/agenthub/agenthub-gui grades the file; only the four lines above grade the install.

When it goes wrong

SymptomMeaningDo
verify fails on the tagTag and VERSION disagree; nothing was built or publishedgit tag -d and git push --delete, fix VERSION, re-tag
A build job failsUsually toolchain, not code — v0.13.0 failed on wails3 needing CGO_ENABLED=0Fix on main, move the tag to the new commit, force-push it. No Release exists yet
publish green, homebrew redThe Release is complete; only the tap laggedRe-run that job. Do not re-cut the release
A wrong Release is already publicgh release delete leaves the tag behindCut the next patch forward rather than deleting
GitHub Actions unavailable—scripts/release-local.sh vX.Y.Z — without --push it stops before the two irreversible steps and prints them

Rehearse the whole pipeline without a tag via workflow_dispatch: every job runs and publish skips itself.


Not a release: run this checkout where Homebrew installed one

Publishes nothing — no tag, no Release, no tap commit. Use it to exercise a build with a real client before releasing it.

make install-to-brew                     # release-channel build → $(brew --prefix)/bin/agenthub
scripts/install-to-brew.sh --restore     # give the path back to Homebrew

A dirty tree is fine here; the version carries -dirty. A dev-channel binary is refused. Replacing the file does not replace a running daemon: quit and reopen AgentHub if the application is running one, or agenthub daemon restart --headless if an operator is.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

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.