Release Core (Test)
SkillCloud & infraInvoke when dev-testing a Cyrus change that spans CYPACK (edgeworker + CLI) and CYHOST (Vercel-hosted GUI) and the hosted GUI needs to point at an unreleased `cyrus-core` from this repo. Publishes `cyrus-core` (and `claude-runner` if needed) as a `-test.N` prerelease under the npm `test` dist-tag so CYHOST can install it via `cyrus-core@test` without affecting the `latest` dist-tag or shipping a real release.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Release Core (Test) skill
What this skill tells your AI
The instructions your AI receives, as published by cyrusagents/cyrus in .claude/skills/release-core-test/SKILL.md and read by ahel’s review.
Publish ONLY the cyrus-core package (and claude-runner if needed) as a dev/test prerelease to npm under the test dist-tag. This is a developer convenience for iterating on cyrus-core without going through the full release flow.
What this skill does NOT do
This skill is intentionally minimal. It does NOT:
- Update
CHANGELOG.mdorCHANGELOG.internal.md - Create a git tag
- Create a GitHub release
- Move any Linear issues
- Open a pull request
- Commit the version bump (the bumped
package.jsonis left as a local working-tree change)
It also does NOT publish any other workspace package (no edge-worker, no cyrus CLI, no linear-event-transport, etc.). The only exception is claude-runner, which is republished if and only if its workspace:* reference would otherwise resolve to an unpublished version (see step 3 below).
Workflow
1. Install dependencies from repo root
pnpm install
2. Build all packages from repo root
pnpm build
Building all packages ensures workspace:* dependencies are resolved before publishing.
3. Determine whether claude-runner needs republishing
cyrus-core depends on claude-runner via workspace:*. When cyrus-core is published, that workspace:* is rewritten to the version currently in packages/claude-runner/package.json. If that version isn't actually on npm yet (because claude-runner has local changes since its last publish), consumers installing cyrus-core@test will fail to resolve the dependency.
Run both of these deterministic checks:
# (a) Is the local claude-runner version already on npm?
LOCAL_CR=$(node -p "require('./packages/claude-runner/package.json').version")
npm view "cyrus-claude-runner@${LOCAL_CR}" version 2>/dev/null
# (b) Does claude-runner have uncommitted/unpushed source changes since its last publish?
git diff --quiet HEAD -- packages/claude-runner/src packages/claude-runner/package.json && echo "clean" || echo "dirty"
Republish claude-runner if either: (a) returns nothing (local version is not on npm), or (b) prints dirty. If both pass cleanly, skip this step. If you're unsure, ask the user.
To republish:
# Determine the next -test.N for claude-runner (same algorithm as cyrus-core below)
# Bump packages/claude-runner/package.json to e.g. 0.0.X-test.N
cd packages/claude-runner
pnpm publish --access public --no-git-checks --tag test
cd ../..
pnpm install # refresh lockfile so cyrus-core picks up the new claude-runner
Otherwise, skip this step entirely.
4. Bump cyrus-core to the next -test.N prerelease version
Algorithm:
- Read the current version from
packages/core/package.json(e.g.0.1.22). - Bump the patch (e.g.
0.1.23). - Append
-test.N, starting atN = 0and incrementing while<bumped>-test.Nalready exists on npm (including aborted/stale prior attempts).
Use this one-liner to find existing -test.N versions for the bumped patch and pick the next N:
BUMPED=0.1.23 # the patch-bumped base, no suffix
npm view cyrus-core versions --json \
| jq -r '.[]' \
| grep -E "^${BUMPED}-test\.[0-9]+$" \
| awk -F'test.' '{print $2}' \
| sort -n | tail -1
# If empty, use N=0. Otherwise use (max + 1).
Write the chosen version (e.g. 0.1.23-test.0) back into packages/core/package.json. Do NOT commit this change — leave it as a local working-tree edit so the developer can decide whether to keep it.
5. Publish cyrus-core with the test dist-tag
cd packages/core
pnpm publish --access public --no-git-checks --tag test
cd ../..
Using --tag test means:
npm install cyrus-core@testwill install this version.- The
latestdist-tag is not moved, so production installs (npm install cyrus-core) are unaffected.
6. Verify the dist-tags landed correctly
npm view cyrus-core dist-tags
Confirm that latest is unchanged from before the publish and test now points to the version you just published. If latest moved, something is wrong — stop and investigate before telling anyone to install it.
7. Print install instructions
After publishing, print both forms so the developer can copy/paste:
Published cyrus-core@<version> under dist-tag `test`.
Install with:
npm install cyrus-core@test
or pinned:
npm install cyrus-core@<version>
If claude-runner was also republished in step 3, include its version too.
Key Notes
- Always use
--no-git-checksso you can publish from a feature branch with a dirty working tree. - Always use
--tag testso thelatestdist-tag is preserved for real releases. - Prerelease versions (anything with a
-suffix like-test.0) are never auto-installed bynpm install cyrus-corewithout an explicit tag or version spec, so this is safe to run repeatedly. - Run
pnpm installafter publishingclaude-runner(if applicable) so the lockfile reflects the new published version beforecyrus-coreis built/published. pnpm install+pnpm buildfrom root takes ~3 minutes combined on a clean tree — plan command timeouts accordingly.
Examples
- "release core test" - Run a dev release of cyrus-core
- "/release-core-test" - Invoke this skill
Signals
- GitHub stars
- 802
- Forks
- 166
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
release-core-test- Source
- github.com/cyrusagents/cyrus