ZCF Release Automation
UfoMiao/zcf
Automates a version release with changesets: analyzes code changes, writes a bilingual CHANGELOG, bumps the version and commits through a release branch and pull request.
Maintainer workflow for preparing, publishing, verifying and curating Hunk releases, with confirmation gates before tags, publishes and public edits.
$ npx skills add modem-dev/hunk --skill hunk-release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install modem-dev/hunk hunk-release --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/modem-dev/hunk.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/hunk-release .claude/skills/hunk-release && rm -rf skills-srcUse ~/.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/
Install the "hunk-release" agent skill from https://github.com/modem-dev/hunk/tree/main/skills/hunk-release into .claude/skills/hunk-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hunk-release", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/modem-dev/hunk/tree/main/skills/hunk-releaseType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add modem-dev/hunk --skill hunk-release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install modem-dev/hunk hunk-release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/modem-dev/hunk.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/hunk-release .agents/skills/hunk-release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "hunk-release" agent skill from https://github.com/modem-dev/hunk/tree/main/skills/hunk-release into .agents/skills/hunk-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hunk-release", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add modem-dev/hunk --skill hunk-release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install modem-dev/hunk hunk-release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/modem-dev/hunk.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/hunk-release .cursor/skills/hunk-release && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "hunk-release" agent skill from https://github.com/modem-dev/hunk/tree/main/skills/hunk-release into .cursor/skills/hunk-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hunk-release", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/modem-dev/hunk.git --path skills/hunk-release--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add modem-dev/hunk --skill hunk-release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install modem-dev/hunk hunk-release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/modem-dev/hunk.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/hunk-release .gemini/skills/hunk-release && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "hunk-release" agent skill from https://github.com/modem-dev/hunk/tree/main/skills/hunk-release into .gemini/skills/hunk-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hunk-release", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install modem-dev/hunk hunk-releaseInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add modem-dev/hunk --skill hunk-release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/modem-dev/hunk.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/hunk-release .github/skills/hunk-release && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "hunk-release" agent skill from https://github.com/modem-dev/hunk/tree/main/skills/hunk-release into .github/skills/hunk-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hunk-release", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add modem-dev/hunk --skill hunk-release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install modem-dev/hunk hunk-release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/modem-dev/hunk.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/hunk-release .opencode/skills/hunk-release && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "hunk-release" agent skill from https://github.com/modem-dev/hunk/tree/main/skills/hunk-release into .opencode/skills/hunk-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hunk-release", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
hunk-releaseMaintainer workflow for preparing, publishing, verifying and curating Hunk releases, with confirmation gates before tags, publishes and public edits.
This maintainer workflow covers Hunk releases from a source checkout: preparing metadata, publishing, verifying the result and curating release pages. A pushed tag triggers a workflow that publishes `hunkdiff` and five platform packages, attests the binary archives and creates the GitHub release. The safety rules require a question when the version, branch, previous tag or channel is unclear, explicit confirmation before pushing a tag or editing a public release, and never reusing an npm version or moving a tag after publication.
The agent first records version, tag, branch, previous tag and expected channel: a newer stable goes to npm `latest` and GitHub Latest, a prerelease to the npm `beta` tag only, and an older-series backport to its own npm backport tag, leaving both latest pointers alone. Preparation starts from a clean current branch, reads pending Changesets and runs `bun run release:version` and `bun run generate:changelog`. Generated website changelog files are never hand-edited; minor and major releases add a summary, tagline, links and video to `website/releases/notes.json`. The description also names benchmarks, release videos and recovery, which the excerpt does not reach.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 252f59d. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
bungitghnpmbrewmisecurlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comhunk.devformulae.brew.shFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Hunk Release Workflow loads about 3.8k tokens when it runs. Until then it costs about 42 tokens; SKILL.md has 1,526 words of instructions outside code blocks.
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.
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.
The full file from modem-dev/hunk at commit 252f59d, republished under its MIT licence (© modem-dev). 1,526 words, ~3,813 tokens.
.claude/skills/hunk-release/SKILL.md (or your agent's skills folder).Maintainer-focused and source-checkout only. The tag workflow publishes hunkdiff plus five platform packages, attests the binary archives, and creates the GitHub release.
Record the version, tag, branch, previous tag, and expected channel:
latest and GitHub Latest;beta, not GitHub Latest;backport-X.Y, leaving both latest pointers unchanged.For backports, include only commits present between the previous tag and the release tip on that maintenance branch. Inspect .changeset/pre.json before changing prerelease state.
Start from a clean, current release branch:
git status --short --branch
git fetch origin --tags --prune
git tag --sort=-version:refname | head -10
bun install --frozen-lockfile
bun run changeset:statusRead the pending Changesets, then generate metadata and the published release notes:
bun run release:version
bun run generate:changelog
git diff -- package.json packages CHANGELOG.md .changeset websiteVerify the intended versions, consumed Changesets, and new changelog section. Do not force a bump by hand-editing generated versions.
generate:changelog projects CHANGELOG.md into hunk.dev/changelog. Never hand-edit its output under website/src/content/docs/changelog/, website/public/changelog/, website/releases/dates.json, or website/releases/latest.json. For a minor or major release, add the hand-authored parts to website/releases/notes.json under the major.minor key and regenerate:
summary — one sentence; replaces the changelog's ### Highlights lead paragraph on the page.tagline — short phrase for the landing-page release ribbon.links — docs pages the highlights describe, rendered as "Related documentation".video — mp4 plus optional webm, poster, duration, and title, filled in at step 5.The release tag does not exist yet at this point. A stable version is rendered as Unreleased without an install command, while an undated prerelease remains off the site entirely; the tag date is picked up by the next generation. Recorded dates in website/releases/dates.json are never recomputed, which is what lets check:changelog gate CI without Git tags.
Generate and compare the committed release benchmark:
bun run bench:release
bun run bench:release:compareA material regression blocks the release unless the user approves an acceptedRegressions entry following benchmarks/release/README.md.
Run the validation required by AGENTS.md, plus the release packaging checks:
bun run check:docs
bun run check:changelog
bun run check:pack
bun run build:prebuilt:npm
bun run check:prebuilt-pack
bun run smoke:prebuilt-installCommit the generated metadata and benchmarks/release/bench-X.Y.Z.json, then follow normal review
policy. The Firecracker evidence must come from that reviewed release tip, not the pre-generation
commit. Push the reviewed tip before using the manual workflow.
Run the full Firecracker install compatibility suite once from the clean reviewed release tip on a
Linux x64 host with working KVM, either locally or through the manually dispatched
install-vm.yml workflow:
set -euo pipefail
mkdir -p tmp/install-vm/runs
result_dir=$(mktemp -d tmp/install-vm/runs/release-XXXXXXXX)
bun run test:install-vm -- --output "$result_dir"
bun run ./test/cli/install-vm/validate-release-result.ts "$result_dir/result.json"The explicit output directory prevents a failed invocation from falling back to stale evidence. The
validator requires the complete checked-in scenario manifest, passing statuses, and the current
checkout's source identity. A skipped result does not satisfy release validation. For the manual
workflow, dispatch the full suite from the reviewed tip, download its result.json beneath the
ignored tmp/install-vm/ directory of a checkout at that exact tip, and run the validator there; a
green job alone is insufficient because unsupported runners may use the intentional skip path.
Firecracker validates Linux x64 packaging behavior, while the existing native release jobs remain
responsible for macOS, Windows, and other architectures. Wait for required CI before continuing.
Immediately before tagging, fail unless the reviewed branch tip is clean and matches its remote:
set -euo pipefail
branch=$(git branch --show-current)
test -n "$branch"
git fetch origin "$branch" --tags
test "$(git rev-parse HEAD)" = "$(git rev-parse "origin/$branch")"
if [ -n "$(git status --porcelain --untracked-files=all)" ]; then
git status --short
exit 1
fi
git log -1 --format='%H %s'Present the tag, commit, benchmark result, validation, and release highlights. After explicit confirmation:
version=X.Y.Z
tag="v$version"
git tag -a "$tag" -m "$tag"
git push origin "$tag"The tag push starts .github/workflows/release-prebuilt-npm.yml. Find only the run for that tagged commit and propagate failure:
release_sha=$(git rev-parse "$tag^{}")
run_id=$(
gh run list \
--workflow release-prebuilt-npm.yml \
--event push \
--commit "$release_sha" \
--limit 1 \
--json databaseId \
--jq '.[0].databaseId // empty'
)
test -n "$run_id"
gh run view "$run_id" --json url,status,conclusion
gh run watch "$run_id" --exit-statusIf lookup is empty, repeat it after GitHub registers the run; never select an unrelated run. Success requires the benchmark, all builds, staging smoke test, npm publish, attestation, and GitHub release jobs.
Check the meta-package, platform packages, dist-tags, release body, and five binary archives:
npm view "hunkdiff@$version" version
for package in \
hunkdiff-darwin-arm64 hunkdiff-darwin-x64 \
hunkdiff-linux-arm64 hunkdiff-linux-x64 \
hunkdiff-windows-x64; do
npm view "$package@$version" version
done
npm view hunkdiff dist-tags --json
gh release view "$tag" --json tagName,name,isPrerelease,url,assets,bodyStop if versions, channel, tag, archives, or attestations disagree.
Then record the tag date and publish the release notes. The published page is what the update notice and the GitHub release body point at, so it is part of the release, not follow-up work:
bun run generate:changelog
bun run generate:og
git diff --stat -- websiteThis backfills the new tag's date, publishes its notes, and redraws the social cards whose contents changed. Stable releases also add the install command and move the landing-page ribbon; prereleases publish a clearly labeled series without advancing either stable surface. Commit it to main — the diff should only touch website/releases/, website/src/content/docs/changelog/, website/public/changelog/rss.xml, and the redrawn cards under website/public/changelog/og/. Run this for backports too: they publish into their older series without advancing the latest stable release.
Prereleases publish to hunk.dev/changelog after their tag exists. A beta contributes its series page, exact version anchor, index row, feed item, and social card, while the stable latest marker, landing ribbon, and default install instructions continue to name the newest stable release.
Only after publication verifies, create a detached worktree at the released tag and follow skills/hunk-launch-video/SKILL.md's full-release recipe:
git worktree add --detach "../hunk-release-video-$version" "$tag"That skill owns capture, encoding, and media checks. Keep generated media out of Git and Git LFS. Preserve storyboard edits only with separate approval.
Publish the video so the release page can carry it, then record it in website/releases/notes.json under the series' video key and regenerate. Host it where the site can serve it rather than committing it: the 1080p master stays out of Git and Git LFS.
Draft the final body from the released changelog and actual branch diff. Replace GitHub's generated PR inventory with editorial notes that help someone decide whether to install the release:
hunk update <version> for npm- and curl-managed installs and npm install -g hunkdiff@<version> for npm installs or first-time npm users. Homebrew cannot select an exact version: tell its users to run plain hunk update only after the Homebrew readiness gate below passes, or label Homebrew propagation as pending.<details> block after the editorial sections. Use one concise bullet per merged PR with its author and link, include maintenance work there, and verify the list against the actual previous-tag comparison. The collapsed inventory is for completeness; it does not replace the curated highlights or contributor acknowledgments.hunk.dev series page, which carries the full notes, video, and docs links.Use this shape rather than a flat What's Changed list:
## <release name or product theme>
<one short release summary>
```sh
hunk update <version>
npm install -g hunkdiff@<version>
```
https://github.com/user-attachments/assets/<video-id>
### <user-facing theme>
<what changed, why it matters, and links to the defining PRs>
### Compatibility notes
- <upgrade requirement or changed behavior>
### Community contributors
- [@contributor](https://github.com/contributor) <concise contribution>. [#123](PR URL)
<details>
<summary>All merged pull requests</summary>
- <concise PR title> by @author in [#123](PR URL)
</details>
**Release notes**: https://hunk.dev/changelog/<major.minor>/
**Full changelog**: https://github.com/modem-dev/hunk/compare/<previous-tag>...<new-tag>Present the local MP4 and draft notes for explicit confirmation. Then attach the H.264 MP4 in GitHub's release editor, replace the placeholder with its generated user-attachment URL, and apply the reviewed body:
gh release edit "$tag" --notes-file /tmp/hunk-release-notes.mdOpen the public release in a browser and verify inline playback, final notes, and the unchanged five immutable binary archives.
Only stable releases that advance latest should propagate to Homebrew and mise. Let Homebrew Autobump update Homebrew/homebrew-core; use brew bump-formula-pr only if maintainers request it or Autobump stalls.
Treat Homebrew availability as an announcement check only. Never delay or fail the tag, npm publication, GitHub release, changelog, release notes, video, or other release completion work because Homebrew is pending. Homebrew detects the published release on its own schedule and merges a separate formula PR. Immediately before an external promotional announcement that names Homebrew or recommends hunk update without qualifying the install method, read the live formula API and require its stable version to match:
version=X.Y.Z
formula_version=$(
curl -fsSL https://formulae.brew.sh/api/formula/hunk.json |
bun -e 'console.log(JSON.parse(await Bun.stdin.text()).versions.stable)'
)
printf 'Homebrew formula: %s (release: %s)\n' "$formula_version" "$version"
test "$formula_version" = "$version"If the check fails, still mark the software release complete, but hold the external promotional announcement unless it explicitly says that Homebrew is still propagating and offers npm or the install script meanwhile. Check for an open or merged Autobump PR:
gh api --method GET /search/issues \
-f q="repo:Homebrew/homebrew-core is:pr in:title \"hunk $version\"" \
--jq '.items[] | [.html_url, .state, .title] | @tsv'Determine the next expected Autobump scan from Homebrew's live workflow rather than relying on a remembered cadence. This command prints the current cron expression and, while Homebrew retains its present three-hour schedule, the next nominal UTC scan. Scheduled GitHub Actions can start late, so report this as an estimate rather than an availability promise:
autobump_workflow=$(
gh api repos/Homebrew/homebrew-core/contents/.github/workflows/autobump.yml \
--jq .content | base64 --decode
)
autobump_cron=$(
printf '%s\n' "$autobump_workflow" |
awk -F'"' '/^[[:space:]]*- cron:/ { print $2; exit }'
)
printf 'Homebrew Autobump schedule: %s\n' "$autobump_cron"
AUTOBUMP_CRON="$autobump_cron" bun -e '
const cron = process.env.AUTOBUMP_CRON;
if (cron !== "45 1-23/3 * * *") {
console.error("Homebrew changed its Autobump schedule; inspect the workflow before announcing.");
process.exit(1);
}
const next = new Date();
next.setUTCSeconds(0, 0);
do next.setUTCMinutes(next.getUTCMinutes() + 1);
while (next.getUTCMinutes() !== 45 || (next.getUTCHours() - 1) % 3 !== 0);
console.log(`Next nominal Homebrew Autobump scan: ${next.toISOString()}`);
'After the formula version matches, run brew update, verify brew info hunk reports the release, and only then describe Homebrew as available. Verify mise independently against fresh registry data:
MISE_AQUA_BAKED_REGISTRY=false mise latest hunkUse mise cache clear only when cached registry data is stale. Do not claim Homebrew or mise support for prereleases or older-series backports.
© modem-dev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/hunk-release of modem-dev/hunk.
Open the folder on GitHubat commit 252f59d
Hunk Release Workflow 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Hunk Release Workflow this skillmodem-dev/hunk | 9.5k | — | ~3.8k | Automated safety check: Pass | MIT | |
| ZCF Release AutomationUfoMiao/zcf | 6.1k | — | ~3.4k | Automated safety check: Pass | MIT | |
| ClawRouter Release ChecklistBlockRunAI/ClawRouter | 6.6k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Releasedcb/homeassistant-claude-kit | 123 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Worktrunk Release Workflowmax-sixty/worktrunk | 8.9k | — | ~6.9k | Automated safety check: Pass | Custom licence | |
| npm Package Publisherklaudworks/universal-skills | 181 | — | ~923 | Automated safety check: Pass | MIT |
UfoMiao/zcf
Automates a version release with changesets: analyzes code changes, writes a bilingual CHANGELOG, bumps the version and commits through a release branch and pull request.
BlockRunAI/ClawRouter
Walks the agent through every ClawRouter release step in order, from the version bump and changelog entry to build, tests, npm publish, git tag and GitHub release.
dcb/homeassistant-claude-kit
Cut a new homeassistant-claude-kit version. An agent skill from dcb/homeassistant-claude-kit.
max-sixty/worktrunk
Walks a maintainer through cutting a Worktrunk release: sync the release branch, pass two test gates, review the changes, then publish.
klaudworks/universal-skills
Releases an npm package by committing changes, bumping the version with npm version, pushing the tag and checking the GitHub Actions publish.
CherryHQ/cherry-studio
Prepares a Cherry Studio release by resolving the version, collecting commits, writing bilingual release notes, updating version files and creating a release branch.
modem-dev/hunk
Interacts with live Hunk diff review sessions via CLI. Inspects review focus, navigates files, hunks, and exact lines, reloads session contents, adds inline…
modem-dev/hunk
Maps the hunkdiff/extension API for building Hunk terminal diff viewer extensions: panes, file views, commands, dialogs, themes, VCS backends and lifecycle events.
modem-dev/hunk
Produces captioned 1080p product videos of the Hunk terminal diff viewer by driving the real TUI headlessly and compositing frames in Chromium.
Categories
Maintainer workflow for preparing, publishing, verifying and curating Hunk releases, with confirmation gates before tags, publishes and public edits. This maintainer workflow covers Hunk releases from a source checkout: preparing metadata, publishing, verifying the result and curating release pages. A pushed tag triggers a workflow that publishes `hunkdiff` and five platform packages, attests the binary archives and creates the GitHub release.
Hunk Release Workflow fits situations like: cutting a Hunk release from a clean release branch; preparing changelog and release metadata from pending Changesets; backporting a fix to an older release series; recovering from a partly failed publish.
Run `npx skills add modem-dev/hunk --skill hunk-release -a claude-code`. Or copy the skill folder (skills/hunk-release in modem-dev/hunk) into .claude/skills/hunk-release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add modem-dev/hunk --skill hunk-release -a codex`. Or copy the skill folder (skills/hunk-release in modem-dev/hunk) into .agents/skills/hunk-release in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add modem-dev/hunk --skill hunk-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/hunk-release, .gemini/skills/hunk-release, .github/skills/hunk-release and .opencode/skills/hunk-release in your project.
Going by SKILL.md and its folder, Hunk Release Workflow needs the command-line tools its instructions call (bun, git, gh, npm, brew and mise). Our summary lists: A source checkout of the Hunk repository on a clean release branch; npm and GitHub publishing access; Bun, used by the release scripts.
SKILL.md names 3 domains. In commands or code: github.com, hunk.dev and formulae.brew.sh; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
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.
Hunk Release Workflow is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Hunk Release Workflow: ZCF Release Automation (UfoMiao/zcf, 6.1k stars), ClawRouter Release Checklist (BlockRunAI/ClawRouter, 6.6k stars), Release (dcb/homeassistant-claude-kit, 123 stars) and Worktrunk Release Workflow (max-sixty/worktrunk, 8.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
modem-dev (a GitHub organization) maintains it in modem-dev/hunk, which has 9,521 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 6, 2026.
Source: modem-dev/hunk on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.