.agents/skills/openclaw-release-maintainer/SKILL.md
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
npx skillsauth add qverisai/qverisbot openclaw-release-maintainerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill for release and publish-time workflow. Keep ordinary development changes and GHSA-specific advisory work outside this skill.
docs/reference/RELEASING.md for public policy.openclaw publish is manual workflow_dispatch; creating or pushing a tag does not publish by itself.stable: tagged releases only, published to npm beta by default; operators may target npm latest explicitly or promote laterbeta: prerelease tags like vYYYY.M.D-beta.N, with npm dist-tag beta-beta.N; do not mint new -1 or -2 beta suffixesdev: moving head on mainpackage.jsonapps/android/app/build.gradle.ktsapps/ios/Sources/Info.plistapps/ios/Tests/Info.plistapps/macos/Sources/OpenClaw/Resources/Info.plistdocs/install/updating.mdvYYYY.M.D-N, the repo version locations still stay at YYYY.M.D.appcast.xml.https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xml, and the canonical published file is appcast.xml on main in the openclaw repo.appcast.xml unless a separate beta feed exists.vYYYY.M.D-N, the repo version still stays
at YYYY.M.D, but the mac release must use a strictly higher numeric
APP_BUILD / Sparkle build than the original release so existing installs
see it as newer.vYYYY.M.D-beta.N from the release commitopenclaw YYYY.M.D-beta.NCHANGELOG.md version sectionCHANGELOG.md sorted by impact:
### Changes first### Fixes deduped with user-facing fixes firstBefore tagging or publishing, run:
pnpm build
pnpm ui:build
pnpm release:check
pnpm test:install:smoke
For a non-root smoke path:
OPENCLAW_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke
After npm publish, run:
node --import tsx scripts/openclaw-npm-postpublish-verify.ts <published-version>
YYYY.M.D-N, it also verifies the
upgrade path from YYYY.M.D to YYYY.M.D-N so a correction publish cannot
silently leave existing global installs on the old base stable payload.pnpm checkpnpm buildpnpm ui:buildpnpm release:checkOPENCLAW_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smokeopenclaw/openclaw and the real mac preflight in
openclaw/releases-private for every release.appcast.xml update on main as part of mac release readiness, not an optional follow-up.appcast.xml before uploading
public release assets so the updater feed cannot lag the published binaries.appcast.xml files from the same stale seed.beta to latest is an explicit mode on
.github/workflows/openclaw-npm-release.yml, but it still needs a valid
NPM_TOKEN because npm dist-tag management is separate from trusted
publishing.workflow_dispatch.preflight_only=true to run validation/build/package steps without uploading
public release assets.smoke_test_only=true for branch-safe
workflow smoke tests that use ad-hoc signing, skip notarization, skip shared
appcast generation, and do not prove release readiness.preflight_only=true on the npm workflow is also the right way to validate an
existing tag after publish; it should keep running the build checks even when
the npm version is already published..github/workflows/macos-release.yml in openclaw/openclaw is now a
public validation-only handoff. It validates the tag/release state and points
operators to the private repo. It still rebuilds the JS outputs needed for
release validation, but it does not sign, notarize, or publish macOS
artifacts.openclaw/releases-private/.github/workflows/openclaw-macos-validate.yml
is the required private mac validation lane for swift test; keep it green
before any real mac publish run starts.openclaw/releases-private/.github/workflows/openclaw-macos-publish.yml.appcast.xml generation.main; branch-dispatched publish
attempts should fail before the protected environment is reached.npm-release environment must be approved by @openclaw/openclaw-release-managers before publish continues.openclaw/releases-private/.github/workflows/openclaw-macos-publish.yml for
private mac preflight artifact preparation and real publish artifact
promotion..zip, .dmg, and
.dSYM.zip assets to the existing GitHub release in openclaw/openclaw
automatically when OPENCLAW_PUBLIC_REPO_RELEASE_TOKEN is present in the
private repo mac-release environment.macos-appcast-<tag> artifact from the successful private mac workflow and
then update appcast.xml on main.appcast.xml
unless a separate beta Sparkle feed exists.mac-release environment. If the GitHub
plan does not yet support required reviewers there, do not assume the
environment alone is the approval boundary; rely on private repo access and
CODEOWNERS until those settings can be enabled.NPM_TOKEN or the plugin OTP flow for OpenClaw releases.@openclaw/* plugin publishes use a separate maintainer-only flow.scripts/package-mac-dist.sh to build, sign, notarize, and package the app;
manual GitHub release asset upload; then scripts/make_appcast.sh plus the
appcast.xml commit to main.scripts/package-mac-dist.sh now fails closed for release builds if the
bundled app comes out with a debug bundle id, an empty Sparkle feed URL, or a
CFBundleVersion below the canonical Sparkle build floor for that short
version. For correction tags, set a higher explicit APP_BUILD.scripts/make_appcast.sh first uses generate_appcast from PATH, then
falls back to the SwiftPM Sparkle tool output under apps/macos/.build.appcast.xml.appcast.xml unless a separate beta feed exists..zip, .dmg, and .dSYM.zip assetsappcast.xml on main points at the new stable zipCFBundleVersion at or above the canonical Sparkle build floorCHANGELOG.md and assemble the matching GitHub release notes..github/workflows/openclaw-npm-release.yml with preflight_only=true
and choose the intended npm_dist_tag (beta default; latest only for
an intentional direct stable publish). Wait for it to pass. Save that run id
because the real publish requires it to reuse the prepared npm tarball..github/workflows/macos-release.yml in openclaw/openclaw and wait
for the public validation-only run to pass.openclaw/releases-private/.github/workflows/openclaw-macos-validate.yml
with the same tag and wait for the private mac validation lane to pass.openclaw/releases-private/.github/workflows/openclaw-macos-publish.yml
with preflight_only=true and wait for it to pass. Save that run id because
the real publish requires it to reuse the notarized mac artifacts..github/workflows/openclaw-npm-release.yml with the same tag for
the real publish, choose npm_dist_tag (beta default, latest only when
you intentionally want direct stable publish), keep it the same as the
preflight run, and pass the successful npm preflight_run_id.npm-release approval from @openclaw/openclaw-release-managers.beta, start
.github/workflows/openclaw-npm-release.yml again after beta validation
passes with the same stable tag, promote_beta_to_latest=true,
preflight_only=false, empty preflight_run_id, and npm_dist_tag=beta,
then verify latest now points at that version.openclaw/releases-private/.github/workflows/openclaw-macos-publish.yml
for the real publish with the successful private mac preflight_run_id and
wait for success..zip, .dmg,
and .dSYM.zip artifacts to the existing GitHub release in
openclaw/openclaw.macos-appcast-<tag> from the successful
private mac run, update appcast.xml on main, and verify the feed.appcast.xml artifact and do not update the shared production feed unless a
separate beta feed exists.openclaw-ghsa-maintainer for GHSA advisory inspection, patch/publish flow, private-fork validation, and GHSA API-specific publish checks.tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.
tools
Cross-channel X (Twitter) operations using the configured X plugin: post tweets, reply, quote, like, repost, follow, unfollow, DM, search, timeline, tweet details, user info — from any channel (Feishu, X, Telegram, CLI, Web, webchat, etc. ). Use when the user mentions any X/Twitter action regardless of which channel the conversation is on.
development
Get current weather and forecasts via wttr.in or Open-Meteo. Use when: user asks about weather, temperature, or forecasts for any location. NOT for: historical weather data, severe weather alerts, or detailed meteorological analysis. No API key needed.
tools
Send WhatsApp messages to other people or search/sync WhatsApp history via the wacli CLI (not for normal user chats).