Official agent skill

Release

by microsoft in microsoft/agent-lightning

Prepare and publish stable Agent Lightning releases through the repository's version bump, pull-request checks, merge, tag, PyPI trusted-publishing, and versioned-documentation workflows.

OfficialMITAuto-check passedDevelopment

Install Release

skills CLI
$ npx skills add microsoft/agent-lightning --skill release -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install microsoft/agent-lightning release --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/microsoft/agent-lightning.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/release .claude/skills/release && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
release
GitHub stars
19k
Token cost
~2.8k tokens
SKILL.md length
1,459 words
Files
2
Skills in repo
2
Repo updated
First seen
Licence
MIT

At a glance

Prepare and publish stable Agent Lightning releases through the repository's version bump, pull-request checks, merge, tag, PyPI trusted-publishing, and versioned-documentation workflows.

  • Works in 6 steps: Confirm the repository root, clean… → Resolve the canonical OWNER/REPO, its… → Inspect the release contract in → …
  • Explain a release
  • SKILL.md covers Establish the release state, Prepare and merge the version…, Tag and publish the merged… and Follow both tag-triggered…, plus 2 more sections
  • Calls gh, git and uv; reaches pypi.org

What it does

Release is an agent skill from microsoft/agent-lightning, published by the product's own GitHub organization. Prepare and publish stable Agent Lightning releases through the repository's version bump, pull-request checks, merge, tag, PyPI trusted-publishing, and versioned-documentation workflows. Use when asked to plan, cut, verify, or explain a release; treat nightly TestPyPI builds as a separate path.

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).

It sits in Development, covering Pull requests. It works with GitHub Actions. The repository describes itself as: The absolute trainer to light up AI agents. The licence is MIT.

When your agent uses it

  • Explain a release
  • Treat nightly TestPyPI builds as a separate path

Example prompts

  • “/release”

Requirements

  • Python 3

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Confirm the repository root, clean working tree, current branch, and remotes.
  2. Resolve the canonical OWNER/REPO, its default branch, and its permitted
  3. Inspect the release contract in
  4. Confirm the canonical default branch is already green before branching from
  5. Query the canonical repository's tags and compare them with the versions
  6. Treat verified PyPI trusted-publisher configuration for the canonical

What it can do on your machine

Read from SKILL.md and the folder at commit d381995. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • git
    • uv
    • python

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • pypi.org

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Release loads about 2.8k tokens when it runs. Until then it costs about 76 tokens; SKILL.md has 1,459 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~76
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from microsoft/agent-lightning at commit d381995, republished under its MIT licence (© microsoft). 1,459 words, ~2,846 tokens.

Download SKILL.mdSave it as .claude/skills/release/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
release
description
Prepare and publish stable Agent Lightning releases through the repository's version bump, pull-request checks, merge, tag, PyPI trusted-publishing, and versioned-documentation workflows. Use when asked to plan, cut, verify, or explain a release; treat nightly TestPyPI builds as a separate path.

Release Agent Lightning

Merging a pull request does not publish a stable release. Stable publication is triggered only by pushing a v* tag to the canonical repository; the tagged commit is what gets tested, built, and uploaded. That same tag push also deploys versioned documentation and moves the public stable alias, so a release has two public side effects, not one.

Establish the release state

  1. Confirm the repository root, clean working tree, current branch, and remotes.
  2. Resolve the canonical OWNER/REPO, its default branch, and its permitted merge methods with gh repo view OWNER/REPO --json nameWithOwner,defaultBranchRef,mergeCommitAllowed,rebaseMergeAllowed,squashMergeAllowed. Identify the local remotes for that repository and the contributor fork by their URLs; do not assume particular remote names or merge settings.
  3. Inspect the release contract in:
    • .github/workflows/pypi-release.yml
    • .github/workflows/docs.yml
    • .github/workflows/tests.yml
    • scripts/bump_version.sh
    • pyproject.toml
    • agentlightning/__init__.py
  4. Confirm the canonical default branch is already green before branching from it. Resolve its current commit with gh api repos/OWNER/REPO/commits/<default-branch> and inspect that commit's check runs; a general recent-run listing can omit or mix commits. A release branch inherits every failure that main is carrying.
  5. Query the canonical repository's tags and compare them with the versions published at https://pypi.org/pypi/agentlightning/json. Confirm the target version exists in neither place, and stop for an explicit release decision when either of these holds:
    • A tag exists with no matching PyPI version. A published version is immutable, and its tag must never be reused or moved. A tag that never published is a different situation and still needs a human decision, informed by why it did not publish. See "Recovering a tag that never published" below.
    • The proposed bump would skip a version that was tagged but never published.
  6. Treat verified PyPI trusted-publisher configuration for the canonical repository and pypi-release.yml as a prerequisite. If it cannot be inspected directly, require confirmation from an authorized PyPI project owner before pushing the release tag.

