Release
SkillDev toolsCut a release — commit any staged changes, tag, create GitHub release, and optionally notify Webex. Use when the user says /release, /release --with-webex, or /release --preview.
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 skill
What this skill tells your AI
The instructions your AI receives, as published by mycelium-io/mycelium in .claude/skills/release/SKILL.md and read by ahel’s review.
Commit latest changes (if any), tag, cut a GitHub release, and optionally notify Webex.
Arguments
--with-webex— after releasing, post a summary to Webex (default:Mycelium Release Notesonly; add--with-webex=engto also post toIoC::Mycelium Eng).--preview— cut a prerelease build for testing without affecting stable users. Skips Docker:latest, Homebrew, and ClawHub. Webex still gets a short preview ping (eng channel only — not user-facing release notes). Testers opt in viamycelium upgrade --version <tag>.
Why preview releases are safe
The release pipeline's "promote to latest" steps (Docker :latest tags, GH "Latest" label, Homebrew formula, ClawHub) are gated on the tag matching a stable pattern. Tags containing rc, alpha, beta, or preview are detected as prereleases by the detect-release-type job in .github/workflows/release.yml and bypass all of those.
install.sh and mycelium upgrade both follow the GitHub /releases/latest redirect, which only resolves to releases NOT marked as prerelease. So stable users never see preview builds. Testers install with an explicit version pin.
Steps
-
Commit staged changes — Run
git status. If there are uncommitted changes, run /precommit checks then commit directly to main (admin push, no PR needed). Use a conventional commit message.For
--preview: do NOT commit apyproject.tomlversion bump to main. The release workflow seds the version in-place during the build only — main keeps tracking the next stable version, not the preview. -
Determine next tag —
- Stable (
/release): Rungh release list --limit 5to find the current "Latest" release tag. Increment the patch version (e.g.v1.0.0→v1.0.1). - Preview (
/release --preview): Find the latest stable tag (highest non-prerelease ingh release list). Target version is<latest-stable-patch+1>. Then check existing prereleases for that target: ifvX.Y.Zrc1exists, cutvX.Y.Zrc2, etc. First preview for a target version is alwaysrc1. Use PEP 440 format with no separator (vX.Y.ZrcN, NOTvX.Y.Z-rc.N) so the wheel filename matches whatinstall.shexpects.
- Stable (
-
Check for new migrations — Stable only. Run:
git diff <prev-stable-tag>..HEAD -- fastapi-backend/alembic_migrations/versions/If any new migration files exist, note this in the changelog and include
mycelium migratein the upgrade instructions in the Webex message (beforemycelium doctor). -
Generate the CHANGELOG.md entry — Stable only. Skipped for
--preview: prerelease iterations get rolled up into the next stable's entry, not their own.No
[Unreleased]block is maintained onmain. Each release's section is derived fromgit log <prev-stable-tag>..HEAD --no-merges --onelineat release time. Group commits by conventional-commit prefix:feat:→ Addedfix:→ Fixedrefactor:,perf:,chore:, dependency bumps, infra → Changed- revert / deletion commits → Removed
Skip pure
docs:,style:,test:,ci:commits unless they materially affect users. Reword each line to user-facing language (drop the prefix, keep PR links). Prepend the new section directly under the header preface — do NOT touch older entries.Commit the changelog update directly to
main(admin push, no PR) with messagechore(release): changelog for <tag>. This commit must land before the tag is pushed so the tag points at the commit that includes its own entry. -
Tag and push — Run:
git tag <new-tag> && git push origin <new-tag>The
release.ymlworkflow detects whether the tag is a prerelease and gates the rest of the pipeline accordingly. -
Create GitHub release — The
release.ymlworkflow handles this automatically (viasoftprops/action-gh-release), including settingprerelease: truefor preview tags. No manualgh release createneeded.Wait for the workflow to finish (
gh run watchorgh run list --workflow=release.yml --limit 1). If it fails, fix and re-run before posting any notifications. -
Webex notification — Invoke
/webex(no confirmation needed). Behavior depends on whether this is a stable or preview release.Stable release — when
--with-webexis passed, post a bullet-point changelog summary with the tag and release URL. Each bullet should include the PR link if one exists (e.g.- feat: description ([#123](https://github.com/mycelium-io/mycelium/pull/123))). End the summary with a markdown link to the full changelog:[Full changelog](https://github.com/mycelium-io/mycelium/blob/main/CHANGELOG.md). Follow with upgrade instructions using triple-backtick code blocks so they're copyable:To upgrade: mycelium upgrade && mycelium pull mycelium migrate # if this release includes new migrations mycelium adapter add claude-code --reinstall # if using claude-code mycelium adapter add cursor --reinstall # if using cursor mycelium doctor # to check health of servicesInclude
mycelium migrateonly if step 3 found new migration files. Omit the line otherwise. Post to:Mycelium Release Notes— always (room ID in/webexskill)IoC::Mycelium Eng— only if--with-webex=engwas passed (room ID in/webexskill)
Preview release (
--preview) — post a short eng-only ping toIoC::Mycelium Eng(NOTMycelium Release Notes— that channel is user-facing). No changelog. Use--markdownso the code blocks render. Just the tag, the GH release URL, and the install/upgrade commands testers need:Preview build cut: <tag> <release-url> Test on a fresh server: ```bash MYCELIUM_VERSION=<tag-without-v> curl -fsSL https://mycelium-io.github.io/mycelium/install.sh | bash mycelium pull --version <tag-without-v>Or upgrade in place:
mycelium upgrade --version <tag-without-v> mycelium pull --version <tag-without-v>Roll back:
mycelium upgrade --version <previous-stable> mycelium pull --version latest`mycelium pull --version <tag>` is the critical second step — it pins both `mycelium-backend` and `mycelium-db` images via `MYCELIUM_IMAGE_TAG` in `~/.mycelium/.env`. Without it, the new CLI runs against stale stable containers. Stable users are unaffected — `install.sh` and `mycelium upgrade` (no `--version`) still resolve to the latest stable, and `mycelium pull` (no `--version`) still pulls `:latest`. -
Mycelium patch notes — Skipped for
--preview(or scope to apreviews/<tag>key if the user explicitly asks for it). Otherwise write the same changelog summary to the active Mycelium room:mycelium memory set "releases/<tag>" "<same bullet-point summary as Webex>" --handle claude-code-agentThis keeps a persistent record of what shipped and when, visible to all agents sharing the room.
Signals
- GitHub stars
- 117
- Forks
- 12
- Last commit
- Sep 2026
- Hacker News mentions
- 20
Advanced
- Catalog kind
- skill
- Gateway key
release-mycelium-io- Source
- github.com/mycelium-io/mycelium