release

Run a Cyrus release by publishing all packages to npm in the correct dependency order, updating changelogs, and creating git tags.

$ Instalar

git clone https://github.com/ceedaragents/cyrus /tmp/cyrus && cp -r /tmp/cyrus/.claude/skills/release ~/.claude/skills/cyrus

// tip: Run this command in your terminal to install the skill


name: release description: Run a Cyrus release by publishing all packages to npm in the correct dependency order, updating changelogs, and creating git tags.

Release

Publish Cyrus packages to npm and create a release.

Pre-Publishing Checklist

  1. Update CHANGELOG.md and CHANGELOG.internal.md:

    • Move items from ## [Unreleased] to a new versioned section in both files
    • Use the CLI version number (e.g., ## [0.1.22] - 2025-01-06)
    • CHANGELOG.md: Focus on end-user impact from the perspective of the cyrus CLI
    • CHANGELOG.internal.md: Internal development changes, refactors, and tooling updates
  2. Check Linear Issues:

    • Review all Linear issues mentioned in the Unreleased changelog
    • These will be moved from 'MergedUnreleased' to 'ReleasedMonitoring' after release
  3. Commit all changes:

    git add -A
    git commit -m "Prepare release v0.1.XX"
    git push
    

Publishing Workflow

1. Install dependencies from root

pnpm install  # Ensures all workspace dependencies are up to date

2. Build all packages from root first

pnpm build  # Builds all packages to ensure dependencies are resolved

3. Publish packages in dependency order

IMPORTANT: Publish in this exact order to avoid dependency resolution issues:

# 1. Packages with no internal dependencies
cd packages/cloudflare-tunnel-client && pnpm publish --access public --no-git-checks
cd ../..
pnpm install  # Update lockfile

cd packages/claude-runner && pnpm publish --access public --no-git-checks
cd ../..
pnpm install  # Update lockfile

# 2. Core package (depends on claude-runner)
cd packages/core && pnpm publish --access public --no-git-checks
cd ../..
pnpm install  # Update lockfile

# 3. Simple agent runner (depends on claude-runner)
cd packages/simple-agent-runner && pnpm publish --access public --no-git-checks
cd ../..
pnpm install  # Update lockfile

# 4. Packages that depend on core
cd packages/linear-event-transport && pnpm publish --access public --no-git-checks
cd ../..
pnpm install  # Update lockfile

cd packages/config-updater && pnpm publish --access public --no-git-checks
cd ../..
pnpm install  # Update lockfile

# 5. Gemini runner (depends on claude-runner, core, simple-agent-runner)
cd packages/gemini-runner && pnpm publish --access public --no-git-checks
cd ../..
pnpm install  # Update lockfile

# 6. Edge worker (depends on all packages above)
cd packages/edge-worker && pnpm publish --access public --no-git-checks
cd ../..
pnpm install  # Update lockfile

4. Publish the CLI

pnpm install  # Final install to ensure all deps are latest
cd apps/cli && pnpm publish --access public --no-git-checks
cd ../..

5. Create git tag and push

git tag v0.1.XX
git push origin <branch-name>
git push origin v0.1.XX

6. Create GitHub Release

Create a GitHub release using the changelog notes as the content:

gh release create v0.1.XX --title "v0.1.XX" --notes-file - << 'EOF'
<paste the changelog notes for this version here>
EOF

Or interactively:

gh release create v0.1.XX --title "v0.1.XX" --notes "$(cat CHANGELOG.md | sed -n '/## \[0.1.XX\]/,/## \[/p' | head -n -1)"

7. Update Linear Issues

After a successful release, move each Linear issue mentioned in the changelog from 'MergedUnreleased' (Done) status to 'ReleasedMonitoring' (also Done) status.

Key Notes

  • Always use --no-git-checks flag to publish from feature branches
  • Run pnpm install after each publish to update the lockfile
  • The simple-agent-runner package MUST be published before edge-worker
  • Build all packages once at the start, then publish without rebuilding
  • This ensures workspace:* references resolve to published versions

Examples

  • "release" - Run the full release process
  • "/release" - Invoke the release skill