
release
Cut an OpenWork release, release the app, publish a new version, rerun or recover a release tag, verify release assets. Tag-driven GitHub Actions release that makes zero commits to the repo.
- Installs
- 121
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/different-ai/openwork --skill release- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads release automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Skill: release
Cut an OpenWork release. The "Release App" workflow
(.github/workflows/release-macos-aarch64.yml) builds, signs, and publishes
the desktop app assets on the GitHub release. Full runbook:
docs/RELEASING.md.
Versions live in git tags only. Every committed package.json holds the
permanent 0.0.0-dev placeholder; CI stamps the tag-derived version into the
workspace at build time (scripts/release/stamp-version.mjs). A release makes
zero commits to this repo — no bump commit, no backfill PR, no packaging
PR.
A release is done when the run is green and the GitHub release is published (not a draft) — never when the tag is created.
Before you tag: open fix PRs and fork PRs
Run this before release:cut or any manual tag. It exists because a fork PR
carrying the exact fix for a blank-window-on-launch regression sat open for a
day before the affected version was tagged (incident 2026-09-09): fork PRs
never receive Warden clearance (warden.yml skips them and
warden-clearance.yml requires head_repository == repository), so nothing
surfaces them until a human looks.
List, against dev, every open PR opened since the previous stable tag whose
title or body matches fix(app)|crash|blank|white screen|regression|first launch, plus every open fork PR created or updated in that window:
export R=different-ai/openwork
PREV=$(gh release list -R $R --exclude-drafts --exclude-pre-releases --limit 1 --json tagName --jq '.[0].tagName')
SINCE=$(gh release view "$PREV" -R $R --json createdAt --jq '.createdAt')
echo "previous tag $PREV created $SINCE"
gh pr list -R $R --state open --base dev --limit 300 --search "sort:created-asc" \
--json number,title,body,isCrossRepository,createdAt,updatedAt,url \
| jq -r --arg since "$SINCE" '.[]
| select((.createdAt >= $since
and ((.title + " " + .body) | test("fix\\(app\\)|crash|blank|white screen|regression|first launch"; "i")))
or (.isCrossRepository and .updatedAt >= $since))
| "#\(.number)\(if .isCrossRepository then " [FORK]" else "" end) \(.title) \(.url)"'
Then the fork backlog: open fork PRs of any age describing a crash or startup failure. Scan the titles; a match for the bug class you are shipping (or any blank/white-screen/first-launch fix) blocks the same way.
gh pr list -R $R --state open --base dev --limit 300 \
--json number,title,body,isCrossRepository,url \
| jq -r '.[] | select(.isCrossRepository
and ((.title + " " + .body) | test("crash|blank|white screen|first launch|regression"; "i")))
| "#\(.number) \(.title) \(.url)"'
For every PR listed, decide one of:
- Land it first — review it (fork PRs:
review-a-contributor-prskill), merge todev, then tag. - Ship anyway — the release goes out without it. This is only allowed as
an explicit, recorded decision: paste the list of PR numbers, who decided,
and the one-line reason into the release notes PR that
changelog.ymlopens after publish (docs(changelog): release notes for vX.Y.Z, branchautomation/changelog-vX.Y.Z-*), under aKnown open fixesheading. If the notes PR has not appeared yet, put the same text in the GitHub release body (gh release edit vX.Y.Z -R $R --notes-file ...) and move it when the PR opens. - Not a fix / not relevant — say so in the same list; a false positive still gets one line, so the next release does not re-triage it silently.
An empty list is also recorded (Known open fixes: none matched). Tagging
with a non-empty list and no recorded decision is the failure mode this step
prevents; do not proceed.
Cut a release (default path)
pnpm release:cut # dispatches Release App with bump=patch
pnpm release:cut minor # or major
pnpm release:cut --version 0.19.0
pnpm release:cut:watch # same as release:cut, then tails the run
Equivalent by hand:
gh workflow run "Release App" --repo different-ai/openwork -f bump=patch
The run resolves the next version from existing v* tags, creates the tag on
origin/dev HEAD, verifies it (scripts/release/verify-tag.mjs: stable
format + strictly greater than every other stable tag), stamps the version
into the CI workspace, builds all 18 electron matrix legs, publishes npm +
Daytona + AUR, and flips the draft release public.
The tag ref is created via REST with the org-owned diff-warden app token
(a v* ruleset bypass actor; WARDEN_APP_ID + WARDEN_PRIVATE_KEY in the
warden-clearance environment). The app's tag retriggers the workflow; that duplicate run is skipped by an
actor guard. If the tag push is rejected, the run fails with instructions —
fix the ruleset bypass or fall back to a manual admin tag push.
Tag-first (expedited, admins only)
To release a commit that is not yet reviewed onto dev (incident response),
push the tag manually — the tag names exactly the code that ships:
git tag vX.Y.Z <sha>
git push origin vX.Y.Z # v* ruleset grants admins bypass
The Expedited Release Audit workflow opens a post-hoc review issue when the
tagged commit is not on dev. Never push dev directly or bypass its branch
rules.
Watch
gh run list --repo different-ai/openwork --workflow "Release App" --limit 1
gh run watch <run-id> --repo different-ai/openwork --exit-status --interval 90
Publishing is gated on the electron matrix, electron assets, and npm publish.
Publish AUR (continue-on-error) and Build + Push Daytona Snapshot are
non-blocking channels: their failures don't stop the release — rerun the
workflow with the same tag once the channel recovers.
Rerun an existing tag (recovery) — transient failures, or replaying non-blocking channels:
gh workflow run "Release App" --repo different-ai/openwork -f tag=vX.Y.Z
If the release is already published, a recovery run skips every desktop
build leg and the updater-manifest merge; it replays only npm, AUR, and
Daytona. Rebuilding re-signs the installers, and a run that fails before
publish-release would leave latest*.yml pointing at bytes that no longer
exist. Every auto-update then fails with sha512 checksum mismatch (v0.18.52).
Ship new desktop bytes as the next patch.
Recovery runs skip tag creation and monotonicity, build source pinned to the
tag, and pick up workflow-file fixes from dev automatically (the workflow
definition runs from the dispatched ref; only the checked-out sources are
pinned to the tag).
If the run fails before the release is published: land the fix on dev
via a normal protected-branch PR and cut the next patch (pnpm release:cut).
Only delete/recreate a tag after verifying the GitHub release is still
draft-only:
git push --delete origin vX.Y.Z
Verify
gh release view vX.Y.Z --repo different-ai/openwork --json assets --jq '.assets[].name'
Expect the app assets (openwork-<platform>-X.Y.Z.*, latest*.yml updater
manifests), including:
openwork-mac-arm64-X.Y.Z.dmgopenwork-mac-x64-X.Y.Z.dmgopenwork-win-x64-X.Y.Z.exe
The desktop updater 404s on latest*.yml until the release is published —
that error in a running app during the build window is expected and
self-heals. Spot-check a download URL resolves (302 to release-assets CDN):
curl -sI "https://github.com/different-ai/openwork/releases/download/vX.Y.Z/openwork-mac-arm64-X.Y.Z.dmg" | head -2
Confirm npm view openwork-server version matches.
Validate a published release
Once the assets are published, run the validate-a-release skill
(.opencode/skills/validate-a-release/SKILL.md) against the released
mac-arm64 zips before telling anyone the version is safe to roll out: it
checks the updater manifests' sha512 and verifies signing/notarization.
Notes
- Desktop installer fixes only reach users through a new release — the org
install door (
/v1/install/:platform) 302s to versioned assets. - den-api discovers published versions from the GitHub Releases API at
runtime (
ee/apps/den-api/src/desktop-releases.ts): the new version is live for orgs as soon as the release is published — no den deploy needed. The committedgenerated/desktop-versions.tsis only a cold-start/offline fallback. - AUR publishes by rendering the committed
packaging/aurtemplate (pkgver=0.0.0) in the CI workspace and pushing to aur.archlinux.org — the AUR-side commit is that channel's publish protocol; this repo stays untouched. - Native workspace deps must stay converged on one major across all apps — electron-builder rebuilds every copy it finds (see #3561/#3563 for the three-release outage this caused).
FAQ
What does the release skill do?
Cut an OpenWork release, release the app, publish a new version, rerun or recover a release tag, verify release assets. Tag-driven GitHub Actions release that makes zero commits to the repo.
How do I install release?
Run npx skills add https://github.com/different-ai/openwork --skill release in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/release/ (personal) or .claude/skills/release/ (project).
Which AI agents can use release?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is release safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains release?
It is published by different-ai in different-ai/openwork. It has 121 recorded installs.
More from different-ai/openwork
opencode-primitives
different-ai/openwork
Reference OpenCode docs when implementing skills, plugins, MCPs, or config-driven behavior.
opencode-bridge
different-ai/openwork
Bridge between OpenWork UI and OpenCode runtime
solidjs-patterns
different-ai/openwork
SolidJS reactivity + UI state patterns for OpenWork
opencode-mirror
different-ai/openwork
Maintain the local OpenCode mirror for self-reference
Popular devops & cloud skills
microsoft-foundry
microsoft/azure-skills
Build, deploy, evaluate, optimize, fine-tune, and manage Microsoft Foundry agents, models, and resources end to end. USE FOR: foundry, azd ai agent, azd provision/deploy, hosted agent scaffold/develop/run/deploy/troubleshoot, prompt agent create, managed harness agent create, GitHub Copilot harness agent, create agent, update agent, add tool to agent, invoke agent, agent insights, evaluate agent, batch eval, continuous eval, continuous monitoring, agent CI/CD, optimize prompt, improve prompt, optimize agent instructions, Agent Optimizer scaffold, dataset curation from traces, deploy model, model fine-tuning (SFT/DPO/RFT), Foundry project, RBAC, role assignment, permissions, quota, capacity, region, deployment failure, AI Services, create Foundry resource, knowledge index, customize deployment, onboard, availability, training-data, grader, distillation, large file upload. DO NOT USE FOR: Azure Functions, App Service, general Azure deploy (use azure-deploy), general Azure prep (use azure
azure-diagnostics
microsoft/azure-skills
Debug Azure production issues on Azure using AppLens, Azure Monitor, resource health, and safe triage. WHEN: debug production issues, troubleshoot app service, app service high CPU, app service deployment failure, troubleshoot container apps, container app 503 or target port mismatch, troubleshoot functions, function telemetry missing or stopped after a config/connection-string change, troubleshoot AKS, VM RDP, Linux SSH, VM black screen, can't connect to VM, reset VM password, NSG or firewall blocking, kubectl cannot connect, kube-system/CoreDNS failures, pod pending, crashloop, node not ready, upgrade failures, analyze logs, KQL, insights, image pull failures, cold start issues, health probe failures, resource health, root cause of errors, troubleshoot event hubs, troubleshoot service bus, messaging SDK error, AMQP connection failure, message lock lost, lock renewal during long-running processing, service bus dead letter.
azure-prepare
microsoft/azure-skills
Prepare azd-based Azure projects for deployment: generates azure.yaml, infrastructure (Bicep/Terraform), and Dockerfiles for the Azure Developer CLI (azd) workflow. USE ONLY when the user explicitly wants to use azd as the deployment tool, or the project already has an azure.yaml file. DO NOT USE FOR: non-azd deployments, Python App Service code-only deploys (use python-appservice-deploy), or cross-cloud migration (use azure-cloud-migrate). WHEN: prepare app for azd, create azure.yaml, set up azd infrastructure, modernize app for Azure with azd, deploy with azd, function app, timer trigger, service bus trigger, event-driven function, managed identity, generate Bicep, generate Terraform, create and deploy to Azure.
azure-ai
microsoft/azure-skills
Use for Azure AI: Search, Speech, OpenAI, Document Intelligence. Helps with search, vector/hybrid search, speech-to-text, text-to-speech, transcription, OCR. WHEN: AI Search, query search, vector search, hybrid search, semantic search, speech-to-text, text-to-speech, transcribe, OCR, convert text to speech.
azure-deploy
microsoft/azure-skills
Execute Azure deployments for ALREADY-PREPARED applications that have existing .azure/deployment-plan.md and infrastructure files. DO NOT use this skill when the user asks to CREATE a new application — use azure-prepare instead. This skill runs azd up, azd deploy, terraform apply, and az deployment commands with built-in error recovery. Requires .azure/deployment-plan.md from azure-prepare and validated status from azure-validate. WHEN: "run azd up", "run azd deploy", "execute deployment", "push to production", "push to cloud", "go live", "ship it", "bicep deploy", "terraform apply", "publish to Azure", "launch on Azure". DO NOT USE WHEN: "create and deploy", "build and deploy", "create a new app", "set up infrastructure", "create and deploy to Azure using Terraform" — use azure-prepare for these.
azure-validate
microsoft/azure-skills
Pre-deployment validation for Azure readiness. Run deep checks on configuration, infrastructure (Bicep or Terraform), RBAC role assignments, managed identity permissions, and prerequisites before deploying. WHEN: validate my app, check deployment readiness, run preflight checks, verify configuration, check if ready to deploy, validate azure.yaml, validate Bicep, test before deploying, troubleshoot deployment errors, validate Azure Functions, validate function app, validate serverless deployment, verify RBAC roles, check role assignments, review managed identity permissions, what-if analysis, validate Container Apps deployment.