Use this skill for EVERY ClawRouter release. Enforces the full checklist — version sync, CHANGELOG, build, tests, npm publish, git tag, GitHub release. No step can be skipped.
64
76%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./skills/release/SKILL.mdThis skill is mandatory for every release. Execute every step in order. Do not skip.
Read the current version:
cat package.json | grep '"version"'Ask: "What version are we releasing?" Confirm it follows semver and is higher than current.
package.json VersionEdit package.json — bump "version" to the new version.
Open CHANGELOG.md. Add a new section at the top (after the header) in this format:
## v{VERSION} — {DATE}
- **Feature/Fix name** — description
- **Feature/Fix name** — descriptionRules:
Mar 8, 2026No file edit needed here. Earlier releases (pre-v0.12.x) required manually
updating a CURRENT_CLAWROUTER_VERSION constant in blockrun's
src/app/api/v1/chat/completions/route.ts. That constant has been replaced:
the server now fetch-es https://registry.npmjs.org/@blockrun/clawrouter/latest
at process startup and uses the returned version to drive the
update_available hint embedded in 429 responses to outdated clients.
// blockrun/src/app/api/v1/chat/completions/route.ts
let latestClawRouterVersion: string | null = process.env.CLAWROUTER_CURRENT_VERSION || null;
fetch("https://registry.npmjs.org/@blockrun/clawrouter/latest", {
signal: AbortSignal.timeout(5000),
})
.then((r) => r.json())
.then((data) => {
if (data.version) latestClawRouterVersion = data.version;
})
.catch(() => {
/* keep env var fallback */
});Implications:
npm publish in Step 11 IS the entire "sync blockrun" action. After that
step lands, the next blockrun server restart will fetch and surface the new
version. No manual constant edit. No separate PR in the blockrun repo.CLAWROUTER_CURRENT_VERSION env var is the cold-start fallback (used only
when the registry fetch fails). It exists for resilience, not as the
primary mechanism — don't touch it on every release.npm view @blockrun/clawrouter version (the same registry endpoint
blockrun's server hits).Skip to Step 5.
npm run buildFix any TypeScript or build errors before proceeding.
npm test
npm run typecheck
npm run lintAll must pass. Fix failures before proceeding.
Stage and commit:
git add package.json CHANGELOG.md
git commit -m "chore: bump version to {VERSION}"No companion commit in the blockrun repo is needed — the server picks up new versions automatically via the npm registry fetch documented in Step 4.
git push origin maingit tag v{VERSION}
git push origin v{VERSION}gh release create v{VERSION} \
--title "v{VERSION}" \
--notes "$(sed -n '/^## v{VERSION}/,/^## v[0-9]/p' CHANGELOG.md | head -n -1)"Verify the release on GitHub: https://github.com/BlockRunAI/ClawRouter/releases
The release notes must match the CHANGELOG entry exactly.
npm publish --access publicVerify: https://npmjs.com/package/@blockrun/clawrouter
Expected output: + @blockrun/clawrouter@{VERSION}
Run this checklist to confirm everything is in sync:
# 1. package.json version
node -p 'require("./package.json").version'
# 2. CHANGELOG has the entry
head -10 CHANGELOG.md
# 3. npm package is live (this is also what blockrun's server fetches —
# matching version here means the user-facing update nudge will fire correctly)
npm view @blockrun/clawrouter version
# 4. GitHub tag exists
git tag --list 'v{VERSION}'
# 5. GitHub release exists
gh release view v{VERSION}All 5 must match the new version. If any mismatch, fix before declaring the release done.
| Mistake | Prevention |
|---|---|
Hand-editing CURRENT_CLAWROUTER_VERSION (no longer exists) | Step 4 — server now auto-fetches |
| CHANGELOG entry missing or incomplete | Step 3 — write it before building |
| npm publish before tests pass | Steps 5-6 must precede Step 11 |
| GitHub release notes empty | Step 10 — extract from CHANGELOG |
| Git tag not pushed | Step 9 — push tag separately |
| docs not reflecting new features | Update docs in same PR as the feature |
c6587c1
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.