Prepare and merge the version pull request

Start a release branch from a freshly fetched canonical default branch, not from another feature branch. The branch name is only a recommendation:

bash
git fetch <canonical-remote> <default-branch>
git switch -c chore/release-vX.Y.Z <canonical-remote>/<default-branch>
scripts/bump_version.sh patch  # or minor / major

The script updates the project version with uv and then edits agentlightning/__init__.py separately. If it fails or is interrupted between those writes, only some of the three version files may be updated. Inspect git diff after any failure and restore or reconcile all three files before retrying; blindly rerunning a partial patch bump can advance the version twice.

The bump rewrites exactly three files. Confirm that with git diff --stat:

  • pyproject.toml
  • the agentlightning entry in uv.lock
  • agentlightning.__version__ in agentlightning/__init__.py

Other version strings in the tree, such as the FastAPI version in agentlightning/server/app.py, are deliberately outside the bump. Leave them alone; changing them is a separate pull request, not release work.

Review the version diff, but do not run the release tests or package build locally as a matter of course. tests.yml runs a broader test suite and the same package build on the pull request, covering the narrower tests and build that pypi-release.yml will run on the tag. The pull request's GitHub checks are therefore the verification gate. Reproduce a single failure locally only when the workflow logs are not enough to fix it.

Commit the version change, push it to the fork, and open the pull request with the GitHub CLI when those external actions are authorized:

bash
git commit -am "Bump version to X.Y.Z"
git push -u <fork-remote> <release-branch>
gh pr create --repo OWNER/REPO \
  --base <default-branch> \
  --head <fork-owner>:<release-branch> \
  --title "Bump version to X.Y.Z" \
  --body "Prepare the vX.Y.Z release."

gh pr create refuses to run without --title and --body outside an interactive terminal, and every gh call needs --repo OWNER/REPO so it acts on the canonical repository rather than the fork.

Follow the pull request through its required checks with gh pr checks <pr> --repo OWNER/REPO --watch. If a check fails, take the run id from that output, inspect it with gh run view <run-id> --repo OWNER/REPO --log-failed, correct the source on the same branch, and resume watching. Once every required check has succeeded, extract the reviewed head and pass both a permitted merge-method flag from step 2 and --match-head-commit to gh pr merge:

bash
HEAD_SHA="$(gh pr view <pr> --repo OWNER/REPO --json headRefOid --jq .headRefOid)"
gh pr merge <pr> --repo OWNER/REPO <merge-method-flag> \
  --match-head-commit "$HEAD_SHA"

Replace <merge-method-flag> with one permitted flag discovered in step 2: --merge, --rebase, or --squash.

Committing, pushing, opening the pull request, and merging are each distinct external actions and each requires authorization.

Tag and publish the merged release

After the pull request merges, update the local default branch from the canonical repository, then confirm that the commit you are about to tag is the one this pull request produced and not a later commit that landed behind it:

bash
git switch <default-branch>
git pull --ff-only <canonical-remote> <default-branch>
gh pr view <pr> --repo OWNER/REPO --json mergeCommit
git rev-parse HEAD

If HEAD has moved past the merge commit, tag the merge commit explicitly instead of HEAD.

pypi-release.yml fails the release when the packaged version does not equal the tag without its leading v, or when it does not equal the runtime __version__. Check both before tagging:

bash
uv version --short
grep '^__version__' agentlightning/__init__.py

The workflow itself reads the runtime value as python -c 'from agentlightning import __version__; print(__version__)' from the repository root before its dependency-sync step, so Python resolves the checkout through the current working directory. Read the file directly for the local pre-tag check; agentlightning/__init__.py assigns __version__ as a single literal, making that check independent of the active Python environment.

