/release
Cuts a project release. Discovers the project's release procedure (Makefile target, RELEASING.md, CI workflow, etc.) and offers to capture it durably if missing. Always invokes /review-release as preflight, proposes a version bump from CHANGELOG, then presents an exact command
$ npx -y skills add chrisallenlane/claude-swe-workflows --skill release --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/release
Context preview
The summary Claude sees to decide when to auto-load this skill.
Cuts a project release. Discovers the project's release procedure (Makefile target, RELEASING.md, CI workflow, etc.) and offers to capture it durably if missing. Always invokes /review-release as preflight, proposes a version bump from CHANGELOG, then presents an exact command
SKILL.md
release.SKILL.mdname: release
description: Cuts a project release. Discovers the project's release procedure (Makefile target, RELEASING.md, CI workflow, etc.) and offers to capture it durably if missing. Always invokes /review-release as preflight, proposes a version bump from CHANGELOG, then presents an exact command plan for operator confirmation before executing step-by-step. Halts on first failure rather than attempting rollback.
model: opus
Release - Cut a Project Release
Executes the project's release procedure with safety guards appropriate to a high-blast-radius operation. Discovers the procedure from the project itself rather than dictating one, always runs `/review-release` as preflight, and never pushes past a BLOCKER. Plans before executing; halts on first failure rather than guessing at recovery.
**Scope of action:** local repo and configured remotes. The skill pushes commits, pushes tags, and (when the procedure includes them) publishes to package registries. It does not attempt automatic rollback of partially-executed releases.
**Reversibility note:** local steps (version bump, commit, local tag) are reversible with `git reset` / `git tag -d`. The remote push is effectively irreversible once anyone has fetched. Package-registry publication is irreversible (most registries permit yank but not delete). The skill names each step's reversibility class in the plan.
Philosophy
**High blast radius warrants high friction.** Tagging and pushing a release is the kind of action that should never happen by accident. The skill is generous with confirmation prompts and pessimistic about partial-failure recovery. Auto-execution is never the default.
**Composition, not duplication.** Preflight checking is `/review-release`'s job. This skill always invokes it and fail-stops on red. It does not re-implement the checklist or offer to skip it.
**Discover the procedure, don't invent it.** Release procedure is project-specific — `make release`, `npm publish`, `cargo publish`, `gh release create`, a custom CI workflow, or some combination. The skill searches the conventional surfaces before falling back to asking the user. If asked, it offers durable capture so the next release is fully automated.
**Halt on first failure.** Release sequences are not atomic. A failure halfway through (e.g., tag pushed but `npm publish` failed) leaves the project in a partial state. The skill stops at the first failure and surfaces the partial state for human decision rather than pushing through or guessing at rollback.
Workflow Overview
┌────────────────────────────────────────────────────────┐
│ RELEASE │
├────────────────────────────────────────────────────────┤
│ 1. Detect repo context │
│ 2. Discover release procedure │
│ 3. If procedure not found: offer durable capture │
│ 4. Determine target version (propose from CHANGELOG) │
│ 5. Idempotence check (scan for partial prior run) │
│ 6. Run /review-release as preflight (fail-stop) │
│ 7. Construct release plan (commands + reversibility) │
│ 8. Present plan + confirm │
│ 9. Execute step-by-step (one pause at local→remote │
│ boundary; halt on first failure) │
│ 10. Final summary │
└────────────────────────────────────────────────────────┘
Workflow Details
1. Detect Repo Context
Run all of the following; abort cleanly on any failure:
- **Is this a git repo?** `git rev-parse --is-inside-work-tree`. Abort if not.
- **Main branch detection.** Try `git symbolic-ref refs/remotes/origin/HEAD`, then check for `main`, then `master`. Ask the user if none detected.
- **Current branch.** `git branch --show-current`.
- **Working tree clean.** `git status --porcelain`. **Abort if dirty** with the suggestion: "Commit or stash before releasing." Releases from a dirty tree are unsafe.
- **Up-to-date with origin.** `git fetch`, then check `git rev-list --count HEAD..@{u}`. If behind, abort with the suggestion to pull. If ahead, note this (it's expected if the release commit is being prepared locally, but flag it).
- **On the main branch.** If current branch is not the main branch, ask the user to confirm intent — releasing from a non-main branch is unusual but valid (e.g., backport release lines). Do not abort; defer to the user.
2. Discover Release Procedure
Search the following surfaces in order. Stop at the first hit, but record every hit (procedure may span multiple surfaces — e.g., Makefile target + RELEASING.md narrative):
1. **Makefile** — parse for a `release`, `publish`, or `tag` target. Read the recipe. 2. **RELEASING.md** or **RELEASE.md** at repo root. 3. **CONTRIBUTING.md** — look for a section titled "Release", "Releasing", or "Cutting a Release". 4. **CLAUDE.md** (project-level) — look for the same. 5. **package.json** — scripts named `release`, `publish`, `prepublish*`, `version*`, `postversion`. 6. **pyproject.toml** / **Cargo.toml** / equivalent — packaging metadata that implies a publish step. 7. **`.github/workflows/release.yml`** or similar CI release config. 8. **Git tag history** — `git log --tags --simplify-by-decoration --pretty="format:%d %s"` to infer pattern from prior releases (tag format like `v1.2.3` vs `1.2.3`, accompanying commit message convention like `chore: release v1.2.3`).
Record what was found and where. **Prefer executable sources over prose** — a Makefile target is the authoritative procedure if it exists.
3. Offer Durable Capture if Missing
If step 2 found no procedure (no executable target, no prose doc, no CI workflow, no git-tag pattern beyond bare history):
- Tell the user no procedure was discoverable.
- Ask the user to describe the release steps in order.
- Once described, offer four options for where to record them:
- **Makefile target** (Recommended) — executable, ver
Read more
name: release description: Cuts a project release. Discovers the project's release procedure (Makefile target, RELEASING.md, CI workflow, etc.) and offers to capture it durably if missing. Always invokes /review-release as preflight, proposes a version bump from CHANGELOG, then presents an exact command plan for operator confirmation before executing step-by-step. Halts on first failure rather than attempting rollback. model: opus
Release - Cut a Project Release
Executes the project's release procedure with safety guards appropriate to a high-blast-radius operation. Discovers the procedure from the project itself rather than dictating one, always runs `/review-release` as preflight, and never pushes past a BLOCKER. Plans before executing; halts on first failure rather than guessing at recovery.
**Scope of action:** local repo and configured remotes. The skill pushes commits, pushes tags, and (when the procedure includes them) publishes to package registries. It does not attempt automatic rollback of partially-executed releases.
**Reversibility note:** local steps (version bump, commit, local tag) are reversible with `git reset` / `git tag -d`. The remote push is effectively irreversible once anyone has fetched. Package-registry publication is irreversible (most registries permit yank but not delete). The skill names each step's reversibility class in the plan.
Philosophy
**High blast radius warrants high friction.** Tagging and pushing a release is the kind of action that should never happen by accident. The skill is generous with confirmation prompts and pessimistic about partial-failure recovery. Auto-execution is never the default.
**Composition, not duplication.** Preflight checking is `/review-release`'s job. This skill always invokes it and fail-stops on red. It does not re-implement the checklist or offer to skip it.
**Discover the procedure, don't invent it.** Release procedure is project-specific — `make release`, `npm publish`, `cargo publish`, `gh release create`, a custom CI workflow, or some combination. The skill searches the conventional surfaces before falling back to asking the user. If asked, it offers durable capture so the next release is fully automated.
**Halt on first failure.** Release sequences are not atomic. A failure halfway through (e.g., tag pushed but `npm publish` failed) leaves the project in a partial state. The skill stops at the first failure and surfaces the partial state for human decision rather than pushing through or guessing at rollback.
Workflow Overview
┌────────────────────────────────────────────────────────┐ │ RELEASE │ ├────────────────────────────────────────────────────────┤ │ 1. Detect repo context │ │ 2. Discover release procedure │ │ 3. If procedure not found: offer durable capture │ │ 4. Determine target version (propose from CHANGELOG) │ │ 5. Idempotence check (scan for partial prior run) │ │ 6. Run /review-release as preflight (fail-stop) │ │ 7. Construct release plan (commands + reversibility) │ │ 8. Present plan + confirm │ │ 9. Execute step-by-step (one pause at local→remote │ │ boundary; halt on first failure) │ │ 10. Final summary │ └────────────────────────────────────────────────────────┘
Workflow Details
1. Detect Repo Context
Run all of the following; abort cleanly on any failure:
- **Is this a git repo?** `git rev-parse --is-inside-work-tree`. Abort if not.
- **Main branch detection.** Try `git symbolic-ref refs/remotes/origin/HEAD`, then check for `main`, then `master`. Ask the user if none detected.
- **Current branch.** `git branch --show-current`.
- **Working tree clean.** `git status --porcelain`. **Abort if dirty** with the suggestion: "Commit or stash before releasing." Releases from a dirty tree are unsafe.
- **Up-to-date with origin.** `git fetch`, then check `git rev-list --count HEAD..@{u}`. If behind, abort with the suggestion to pull. If ahead, note this (it's expected if the release commit is being prepared locally, but flag it).
- **On the main branch.** If current branch is not the main branch, ask the user to confirm intent — releasing from a non-main branch is unusual but valid (e.g., backport release lines). Do not abort; defer to the user.
2. Discover Release Procedure
Search the following surfaces in order. Stop at the first hit, but record every hit (procedure may span multiple surfaces — e.g., Makefile target + RELEASING.md narrative):
1. **Makefile** — parse for a `release`, `publish`, or `tag` target. Read the recipe. 2. **RELEASING.md** or **RELEASE.md** at repo root. 3. **CONTRIBUTING.md** — look for a section titled "Release", "Releasing", or "Cutting a Release". 4. **CLAUDE.md** (project-level) — look for the same. 5. **package.json** — scripts named `release`, `publish`, `prepublish*`, `version*`, `postversion`. 6. **pyproject.toml** / **Cargo.toml** / equivalent — packaging metadata that implies a publish step. 7. **`.github/workflows/release.yml`** or similar CI release config. 8. **Git tag history** — `git log --tags --simplify-by-decoration --pretty="format:%d %s"` to infer pattern from prior releases (tag format like `v1.2.3` vs `1.2.3`, accompanying commit message convention like `chore: release v1.2.3`).
Record what was found and where. **Prefer executable sources over prose** — a Makefile target is the authoritative procedure if it exists.
3. Offer Durable Capture if Missing
If step 2 found no procedure (no executable target, no prose doc, no CI workflow, no git-tag pattern beyond bare history):
- Tell the user no procedure was discoverable.
- Ask the user to describe the release steps in order.
- Once described, offer four options for where to record them:
- **Makefile target** (Recommended) — executable, ver
Showing the first part of this file.
A system of composable software engineering workflows for Claude Code. Plan projects, implement tickets, and run quality passes — from a single ticket to a multi-batch project, using the same layered architecture.
Repo: chrisallenlane/claude-swe-workflows
Other skills on claude-swe-workflows.
- /bug-fix
Bug-fixing workflow that coordinates diagnosis, test-driven reproduction, root-cause analysis, and targeted fixes. Use when the user wants to fix a bug with thorough investigation and regression testing.
Open skill - /bug-hunt
Proactive bug-hunting workflow. Assesses codebase risk through complexity, coverage, and structural analysis, then spawns focused investigators that write reproducing tests to validate suspected bugs. Thoroughness over speed. Advisory only — produces findings and proposes
Open skill - /implement-batch
Multi-ticket batch workflow. Takes a batch of tickets, plans execution order, implements each via /implement in autonomous mode, runs cross-cutting quality passes, and presents results for final review.
Open skill - /implement-project
Full-lifecycle project workflow. Takes batched tickets, implements via /implement-batch, runs smoke tests, then executes a comprehensive quality pipeline (refactor, review-arch, review-test, tidy-docs, review-release). Maximizes autonomy with andon cord escape.
Open skill - /implement
Iterative development workflow that coordinates implementation, refactoring, QA, and documentation agents to complete features systematically. Use when the user wants a full development workflow with quality checks.
Open skill - /lead-bug-hunt
Autonomous bug-elimination loop. Iteratively invokes /bug-hunt and /implement-batch until findings converge below an operator-specified severity floor. At termination, runs /review-test scoped to the run's new reproducing tests and fixes quality issues above the floor.
Open skill

