Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Keep CHANGELOG.md idiomatic (Keep a Changelog) and cut a tag-based GitHub release that triggers npm publish CI.
.claude/skills/mikeyobrien-release-changelog/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-12 | ✗→✓ | ▲ Improved | 26% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 60% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-11 | ✓→✗ | ▼ Worse | 75% | 0% |
| case-04 | ✓→✓ | = Same ✓ | -27% | 0% |
Use this SOP to run a clean release process for rho:
CHANGELOG.md (Keep a Changelog + SemVer),package.json version, git tag, and changelog section match,This SOP is designed for the existing workflow in .github/workflows/publish.yml (release.published trigger).
v prefix (example: 0.1.8)YYYY-MM-DD): Release date for changelog headerCHANGELOG.md): Path to changelog filemain): Branch to release fromtrue): Run validation tests before releasetrue): Create GitHub Release with notes from changelogfalse): Push branch/tag after explicit confirmationConfirm version/date and whether this is a stable release.
Constraints:
version as SemVer (X.Y.Z)tag as v{version}Verify the local repository is safe to release.
Constraints:
git status --short){release_branch}git fetch --tags origin)tag already exists locally or on origingh auth status succeeds before attempting release creationCreate/normalize CHANGELOG.md using Keep a Changelog format.
Constraints:
{changelog_path} does not exist, you MUST create it with:# Changelog## [Unreleased]## [Unreleased]## [{version}] - {date}### Added### Changed### Fixed### Removed### SecurityUnreleased into [{version}][Unreleased]: ...compare/{tag}...HEAD[{version}]: ...compare/{previous_tag}...{tag} (or repo root page for first release)Validate the release contract expected by CI.
Constraints:
package.json version equals {version}## [{version}] - {date}{version} is non-empty{run_tests}=true, you MUST run project test gates before taggingCommit version/changelog updates before tagging.
Constraints:
CHANGELOG.md, plus version bumps)chore(release): v{version}Create the release tag from the release commit.
Constraints:
v{version}git show v{version} --no-patch)Push release artifacts and create release notes from changelog.
Constraints:
{push_tag_and_branch}=true, you MUST push branch and tag to origin{create_github_release}=true, you MUST create GitHub Release with notes from {version} changelog sectionv{version})--verify-tag when creating the GitHub ReleaseSuggested command shape:
bashgh release create "v{version}" \ --title "v{version}" \ --notes-file /tmp/release-notes-v{version}.md \ --verify-tag
Confirm CI and package publication status.
Constraints:
v{version}npm view @rhobot-dev/rho versionWhen complete, report:
package.json mismatch with tag: update version and re-commit before creating releasepublish.yml run logs and npm environment permissions## [{version}] section only| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | fail→fail | 7,782 | 7,649 | -2% | 1 | 1 | 0% | 1,286 | 1,617 | +26% | 0 | 0 | — |
case-01 | fail→fail | 3,684 | 9,670 | +162% | 1 | 1 | 0% | 422 | 1,785 | +323% | 0 | 0 | — |
case-02 | fail→fail | 10,065 | 7,996 | -21% | 1 | 1 | 0% | 1,707 | 1,829 | +7% | 0 | 0 | — |
case-03 | fail→fail | 5,820 | 7,169 | +23% | 1 | 1 | 0% | 297 | 1,789 | +502% | 0 | 0 | — |
case-04 | pass→pass | 16,521 | 4,013 | -76% | 1 | 1 | 0% | 2,670 | 1,960 | -27% | 0 | 0 | — |
case-06 | pass→pass | 11,820 | 4,219 | -64% | 1 | 1 | 0% | 1,794 | 1,965 | +10% | 0 | 0 | — |
case-07 | pass→pass | 12,853 | 6,407 | -50% | 1 | 1 | 0% | 1,984 | 2,316 | +17% | 0 | 0 | — |
case-08 | pass→pass | 7,129 | 2,975 | -58% | 1 | 1 | 0% | 1,059 | 1,783 | +68% | 0 | 0 | — |
case-09 | pass→pass | 10,356 | 3,494 | -66% | 1 | 1 | 0% | 1,460 | 1,839 | +26% | 0 | 0 | — |
case-10 | pass→pass | 8,686 | 5,217 | -40% | 1 | 1 | 0% | 1,460 | 2,281 | +56% | 0 | 0 | — |
case-11 | pass→fail | 6,267 | 2,938 | -53% | 1 | 1 | 0% | 996 | 1,744 | +75% | 0 | 0 | — |
case-12 | fail→pass | 7,573 | 1,419 | -81% | 1 | 1 | 0% | 1,224 | 1,541 | +26% | 0 | 0 | — |
case-13 | fail→pass | 5,943 | 1,675 | -72% | 1 | 1 | 0% | 996 | 1,590 | +60% | 0 | 0 | — |
case-14 | pass→pass | 6,968 | 2,487 | -64% | 1 | 1 | 0% | 1,115 | 1,720 | +54% | 0 | 0 | — |
case-15 | pass→pass | 3,901 | 1,947 | -50% | 1 | 1 | 0% | 636 | 1,620 | +155% | 0 | 0 | — |
case-16 | pass→pass | 8,500 | 2,388 | -72% | 1 | 1 | 0% | 1,216 | 1,671 | +37% | 0 | 0 | — |
case-17 | pass→pass | 2,946 | 1,760 | -40% | 1 | 1 | 0% | 403 | 1,567 | +289% | 0 | 0 | — |
case-18 | fail→fail | 8,665 | 3,860 | -55% | 1 | 1 | 0% | 1,569 | 1,994 | +27% | 0 | 0 | — |
case-19 | pass→pass | 4,769 | 2,624 | -45% | 1 | 1 | 0% | 794 | 1,687 | +112% | 0 | 0 | — |
case-20 | fail→pass | 10,822 | 4,637 | -57% | 1 | 1 | 0% | 1,576 | 2,012 | +28% | 0 | 0 | — |
case-21 | pass→pass | 6,593 | 2,148 | -67% | 1 | 1 | 0% | 972 | 1,691 | +74% | 0 | 0 | — |
case-22 | pass→pass | 12,327 | 7,277 | -41% | 1 | 1 | 0% | 1,999 | 2,538 | +27% | 0 | 0 | — |
case-23 | pass→pass | 4,555 | 3,629 | -20% | 1 | 1 | 0% | 592 | 1,851 | +213% | 0 | 0 | — |
case-24 | pass→pass | 2,099 | 2,112 | +1% | 1 | 1 | 0% | 276 | 1,613 | +484% | 0 | 0 | — |
case-25 | pass→pass | 3,660 | 2,508 | -31% | 1 | 1 | 0% | 550 | 1,693 | +208% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted, and 21 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +8 percentage points is the difference between those two pass rates over the 21 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.