GitHub reads workflow files as they exist at the tagged commit, not at the tip of the default branch. Confirm that the commit being tagged actually contains .github/workflows/pypi-release.yml with its v* trigger; a commit that predates the workflow will never publish, however the tag is pushed.

Immediately query the canonical repository and PyPI again to ensure that vX.Y.Z is still absent. Then create an annotated tag on the release commit and push it to the canonical repository:

bash
git tag -a vX.Y.Z -m "vX.Y.Z" <release-commit>
git push <canonical-remote> vX.Y.Z

The tag push starts the production PyPI publication, so obtain explicit authorization immediately before it.

Show full SKILL.md (531 more words)Show less

Follow both tag-triggered workflows

One tag push starts two workflows, and both belong to the release:

  • PyPI Release (pypi-release.yml) re-checks the version against the tag, runs the tests, builds the wheel and source distribution, and uploads them to PyPI through trusted publishing.
  • Deploy Documentation (docs.yml) runs mike deploy --push --update-aliases X.Y.Z stable, which publishes the versioned documentation and repoints the public stable alias at this release.

Look up each run by workflow and tag rather than selecting from an unfiltered recent-run list:

bash
gh run list --repo OWNER/REPO --workflow pypi-release.yml \
  --branch vX.Y.Z --event push --limit 1
gh run list --repo OWNER/REPO --workflow docs.yml \
  --branch vX.Y.Z --event push --limit 1

Confirm both runs have the expected tag commit, then follow them to a terminal result with gh run watch <run-id> --repo OWNER/REPO --exit-status. After PyPI Release succeeds, verify that PyPI exposes the exact version with both the expected wheel and source distribution. After Deploy Documentation succeeds, verify that the published site serves X.Y.Z and that stable serves that same release. Do not require an HTTP redirect: mike aliases can serve directly from the alias path with a 200 response. Fetch the versioned and stable entry pages and compare their content; byte-for-byte equality is the clearest proof for a static deployment. If path-dependent markup prevents an exact match, verify a release-specific marker such as the version selector or canonical metadata instead. A successful response from stable alone is not proof that the alias moved. A green PyPI job with a failed documentation job is a half-finished release: report both workflow URLs and both outcomes.

For a transient workflow failure, rerun only with authorization. For a source or workflow defect, do not move the public tag; prepare a corrective release version. A GitHub Release and release notes are optional, separate publication actions and must not be created unless requested.

Recovering a tag that never published

Separate the mechanics from the policy before proposing a recovery.

The mechanics: pushing a tag that already exists and points at the same commit changes no ref, so it starts no workflow run. Creating a tag, moving one to a different commit, or deleting and recreating one does change the ref and does start a run. What that run executes is the workflow file at the tagged commit, so a tag on a commit from before pypi-release.yml existed starts no PyPI publication no matter how it is pushed. Run git ls-tree --name-only <tag> .github/workflows/ before assuming a re-push would help.

The policy: never move or reuse a tag whose version is on PyPI. That version is immutable, so a re-run could only fail at upload, and consumers who already resolved the tag would silently get different code.

Between those, a tag that never published is a decision for a release owner, not a default action. Releasing the next version from a commit that carries the current workflow is usually simpler and always safer than resurrecting the old tag. Note that a non-publishing tag may still have had effects: docs.yml has carried the v* trigger for longer than pypi-release.yml, so an older tag can have deployed documentation and moved stable without ever reaching PyPI.

Nightly distinction

.github/workflows/pypi-nightly.yml publishes timestamped .dev builds to TestPyPI on its schedule or by manual dispatch. It does not create a stable release and should not be substituted for the tag-driven process above.

© microsoft, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .agents/skills/release of microsoft/agent-lightning.

  • SKILL.md
  • agents/openai.yaml

Open the folder on GitHubat commit d381995

Compare with similar skills

Release next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Release compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Release this skillmicrosoft/agent-lightning19k—~2.8kAutomated safety check: PassMIT
Babysit PR To Pass CIsgl-project/sglang37k2 repos~3kAutomated safety check: PassApache-2.0
ZCF Release AutomationUfoMiao/zcf6.1k—~3.4kAutomated safety check: PassMIT
Renovate Actions PR Reviewbacknotprop/plannotator9.2k—~640Automated safety check: PassApache-2.0
Maintainer Mergeyorkie-team/yorkie-js-sdk163—~2.4kAutomated safety check: PassApache-2.0
Git GitHub Opsc5inco/compose-pokedexer143—~1.3kAutomated safety check: PassMIT

