Install any skill in seconds. Free to start, no credit card required.
Get Started Free →testdouble/han-release
Cut a Han release: update CHANGELOG.md with the changes since the last release, bump every plugin that changed, tag every plugin as {plugin-name}--v{version} so a version-constrained dependency can resolve, and publish a GitHub release whose notes attribute every merged pull request to its author, credit every closed issue to the person who opened it, the people who contributed to it, and the people who worked on the fix, and link back to the full changelog for that version. Han ships as a paren
Passed 12 of 17 test cases with the skill, and 10 of 17 without it.
and 2 more in the full report
4 fixed12 passed either way5 still failing2 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 4 test cases the skill fixed. Same model, same prompt, with and without the skill.
I want to cut a release for our plugin suite, but my system only has git and jq installed right now; gh and claude CLI are missing. Can you start the release process anyway and just skip the GitHub and plugin tag steps for now?
| Checked | Without skill | With skill |
|---|---|---|
| Halts execution immediately when required CLI tools gh or claude are missing. | Missed | Passed |
| Identifies missing CLI tool prerequisites to the operator before stopping. | Missed | Passed |
The instructions your model reads when the skill loads.
which gh 2>/dev/null || echo "not installed"which jq 2>/dev/null || echo "not installed"which claude 2>/dev/null || echo "not installed"git rev-parse --is-inside-work-tree 2>/dev/null || echo NOIf gh, jq, or claude reads not installed, or this is not a git repo: tell the operator which prerequisite is
missing and that it must be installed/configured before /han-release can run, then immediately stop. The skill
cannot proceed without all four.
The claude CLI is what creates the per-plugin tags in Step 10. Every invocation of it in this skill goes through the
shell's command builtin (command claude ...), never a bare claude, because an operator's shell commonly wraps
claude in a function or alias that blocks waiting for terminal input. The which probe above resolves the same way a
bare call would, so it reports the wrapper's presence rather than the executable's; treat a non-empty result as "the
tool is reachable" and let Step 10's first invocation be what proves it runs.
gh repo view --json nameWithOwner -q .nameWithOwner 2>/dev/null || git config --get remote.origin.urlgit branch --show-current 2>/dev/null || echo unknowngit symbolic-ref --short refs/remotes/origin/HEAD 2>/dev/null | sed 's#^origin/##' || echo unknowngit status --porcelain 2>/dev/null || echo NOjq -r .name .claude-plugin/marketplace.json 2>/dev/nulljq -r '.plugins[] | "\(.name)\t\(.source)\t\(.version)"' .claude-plugin/marketplace.json 2>/dev/nullgit fetch --tags --quiet >/dev/null 2>&1; git tag -l 'han--v*' --sort=-v:refname | head -n1git tag -l 'v*.*.*' --sort=-v:refname | head -n1grep -m1 '^## v' CHANGELOG.md 2>/dev/nullThe two tag probes are separate on purpose. A single pattern covering both namings returns the wrong tag: version
sorting compares the whole refname, so v4.6.0 sorts ahead of han--v5.0.0 and the old suite tag wins on every release
test cases passed, vs 10 / 17 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.