release
Skill0 starsChanged 40 days agoMITView on GitHub
Release a validated AGRO commit by pushing it to main or master, then monitor the automatic SemVer/GHCR/GitHub Release workflow. TRIGGER when: asked to release, version, ship, cut a release, or verify release artifacts.
- Installs packages
- Commits and pushes
196 other projects use a version of this.
Adopted by
Most recently taken up by
- zxcvbn-ts/zxcvbntheir own version, first seen Nov 9, 2026
- TechbeeAT/jtxBoardtheir own version, first seen Nov 9, 2026
- ddnexus/pagytheir own version, first seen Nov 9, 2026
- zerx-lab/FluxDowntheir own version, first seen Nov 9, 2026
- orioledb/orioledbtheir own version, first seen Nov 9, 2026
- AmruthPillai/Reactive-Resumetheir own version, first seen Nov 8, 2026
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.
MicrosoftSkillcreate-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
GrinvSkillchangelog-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
GrinvSkilldocs-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 AzureSkillcomponent-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 AzureSkilldocumentation-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-devSkilllaunch-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
Other versions196 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 196
- paperclipai/paperclip★ 112ksame name
- modelcontextprotocol/servers★ 92ksame name
- remotion-dev/remotion★ 72ksame name
- traefik/traefik★ 65ksame name
- usememos/memos★ 64ksame name
- tw93/Pake★ 63ksame name
- AmruthPillai/Reactive-Resume★ 45ksame name
- amruthpillai/reactive-resume★ 45ksame name
- reactive-resume/reactive-resume★ 45ksame name
- Yeachan-Heo/oh-my-claude-sisyphus★ 41ksame name
186 more not listed
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 repository10 other files it gives its agents.
- agent-browserSkill
- ci-statusSkill
- delegateSkill
- interviewSkill
- post-bridgeSkill
- prdSkill
- remote-sandboxSkill
- steSkill
- system-oneSkill
- worktreesSkill
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 0 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 186 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 84
Add a dated ## [<version>] - YYYY-MM-DD heading to CHANGELOG.md.
- Very specific: line 155
If $ARGUMENTS contains --dry-run, report the resolved repo, source, target, SHA, clean-tree result, and fast-forward result, then stop …
- Very specific: line 185
After success, fetch tags and identify the SemVer tag pointing to the exact SHA, then verify the four immutable image tags, the canonical …
“Common” is measured: kept by at least 6 in 10 of the 186 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
.github/workflows/release.yml owns version allocation and artifact mutation.
The workflow validates every push to main, master, or experiment/** first, then reserves the
v<version> tag for the version root package.json names, publishes GHCR and
the CLI (or confirms the CLI version already exists), and finally publishes the
GitHub Release. Do not pre-create a release tag, draft, or release/<version>
branch.
Root package.json holds the release version. A release is a deliberate bump:
an unchanged version gives a clean, green no-op run.
Artifact set
One release produces, from one build and one commit:
- The canonical npm package
@mifune/agro(theagroexecutable, from the host repository's CLI package). The@mifune/agroshim source remains in the legacy shim directory of that CLI package, and already-published shim versions remain on the registry. The release path does not publish, wait for, or deprecate the shim. - Four immutable GHCR tags:
ghcr.io/mifunedev/agro:<version>,:sha-<sha>,ghcr.io/mifunedev/agro:<version>, and:sha-<sha>, verified to share one manifest digest (the host repository's<release alias verifier>script), thenlateston both repositories (the host repository's<release latest promoter>script). - Four GitHub Release assets:
agro.js,oh.js,get-agro.sh, andget-agro.sh, attached before the release is undrafted soreleases/latest/download/<asset>resolves on publication.
Version sites
A release cut bumps the canonical version in two places, and version-parity.sh
fails the build when they drift:
package.json(root).- The
package.jsonandpackage-lock.jsonof the CLI package.
The retained shim's package.json in the legacy shim directory keeps its own version and
an exact @mifune/agro pin that equals that shim version. The shim version does
not have to match a later canonical version.
Operator prerequisites this repository cannot verify
- The npm token has publish rights for the
@mifunescope, including the@mifune/agropackage name. - The GHCR package
mifunedev/agrois set to public after its first push. A new GHCR package is private by default, soagro sandbox install dockercannot pull it until the operator changes the visibility. - The compatibility SLA clock starts at the first public AGRO release, that is,
the first release that publishes
@mifune/agroandghcr.io/mifunedev/agro.
Pre-releases
A pre-release version has the form MAJOR.MINOR.PATCH-<channel>.<n>, for example
0.15.0-minimal.1. <channel> is lowercase ([a-z][a-z0-9]*) and is not latest.
minimal names the experiment/minimal-core track. Reserve rc for candidates of
the next main release.
| Version form | Branches that publish it | GitHub Release | npm dist-tag | GHCR latest |
0.15.0 | main, master | latest | latest | moves |
0.15.0-minimal.1 | main, master, experiment/** | pre-release, never latest | minimal | never moves |
A stable version on an experiment/** push is a green no-op
(stable-off-release-branch), so a stable bump merged from development never
publishes from an experiment branch.
To cut a pre-release on an experiment branch:
- Merge
developmentinto the branch so itsrelease.ymlsupports pre-releases. - Set the version in root
package.jsonand in thepackage.jsonandpackage-lock.jsonof the CLI package. - Add a dated
## [<version>] - YYYY-MM-DDheading toCHANGELOG.md. - Push the branch. Monitor the run as in step 4, with
--branch <experiment-branch>.
Install the pre-release:
npm i -g @mifune/agro@minimal
agro sandbox install docker --version 0.15.0-minimal.11. Resolve the canonical destination
if git remote get-url upstream >/dev/null 2>&1; then
REMOTE=upstream
else
REMOTE=origin
fi
REPO=$(gh repo view "$(git remote get-url "$REMOTE")" --json nameWithOwner -q .nameWithOwner)
if git ls-remote --exit-code --heads "$REMOTE" main >/dev/null 2>&1; then
TARGET=main
elif git ls-remote --exit-code --heads "$REMOTE" master >/dev/null 2>&1; then
TARGET=master
else
echo "No main or master release branch exists on $REMOTE" >&2
exit 1
fi
SOURCE=$(git branch --show-current)
printf 'Repo: %s · source: %s · release branch: %s\n' "$REPO" "$SOURCE" "$TARGET"2. Pre-flight
Require all of the following before a release push:
- The working tree is clean.
- The source commit is pushed to the canonical remote.
- CI for the source commit is green.
- Root
package.jsonnames the version to publish, thepackage.jsonof the CLI package matches it (the host repository's version-parity contract test passes), and nov<version>tag exists yet. An unbumped push is a green no-op that publishes nothing. A newly published@mifune/agroversion is not required. CHANGELOG.mdhas a## [<version>]section matching that version (the workflow falls back to[Unreleased]when the section is absent).- The remote release branch is an ancestor of the source commit, so promotion is a fast-forward.
test -z "$(git status --porcelain)" || { echo "Working tree is dirty" >&2; exit 1; }
git fetch "$REMOTE" "$SOURCE" "$TARGET" --tags
VERSION=$(node -p "require('./package.json').version")
git rev-parse -q --verify "refs/tags/v$VERSION" >/dev/null && {
echo "v$VERSION is already tagged; bump package.json to cut a new release" >&2
exit 1
}
grep -q "^## \[$VERSION\]" CHANGELOG.md || {
echo "CHANGELOG.md has no section for $VERSION" >&2
exit 1
}
SHA=$(git rev-parse "$REMOTE/$SOURCE")
test "$(git rev-parse HEAD)" = "$SHA" || {
echo "Local $SOURCE is not identical to $REMOTE/$SOURCE" >&2
exit 1
}
git merge-base --is-ancestor "$REMOTE/$TARGET" "$SHA" || {
echo "$TARGET has diverged from $SOURCE; reconcile before release" >&2
exit 1
}If $ARGUMENTS contains --dry-run, report the resolved repo, source, target,
SHA, clean-tree result, and fast-forward result, then stop without pushing.
3. Trigger the release
Promote the exact checked source SHA. The branch push—not a manually created tag—is the release trigger.
git push "$REMOTE" "$SHA:refs/heads/$TARGET"The workflow reads the version from root package.json on the pushed commit, so
retries always resolve the same version. A retry reuses a same-SHA draft or
published release. When the tag already exists on a different commit, the reserve
step reports the version as already released and every publication job skips —
the run stays green. Bump the version to publish again.
4. Monitor and verify
Find the release.yml push run for $SHA and $TARGET, then watch it:
gh run list --repo "$REPO" --workflow release.yml --branch "$TARGET" \
--commit "$SHA" --event push --limit 5 \
--json databaseId,headSha,status,conclusion,url
# Once the matching run appears:
gh run watch <run-id> --repo "$REPO" --exit-statusAfter success, fetch tags and identify the SemVer tag pointing to the exact SHA,
then verify the four immutable image tags, the canonical npm package, the release
assets, and the GitHub Release. The tag carries the v prefix; the image tags
do not. A newly published @mifune/agro version is not a release gate.
Replace <release alias verifier> with the host repository's script that checks
that the image tags share one manifest digest.
git fetch "$REMOTE" --tags
TAG=$(git tag --points-at "$SHA" \
| grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' \
| sort -V | tail -1)
test -n "$TAG" || { echo "No SemVer tag found for $SHA" >&2; exit 1; }
gh release view "$TAG" --repo "$REPO" --json assets -q '.assets[].name'
<release alias verifier> check \
"ghcr.io/mifunedev/agro:${TAG#v}" "ghcr.io/mifunedev/agro:${TAG#v}"
npm view "@mifune/agro@${TAG#v}" version
printf 'Images: ghcr.io/mifunedev/{agro,agro}:%s and :sha-%s\n' "${TAG#v}" "$SHA"The asset list must name agro.js, oh.js, get-agro.sh, and get-agro.sh.
The canonical mutable/latest branch is main when it exists, otherwise
master. Immediately before promotion, the workflow freshly reads both remote
refs and promotes the canonical head's versioned image to latest by immutable
digest. Stale canonical runs and every noncanonical-branch run skip latest;
GitHub's make_latest flag uses the same rule after a second fresh check.
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
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.