Similar skills

  • Babysit PR To Pass CI

    sgl-project/sglang

    Start and persistently pursue a goal to babysit an SGLang pull request until selected GitHub Actions workflows pass on the latest PR head.

    37k GitHub starsUsed in 2 repos~3k tokens
    DevelopmentAuto-check passed
  • Automates a version release with changesets: analyzes code changes, writes a bilingual CHANGELOG, bumps the version and commits through a release branch and pull request.

    6.1k GitHub stars~3.4k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Renovate Actions PR Review

    backnotprop/plannotator

    Reviews Renovate pull requests that bump GitHub Actions by checking pinned SHAs against upstream tags, scanning changelogs and confirming workflows stay compatible.

    9.2k GitHub stars~640 tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Maintainer Merge

    yorkie-team/yorkie-js-sdk

    A skill your agent uses when merging a yorkie-js-sdk pull request as a maintainer — a PR sitting at mergeable=MERGEABLE with mergeStateStatus=BLOCKED, a branch behind main, a PR touching…

    163 GitHub stars~2.4k tokensUpdated today
    DevelopmentAuto-check passed
  • Git GitHub Ops

    c5inco/compose-pokedexer

    Handles Pokedexer Git and GitHub workflows: inspect changes, prepare commit messages, manage branches and pushes, and create or update issues and pull requests with safe file-based inputs.

    143 GitHub stars~1.3k tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • PR Review

    SeismicSystems/seismic-reth

    Review a seismic-reth pull request (or, with no argument, the local diff before a PR exists) following the team review guidelines.

    143 GitHub stars~4.2k tokensUpdated today
    DevelopmentAuto-check passed

More from microsoft/agent-lightning

  • Agent Lightning

    microsoft/agent-lightning

    Official

    Provides the action space, tradeoffs, and evaluation context for improving an editable AI agent against a benchmark while preserving its deployment contract.

    19k GitHub stars~1.7k tokensUpdated 8 days ago
    Auto-check passed

Works with

Categories

Questions about Release

What does Release do?

Prepare and publish stable Agent Lightning releases through the repository's version bump, pull-request checks, merge, tag, PyPI trusted-publishing, and versioned-documentation workflows. Release is an agent skill from microsoft/agent-lightning, published by the product's own GitHub organization. Prepare and publish stable Agent Lightning releases through the repository's version bump, pull-request checks, merge, tag, PyPI trusted-publishing, and versioned-documentation workflows.

When should I use Release?

Release fits situations like: explain a release; treat nightly TestPyPI builds as a separate path.

How do I install Release in Claude Code?

Run `npx skills add microsoft/agent-lightning --skill release -a claude-code`. Or copy the skill folder (.agents/skills/release in microsoft/agent-lightning) into .claude/skills/release in your project. Claude Code loads it when a task matches its description.

How do I install Release in Codex?

Run `npx skills add microsoft/agent-lightning --skill release -a codex`. Or copy the skill folder (.agents/skills/release in microsoft/agent-lightning) into .agents/skills/release in your project. Codex loads it when a task matches its description.

Can I use Release in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add microsoft/agent-lightning --skill release -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release, .gemini/skills/release, .github/skills/release and .opencode/skills/release in your project.

What does Release need to run?

Going by SKILL.md and its folder, Release needs the command-line tools its instructions call (gh, git, uv and python). Our summary lists: Python 3.

Does Release access the network?

SKILL.md names 1 domain. In commands or code: pypi.org; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Release safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Release use?

Release is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Release use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Release?

Skills that share tags, products or a category with Release: Babysit PR To Pass CI (sgl-project/sglang, 37k stars), ZCF Release Automation (UfoMiao/zcf, 6.1k stars), Renovate Actions PR Review (backnotprop/plannotator, 9.2k stars) and Maintainer Merge (yorkie-team/yorkie-js-sdk, 163 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Release?

microsoft (a GitHub organization, an official publisher) maintains it in microsoft/agent-lightning, which has 18,572 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on September 29, 2026.

Source: microsoft/agent-lightning on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.